\n\n
\n\n\n\n

{$content.title}

\n\n

{@const Title = $content.title}</h1>\n<!-- Untuk merender konten sebagai string -->\n<div aria-label={$content.title.value}></div>\n<div aria-label={$content.title.toString()}></div>\n<div aria-label={String($content.title)}></div>\n```\n\n> Jika aplikasi Anda sudah ada, Anda dapat menggunakan [Intlayer Compiler](/id/doc/compiler) secara kombinasi dengan [perintah extract](/id/doc/concept/cli/extract) untuk mengonversi ribuan komponen dalam satu detik.\n\n</Step>\n\n<Step number={6} title=\"Ubah bahasa konten Anda\" isOptional={true}>\n\n```svelte fileName=\"src/App.svelte\"\n<script lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Dapatkan informasi locale dan fungsi setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Tangani perubahan locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n</script>\n\n<div>\n <select value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n <option value={loc}>\n {getLocaleName(loc)}\n </option>\n {/each}\n </select>\n</div>\n```\n\n</Step>\n\n<Step number={7} title=\"Render Markdown\" isOptional={true}>\n\nIntlayer mendukung rendering konten Markdown langsung di aplikasi Svelte Anda. Secara default, Markdown diperlakukan sebagai teks biasa. Untuk mengubah Markdown menjadi HTML kaya, Anda dapat mengintegrasikan `@humanspeak/svelte-markdown`, atau parser markdown lainnya.\n\n> Untuk melihat cara mendeklarasikan konten markdown menggunakan paket `intlayer`, lihat [dokumen markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/id/dictionary/markdown.md).\n\n```svelte fileName=\"src/App.svelte\"\n<script>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // render konten markdown sebagai string\n return markdown;\n );\n</script>\n\n<h1>{$content.markdownContent}</h1>\n```\n\n> Anda juga dapat mengakses data front-matter markdown Anda menggunakan properti `content.markdownContent.metadata.xxx`.\n\n</Step>\n\n<Step number={8} title=\"Siapkan editor / CMS intlayer\" isOptional={true}>\n\nUntuk menyiapkan editor intlayer, Anda harus mengikuti [dokumentasi editor intlayer](/id/doc/concept/editor).\n\nUntuk menyiapkan CMS intlayer, Anda harus mengikuti [dokumentasi CMS intlayer](/id/doc/concept/cms).\n\n</Step>\n\n<Step number={7} title=\"Tambahkan Routing yang dilokalkan ke aplikasi Anda\" isOptional={true}>\n\nUntuk menangani routing yang dilokalkan dalam aplikasi Svelte Anda, Anda dapat menggunakan `svelte-spa-router` bersama dengan `localeFlatMap` dari Intlayer untuk menghasilkan rute untuk setiap locale.\n\nPertama, instal `svelte-spa-router`:\n\n```bash packageManager=\"npm\"\nnpm install svelte-spa-router\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add svelte-spa-router\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add svelte-spa-router\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add svelte-spa-router\n```\n\nKemudian, buat file `Router.svelte` untuk mendefinisikan rute Anda:\n\n```svelte fileName=\"src/Router.svelte\"\n<script lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n</script>\n\n<Router {routes} />\n```\n\nPerbarui `main.ts` Anda untuk memasang komponen `Router` menggantikan `App`:\n\n```typescript fileName=\"src/main.ts\"\nimport { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n```\n\nTerakhir, perbarui `App.svelte` Anda untuk menerima properti `locale` dan menggunakannya dengan `useIntlayer`:\n\n```svelte fileName=\"src/App.svelte\"\n<script lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n$: content = useIntlayer('app', locale);\n</script>\n\n<main>\n <div class=\"locale-switcher-container\">\n <LocaleSwitcher currentLocale={locale} />\n </div>\n\n <!-- ... sisa aplikasi Anda ... -->\n</main>\n```\n\n#### Konfigurasi Routing Server-Side (Opsional)\n\nSecara paralel, Anda juga dapat menggunakan `intlayerProxy` untuk menambahkan routing sisi server ke aplikasi Anda. Plugin ini akan secara otomatis mendeteksi locale saat ini berdasarkan URL dan mengatur cookie locale yang sesuai. Jika tidak ada locale yang ditentukan, plugin akan menentukan locale yang paling sesuai berdasarkan preferensi bahasa browser pengguna. Jika tidak ada locale yang terdeteksi, maka akan mengarahkan ulang ke locale default.\n\n> Perlu diperhatikan bahwa untuk menggunakan `intlayerProxy` di produksi, Anda perlu memindahkan paket `vite-intlayer` dari `devDependencies` ke `dependencies`.\n\n```typescript {3,7} fileName=\"vite.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\ntypescript {3,7} fileName=\"vite.config.ts\" codeFormat=\"typescript\"\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n</Step>\n\n<Step number={8} title=\"Ubah URL saat locale berubah\" isOptional={true}>\n\nUntuk memungkinkan pengguna mengganti bahasa dan memperbarui URL sesuai, Anda dapat membuat komponen `LocaleSwitcher`. Komponen ini akan menggunakan `getLocalizedUrl` dari `intlayer` dan `push` dari `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n<script lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Dapatkan informasi locale\nconst { locale, availableLocales } = useLocale();\n\n// Tangani perubahan locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n</script>\n\n<div class=\"locale-switcher\">\n <select value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n <option value={loc}>\n {getLocaleName(loc)}\n </option>\n {/each}\n </select>\n</div>\n```\n\n</Step>\n\n<Step number={1} title=\"Ekstrak konten komponen Anda\" isOptional={true}>\n\nJika Anda memiliki basis kode yang ada, mengubah ribuan file bisa memakan waktu lama.\n\nUntuk memudahkan proses ini, Intlayer mengusulkan [compiler](/id/doc/compiler) / [extractor](/id/doc/concept/cli/extract) untuk mengubah komponen Anda dan mengekstrak kontennya.\n\nUntuk mengaturnya, Anda dapat menambahkan bagian `compiler` di file `intlayer.config.ts` Anda:\n\n```typescript fileName=\"intlayer.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Sisa konfigurasi Anda\n compiler: {\n /**\n * Menunjukkan apakah compiler harus diaktifkan.\n */\n enabled: true,\n\n /**\n * Menentukan jalur file output\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Menunjukkan apakah komponen harus disimpan setelah diubah. Dengan begitu, compiler dapat dijalankan satu kali saja untuk mengubah aplikasi, lalu dapat dihapus.\n */\n saveComponents: false,\n\n /**\n * Prefiks kunci kamus\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n```\n\n<Tabs>\n <Tab value='Perintah ekstrak'>\n\nJalankan extractor untuk mengubah komponen Anda dan mengekstrak kontennya\n\n```bash packageManager=\"npm\"\nnpx intlayer extract\n```\n\n```bash packageManager=\"pnpm\"\npnpm intlayer extract\n```\n\n```bash packageManager=\"yarn\"\nyarn intlayer extract\n```\n\n```bash packageManager=\"bun\"\nbun x intlayer extract\n```\n\n </Tab>\n <Tab value='Compiler Babel'>\n\nPerbarui `vite.config.ts` Anda untuk menyertakan plugin `intlayerCompiler`:\n\n```ts fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Menambahkan plugin compiler\n ],\n});\n```\n\n```bash packageManager=\"npm\"\nnpm run build # Atau npm run dev\n```\n\n```bash packageManager=\"pnpm\"\npnpm run build # Or pnpm run dev\n```\n\n```bash packageManager=\"yarn\"\nyarn build # Or yarn dev\n```\n\n```bash packageManager=\"bun\"\nbun run build # Or bun run dev\n```\n\n </Tab>\n</Tabs>\n</Step>\n\n</Steps>\n\n### Konfigurasi Git\n\nDisarankan untuk mengabaikan file-file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari meng-commit file tersebut ke repositori Git Anda.\n\nUntuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file `.gitignore` Anda:\n\n```bash\n# Abaikan file yang dihasilkan oleh Intlayer\n.intlayer\n```\n\n### Ekstensi VS Code\n\nUntuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal **Ekstensi VS Code Intlayer** resmi.\n\n[Pasang dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nEkstensi ini menyediakan:\n\n- **Autocompletion** untuk kunci terjemahan.\n- **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.\n- **Pratinjau inline** dari konten yang diterjemahkan.\n- **Tindakan cepat** untuk dengan mudah membuat dan memperbarui terjemahan.\n\nUntuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat [dokumentasi Ekstensi VS Code Intlayer](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### (Opsional) Sitemap dan robots.txt (generate saat build)\n\nIntlayer menyediakan `generateSitemap` dan `getMultilingualUrls` untuk memformat `sitemap.xml` multibahasa dan `robots.txt` yang siap untuk crawler, lalu menulisnya secara otomatis ke `public/`. Biasanya skrip Node kecil dijalankan **sebelum** Vite (misalnya hook npm `predev` / `prebuild`).\n\n#### Sitemap\n\nGenerator sitemap Intlayer menghormati konfigurasi locale dan menambahkan metadata untuk crawler.\n\n> Sitemap mendukung namespace `xhtml:link` (hreflang). Alih-alih hanya daftar URL datar, Intlayer menghubungkan semua varian bahasa setiap halaman secara dua arah (mis. `/about`, `/fr/about`, atau `/about?lang=fr` tergantung mode routing).\n\n#### Robots.txt\n\nGunakan `getMultilingualUrls` agar aturan `Disallow` mencakup semua varian URL jalur sensitif.\n\n#### 1. Buat `generate-seo.mjs` di root proyek\n\n```javascript fileName=\"generate-seo.mjs\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n```\n\nPaket `intlayer` harus terpasang. Setel `SITE_URL` di lingkungan produksi (misalnya di CI).\n\n> Disarankan `generate-seo.mjs` untuk ESM Node. Jika memakai `generate-seo.js`, pastikan `\"type\": \"module\"` di `package.json` atau aktifkan ESM lainnya.\n\n#### 2. Jalankan skrip sebelum Vite\n\n```json fileName=\"package.json\"\n{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n```\n\nSesuaikan perintah jika memakai pnpm atau yarn. Skrip juga bisa dipanggil dari CI.\n\n### Melangkah Lebih Jauh\n\nUntuk melangkah lebih jauh, Anda dapat mengimplementasikan [editor visual](/id/doc/concept/editor) atau mengeksternalisasi konten Anda menggunakan [CMS](/id/doc/concept/cms).\n","description":"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Svelte multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.","url":"https://intlayer.org/id/doc/environment/vite-and-svelte","datePublished":"2025-04-18","dateModified":"2026-05-31","version":"8.9.0","keywords":"Internasionalisasi, Dokumentasi, Intlayer, Vite, Svelte, JavaScript","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Pengembang, Manajer Konten"}}</script></head><body class="relative flex size-full min-h-screen flex-col overflow-auto overflow-x-clip scroll-smooth bg-background leading-8 transition md:flex"><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:flex-col md:max-w-105"></ol></div><!--$--><script>((e, i, s, u, m, a, l, h) => { let d = document.documentElement, w = ["light", "dark"]; function p(n) { (Array.isArray(e) ? e : [e]).forEach((y) => { let k = y === "class", S = k && a ? m.map((f) => a[f] || f) : m; k ? (d.classList.remove(...S), d.classList.add(a && a[n] ? a[n] : n)) : d.setAttribute(y, n); }), R(n); } function R(n) { h && w.includes(n) && (d.style.colorScheme = n); } function c() { return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; } if (u) p(u); else try { let n = localStorage.getItem(i) || s; p(l && n === "system" ? c() : n); } catch (n) {} })("data-theme","theme","system",null,["light","dark"],null,true,true)</script><nav class="sticky top-0 z-50 flex w-full items-center bg-card/95 px-4 py-3 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur"><div class="group/dropdown relative flex items-center" aria-label="DropDown navbar-logo" id="dropdown-container-navbar-logo"><a aria-label="Logo perusahaan - Buka beranda" aria-current="page" id="dropdown-trigger-navbar-logo" aria-haspopup="true" aria-controls="dropdown-panel-navbar-logo" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral active" href="/id" target="_self" data-status="active"><svg width="2704" height="517" viewBox="0 0 2704 517" fill="none" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" role="img" aria-label="Intlayer logo" class="max-h-6 w-auto flex-auto text-text"><path fill-rule="evenodd" clip-rule="evenodd" d="M5 46C5 21.1472 25.1472 1 50 1H295C319.853 1 340 21.1472 340 46C340 70.8528 319.853 91 295 91H50C25.1472 91 5 70.8528 5 46ZM50 176C25.1472 176 5 196.147 5 221C5 245.853 25.1472 266 50 266H430C454.853 266 475 245.853 475 221C475 196.147 454.853 176 430 176H50ZM50 349C25.1472 349 5 369.147 5 394C5 418.853 25.1472 439 50 439H230C254.853 439 275 418.853 275 394C275 369.147 254.853 349 230 349H50ZM841.5 38V403H914.5V38H841.5ZM991.215 143V403H1060.21V250C1060.21 239 1062.71 229.5 1067.71 221.5C1073.05 213.167 1080.38 206.667 1089.71 202C1099.05 197 1109.71 194.5 1121.71 194.5C1137.71 194.5 1149.38 199.5 1156.71 209.5C1164.05 219.167 1167.71 234.833 1167.71 256.5V403H1236.21V243C1236.21 206.667 1228.71 180.167 1213.71 163.5C1199.05 146.5 1176.05 138 1144.71 138C1126.05 138 1109.55 141 1095.21 147C1081.21 152.667 1068.88 161.5 1058.21 173.5H1057.21L1056.71 143H991.215ZM1341.52 389C1355.52 401.667 1378.19 408 1409.52 408C1420.52 408 1431.19 407.167 1441.52 405.5C1451.85 404.167 1462.69 401.833 1474.02 398.5L1468.52 344C1461.85 346.333 1454.52 348.167 1446.52 349.5C1438.85 350.833 1431.52 351.5 1424.52 351.5C1411.52 351.5 1402.52 348.5 1397.52 342.5C1392.52 336.167 1390.02 325.167 1390.02 309.5V196.5H1474.52V143H1390.02V58H1321.02V143H1264.52V196.5H1321.02V326.5C1321.02 355.5 1327.85 376.333 1341.52 389ZM1536.71 38V403H1606.71V38H1536.71ZM1681.19 386.5C1696.19 400.833 1716.52 408 1742.19 408C1759.19 408 1775.86 404.833 1792.19 398.5C1808.52 392.167 1821.36 383.667 1830.69 373H1831.19L1832.19 403H1897.69V239C1897.69 214 1894.19 194.167 1887.19 179.5C1880.19 164.5 1869.02 153.833 1853.69 147.5C1838.36 141.167 1817.36 138 1790.69 138C1769.69 138 1748.52 139.833 1727.19 143.5C1706.19 146.833 1687.02 151.667 1669.69 158L1678.19 211C1694.19 204.667 1711.19 199.833 1729.19 196.5C1747.19 192.833 1764.52 191 1781.19 191C1793.86 191 1803.52 192.333 1810.19 195C1817.19 197.333 1822.02 201.667 1824.69 208C1827.69 214.333 1829.19 223.333 1829.19 235H1794.69C1751.36 235 1717.86 243.167 1694.19 259.5C1670.86 275.833 1659.19 299 1659.19 329C1659.19 353 1666.52 372.167 1681.19 386.5ZM1798.69 350C1789.36 354 1778.86 356 1767.19 356C1753.52 356 1742.86 353 1735.19 347C1727.86 341 1724.19 332.667 1724.19 322C1724.19 307.667 1730.86 297.167 1744.19 290.5C1757.52 283.5 1777.69 280 1804.69 280H1829.19V309.5C1829.19 318.167 1826.36 326.167 1820.69 333.5C1815.36 340.5 1808.02 346 1798.69 350ZM2025.11 401.5L1982.11 508H2054.61L2197.61 143H2123.61L2060.11 335.5H2059.11L1996.11 143L1922.61 143.5L2025.11 401.5ZM2251.46 373C2276.79 396.333 2312.79 408 2359.46 408C2376.13 408 2392.63 406.5 2408.96 403.5C2425.63 400.833 2440.13 397 2452.46 392L2444.46 339.5C2432.13 344.167 2417.96 347.833 2401.96 350.5C2385.96 353.167 2370.79 354.5 2356.46 354.5C2331.13 354.5 2312.29 349 2299.96 338C2289.75 328.893 2283.77 315.56 2282.01 298H2464.46C2464.79 295 2464.96 290.5 2464.96 284.5C2465.29 278.5 2465.46 273.167 2465.46 268.5C2465.46 226.833 2454.79 194.667 2433.46 172C2412.46 149.333 2382.46 138 2343.46 138C2303.13 138 2271.46 150 2248.46 174C2225.46 198 2213.96 231 2213.96 273C2213.96 316.333 2226.46 349.667 2251.46 373ZM2282.19 250.5C2283.95 232.347 2288.87 218.18 2296.96 208C2307.29 194.667 2322.79 188 2343.46 188C2363.13 188 2377.63 194.333 2386.96 207C2394.74 217.188 2399.38 231.688 2400.91 250.5H2282.19ZM2583.09 143H2517.09V403H2586.59V283C2586.59 267 2591.59 252.5 2601.59 239.5C2611.59 226.167 2625.09 215.667 2642.09 208C2659.09 200.333 2677.93 196.5 2698.59 196.5V138C2683.59 138 2668.93 140.167 2654.59 144.5C2640.59 148.5 2627.59 154.5 2615.59 162.5C2603.93 170.167 2593.76 179.833 2585.09 191.5H2583.59L2583.09 143Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5 46C5 21.1472 25.1472 1 50 1H295C319.853 1 340 21.1472 340 46C340 70.8528 319.853 91 295 91H50C25.1472 91 5 70.8528 5 46ZM50 176C25.1472 176 5 196.147 5 221C5 245.853 25.1472 266 50 266H430C454.853 266 475 245.853 475 221C475 196.147 454.853 176 430 176H50ZM50 349C25.1472 349 5 369.147 5 394C5 418.853 25.1472 439 50 439H230C254.853 439 275 418.853 275 394C275 369.147 254.853 349 230 349H50ZM841.5 38V403H914.5V38H841.5ZM991.215 143V403H1060.21V250C1060.21 239 1062.71 229.5 1067.71 221.5C1073.05 213.167 1080.38 206.667 1089.71 202C1099.05 197 1109.71 194.5 1121.71 194.5C1137.71 194.5 1149.38 199.5 1156.71 209.5C1164.05 219.167 1167.71 234.833 1167.71 256.5V403H1236.21V243C1236.21 206.667 1228.71 180.167 1213.71 163.5C1199.05 146.5 1176.05 138 1144.71 138C1126.05 138 1109.55 141 1095.21 147C1081.21 152.667 1068.88 161.5 1058.21 173.5H1057.21L1056.71 143H991.215ZM1341.52 389C1355.52 401.667 1378.19 408 1409.52 408C1420.52 408 1431.19 407.167 1441.52 405.5C1451.85 404.167 1462.69 401.833 1474.02 398.5L1468.52 344C1461.85 346.333 1454.52 348.167 1446.52 349.5C1438.85 350.833 1431.52 351.5 1424.52 351.5C1411.52 351.5 1402.52 348.5 1397.52 342.5C1392.52 336.167 1390.02 325.167 1390.02 309.5V196.5H1474.52V143H1390.02V58H1321.02V143H1264.52V196.5H1321.02V326.5C1321.02 355.5 1327.85 376.333 1341.52 389ZM1536.71 38V403H1606.71V38H1536.71ZM1681.19 386.5C1696.19 400.833 1716.52 408 1742.19 408C1759.19 408 1775.86 404.833 1792.19 398.5C1808.52 392.167 1821.36 383.667 1830.69 373H1831.19L1832.19 403H1897.69V239C1897.69 214 1894.19 194.167 1887.19 179.5C1880.19 164.5 1869.02 153.833 1853.69 147.5C1838.36 141.167 1817.36 138 1790.69 138C1769.69 138 1748.52 139.833 1727.19 143.5C1706.19 146.833 1687.02 151.667 1669.69 158L1678.19 211C1694.19 204.667 1711.19 199.833 1729.19 196.5C1747.19 192.833 1764.52 191 1781.19 191C1793.86 191 1803.52 192.333 1810.19 195C1817.19 197.333 1822.02 201.667 1824.69 208C1827.69 214.333 1829.19 223.333 1829.19 235H1794.69C1751.36 235 1717.86 243.167 1694.19 259.5C1670.86 275.833 1659.19 299 1659.19 329C1659.19 353 1666.52 372.167 1681.19 386.5ZM1798.69 350C1789.36 354 1778.86 356 1767.19 356C1753.52 356 1742.86 353 1735.19 347C1727.86 341 1724.19 332.667 1724.19 322C1724.19 307.667 1730.86 297.167 1744.19 290.5C1757.52 283.5 1777.69 280 1804.69 280H1829.19V309.5C1829.19 318.167 1826.36 326.167 1820.69 333.5C1815.36 340.5 1808.02 346 1798.69 350ZM2025.11 401.5L1982.11 508H2054.61L2197.61 143H2123.61L2060.11 335.5H2059.11L1996.11 143L1922.61 143.5L2025.11 401.5ZM2251.46 373C2276.79 396.333 2312.79 408 2359.46 408C2376.13 408 2392.63 406.5 2408.96 403.5C2425.63 400.833 2440.13 397 2452.46 392L2444.46 339.5C2432.13 344.167 2417.96 347.833 2401.96 350.5C2385.96 353.167 2370.79 354.5 2356.46 354.5C2331.13 354.5 2312.29 349 2299.96 338C2289.75 328.893 2283.77 315.56 2282.01 298H2464.46C2464.79 295 2464.96 290.5 2464.96 284.5C2465.29 278.5 2465.46 273.167 2465.46 268.5C2465.46 226.833 2454.79 194.667 2433.46 172C2412.46 149.333 2382.46 138 2343.46 138C2303.13 138 2271.46 150 2248.46 174C2225.46 198 2213.96 231 2213.96 273C2213.96 316.333 2226.46 349.667 2251.46 373ZM2282.19 250.5C2283.95 232.347 2288.87 218.18 2296.96 208C2307.29 194.667 2322.79 188 2343.46 188C2363.13 188 2377.63 194.333 2386.96 207C2394.74 217.188 2399.38 231.688 2400.91 250.5H2282.19ZM2583.09 143H2517.09V403H2586.59V283C2586.59 267 2591.59 252.5 2601.59 239.5C2611.59 226.167 2625.09 215.667 2642.09 208C2659.09 200.333 2677.93 196.5 2698.59 196.5V138C2683.59 138 2668.93 140.167 2654.59 144.5C2640.59 148.5 2627.59 154.5 2615.59 162.5C2603.93 170.167 2593.76 179.833 2585.09 191.5H2583.59L2583.09 143Z" fill="currentColor"></path><path d="M841.5 403H840.5V404H841.5V403ZM841.5 38V37H840.5V38H841.5ZM914.5 403V404H915.5V403H914.5ZM914.5 38H915.5V37H914.5V38ZM991.215 403H990.215V404H991.215V403ZM991.215 143V142H990.215V143H991.215ZM1060.21 403V404H1061.21V403H1060.21ZM1067.71 221.5L1066.87 220.961L1066.87 220.97L1067.71 221.5ZM1089.71 202L1090.16 202.894L1090.17 202.888L1090.19 202.881L1089.71 202ZM1156.71 209.5L1155.91 210.091L1155.91 210.098L1155.92 210.104L1156.71 209.5ZM1167.71 403H1166.71V404H1167.71V403ZM1236.21 403V404H1237.21V403H1236.21ZM1213.71 163.5L1212.96 164.153L1212.96 164.161L1212.97 164.169L1213.71 163.5ZM1095.21 147L1095.59 147.927L1095.6 147.922L1095.21 147ZM1058.21 173.5V174.5H1058.66L1058.96 174.164L1058.21 173.5ZM1057.21 173.5L1056.21 173.516L1056.23 174.5H1057.21V173.5ZM1056.71 143L1057.71 142.984L1057.7 142H1056.71V143ZM1341.52 389L1340.84 389.733L1340.85 389.742L1341.52 389ZM1441.52 405.5L1441.39 404.508L1441.38 404.51L1441.36 404.513L1441.52 405.5ZM1474.02 398.5L1474.3 399.459L1475.1 399.225L1475.01 398.4L1474.02 398.5ZM1468.52 344L1469.51 343.9L1469.39 342.637L1468.19 343.056L1468.52 344ZM1446.52 349.5L1446.36 348.514L1446.35 348.515L1446.52 349.5ZM1397.52 342.5L1396.73 343.12L1396.74 343.13L1396.75 343.14L1397.52 342.5ZM1390.02 196.5V195.5H1389.02V196.5H1390.02ZM1474.52 196.5V197.5H1475.52V196.5H1474.52ZM1474.52 143H1475.52V142H1474.52V143ZM1390.02 143H1389.02V144H1390.02V143ZM1390.02 58H1391.02V57H1390.02V58ZM1321.02 58V57H1320.02V58H1321.02ZM1321.02 143V144H1322.02V143H1321.02ZM1264.52 143V142H1263.52V143H1264.52ZM1264.52 196.5H1263.52V197.5H1264.52V196.5ZM1321.02 196.5H1322.02V195.5H1321.02V196.5ZM1536.71 403H1535.71V404H1536.71V403ZM1536.71 38V37H1535.71V38H1536.71ZM1606.71 403V404H1607.71V403H1606.71ZM1606.71 38H1607.71V37H1606.71V38ZM1681.19 386.5L1680.49 387.215L1680.5 387.223L1681.19 386.5ZM1830.69 373V372H1830.24L1829.94 372.341L1830.69 373ZM1831.19 373L1832.19 372.967L1832.16 372H1831.19V373ZM1832.19 403L1831.19 403.033L1831.22 404H1832.19V403ZM1897.69 403V404H1898.69V403H1897.69ZM1887.19 179.5L1886.29 179.923L1886.29 179.931L1887.19 179.5ZM1853.69 147.5L1854.07 146.576L1854.07 146.576L1853.69 147.5ZM1727.19 143.5L1727.35 144.488L1727.36 144.486L1727.19 143.5ZM1669.69 158L1669.35 157.061L1668.57 157.344L1668.7 158.158L1669.69 158ZM1678.19 211L1677.2 211.158L1677.4 212.388L1678.56 211.93L1678.19 211ZM1729.19 196.5L1729.37 197.483L1729.38 197.482L1729.39 197.48L1729.19 196.5ZM1810.19 195L1809.82 195.928L1809.85 195.939L1809.88 195.949L1810.19 195ZM1824.69 208L1823.77 208.388L1823.78 208.408L1823.79 208.428L1824.69 208ZM1829.19 235V236H1830.19V235H1829.19ZM1694.19 259.5L1693.62 258.677L1693.62 258.681L1694.19 259.5ZM1735.19 347L1734.56 347.774L1734.57 347.781L1734.58 347.788L1735.19 347ZM1744.19 290.5L1744.64 291.394L1744.65 291.39L1744.66 291.385L1744.19 290.5ZM1829.19 280H1830.19V279H1829.19V280ZM1820.69 333.5L1819.9 332.889L1819.9 332.894L1820.69 333.5ZM1982.11 508L1981.18 507.626L1980.62 509H1982.11V508ZM2025.11 401.5L2026.03 401.874L2026.18 401.503L2026.03 401.131L2025.11 401.5ZM2054.61 508V509H2055.29L2055.54 508.365L2054.61 508ZM2197.61 143L2198.54 143.365L2199.07 142H2197.61V143ZM2123.61 143V142H2122.88L2122.66 142.687L2123.61 143ZM2060.11 335.5V336.5H2060.83L2061.06 335.813L2060.11 335.5ZM2059.11 335.5L2058.16 335.811L2058.38 336.5H2059.11V335.5ZM1996.11 143L1997.06 142.689L1996.83 141.995L1996.1 142L1996.11 143ZM1922.61 143.5L1922.6 142.5L1921.14 142.51L1921.68 143.869L1922.61 143.5ZM2251.46 373L2250.78 373.731L2250.78 373.736L2251.46 373ZM2408.96 403.5L2408.8 402.513L2408.79 402.514L2408.78 402.516L2408.96 403.5ZM2452.46 392L2452.84 392.927L2453.57 392.63L2453.45 391.849L2452.46 392ZM2444.46 339.5L2445.45 339.349L2445.26 338.127L2444.11 338.565L2444.46 339.5ZM2299.96 338L2299.3 338.746L2299.3 338.746L2299.96 338ZM2282.01 298V297H2280.9L2281.01 298.1L2282.01 298ZM2464.46 298V299H2465.36L2465.45 298.11L2464.46 298ZM2464.96 284.5L2463.96 284.445L2463.96 284.472V284.5H2464.96ZM2433.46 172L2432.73 172.68L2432.73 172.685L2433.46 172ZM2296.96 208L2297.74 208.622L2297.75 208.613L2296.96 208ZM2282.19 250.5L2281.19 250.404L2281.09 251.5H2282.19V250.5ZM2386.96 207L2386.16 207.593L2386.16 207.6L2386.17 207.607L2386.96 207ZM2400.91 250.5V251.5H2401.99L2401.9 250.419L2400.91 250.5ZM2517.09 143V142H2516.09V143H2517.09ZM2583.09 143L2584.09 142.99L2584.08 142H2583.09V143ZM2517.09 403H2516.09V404H2517.09V403ZM2586.59 403V404H2587.59V403H2586.59ZM2601.59 239.5L2602.39 240.11L2602.39 240.1L2601.59 239.5ZM2642.09 208L2641.68 207.088L2641.68 207.088L2642.09 208ZM2698.59 196.5V197.5H2699.59V196.5H2698.59ZM2698.59 138H2699.59V137H2698.59V138ZM2654.59 144.5L2654.87 145.462L2654.88 145.459L2654.88 145.457L2654.59 144.5ZM2615.59 162.5L2616.14 163.336L2616.15 163.332L2615.59 162.5ZM2585.09 191.5V192.5H2585.6L2585.9 192.096L2585.09 191.5ZM2583.59 191.5L2582.59 191.51L2582.6 192.5H2583.59V191.5ZM50 0C24.5949 0 4 20.5949 4 46H6C6 21.6995 25.6995 2 50 2V0ZM295 0H50V2H295V0ZM341 46C341 20.5949 320.405 0 295 0V2C319.301 2 339 21.6995 339 46H341ZM295 92C320.405 92 341 71.4051 341 46H339C339 70.3005 319.301 90 295 90V92ZM50 92H295V90H50V92ZM4 46C4 71.4051 24.5949 92 50 92V90C25.6995 90 6 70.3005 6 46H4ZM6 221C6 196.699 25.6995 177 50 177V175C24.5949 175 4 195.595 4 221H6ZM50 265C25.6995 265 6 245.301 6 221H4C4 246.405 24.5949 267 50 267V265ZM430 265H50V267H430V265ZM474 221C474 245.301 454.301 265 430 265V267C455.405 267 476 246.405 476 221H474ZM430 177C454.301 177 474 196.699 474 221H476C476 195.595 455.405 175 430 175V177ZM50 177H430V175H50V177ZM6 394C6 369.699 25.6995 350 50 350V348C24.5949 348 4 368.595 4 394H6ZM50 438C25.6995 438 6 418.3 6 394H4C4 419.405 24.5949 440 50 440V438ZM230 438H50V440H230V438ZM274 394C274 418.3 254.301 438 230 438V440C255.405 440 276 419.405 276 394H274ZM230 350C254.301 350 274 369.699 274 394H276C276 368.595 255.405 348 230 348V350ZM50 350H230V348H50V350ZM842.5 403V38H840.5V403H842.5ZM914.5 402H841.5V404H914.5V402ZM913.5 38V403H915.5V38H913.5ZM841.5 39H914.5V37H841.5V39ZM992.215 403V143H990.215V403H992.215ZM1060.21 402H991.215V404H1060.21V402ZM1059.21 250V403H1061.21V250H1059.21ZM1066.87 220.97C1061.75 229.154 1059.21 238.844 1059.21 250H1061.21C1061.21 239.156 1063.68 229.846 1068.56 222.03L1066.87 220.97ZM1089.27 201.106C1079.78 205.848 1072.31 212.467 1066.87 220.961L1068.56 222.039C1073.79 213.866 1080.98 207.485 1090.16 202.894L1089.27 201.106ZM1121.71 193.5C1109.57 193.5 1098.74 196.031 1089.24 201.119L1090.19 202.881C1099.36 197.969 1109.86 195.5 1121.71 195.5V193.5ZM1157.52 208.909C1149.95 198.579 1137.93 193.5 1121.71 193.5V195.5C1137.5 195.5 1148.82 200.421 1155.91 210.091L1157.52 208.909ZM1168.71 256.5C1168.71 234.767 1165.05 218.827 1157.51 208.896L1155.92 210.104C1163.05 219.506 1166.71 234.9 1166.71 256.5H1168.71ZM1168.71 403V256.5H1166.71V403H1168.71ZM1236.21 402H1167.71V404H1236.21V402ZM1235.21 243V403H1237.21V243H1235.21ZM1212.97 164.169C1227.73 180.567 1235.21 206.769 1235.21 243H1237.21C1237.21 206.564 1229.7 179.766 1214.46 162.831L1212.97 164.169ZM1144.71 139C1175.88 139 1198.55 147.45 1212.96 164.153L1214.47 162.847C1199.55 145.55 1176.22 137 1144.71 137V139ZM1095.6 147.922C1109.79 141.983 1126.15 139 1144.71 139V137C1125.94 137 1109.31 140.017 1094.83 146.078L1095.6 147.922ZM1058.96 174.164C1069.53 162.272 1081.74 153.532 1095.59 147.927L1094.84 146.073C1080.69 151.801 1068.23 160.728 1057.47 172.836L1058.96 174.164ZM1057.21 174.5H1058.21V172.5H1057.21V174.5ZM1055.71 143.016L1056.21 173.516L1058.21 173.484L1057.71 142.984L1055.71 143.016ZM991.215 144H1056.71V142H991.215V144ZM1409.52 407C1378.28 407 1355.92 400.679 1342.19 388.258L1340.85 389.742C1355.12 402.654 1378.09 409 1409.52 409V407ZM1441.36 404.513C1431.08 406.171 1420.47 407 1409.52 407V409C1420.57 409 1431.29 408.163 1441.68 406.487L1441.36 404.513ZM1473.74 397.541C1462.45 400.861 1451.67 403.182 1441.39 404.508L1441.65 406.492C1452.04 405.151 1462.92 402.806 1474.3 399.459L1473.74 397.541ZM1467.52 344.1L1473.02 398.6L1475.01 398.4L1469.51 343.9L1467.52 344.1ZM1446.68 350.486C1454.73 349.145 1462.12 347.299 1468.85 344.944L1468.19 343.056C1461.58 345.368 1454.31 347.188 1446.36 348.514L1446.68 350.486ZM1424.52 352.5C1431.58 352.5 1438.97 351.827 1446.69 350.485L1446.35 348.515C1438.73 349.839 1431.46 350.5 1424.52 350.5V352.5ZM1396.75 343.14C1402.04 349.483 1411.41 352.5 1424.52 352.5V350.5C1411.62 350.5 1403 347.517 1398.29 341.86L1396.75 343.14ZM1389.02 309.5C1389.02 325.211 1391.51 336.507 1396.73 343.12L1398.3 341.88C1393.52 335.826 1391.02 325.123 1391.02 309.5H1389.02ZM1389.02 196.5V309.5H1391.02V196.5H1389.02ZM1474.52 195.5H1390.02V197.5H1474.52V195.5ZM1473.52 143V196.5H1475.52V143H1473.52ZM1390.02 144H1474.52V142H1390.02V144ZM1389.02 58V143H1391.02V58H1389.02ZM1321.02 59H1390.02V57H1321.02V59ZM1322.02 143V58H1320.02V143H1322.02ZM1264.52 144H1321.02V142H1264.52V144ZM1265.52 196.5V143H1263.52V196.5H1265.52ZM1321.02 195.5H1264.52V197.5H1321.02V195.5ZM1322.02 326.5V196.5H1320.02V326.5H1322.02ZM1342.2 388.267C1328.83 375.873 1322.02 355.374 1322.02 326.5H1320.02C1320.02 355.626 1326.88 376.794 1340.84 389.733L1342.2 388.267ZM1537.71 403V38H1535.71V403H1537.71ZM1606.71 402H1536.71V404H1606.71V402ZM1605.71 38V403H1607.71V38H1605.71ZM1536.71 39H1606.71V37H1536.71V39ZM1742.19 407C1716.72 407 1696.65 399.893 1681.88 385.777L1680.5 387.223C1695.73 401.774 1716.33 409 1742.19 409V407ZM1791.83 397.568C1775.61 403.858 1759.06 407 1742.19 407V409C1759.32 409 1776.11 405.809 1792.55 399.432L1791.83 397.568ZM1829.94 372.341C1820.73 382.861 1808.05 391.279 1791.83 397.568L1792.55 399.432C1809 393.054 1821.98 384.472 1831.44 373.659L1829.94 372.341ZM1831.19 372H1830.69V374H1831.19V372ZM1833.19 402.967L1832.19 372.967L1830.19 373.033L1831.19 403.033L1833.19 402.967ZM1897.69 402H1832.19V404H1897.69V402ZM1896.69 239V403H1898.69V239H1896.69ZM1886.29 179.931C1893.2 194.41 1896.69 214.077 1896.69 239H1898.69C1898.69 213.923 1895.18 193.923 1888.09 179.069L1886.29 179.931ZM1853.31 148.424C1868.41 154.662 1879.39 165.15 1886.29 179.923L1888.1 179.077C1880.99 163.85 1869.64 153.004 1854.07 146.576L1853.31 148.424ZM1790.69 139C1817.3 139 1838.15 142.162 1853.31 148.424L1854.07 146.576C1838.57 140.171 1817.42 137 1790.69 137V139ZM1727.36 144.486C1748.64 140.828 1769.75 139 1790.69 139V137C1769.63 137 1748.41 138.838 1727.02 142.514L1727.36 144.486ZM1670.03 158.939C1687.3 152.631 1706.4 147.812 1727.35 144.488L1727.03 142.512C1705.98 145.854 1686.75 150.702 1669.35 157.061L1670.03 158.939ZM1679.18 210.842L1670.68 157.842L1668.7 158.158L1677.2 211.158L1679.18 210.842ZM1729.01 195.517C1710.95 198.861 1693.89 203.712 1677.82 210.07L1678.56 211.93C1694.5 205.622 1711.43 200.806 1729.37 197.483L1729.01 195.517ZM1781.19 190C1764.45 190 1747.05 191.841 1728.99 195.52L1729.39 197.48C1747.33 193.825 1764.6 192 1781.19 192V190ZM1810.56 194.072C1803.72 191.334 1793.9 190 1781.19 190V192C1793.81 192 1803.33 193.332 1809.82 195.928L1810.56 194.072ZM1825.61 207.612C1822.83 200.992 1817.76 196.468 1810.51 194.051L1809.88 195.949C1816.62 198.199 1821.22 202.341 1823.77 208.388L1825.61 207.612ZM1830.19 235C1830.19 223.271 1828.69 214.1 1825.6 207.572L1823.79 208.428C1826.7 214.567 1828.19 223.395 1828.19 235H1830.19ZM1794.69 236H1829.19V234H1794.69V236ZM1694.76 260.323C1718.19 244.15 1751.46 236 1794.69 236V234C1751.25 234 1717.52 242.184 1693.62 258.677L1694.76 260.323ZM1660.19 329C1660.19 299.306 1671.72 276.454 1694.76 260.319L1693.62 258.681C1670 275.213 1658.19 298.694 1658.19 329H1660.19ZM1681.89 385.785C1667.45 371.672 1660.19 352.78 1660.19 329H1658.19C1658.19 353.22 1665.6 372.662 1680.49 387.215L1681.89 385.785ZM1767.19 357C1778.97 357 1789.61 354.98 1799.09 350.919L1798.3 349.081C1789.11 353.02 1778.74 355 1767.19 355V357ZM1734.58 347.788C1742.48 353.971 1753.39 357 1767.19 357V355C1753.66 355 1743.24 352.029 1735.81 346.212L1734.58 347.788ZM1723.19 322C1723.19 332.924 1726.96 341.559 1734.56 347.774L1735.82 346.226C1728.75 340.441 1725.19 332.409 1725.19 322H1723.19ZM1743.74 289.606C1736.95 293.004 1731.8 297.408 1728.35 302.839C1724.9 308.273 1723.19 314.673 1723.19 322H1725.19C1725.19 314.994 1726.82 308.977 1730.04 303.911C1733.25 298.842 1738.1 294.663 1744.64 291.394L1743.74 289.606ZM1804.69 279C1777.64 279 1757.28 282.501 1743.73 289.615L1744.66 291.385C1757.77 284.499 1777.74 281 1804.69 281V279ZM1829.19 279H1804.69V281H1829.19V279ZM1830.19 309.5V280H1828.19V309.5H1830.19ZM1821.48 334.111C1827.27 326.616 1830.19 318.404 1830.19 309.5H1828.19C1828.19 317.93 1825.44 325.717 1819.9 332.889L1821.48 334.111ZM1799.09 350.919C1808.55 346.862 1816.03 341.263 1821.49 334.106L1819.9 332.894C1814.68 339.737 1807.5 345.138 1798.3 349.081L1799.09 350.919ZM1983.03 508.374L2026.03 401.874L2024.18 401.126L1981.18 507.626L1983.03 508.374ZM2054.61 507H1982.11V509H2054.61V507ZM2196.67 142.635L2053.67 507.635L2055.54 508.365L2198.54 143.365L2196.67 142.635ZM2123.61 144H2197.61V142H2123.61V144ZM2061.06 335.813L2124.56 143.313L2122.66 142.687L2059.16 335.187L2061.06 335.813ZM2059.11 336.5H2060.11V334.5H2059.11V336.5ZM1995.16 143.311L2058.16 335.811L2060.06 335.189L1997.06 142.689L1995.16 143.311ZM1922.61 144.5L1996.11 144L1996.1 142L1922.6 142.5L1922.61 144.5ZM2026.03 401.131L1923.53 143.131L1921.68 143.869L2024.18 401.869L2026.03 401.131ZM2359.46 407C2312.95 407 2277.23 395.375 2252.14 372.264L2250.78 373.736C2276.36 397.292 2312.63 409 2359.46 409V407ZM2408.78 402.516C2392.51 405.505 2376.07 407 2359.46 407V409C2376.19 409 2392.75 407.495 2409.14 404.484L2408.78 402.516ZM2452.09 391.073C2439.84 396.038 2425.41 399.855 2408.8 402.513L2409.12 404.487C2425.84 401.812 2440.42 397.962 2452.84 392.927L2452.09 391.073ZM2443.47 339.651L2451.47 392.151L2453.45 391.849L2445.45 339.349L2443.47 339.651ZM2402.13 351.486C2418.18 348.811 2432.41 345.13 2444.81 340.435L2444.11 338.565C2431.85 343.204 2417.75 346.855 2401.8 349.514L2402.13 351.486ZM2356.46 355.5C2370.86 355.5 2386.08 354.161 2402.13 351.486L2401.8 349.514C2385.84 352.172 2370.73 353.5 2356.46 353.5V355.5ZM2299.3 338.746C2311.89 349.978 2331.01 355.5 2356.46 355.5V353.5C2331.25 353.5 2312.7 348.022 2300.63 337.254L2299.3 338.746ZM2281.01 298.1C2282.79 315.834 2288.85 329.429 2299.3 338.746L2300.63 337.254C2290.65 328.358 2284.74 315.286 2283 297.9L2281.01 298.1ZM2464.46 297H2282.01V299H2464.46V297ZM2463.96 284.5C2463.96 290.492 2463.79 294.947 2463.47 297.89L2465.45 298.11C2465.79 295.053 2465.96 290.508 2465.96 284.5H2463.96ZM2464.46 268.5C2464.46 273.144 2464.29 278.458 2463.96 284.445L2465.96 284.555C2466.29 278.542 2466.46 273.19 2466.46 268.5H2464.46ZM2432.73 172.685C2453.84 195.111 2464.46 227 2464.46 268.5H2466.46C2466.46 226.667 2455.75 194.222 2434.19 171.315L2432.73 172.685ZM2343.46 139C2382.26 139 2411.96 150.268 2432.73 172.68L2434.19 171.32C2412.96 148.399 2382.66 137 2343.46 137V139ZM2249.18 174.692C2271.96 150.93 2303.34 139 2343.46 139V137C2302.92 137 2270.97 149.07 2247.74 173.308L2249.18 174.692ZM2214.96 273C2214.96 231.187 2226.41 198.46 2249.18 174.692L2247.74 173.308C2224.52 197.54 2212.96 230.813 2212.96 273H2214.96ZM2252.14 372.269C2227.4 349.172 2214.96 316.135 2214.96 273H2212.96C2212.96 316.532 2225.52 350.161 2250.78 373.731L2252.14 372.269ZM2296.18 207.378C2287.93 217.759 2282.96 232.133 2281.19 250.404L2283.19 250.596C2284.93 232.561 2289.81 218.602 2297.74 208.622L2296.18 207.378ZM2343.46 187C2322.56 187 2306.74 193.754 2296.17 207.387L2297.75 208.613C2307.85 195.579 2323.03 189 2343.46 189V187ZM2387.77 206.407C2378.2 193.421 2363.36 187 2343.46 187V189C2362.9 189 2377.06 195.246 2386.16 207.593L2387.77 206.407ZM2401.9 250.419C2400.37 231.501 2395.69 216.789 2387.76 206.393L2386.17 207.607C2393.78 217.586 2398.4 231.874 2399.91 250.581L2401.9 250.419ZM2282.19 251.5H2400.91V249.5H2282.19V251.5ZM2517.09 144H2583.09V142H2517.09V144ZM2518.09 403V143H2516.09V403H2518.09ZM2586.59 402H2517.09V404H2586.59V402ZM2585.59 283V403H2587.59V283H2585.59ZM2600.8 238.89C2590.67 252.06 2585.59 266.774 2585.59 283H2587.59C2587.59 267.226 2592.52 252.94 2602.39 240.11L2600.8 238.89ZM2641.68 207.088C2624.55 214.816 2610.91 225.416 2600.79 238.9L2602.39 240.1C2612.28 226.917 2625.64 216.517 2642.5 208.912L2641.68 207.088ZM2698.59 195.5C2677.8 195.5 2658.83 199.357 2641.68 207.088L2642.5 208.912C2659.36 201.309 2678.05 197.5 2698.59 197.5V195.5ZM2697.59 138V196.5H2699.59V138H2697.59ZM2654.88 145.457C2669.12 141.152 2683.69 139 2698.59 139V137C2683.5 137 2668.73 139.181 2654.3 143.543L2654.88 145.457ZM2616.15 163.332C2628.06 155.39 2640.97 149.433 2654.87 145.462L2654.32 143.538C2640.22 147.567 2627.13 153.61 2615.04 161.668L2616.15 163.332ZM2585.9 192.096C2594.5 180.52 2604.58 170.935 2616.14 163.336L2615.04 161.664C2603.28 169.398 2593.02 179.147 2584.29 190.904L2585.9 192.096ZM2583.59 192.5H2585.09V190.5H2583.59V192.5ZM2582.09 143.01L2582.59 191.51L2584.59 191.49L2584.09 142.99L2582.09 143.01Z" fill="currentColor"></path></svg></a><div class="absolute z-100 min-w-full left-0 top-[calc(100%+0.5rem)]" role="region" aria-labelledby="dropdown-trigger-navbar-logo" id="dropdown-panel-navbar-logo"><div role="none" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] delay-0 group-hover/dropdown:delay-600"><div style="min-height:0px" class="overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] delay-0 group-hover/dropdown:delay-600"><div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 px-3 py-2 gap-3 border border-text/5"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-vector-square flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="M19.5 7a24 24 0 0 1 0 10"></path><path d="M4.5 7a24 24 0 0 0 0 10"></path><path d="M7 19.5a24 24 0 0 0 10 0"></path><path d="M7 4.5a24 24 0 0 1 10 0"></path><rect x="17" y="17" width="5" height="5" rx="1"></rect><rect x="17" y="2" width="5" height="5" rx="1"></rect><rect x="2" y="17" width="5" height="5" rx="1"></rect><rect x="2" y="2" width="5" height="5" rx="1"></rect></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Unduh SVG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-image flex-none shrink-0 size-4 mr-3" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Unduh PNG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-vector-square flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="M19.5 7a24 24 0 0 1 0 10"></path><path d="M4.5 7a24 24 0 0 0 0 10"></path><path d="M7 19.5a24 24 0 0 0 10 0"></path><path d="M7 4.5a24 24 0 0 1 10 0"></path><rect x="17" y="17" width="5" height="5" rx="1"></rect><rect x="17" y="2" width="5" height="5" rx="1"></rect><rect x="2" y="17" width="5" height="5" rx="1"></rect><rect x="2" y="2" width="5" height="5" rx="1"></rect></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Salin sebagai SVG</span></span></button><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-neutral ring-neutral-500/5 *:text-text-light rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-image flex-none shrink-0 size-4 mr-3" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect><circle cx="9" cy="9" r="2"></circle><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="ml-2 flex w-full text-text">Salin sebagai gambar</span></span></button></div></div></div></div></div><div class="relative z-0 flex size-full flex-row items-center border-text ml-[2vw] h-auto gap-3 overflow-x-auto text-neutral tracking-wide lg:ml-[5vw] lg:gap-3 xl:ml-[10vw] xl:gap-6" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><a aria-label="Buka beranda" aria-current="page" id="home" role="tab" aria-selected="false" data-active="false" tabindex="-1" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0 active" href="/id" target="_self" data-status="active">Beranda</a><a aria-label="Buka Playground" id="playground" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="/id/playground" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Sandbox</a><a aria-label="Lihat proyek Intlayer" id="showcase" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="https://showcase.intlayer.org/id" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Showcase</a><a aria-label="Buka Dashboard" id="dashboard" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="https://app.intlayer.org/id" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Aplikasi</a><a aria-label="Buka halaman dokumentasi" aria-current="page" id="doc" role="tab" aria-selected="true" data-active="true" tabindex="0" href="/id/doc/get-started" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Dokumentasi</a><a aria-label="Buka blog" id="blog" role="tab" aria-selected="false" data-active="false" tabindex="-1" href="/id/blog" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex text-nowrap px-4 py-0.5 text-sm aria-[current]:bg-current/0">Blog</a></div><div class="mr-4 flex items-center justify-end gap-2 md:gap-4"><div class="flex rounded-xl text-text transition-colors"><div class="group/dropdown relative flex" aria-label="DropDown locale-switcher" id="dropdown-container-locale-switcher"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-7 px-3 text-xs max-md:py-1 text-text ring-text/20 *:text-text-opposite rounded-[4rem] [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-[5rem] rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center w-full cursor-pointer group-focus-within/dropdown:bg-current/20 group-focus-within/dropdown:ring-4 p-0!" aria-label="Pengalih bahasa" aria-haspopup="true" aria-busy="false" aria-disabled="false" aria-controls="dropdown-panel-locale-switcher" id="dropdown-trigger-locale-switcher"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><div class="flex w-full items-center justify-between"><div class="text-nowrap px-2 text-base">ID</div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-vertical w-5 self-center" aria-hidden="true"><path d="M12 2v20"></path><path d="m8 18 4 4 4-4"></path><path d="m8 6 4-4 4 4"></path></svg></div></span></button><div class="absolute z-100 min-w-full right-0 top-[calc(100%+0.5rem)]" role="region" aria-labelledby="dropdown-trigger-locale-switcher" id="dropdown-panel-locale-switcher"><div role="none" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]"><div style="min-height:0px" class="overflow-x-visible group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr] group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]"><div class="flex flex-col text-text backdrop-blur rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl bg-card/95 p-0 divide-y divide-dashed divide-text/20 gap-0 max-h-[80vh] min-w-28 border border-text/5"><div class="p-3"><input class="w-full select-text resize-none text-base shadow-none outline-none transition-all duration-300 md:text-sm ring-0 disabled:opacity-50 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text bg-neutral-50 dark:bg-neutral-950 ring-text/20 disabled:ring-0 hover:ring-3 focus-within:ring-4 focus-visible:outline-none focus-visible:ring-4 [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error px-2 py-3 md:py-2" type="search" aria-label="Pencarian bahasa" placeholder="Cari locale"/></div><ul class="divide-y divide-dashed divide-text/20 overflow-y-auto p-1" aria-label="Daftar bahasa"><li class="py-1 pr-3"><a aria-label="Beralih ke Inggris" href="/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="en">English</span><span class="text-neutral text-xs">Inggris</span></div><span class="text-nowrap text-neutral text-sm">EN</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Rusia" href="/ru/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ru">Русский</span><span class="text-neutral text-xs">Rusia</span></div><span class="text-nowrap text-neutral text-sm">RU</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Jepang" href="/ja/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ja">日本語</span><span class="text-neutral text-xs">Jepang</span></div><span class="text-nowrap text-neutral text-sm">JA</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Prancis" href="/fr/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="fr">français</span><span class="text-neutral text-xs">Prancis</span></div><span class="text-nowrap text-neutral text-sm">FR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Korea" href="/ko/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="ko">한국어</span><span class="text-neutral text-xs">Korea</span></div><span class="text-nowrap text-neutral text-sm">KO</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Tionghoa" href="/zh/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="zh">中文</span><span class="text-neutral text-xs">Tionghoa</span></div><span class="text-nowrap text-neutral text-sm">ZH</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Spanyol" href="/es/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="es">Español</span><span class="text-neutral text-xs">Spanyol</span></div><span class="text-nowrap text-neutral text-sm">ES</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Jerman" href="/de/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="de">Deutsch</span><span class="text-neutral text-xs">Jerman</span></div><span class="text-nowrap text-neutral text-sm">DE</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Arab" href="/ar/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="rtl" lang="ar">العربية</span><span class="text-neutral text-xs">Arab</span></div><span class="text-nowrap text-neutral text-sm">AR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Italia" href="/it/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="it">Italiano</span><span class="text-neutral text-xs">Italia</span></div><span class="text-nowrap text-neutral text-sm">IT</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Inggris (Britania)" href="/en-GB/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="en-GB">British English</span><span class="text-neutral text-xs">Inggris (Britania)</span></div><span class="text-nowrap text-neutral text-sm">EN-GB</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Portugis" href="/pt/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="pt">Português</span><span class="text-neutral text-xs">Portugis</span></div><span class="text-nowrap text-neutral text-sm">PT</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Hindi" href="/hi/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="hi">हिन्दी</span><span class="text-neutral text-xs">Hindi</span></div><span class="text-nowrap text-neutral text-sm">HI</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Turki" href="/tr/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="tr">Türkçe</span><span class="text-neutral text-xs">Turki</span></div><span class="text-nowrap text-neutral text-sm">TR</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Polski" href="/pl/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="pl">polski</span><span class="text-neutral text-xs">Polski</span></div><span class="text-nowrap text-neutral text-sm">PL</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Indonesia" aria-current="page" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text active" href="/id/doc/environment/vite-and-svelte" target="_self" data-status="active"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="id">Indonesia</span><span class="text-neutral text-xs">Indonesia</span></div><span class="text-nowrap text-neutral text-sm">ID</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Vietnam" href="/vi/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="vi">Tiếng Việt</span><span class="text-neutral text-xs">Vietnam</span></div><span class="text-nowrap text-neutral text-sm">VI</span></div></a></li><li class="py-1 pr-3"><a aria-label="Beralih ke Ukraina" href="/uk/doc/environment/vite-and-svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text"><div class="flex flex-row items-center justify-between gap-3 px-2 py-1"><div class="flex flex-col text-nowrap"><span dir="ltr" lang="uk">Українська</span><span class="text-neutral text-xs">Ukraina</span></div><span class="text-nowrap text-neutral text-sm">UK</span></div></a></li></ul></div></div></div></div></div></div><!--$--><!--/$--><a aria-label="Buka server Discord" rel="noopener noreferrer nofollow" href="https://discord.gg/7uxamYVeCk" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative min-h-8 flex-row justify-center border-current text-center font-medium text-sm ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 max-md:py-2 text-text ring-text/20 flex cursor-pointer items-center gap-2 rounded-full border-[1.3px] p-1.5"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="800px" viewBox="0 0 71 80" fill="none" role="img" aria-label="Discord logo" class="aspect-square h-auto"><path d="M60.1045 13.8978C55.5792 11.8214 50.7265 10.2916 45.6527 9.41542C45.5603 9.39851 45.468 9.44077 45.4204 9.52529C44.7963 10.6353 44.105 12.0834 43.6209 13.2216C38.1637 12.4046 32.7345 12.4046 27.3892 13.2216C26.905 12.0581 26.1886 10.6353 25.5617 9.52529C25.5141 9.44359 25.4218 9.40133 25.3294 9.41542C20.2584 10.2888 15.4057 11.8186 10.8776 13.8978C10.8384 13.9147 10.8048 13.9429 10.7825 13.9795C1.57795 27.7309 -0.943561 41.1443 0.293408 54.3914C0.299005 54.4562 0.335386 54.5182 0.385761 54.5576C6.45866 59.0174 12.3413 61.7249 18.1147 63.5195C18.2071 63.5477 18.305 63.5139 18.3638 63.4378C19.7295 61.5728 20.9469 59.6063 21.9907 57.5383C22.0523 57.4172 21.9935 57.2735 21.8676 57.2256C19.9366 56.4931 18.0979 55.6 16.3292 54.5858C16.1893 54.5041 16.1781 54.304 16.3068 54.2082C16.679 53.9293 17.0513 53.6391 17.4067 53.3461C17.471 53.2926 17.5606 53.2813 17.6362 53.3151C29.2558 58.6202 41.8354 58.6202 53.3179 53.3151C53.3935 53.2785 53.4831 53.2898 53.5502 53.3433C53.9057 53.6363 54.2779 53.9293 54.6529 54.2082C54.7816 54.304 54.7732 54.5041 54.6333 54.5858C52.8646 55.6197 51.0259 56.4931 49.0921 57.2228C48.9662 57.2707 48.9102 57.4172 48.9718 57.5383C50.038 59.6034 51.2554 61.5699 52.5959 63.435C52.6519 63.5139 52.7526 63.5477 52.845 63.5195C58.6464 61.7249 64.529 59.0174 70.6019 54.5576C70.6551 54.5182 70.6887 54.459 70.6943 54.3942C72.1747 39.0791 68.2147 25.7757 60.1968 13.9823C60.1772 13.9429 60.1437 13.9147 60.1045 13.8978ZM23.7259 46.3253C20.2276 46.3253 17.3451 43.1136 17.3451 39.1693C17.3451 35.225 20.1717 32.0133 23.7259 32.0133C27.308 32.0133 30.1626 35.2532 30.1066 39.1693C30.1066 43.1136 27.28 46.3253 23.7259 46.3253ZM47.3178 46.3253C43.8196 46.3253 40.9371 43.1136 40.9371 39.1693C40.9371 35.225 43.7636 32.0133 47.3178 32.0133C50.9 32.0133 53.7545 35.2532 53.6986 39.1693C53.6986 43.1136 50.9 46.3253 47.3178 46.3253Z" fill="currentColor"></path></svg></a><a aria-label="Buka repositori GitHub" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative min-h-8 flex-row justify-center bg-current text-center font-medium text-sm ring-0 *:text-text-opposite hover:bg-current/90 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 max-md:py-2 rounded-full text-text ring-text/20 group/github flex cursor-pointer items-center gap-1 p-0.5"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="25"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="18" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star mr-1 group-hover/github:fill-text-opposite" aria-hidden="true"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"></path></svg></a></div></nav><main class="relative flex w-full flex-1 flex-col"><div class="flex w-full bg-card max-md:flex-col md:h-[calc(100dvh-3.5rem)]"><aside aria-label="Navigasi dokumentasi" class="z-40 flex-none"><div class="fixed top-18 left-2 z-50 flex-col gap-1 md:hidden hidden"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-search-trigger" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Klik untuk mencari" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search flex-none shrink-0 size-4" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Klik untuk mencari</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-search-trigger" id="unrollable-panel-search-trigger"><kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">/</span></span></kbd></div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center rotate-180" aria-label="Ciutkan" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="doc-nav-content"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left-to-line flex-none shrink-0 size-4" aria-hidden="true"><path d="M3 19V5"></path><path d="m13 6-6 6 6 6"></path><path d="M7 12h14"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Ciutkan</span></button></div><div class="top-0 left-0 z-40 flex h-full justify-end max-md:fixed max-md:transition-transform max-md:duration-300 max-md:ease-in-out max-md:translate-x-0" role="region"><div class="flex flex-col text-text backdrop-blur rounded-none bg-card/95 p-0 border-text gap-0 h-full sticky top-15 rounded-br-2xl"><div class="relative h-full max-w-80"><div class="flex flex-col text-text backdrop-blur rounded-none bg-card/95 p-0 border-text gap-0 sticky top-[3.6rem] z-10 m-auto pt-4"><div class="relative m-auto flex w-full flex-row items-center justify-center gap-2 px-2"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-doc-nav-framework-filter" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Filter berdasarkan framework" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-funnel flex-none shrink-0 size-4" aria-hidden="true"><path d="M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Filter berdasarkan framework</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text gap-0 absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 min-w-50 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-doc-nav-framework-filter" id="unrollable-panel-doc-nav-framework-filter">Filter dokumen berdasarkan framework</div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text w-full select-text resize-none rounded-2xl text-base shadow-none outline-none supports-[corner-shape:squircle]:rounded-4xl transition-shadow duration-100 md:text-sm ring-0 disabled:opacity-50 text-text bg-neutral-50 dark:bg-neutral-950 ring-neutral-100 dark:ring-neutral-700 hover:ring-3 aria-selected:ring-4 focus-visible:ring-3 disabled:ring-0 focus-visible:outline-none [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error justify-center text-center mb-1 pr-1.5" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search flex-none shrink-0 size-4 mr-3" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="flex w-full items-center gap-2">Cari<kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs ml-auto"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">/</span></span></kbd></span></span></button><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-doc-nav-collapse" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center transition-transform" aria-label="Ciutkan" aria-expanded="true" aria-busy="false" aria-disabled="false" aria-controls="doc-nav-content"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left-to-line flex-none shrink-0 size-4" aria-hidden="true"><path d="M3 19V5"></path><path d="m13 6-6 6 6 6"></path><path d="M7 12h14"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Ciutkan</span></button><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-doc-nav-collapse" id="unrollable-panel-doc-nav-collapse"><kbd class="inline-flex items-center justify-center gap-0.5 p-0.5 rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl font-medium font-sans border-1 border-neutral/20 text-neutral text-xs"><span class="inline-flex items-center"><span class="min-w-4 px-0.5 text-center">Alt</span></span><span class="inline-flex items-center"><span class="text-neutral/50">+</span><span class="min-w-4 px-0.5 text-center">←</span></span></kbd></div></div><div class="absolute bottom-0 left-0 h-8 w-full translate-y-full bg-linear-to-b from-card/90 backdrop-blur"></div></div></div><div id="doc-nav-content" class="sticky top-28 pt-0"><div class="relative grid h-full overflow-x-hidden overflow-y-hidden transition-all duration-500 ease-in-out grid-cols-[1fr]" aria-hidden="false"><div style="min-width:0px" class=""><div class="relative overflow-hidden"><nav aria-label="Bagian dokumentasi" class="m-auto flex max-h-[calc(100vh-8.2rem)] min-w-40 max-w-xl flex-col gap-5 overflow-auto px-3 pt-8 pb-20"><div><a aria-label="why" href="/id/doc/why" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Mengapa Intlayer?</span></a></div><div><a aria-label="get-started" href="/id/doc/get-started" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Mulai</span></a></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="concept"><span class="flex items-center gap-1.5 opacity-60">Konsep</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="how-works-intlayer" href="/id/doc/concept/how-works-intlayer" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Bagaimana Intlayer bekerja</span></a></li><li><a aria-label="configuration" href="/id/doc/concept/configuration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Konfigurasi</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_e6qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="cli" href="/id/doc/concept/cli" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">CLI</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_e6qb9bcq_-accordion-content" aria-labelledby="_R_e6qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="test" href="/id/doc/concept/cli/test" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Test</span></a><a aria-label="fill" href="/id/doc/concept/cli/fill" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Fill</span></a><a aria-label="build" href="/id/doc/concept/cli/build" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Build</span></a><a aria-label="watch" href="/id/doc/concept/cli/watch" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Watch</span></a><a aria-label="extract" href="/id/doc/concept/cli/extract" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Extract</span></a><a aria-label="login" href="/id/doc/concept/cli/login" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Login</span></a><a aria-label="push" href="/id/doc/concept/cli/push" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Push</span></a><a aria-label="pull" href="/id/doc/concept/cli/pull" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Pull</span></a><a aria-label="configuration" href="/id/doc/concept/cli/configuration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Configuration</span></a><a aria-label="list" href="/id/doc/concept/cli/list" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">List</span></a><a aria-label="version" href="/id/doc/concept/cli/version" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Version</span></a><a aria-label="editor" href="/id/doc/concept/cli/editor" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Editor</span></a><a aria-label="live" href="/id/doc/concept/cli/live" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Live</span></a><a aria-label="debug" href="/id/doc/concept/cli/debug" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Debug</span></a><a aria-label="doc-review" href="/id/doc/concept/cli/doc-review" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Doc Review</span></a><a aria-label="doc-translate" href="/id/doc/concept/cli/doc-translate" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Doc Translate</span></a><a aria-label="sdk" href="/id/doc/concept/cli/sdk" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">SDK</span></a><a aria-label="scan" href="/id/doc/concept/cli/scan" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Scan</span></a></div></div></div></div></div></li><li><a aria-label="editor" href="/id/doc/concept/editor" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Editor visual</span></a></li><li><a aria-label="cms" href="/id/doc/concept/cms" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">CMS</span></a></li><li><a aria-label="ci-cd" href="/id/doc/concept/ci-cd" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Integrasi CI/CD</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_u6qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="content" href="/id/doc/concept/content" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Deklarasi konten</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_u6qb9bcq_-accordion-content" aria-labelledby="_R_u6qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="translation" href="/id/doc/concept/content/translation" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Terjemahan</span></a><a aria-label="plural" href="/id/doc/concept/content/plural" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Plural</span></a><a aria-label="enumeration" href="/id/doc/concept/content/enumeration" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Penumeraan</span></a><a aria-label="condition" href="/id/doc/concept/content/condition" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Kondisi</span></a><a aria-label="gender" href="/id/doc/concept/content/gender" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Jenis kelamin</span></a><a aria-label="insertion" href="/id/doc/concept/content/insertion" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Penambahan</span></a><a aria-label="file" href="/id/doc/concept/content/file" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Berkas</span></a><a aria-label="nesting" href="/id/doc/concept/content/nesting" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Nesting</span></a><a aria-label="markdown" href="/id/doc/concept/content/markdown" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Markdown</span></a><a aria-label="html" href="/id/doc/concept/content/html" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">HTML</span></a><a aria-label="function-fetching" href="/id/doc/concept/content/function-fetching" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Pengambilan fungsi</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_126qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="dynamic-dyctionary" href="/id/doc/concept/dynamic-dictionaries" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">File untuk setiap lokal</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_126qb9bcq_-accordion-content" aria-labelledby="_R_126qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="collections" href="/id/doc/concept/collections" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Koleksi</span></a><a aria-label="variants" href="/id/doc/concept/variants" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Varian</span></a><a aria-label="dynamic-content" href="/id/doc/concept/dynamic-records" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Rekaman dinamis</span></a></div></div></div></div></div></li><li><a aria-label="per-locale-file" href="/id/doc/concept/per-locale-file" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">File untuk setiap lokal</span></a></li><li><a aria-label="compiler" href="/id/doc/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Kompilator</span></a></li><li><a aria-label="auto-fill" href="/id/doc/concept/auto-fill" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Pengisian otomatis</span></a></li><li><a aria-label="testing" href="/id/doc/testing" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Pengujian</span></a></li><li><a aria-label="bundle_optimization" href="/id/doc/concept/bundle-optimization" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Optimasi paket</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="environment"><span class="flex items-center gap-1.5 opacity-60">Lingkungan</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_68qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="nextjs" href="/id/doc/environment/nextjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_68qb9bcq_-accordion-content" aria-labelledby="_R_68qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="14" href="/id/doc/environment/nextjs/14" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js 14 dan App Router</span></a><a aria-label="15" href="/id/doc/environment/nextjs/15" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js 15</span></a><a aria-label="no-locale-path" href="/id/doc/environment/nextjs/no-locale-path" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js tanpa locale URL</span></a><a aria-label="next-with-Page-Router" href="/id/doc/environment/nextjs/next-with-page-router" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js dan Page Router</span></a><a aria-label="next-with-compiler" href="/id/doc/environment/nextjs/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Compiler</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_a8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="tanstack-start" href="/id/doc/environment/tanstack-start" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg height="660" viewBox="0 0 663 660" width="663" xmlns="http://www.w3.org/2000/svg" fill="currentColor" role="img" aria-label="Tanstack logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m305.114318.62443771c8.717817-1.14462121 17.926803-.36545135 26.712694-.36545135 32.548987 0 64.505987 5.05339923 95.64868 14.63098274 39.74418 12.2236582 76.762804 31.7666864 109.435876 57.477568 40.046637 31.5132839 73.228974 72.8472109 94.520714 119.2362609 39.836383 86.790386 39.544267 191.973146-1.268422 278.398081-26.388695 55.880442-68.724007 102.650458-119.964986 136.75724-41.808813 27.828603-90.706831 44.862601-140.45707 50.89341-63.325458 7.677926-131.784923-3.541603-188.712259-32.729444-106.868873-54.795293-179.52309291-165.076271-180.9604082-285.932068-.27660564-23.300971.08616998-46.74071 4.69884909-69.814998 7.51316071-37.57857 20.61272131-73.903917 40.28618971-106.877282 21.2814003-35.670293 48.7704861-67.1473767 81.6882804-92.5255597 38.602429-29.7610135 83.467691-51.1674988 130.978372-62.05777669 11.473831-2.62966514 22.9946-4.0869914 34.57273-5.4964306l3.658171-.44480576c3.050084-.37153079 6.104217-.74794222 9.162589-1.14972654zm-110.555861 549.44131429c-14.716752 1.577863-30.238964 4.25635-42.869928 12.522173 2.84343.683658 6.102369.004954 9.068638 0 7.124652-.011559 14.317732-.279903 21.434964.032202 17.817402.781913 36.381729 3.63214 53.58741 8.350042 22.029372 6.040631 41.432961 17.928687 62.656049 25.945156 22.389644 8.456554 44.67706 11.084675 68.427 11.084675 11.96813 0 23.845573-.035504 35.450133-3.302696-6.056202-3.225083-14.72582-2.619864-21.434964-3.963236-14.556814-2.915455-28.868774-6.474936-42.869928-11.470264-10.304996-3.676672-20.230803-8.214291-30.11097-12.848661l-6.348531-2.985046c-9.1705-4.309263-18.363277-8.560752-27.845391-12.142608-24.932161-9.418465-52.560181-14.071964-79.144482-11.221737zm22.259385-62.614168c-29.163917 0-58.660076 5.137344-84.915434 18.369597-6.361238 3.206092-12.407546 7.02566-18.137277 11.258891-1.746125 1.290529-4.841829 2.948483-5.487351 5.191839-.654591 2.275558 1.685942 4.182039 3.014086 5.637703 6.562396-3.497556 12.797498-7.199878 19.78612-9.855246 45.19892-17.169893 99.992458-13.570779 145.098218 2.172348 22.494346 7.851335 43.219483 19.592421 65.129314 28.800338 24.503461 10.297807 49.53043 16.975034 75.846795 20.399104 31.04195 4.037546 66.433549.7654 94.808495-13.242161 9.970556-4.921843 23.814245-12.422267 28.030337-23.320339-5.207047.454947-9.892236 2.685918-14.83959 4.224149-7.866632 2.445646-15.827248 4.51974-23.908229 6.138887-27.388113 5.486604-56.512458 6.619429-84.091013 1.639788-25.991939-4.693152-50.142596-14.119246-74.179513-24.03502l-3.068058-1.268177c-2.045137-.846788-4.089983-1.695816-6.135603-2.544467l-3.069142-1.272366c-12.279956-5.085721-24.606928-10.110797-37.210937-14.51024-24.485325-8.546552-50.726667-13.784628-76.671218-13.784628zm51.114145-447.9909432c-34.959602 7.7225298-66.276908 22.7605319-96.457338 41.7180089-17.521434 11.0054099-34.281927 22.2799893-49.465301 36.4444283-22.5792616 21.065423-39.8360564 46.668751-54.8866988 73.411509-15.507372 27.55357-25.4498976 59.665686-30.2554517 90.824149-4.7140432 30.568106-5.4906485 62.70747-.0906864 93.301172 6.7503648 38.248526 19.5989769 74.140579 39.8896436 107.337631 6.8187918-3.184625 11.659796-10.445603 17.3128555-15.336896 11.4149428-9.875888 23.3995608-19.029311 36.2745548-26.928535 4.765981-2.923712 9.662222-5.194315 14.83959-7.275014 1.953055-.785216 5.14604-1.502727 6.06527-3.647828 1.460876-3.406732-1.240754-9.335897-1.704904-12.865654-1.324845-10.095517-2.124534-20.362774-1.874735-30.549941.725492-29.668947 6.269727-59.751557 16.825623-87.521453 7.954845-20.924233 20.10682-39.922168 34.502872-56.971512 4.884699-5.785498 10.077731-11.170545 15.437296-16.512656 3.167428-3.157378 7.098271-5.858983 9.068639-9.908915-10.336599.006606-20.674847 2.987289-30.503603 6.013385-21.174447 6.519522-41.801477 16.19312-59.358362 29.841512-8.008432 6.226409-13.873368 14.387371-21.44733 20.939921-2.32322 2.010516-6.484901 4.704691-9.695199 3.187928-4.8500728-2.29042-4.1014979-11.835213-4.6571581-16.222019-2.1369011-16.873476 4.2548401-38.216325 12.3778671-52.843142 13.039878-23.479694 37.150915-43.528712 65.467327-42.82854 12.228647.302197 22.934587 4.551115 34.625711 7.324555-2.964621-4.211764-6.939158-7.28162-10.717482-10.733763-9.257431-8.459031-19.382979-16.184864-30.503603-22.028985-4.474136-2.350694-9.291232-3.77911-14.015169-5.506421-2.375159-.867783-5.36616-2.062533-6.259834-4.702213-1.654614-4.888817 7.148561-9.416813 10.381943-11.478522 12.499882-7.969406 27.826705-14.525258 42.869928-14.894334 23.509209-.577147 46.479246 12.467678 56.162903 34.665926 3.404469 7.803171 4.411273 16.054969 5.079109 24.382907l.121749 1.56229.174325 2.345587c.01913.260708.038244.521433.057403.782164l.11601 1.56437.120128 1.563971c7.38352-6.019164 12.576553-14.876995 19.78612-21.323859 16.861073-15.07846 39.936636-21.7722 61.831627-14.984333 19.786945 6.133107 36.984382 19.788105 47.105807 37.959541 2.648042 4.754231 10.035685 16.373942 4.698379 21.109183-4.177345 3.707277-9.475079.818243-13.880788-.719162-3.33605-1.16376-6.782939-1.90214-10.241828-2.585698l-1.887262-.369639c-.629089-.122886-1.257979-.246187-1.886079-.372129-11.980496-2.401886-25.91652-2.152533-37.923398-.041284-7.762754 1.364839-15.349083 4.127545-23.083807 5.271929v1.651348c21.149714.175043 41.608563 12.240618 52.043268 30.549941 4.323267 7.585468 6.482428 16.267431 8.138691 24.770223 2.047864 10.50918.608423 21.958802-2.263037 32.201289-.962925 3.433979-2.710699 9.255807-6.817143 10.046802-2.902789.558982-5.36781-2.330878-7.024898-4.279468-4.343878-5.10762-8.475879-9.96341-13.573278-14.374161-12.895604-11.157333-26.530715-21.449361-40.396663-31.373138-7.362086-5.269452-15.425755-12.12007-23.908229-15.340199 2.385052 5.745041 4.721463 11.086326 5.532694 17.339156 2.385876 18.392716-5.314223 35.704625-16.87179 49.540445-3.526876 4.222498-7.29943 8.475545-11.744712 11.755948-1.843407 1.360711-4.156734 3.137561-6.595373 2.752797-7.645687-1.207961-8.555849-12.73272-9.728176-18.637115-3.970415-19.998652-2.375984-39.861068 3.132802-59.448534-4.901187 2.485279-8.443727 7.923994-11.521293 12.385111-6.770975 9.816439-12.645804 20.199291-16.858599 31.375615-16.777806 44.519521-16.616219 96.664142 5.118834 139.523233 2.427098 4.786433 6.110614 4.144058 10.894733 4.144058.720854 0 1.44257-.004515 2.164851-.010924l2.168232-.022283c4.338648-.045438 8.686803-.064635 12.979772.508795 2.227588.297243 5.320818.032202 7.084256 1.673642 2.111344 1.966755.986008 5.338808.4996 7.758859-1.358647 6.765574-1.812904 12.914369-1.812904 19.816178 9.02412-1.398692 11.525415-15.866153 14.724172-23.118874 3.624982-8.216283 7.313444-16.440823 10.667192-24.770223 1.648843-4.093692 3.854171-8.671229 3.275427-13.210785-.649644-5.10184-4.335633-10.510831-6.904531-14.862134-4.86244-8.234447-10.389363-16.70834-13.969002-25.595896-2.861567-7.104926-.197036-15.983399 7.871579-18.521521 4.450228-1.400344 9.198073 1.345848 12.094266 4.562675 6.07269 6.74328 9.992815 16.777697 14.401823 24.692609l34.394873 61.925556c2.920926 5.243856 5.848447 10.481933 8.836976 15.687808 1.165732 2.031158 2.352075 5.167068 4.740424 6.0332 2.127008.77118 5.033095-.325315 7.148561-.748886 5.492297-1.099798 10.97635-2.287117 16.488434-3.28288 6.605266-1.193099 16.673928-.969342 21.434964-6.129805-6.963066-2.205375-15.011895-2.074919-22.259386-1.577863-4.352947.298894-9.178287 1.856116-13.178381-.686135-5.953149-3.783239-9.910373-12.522173-13.552668-18.377854-8.980425-14.439388-17.441465-29.095929-26.041008-43.760726l-1.376261-2.335014-2.765943-4.665258c-1.380597-2.334387-2.750786-4.67476-4.079753-7.036188-1.02723-1.826391-2.549937-4.233231-1.078344-6.24705 1.545791-2.114476 4.91472-2.239146 7.956473-2.243117l.603351.000261c1.195428.001526 2.315572.002427 3.222811-.11692 12.27399-1.615019 24.718635-2.952611 37.098976-2.952611-.963749-3.352237-3.719791-7.141255-2.838484-10.73046 1.972017-8.030506 13.526287-10.543033 18.899867-4.780653 3.60767 3.868283 5.704174 9.192229 8.051303 13.859765 3.097352 6.162006 6.624228 12.118418 9.940876 18.16483 5.805578 10.585967 12.146205 20.881297 18.116667 31.375615.49237.865561.999687 1.726685 1.512269 2.587098l.771613 1.290552c2.577138 4.303168 5.164895 8.635123 6.553094 13.461506-20.735854-.9487-36.30176-25.018751-45.343193-41.283704-.721369 2.604176.450959 4.928448 1.388326 7.431066 1.948109 5.197619 4.276275 10.147535 7.20627 14.862134 4.184765 6.732546 8.982075 13.665732 15.313633 18.553722 11.236043 8.673707 26.05255 8.721596 39.572241 7.794364 8.669619-.595311 19.50252-4.542034 28.030338-1.864372 8.513803 2.673532 11.940924 12.063098 6.884745 19.276187-3.787393 5.403211-8.842747 7.443452-15.128962 8.257566 4.445282 9.53571 10.268996 18.385285 14.490036 28.072919 1.758491 4.035895 3.59118 10.22102 7.8048 12.350433 2.805507 1.416857 6.824562.09743 9.85761.034678-3.043765-8.053625-8.742992-14.887729-11.541904-23.118874 8.533589.390544 16.786875 4.843404 24.732651 7.685374 15.630376 5.590144 31.063836 11.701854 46.475333 17.86913l7.112077 2.848685c6.338978 2.538947 12.71588 5.052299 18.961699 7.812528 2.285297 1.009799 5.449427 3.370401 7.975455 1.917215 2.061054-1.186494 3.394144-4.015253 4.665403-5.931643 3.55573-5.361927 6.775921-10.928622 9.965609-16.513481 12.774414-22.36586 22.143967-46.872692 28.402976-71.833646 20.645168-82.323009 2.934117-173.156241-46.677107-241.922507-19.061454-26.420745-43.033164-49.262193-69.46165-68.1783861-66.13923-47.336721-152.911262-66.294198-232.486917-48.7172481zm135.205158 410.5292842c-17.532977 4.570931-35.601827 8.714164-53.58741 11.040088 2.365265 8.052799 8.145286 15.885969 12.376218 23.118874 1.635653 2.796558 3.3859 6.541816 6.618457 7.755557 3.651364 1.370619 8.063669-.853747 11.508927-1.975838-1.595256-4.364513-4.279573-8.292245-6.476657-12.385112-.905215-1.687677-2.305907-3.685809-1.559805-5.68972 1.410585-3.786541 7.266452-3.563609 10.509727-4.221671 8.54678-1.733916 17.004522-3.898008 25.557073-5.611281 3.150939-.631641 7.538512-2.342438 10.705115-1.285575 2.371037.791232 3.800147 2.744743 5.152304 4.781948l.606196.918752c.80912 1.222827 1.637246 2.41754 2.671212 3.351165 3.457625 3.121874 8.628398 3.60159 13.017619 4.453686-2.678546-6.027421-7.130424-11.301001-9.984571-17.339156-1.659561-3.511592-3.023155-8.677834-6.656381-10.707341-5.005064-2.795733-15.341663 2.461334-20.458024 3.795624zm-110.472507-40.151706c-.825246 10.467897-4.036369 18.984725-9.068639 28.072919 5.76683.729896 11.649079.989984 17.312856 2.39363 4.244947 1.051908 8.156828 3.058296 12.366325 4.211763-2.250671-6.157877-6.426367-11.651913-9.661398-17.339156-3.266358-5.740912-6.189758-12.717032-10.949144-17.339156z" transform="translate(.9778)"></path></svg><!--/$--></span>Tanstack Start</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_a8qb9bcq_-accordion-content" aria-labelledby="_R_a8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="tanstack-start-solid" href="/id/doc/environment/tanstack-start/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Tanstack Start Solid</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_e8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="astro" href="/id/doc/environment/astro" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg viewBox="0 0 85 107" role="img" aria-label="Astro logo" xmlns="http://www.w3.org/2000/svg" fill="currentColor" style="z-index:0" class="shrink-0 size-3.5"><path d="M27.5894 91.1365C22.7555 86.7178 21.3444 77.4335 23.3583 70.7072C26.8503 74.948 31.6888 76.2914 36.7005 77.0497C44.4375 78.2199 52.0359 77.7822 59.2232 74.2459C60.0454 73.841 60.8052 73.3027 61.7036 72.7574C62.378 74.714 62.5535 76.6892 62.318 78.6996C61.7452 83.5957 59.3086 87.3778 55.4332 90.2448C53.8835 91.3916 52.2437 92.4167 50.6432 93.4979C45.7262 96.8213 44.3959 100.718 46.2435 106.386C46.2874 106.525 46.3267 106.663 46.426 107C43.9155 105.876 42.0817 104.24 40.6845 102.089C39.2087 99.8193 38.5066 97.3081 38.4696 94.5909C38.4511 93.2686 38.4511 91.9345 38.2733 90.6309C37.8391 87.4527 36.3471 86.0297 33.5364 85.9478C30.6518 85.8636 28.37 87.6469 27.7649 90.4554C27.7187 90.6707 27.6517 90.8837 27.5847 91.1341L27.5894 91.1365Z" fill="currentColor"></path><path d="M27.5894 91.1365C22.7555 86.7178 21.3444 77.4335 23.3583 70.7072C26.8503 74.948 31.6888 76.2914 36.7005 77.0497C44.4375 78.2199 52.0359 77.7822 59.2232 74.2459C60.0454 73.841 60.8052 73.3027 61.7036 72.7574C62.378 74.714 62.5535 76.6892 62.318 78.6996C61.7452 83.5957 59.3086 87.3778 55.4332 90.2448C53.8835 91.3916 52.2437 92.4167 50.6432 93.4979C45.7262 96.8213 44.3959 100.718 46.2435 106.386C46.2874 106.525 46.3267 106.663 46.426 107C43.9155 105.876 42.0817 104.24 40.6845 102.089C39.2087 99.8193 38.5066 97.3081 38.4696 94.5909C38.4511 93.2686 38.4511 91.9345 38.2733 90.6309C37.8391 87.4527 36.3471 86.0297 33.5364 85.9478C30.6518 85.8636 28.37 87.6469 27.7649 90.4554C27.7187 90.6707 27.6517 90.8837 27.5847 91.1341L27.5894 91.1365Z" fill="url(#paint0_linear_1_59)"></path><path d="M0 69.5866C0 69.5866 14.3139 62.6137 28.6678 62.6137L39.4901 29.1204C39.8953 27.5007 41.0783 26.3999 42.4139 26.3999C43.7495 26.3999 44.9325 27.5007 45.3377 29.1204L56.1601 62.6137C73.1601 62.6137 84.8278 69.5866 84.8278 69.5866C84.8278 69.5866 60.5145 3.35233 60.467 3.21944C59.7692 1.2612 58.5911 0 57.0029 0H27.8274C26.2392 0 25.1087 1.2612 24.3634 3.21944C24.3108 3.34983 0 69.5866 0 69.5866Z" fill="currentColor"></path><defs><linearGradient id="paint0_linear_1_59" x1="22.4702" y1="107" x2="69.1451" y2="84.9468" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"></stop><stop offset="1" stop-color="#F041FF"></stop></linearGradient></defs></svg><!--/$--></span>Astro</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_e8qb9bcq_-accordion-content" aria-labelledby="_R_e8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="astro-and-react" href="/id/doc/environment/astro/react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Astro dan React</span></a><a aria-label="astro-and-svelte" href="/id/doc/environment/astro/svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Astro dan Svelte</span></a><a aria-label="astro-and-vue" href="/id/doc/environment/astro/vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Astro dan Vue</span></a><a aria-label="astro-and-solid" href="/id/doc/environment/astro/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Astro dan Solid</span></a><a aria-label="astro-and-preact" href="/id/doc/environment/astro/preact" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" aria-label="Preact" role="img" viewBox="0 0 512 512" style="z-index:0" class="shrink-0 size-3.5"><g transform="translate(256,256)"><path d="M0,-256 222,-128 222,128 0,256 -222,128 -222,-128z" fill="#673ab8"></path><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(52.5)"></ellipse><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(-52.5)"></ellipse><circle cx="0" cy="0" r="34" fill="#ffffff"></circle></g></svg><!--/$--></span>Astro dan Preact</span></a><a aria-label="astro-and-lit" href="/id/doc/environment/astro/lit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 256 320" preserveAspectRatio="xMidYMid" role="img" aria-label="Lit"><path fill="#00E8FF" d="m64 192 25.926-44.727 38.233-19.114 63.974 63.974 10.833 61.754L192 320l-64-64-38.074-25.615z"></path><path d="M128 256V128l64-64v128l-64 64ZM0 256l64 64 9.202-60.602L64 192l-37.542 23.71L0 256Z" fill="#283198"></path><path d="M64 192V64l64-64v128l-64 64Zm128 128V192l64-64v128l-64 64ZM0 256V128l64 64-64 64Z" fill="#324FFF"></path><path fill="#0FF" d="M64 320V192l64 64z"></path></svg><!--/$--></span>Astro dan Lit</span></a><a aria-label="astro-and-vanilla-js" href="/id/doc/environment/astro/vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Astro dan Vanilla JS</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_i8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-react" href="/id/doc/environment/vite-and-react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Vite dan React</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_i8qb9bcq_-accordion-content" aria-labelledby="_R_i8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="react-router-v7" href="/id/doc/environment/vite-and-react/react-router-v7" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Router v7</span></a><a aria-label="react-router-v7-fs-routes" href="/id/doc/environment/vite-and-react/react-router-v7-fs-routes" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Router v7 (fs-routes)</span></a><a aria-label="compiler" href="/id/doc/environment/vite-and-react/compiler" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>Compiler</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_m8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-vue" href="/id/doc/environment/vite-and-vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Vite dan Vue</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_m8qb9bcq_-accordion-content" aria-labelledby="_R_m8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="nuxt-and-vue" href="/id/doc/environment/nuxt-and-vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 298" preserveAspectRatio="xMidYMid" role="img" aria-label="Nuxt logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="none" fill-rule="nonzero"><path fill="#00C58E" d="M227.92099 82.07407l-13.6889 23.7037-46.8148-81.08641L23.7037 273.58025h97.3037c0 13.0912 10.61252 23.7037 23.70371 23.7037H23.70371c-8.46771 0-16.29145-4.52017-20.5246-11.85382-4.23315-7.33366-4.23272-16.36849.00114-23.70174L146.89383 12.83951c4.23415-7.33433 12.0596-11.85252 20.5284-11.85252 8.46878 0 16.29423 4.51819 20.52839 11.85252l39.97037 69.23456z"></path><path fill="#2F495E" d="M331.6642 261.7284l-90.05432-155.95062-13.6889-23.7037-13.68888 23.7037-90.04445 155.95061c-4.23385 7.33325-4.23428 16.36808-.00113 23.70174 4.23314 7.33365 12.05689 11.85382 20.5246 11.85382h166.4c8.46946 0 16.29644-4.51525 20.532-11.84955 4.23555-7.3343 4.23606-16.37123.00132-23.706h.01976zM144.7111 273.58024L227.921 129.48148l83.19012 144.09877h-166.4z"></path><path fill="#108775" d="M396.04938 285.4321c-4.23344 7.33254-12.05656 11.85185-20.52345 11.85185H311.1111c13.0912 0 23.7037-10.6125 23.7037-23.7037h40.66173L260.09877 73.74815l-18.4889 32.02963-13.68888-23.7037L239.5753 61.8963c4.23416-7.33433 12.0596-11.85252 20.5284-11.85252 8.46879 0 16.29423 4.51819 20.52839 11.85252l115.41728 199.8321c4.23426 7.33395 4.23426 16.36975 0 23.7037z"></path></g></svg><!--/$--></span>Nuxt dan Vue</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-solid" href="/id/doc/environment/vite-and-solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Vite dan Solid</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="true" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_u8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-svelte" aria-current="page" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text active" href="/id/doc/environment/vite-and-svelte" target="_self" data-status="active"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Vite dan Svelte</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out rotate-0" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div role="region" class="group/height-smoother relative grid w-full overflow-hidden transition-all duration-700 ease-in-out grid-rows-[1fr] overflow-x-auto" id="_R_u8qb9bcq_-accordion-content" aria-labelledby="_R_u8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="vite-and-svelte-kit" href="/id/doc/environment/sveltekit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>SvelteKit</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-preact" href="/id/doc/environment/vite-and-preact" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" aria-label="Preact" role="img" viewBox="0 0 512 512" style="z-index:0" class="shrink-0 size-3.5"><g transform="translate(256,256)"><path d="M0,-256 222,-128 222,128 0,256 -222,128 -222,-128z" fill="#673ab8"></path><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(52.5)"></ellipse><ellipse cx="0" cy="0" stroke-width="16" rx="75" ry="196" fill="none" stroke="#ffffff" transform="rotate(-52.5)"></ellipse><circle cx="0" cy="0" r="34" fill="#ffffff"></circle></g></svg><!--/$--></span>Vite dan Preact</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_168qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="vite-and-vanilla-js" href="/id/doc/environment/vite-and-vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Vite dan Vanilla JS</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_168qb9bcq_-accordion-content" aria-labelledby="_R_168qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="vanilla-js" href="/id/doc/environment/vanilla" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 1052 1052" role="img" aria-label="Vanilla JavaScript logo"><path fill="#f0db4f" d="M0 0h1052v1052H0z"></path><path d="M965.9 801.1c-7.7-48-39-88.3-131.7-125.9-32.2-14.8-68.1-25.399-78.8-49.8-3.8-14.2-4.3-22.2-1.9-30.8 6.9-27.9 40.2-36.6 66.6-28.6 17 5.7 33.1 18.801 42.8 39.7 45.4-29.399 45.3-29.2 77-49.399-11.6-18-17.8-26.301-25.4-34-27.3-30.5-64.5-46.2-124-45-10.3 1.3-20.699 2.699-31 4-29.699 7.5-58 23.1-74.6 44-49.8 56.5-35.6 155.399 25 196.1 59.7 44.8 147.4 55 158.6 96.9 10.9 51.3-37.699 67.899-86 62-35.6-7.4-55.399-25.5-76.8-58.4-39.399 22.8-39.399 22.8-79.899 46.1 9.6 21 19.699 30.5 35.8 48.7 76.2 77.3 266.899 73.5 301.1-43.5 1.399-4.001 10.6-30.801 3.199-72.101zm-394-317.6h-98.4c0 85-.399 169.4-.399 254.4 0 54.1 2.8 103.7-6 118.9-14.4 29.899-51.7 26.2-68.7 20.399-17.3-8.5-26.1-20.6-36.3-37.699-2.8-4.9-4.9-8.7-5.601-9-26.699 16.3-53.3 32.699-80 49 13.301 27.3 32.9 51 58 66.399 37.5 22.5 87.9 29.4 140.601 17.3 34.3-10 63.899-30.699 79.399-62.199 22.4-41.3 17.6-91.3 17.4-146.6.5-90.2 0-180.4 0-270.9z" fill="#323330"></path></svg><!--/$--></span>Vanilla JS (tanpa bundler)</span></a></div></div></div></div></div></li><li><a aria-label="vite-and-lit" href="/id/doc/environment/vite-and-lit" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 256 320" preserveAspectRatio="xMidYMid" role="img" aria-label="Lit"><path fill="#00E8FF" d="m64 192 25.926-44.727 38.233-19.114 63.974 63.974 10.833 61.754L192 320l-64-64-38.074-25.615z"></path><path d="M128 256V128l64-64v128l-64 64ZM0 256l64 64 9.202-60.602L64 192l-37.542 23.71L0 256Z" fill="#283198"></path><path d="M64 192V64l64-64v128l-64 64Zm128 128V192l64-64v128l-64 64ZM0 256V128l64 64-64 64Z" fill="#324FFF"></path><path fill="#0FF" d="M64 320V192l64 64z"></path></svg><!--/$--></span>Vite dan Lit</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1e8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><a aria-label="angular" href="/id/doc/environment/angular" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Angular 21</span></a></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1e8qb9bcq_-accordion-content" aria-labelledby="_R_1e8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="19" href="/id/doc/environment/angular/19" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Angular 19 (Webpack)</span></a><a aria-label="analog" href="/id/doc/environment/analog" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Angular logo" version="1.1" preserveAspectRatio="xMidYMid" viewBox="20 20 210 210" style="z-index:0" class="shrink-0 size-3.5"><g><polygon style="fill:#DD0031" points="125,30 125,30 125,30 31.9,63.2 46.1,186.3 125,230 125,230 125,230 203.9,186.3 218.1,63.2 "></polygon><polygon style="fill:#C3002F" points="125,30 125,52.2 125,52.1 125,153.4 125,153.4 125,230 125,230 203.9,186.3 218.1,63.2 125,30 "></polygon><path style="fill:#FFFFFF" d="M125,52.1L66.8,182.6h0h21.7h0l11.7-29.2h49.4l11.7,29.2h0h21.7h0L125,52.1L125,52.1L125,52.1L125,52.1 L125,52.1z M142,135.4H108l17-40.9L142,135.4z"></path></g></svg><!--/$--></span>Analog</span></a></div></div></div></div></div></li><li><a aria-label="create-react-app" href="/id/doc/environment/create-react-app" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React CRA</span></a></li><li><a aria-label="react-native-and-expo" href="/id/doc/environment/react-native-and-expo" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="175.7 78 490.6 436.9" role="img" aria-label="React logo" style="z-index:0" class="shrink-0 size-3.5"><g fill="#61dafb"><path d="m666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9v-22.3c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6v-22.3c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zm-101.4 106.7c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24s9.5 15.8 14.4 23.4zm73.9-208.1c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6s22.9-35.6 58.3-50.6c8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zm53.8 142.9c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6z"></path><circle cx="420.9" cy="296.5" r="45.7"></circle></g></svg><!--/$--></span>React Native dan Expo</span></a></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1q8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="truncate font-semibold text-neutral transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text" label="node"><span class="flex items-center gap-1.5 opacity-60">Node & Backend</span></span></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1q8qb9bcq_-accordion-content" aria-labelledby="_R_1q8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="express" href="/id/doc/environment/express" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1333.33 773.55" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd" role="img" aria-label="Express logo" fill="currentColor" style="z-index:0" class="shrink-0 size-3.5"><path d="M1333.33 753.49c-48.5 12.33-78.5.54-105.41-39.87L1036.5 448.79l-27.67-36.67L785.29 714.5c-25.54 36.38-52.33 52.2-100 39.33l286.25-384.25-266.5-347.09c45.83-8.91 77.5-4.38 105.62 36.67l198.54 268.13 200-266.67c25.62-36.38 53.17-50.2 99.17-36.8l-103.33 137-140 182.29c-16.67 20.83-14.38 35.09.96 55.2l267.33 355.18zM.34 363.16l23.41-115.17c63.75-227.92 325-322.63 505.17-181.8 105.29 82.83 131.46 200 126.25 331.25H61.67C52.76 633.69 222.8 776.27 439.58 703.53c76.04-25.54 120.83-85.09 143.25-159.58 11.38-37.33 30.2-43.17 65.29-32.5-17.91 93.17-58.33 171-143.75 219.71-127.62 72.91-309.8 49.33-405.62-52C41.66 620.36 18.08 545.87 7.5 466.2c-1.67-13.17-5-25.71-7.5-38.33.22-21.56.34-43.11.34-64.67v-.04zm62.41-15.83h536.33c-3.5-170.83-109.87-292.17-255.25-293.2-159.58-1.25-274.17 117.2-281.09 293.2h.01z" fill-rule="nonzero"></path></svg><!--/$--></span>Express.js</span></a><a aria-label="nest" href="/id/doc/environment/nest" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" height="966" viewBox="0 0 264.58333 255.58751" width="1000" role="img" aria-label="NestJS logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m153.33845 45.652481c-1.80934 0-3.48944.387729-5.04032.904673 3.29558 2.19706 5.10493 5.104961 6.00963 8.400551.0648.45233.19386.775444.25856 1.227759.0648.387729.12916.775444.12916 1.163171.2586 5.686509-1.48628 6.397323-2.71403 9.757543-1.87398 4.329529-1.35704 8.982133.90466 12.730079.19387.452318.45234.969275.77546 1.421618-2.45558-16.348759 11.17919-18.804304 13.69932-23.90924.19386-4.458761-3.48944-7.431263-6.39731-9.499092-2.77864-1.680104-5.29884-2.197062-7.62513-2.197062zm20.54903 3.683318c-.25858 1.486247-.0647 1.09853-.12913 1.873973-.0647.516945-.0647 1.163157-.12914 1.680102-.12914.516959-.2586 1.033904-.45236 1.550886-.12913.516945-.32309 1.033903-.51694 1.550847-.2586.516983-.45234.969301-.71082 1.486258-.19385.258585-.32309.516945-.51695.775443-.12914.193857-.25858.387715-.38771.581572-.32309.452355-.64621.904673-.96929 1.292387-.38774.387729-.71083.840046-1.16319 1.163171v.0647c-.38771.3231-.77543.710815-1.22775 1.033903-1.35702 1.033902-2.90787 1.809344-4.32952 2.778644-.45231.323088-.90468.581587-1.29238.9693-.45233.323088-.84006.646176-1.22776 1.033903-.45236.387715-.77545.775442-1.16318 1.227784-.32309.387728-.7108.840048-.96927 1.292402-.32312.452317-.6462.904661-.9047 1.35699-.25857.516944-.45233.969299-.71081 1.486245-.19385.516944-.38773.969301-.51695 1.486244-.19386.581586-.3231 1.098544-.45234 1.615514-.0647.258583-.0647.58156-.12914.840045-.0648.258584-.0648.516945-.12913.775443 0 .516944-.0647 1.09853-.0647 1.615475 0 .387727 0 .775441.0647 1.163169 0 .516946.0647 1.033892.19385 1.615476.0647.516944.19384 1.033902.32312 1.550885.19386.516944.3231 1.033902.51694 1.550847.12916.323126.32309.646213.45236.904673l-14.86252-5.75114c-2.52018-.710815-4.9757-1.35699-7.49588-1.938576-1.357-.323087-2.714-.646198-4.07102-.969299-3.87719-.77543-7.81895-1.356991-11.76076-1.744705-.12913 0-.19385-.06471-.32309-.06471-3.8772-.387714-7.68973-.581572-11.5669-.581572-2.84328 0-5.68656.129131-8.465201.323088-3.941798.258584-7.883602.775442-11.825373 1.421617-.969302.129144-1.938602.323125-2.907905.516984-2.003199.387689-3.941771.840044-5.815742 1.292386-.9693.258584-1.938602.516958-2.907903.775419-.96927.387713-1.87394.84007-2.778642 1.227784-.710811.323088-1.421619.646187-2.132431.9693-.129139.06471-.25858.06471-.32309.129144-.64621.323087-1.22779.581547-1.809341.904671-.193861.06471-.323122.129132-.452351.193859-.71081.323089-1.421618.710803-2.003201 1.033902-.45235.193858-.90467.452343-1.292389.646213-.193862.129131-.452353.258572-.581582.323088-.581579.323088-1.16316.646174-1.680111.9693-.581581.323087-1.098532.646175-1.550882.969263-.452318.323125-.904667.581585-1.29239.904672-.06474.06471-.129139.06471-.193861.129145-.387719.258583-.840039.581571-1.227758.904696 0 0-.06473.0647-.12914.129142-.32309.258584-.646212.516947-.969301.775407-.129138.06471-.258581.193857-.38772.258583-.32309.258586-.64618.581586-.969271.84007-.06473.129143-.193859.193858-.258581.258585-.38772.387715-.775441.710802-1.163161 1.09853-.06473 0-.06473.06471-.129139.129131-.38772.3231-.775439.710816-1.163159 1.098543-.06473.06471-.06473.12913-.12914.12913-.32309.323089-.64618.646213-.969301 1.033902-.129137.129143-.32309.258586-.452319.387715-.32309.387728-.710811.775443-1.09853 1.163171-.06473.129132-.19386.193858-.258582.323087-.516952.516983-.969302 1.033928-1.486252 1.550885-.06473.06471-.129138.129128-.193859.193858-1.033931 1.098529-2.132463 2.197059-3.295594 3.166352-1.163159 1.0339-2.390922 2.0032-3.618711 2.84325-1.292392.9047-2.520152 1.68011-3.877173 2.45555-1.292392.71079-2.649412 1.35701-4.071032 1.9386-1.357022.58157-2.778641 1.09854-4.200264 1.55085-2.714041.58157-5.492684 1.68011-7.883605 1.87397-.51695 0-1.098531.12915-1.615482.19385-.581578.12914-1.098529.25859-1.615479.38774-.516951.19384-1.033931.38771-1.550883.58156-.516951.19386-1.033901.45235-1.550852.71083-.45235.32308-.969299.58157-1.421651.90466-.452322.32309-.904672.7108-1.292393 1.09853-.452319.32312-.904669.77545-1.29239 1.16315-.387721.45237-.77544.84008-1.0985304 1.29239-.3230901.51695-.7108108.96931-.9693016 1.48627-.32309.45235-.6461799.96929-.9046707 1.48622-.2585815.58161-.5169498 1.09855-.7108107 1.68014-.1938599.51695-.3877199 1.09852-.5815799 1.68011-.1291382.51694-.2585813 1.0339-.3230898 1.55083 0 .0648-.064719.12916-.064719.19387-.1291392.58161-.1291392 1.35706-.1938608 1.74479-.064719.45232-.1291373.84002-.1291373 1.29238 0 .25858 0 .58155.064719.84003.064719.45236.1291371.84007.2585814 1.22782.1291382.38766.2585815.77539.4523201 1.16312v.0647c.1938599.38775.4523506.77545.7108108 1.16317.2585814.38772.5169804.77544.8400704 1.16317.3230899.32309.7108109.71078 1.0985304 1.03389.3877209.38772.7754421.71081 1.2277611 1.0339 1.550881 1.35703 1.938601 1.80938 3.941806 2.84327.323087.19387.64621.32311 1.03393.51697.06473 0 .129139.0647.193859.0647 0 .12913 0 .19387.06473.32313.06472.51696.193859 1.03389.32309 1.55086.129138.58158.323121 1.09855.516981 1.55087.19386.38773.32309.77543.516951 1.16317.06472.12915.12914.25858.19386.32309.258581.51694.51695.96932.77541 1.42162.323121.45233.64621.90466.969299 1.35703.323092.3877.710813.84004 1.098532 1.22775.387721.38773.775442.71083 1.227793 1.09852 0 0 .06473.0648.129137.0648.387722.32312.77544.64622 1.163162.90466.45232.32311.90467.58157 1.421619.84007.452351.25858.969302.51695 1.486252.71082.387721.19386.84004.32311 1.292392.45234.06473.0648.129138.0648.258582.12916.258581.0648.581548.12912.840039.19384-.193859 3.48945-.258582 6.78504.258583 7.94822.58155 1.29238 3.424821-2.64941 6.268094-7.17277-.387719 4.45875-.646211 9.6929 0 11.24381.710809 1.61545 4.587982-3.42487 7.948203-8.98215 45.815262-10.59757 87.62418 21.066 92.01829 65.78273-.84006-6.97892-9.43446-10.85608-13.37623-9.88677-1.93861 4.78183-5.2342 10.92068-10.53299 14.73324.45233-4.2649.25856-8.65901-.64619-12.92392-1.42165 5.94501-4.2003 11.50232-8.01287 16.28415-6.138857.45232-12.277729-2.52019-15.50872-6.97891-.258582-.19388-.323091-.58159-.516951-.84006-.193862-.45238-.387719-.90467-.516951-1.35703-.193859-.45232-.323089-.90467-.387719-1.35699-.06473-.45236-.06473-.90469-.06473-1.42163 0-.32312 0-.6462 0-.96928.06473-.45238.19386-.90471.323091-1.35705.129138-.45232.25858-.90467.45235-1.35701.258582-.45231.45232-.90466.775441-1.35698 1.09853-3.10178 1.09853-5.62192-.90467-7.10816-.387721-.25858-.775441-.45236-1.227791-.64622-.258584-.0647-.581582-.19386-.84004-.25857-.193861-.0647-.32309-.12916-.516951-.19387-.452351-.12914-.904702-.25859-1.357022-.32309-.45235-.12913-.90467-.19386-1.35702-.19386-.452321-.0648-.969303-.12914-1.421622-.12914-.323089 0-.64621.0647-.969301.0647-.516949 0-.969299.0648-1.421621.19386-.45235.0648-.904669.12913-1.357019.25856-.452322.12915-.904673.25859-1.357023.45238-.452319.19385-.840041.38771-1.292389.58157-.38769.19387-.775412.45232-1.227761.64618-15.056371 9.82217-6.074235 32.82674 4.200264 39.48256-3.877175.71081-7.818947 1.5509-8.917479 2.39092-.06473.0647-.129138.12915-.129138.12915 2.778642 1.68009 5.686516 3.10173 8.723616 4.32949 4.135665 1.35702 8.529786 2.58479 10.468387 3.10176v.0647c5.363424 1.09854 10.79148 1.48626 16.284139 1.16317 28.62649-2.00321 52.0834-23.78003 56.3483-52.47111.12914.58159.25858 1.09852.38772 1.68012.19387 1.16312.45232 2.3909.58155 3.61867v.0648c.12914.58158.19386 1.16315.25858 1.6801v.25859c.0648.58157.12915 1.16316.12915 1.6801.0647.71082.12914 1.42162.12914 2.13247v1.0339c0 .32312.0647.7108.0647 1.03392 0 .38773-.0647.77542-.0647 1.16314v.90467c0 .45236-.0648.84006-.0648 1.2924 0 .25856 0 .51696-.0647.84006 0 .45236-.0647.90466-.0647 1.42162-.0648.19386-.0648.38772-.0648.58159-.0647.51696-.12914.9693-.19387 1.48626 0 .19387 0 .38771-.0647.58159-.0648.64617-.19385 1.22777-.25855 1.87394v.0648.0647c-.12914.58157-.2586 1.22776-.38775 1.80933v.19387c-.12912.58156-.25858 1.16316-.3877 1.74471 0 .0648-.0647.19387-.0647.25856-.12916.5816-.2586 1.16317-.45232 1.74478v.19384c-.19386.64617-.38773 1.22776-.51698 1.80934-.0647.0647-.0647.12914-.0647.12914-.19387.64621-.38771 1.29239-.58155 1.93858-.25858.64621-.45234 1.22778-.71081 1.87398-.25857.6462-.45236 1.2924-.71083 1.87396-.25859.64622-.51697 1.2278-.77543 1.87397h-.0648c-.2586.58157-.51699 1.22779-.8401 1.80938-.0647.19383-.12912.32309-.19384.4523-.0647.0648-.0647.12914-.12914.19388-4.20026 8.46514-10.40377 15.89639-18.15809 21.71217-.51695.32309-1.03392.71082-1.55086 1.09852-.12915.12915-.32312.19388-.45235.32309-.45235.3231-.90468.64618-1.42161.96931l.19385.38772h.0647c.90466-.12913 1.80934-.25858 2.71402-.38772h.0647c1.68012-.25858 3.36023-.58158 5.04035-.90467.45231-.0648.9693-.19385 1.42161-.32312.32309-.0648.58158-.12913.90467-.19386.45235-.0648.90468-.19386 1.35704-.25857.3877-.12914.77543-.19388 1.16314-.3231 6.46195-1.55089 12.73007-3.68335 18.73965-6.20349-10.27448 14.02243-24.03847 25.33087-40.12874 32.76212 7.43127-.51696 14.86251-1.74472 22.03528-3.81254 26.0417-7.68977 47.94772-25.20165 61.06549-48.7878-2.6494 14.92714-8.5944 29.14344-17.38265 41.55041 6.26809-4.13569 12.01923-8.91753 17.25342-14.34557 14.47478-15.12097 23.97388-34.31296 27.20483-54.92665 2.19708 10.2099 2.84328 20.74293 1.87398 31.14666 46.65534-65.07192 3.87717-132.53476-14.02244-150.305141-.0648-.129133-.12914-.193858-.12914-.323089-.0648.0647-.0648.0647-.0648.129144 0-.06471 0-.06471-.0647-.129144 0 .775442-.0647 1.550848-.12914 2.326291-.19387 1.48625-.38771 2.907879-.64621 4.329529-.32308 1.42162-.71081 2.84322-1.09854 4.26488-.45232 1.35699-.96925 2.77862-1.55085 4.13565-.58158 1.29237-1.22778 2.64939-1.93859 3.9418-.71082 1.22778-1.48625 2.52016-2.32629 3.6833-.84006 1.2278-1.74474 2.39093-2.64943 3.48944-.96931 1.16318-2.00319 2.1971-3.03712 3.23101-.64618.58158-1.22775 1.09853-1.87398 1.61546-.51694.45236-.96927.84009-1.48625 1.29239-1.16314.90468-2.32629 1.74474-3.61867 2.52019-1.22778.77542-2.52014 1.55086-3.81254 2.19707-1.35702.64619-2.71404 1.22776-4.07104 1.80935-1.35702.51693-2.77864.96928-4.20031 1.35701-1.42161.3877-2.90785.71081-4.32949.96928-1.48623.25858-2.97249.38771-4.39412.51697-1.03392.0647-2.06782.12915-3.10175.12915-1.48626 0-2.97248-.12915-4.39412-.25858-1.48624-.12914-2.97251-.32314-4.39413-.64623-1.48625-.25858-2.9079-.64621-4.32953-1.09851h-.0647c1.42163-.12914 2.84327-.2586 4.26492-.51697 1.48622-.25858 2.90785-.58156 4.3295-.96931 1.42162-.38771 2.84325-.84006 4.20026-1.357 1.42162-.51696 2.77865-1.16313 4.07105-1.80936 1.357-.64621 2.58478-1.357 3.87716-2.13244 1.22776-.84005 2.45554-1.68009 3.61869-2.58479 1.16316-.90466 2.26167-1.87394 3.29562-2.90786 1.09853-.96932 2.06781-2.06784 3.03711-3.16638.96927-1.16312 1.87396-2.32628 2.71402-3.48944.12915-.19387.25859-.45232.38774-.64619.64617-1.03392 1.29235-2.06783 1.87392-3.10176.71083-1.29239 1.35704-2.58479 1.9386-3.94177.58159-1.35702 1.09855-2.71405 1.55089-4.13566.45232-1.35703.77542-2.77864 1.09853-4.200258.25859-1.486258.51694-2.90791.64619-4.329528.12914-1.486244.25857-2.972503.25857-4.394119 0-1.033928-.0648-2.06783-.12912-3.101733-.12915-1.486246-.32311-2.9079-.51696-4.329519-.25859-1.486257-.58157-2.907873-.96931-4.329529-.45231-1.356991-.90467-2.778634-1.42161-4.135623-.51699-1.357028-1.16315-2.714042-1.80938-4.006443-.71081-1.292388-1.42161-2.584776-2.19704-3.812536-.84005-1.22776-1.68013-2.390917-2.5848-3.554087-.96927-1.098531-1.93857-2.19706-2.97251-3.29559-.51694-.516947-1.09853-1.098532-1.6801-1.615476-2.90787-2.2617-5.945-4.394159-8.9821-6.332732-.45233-.258574-.84005-.452342-1.2924-.646212-2.13246-1.356992-4.13566-2.067831-6.13885-2.714007z" fill="#e0234e" fill-rule="evenodd" transform="translate(0 -41.412487)"></path></svg><!--/$--></span>NestJS</span></a><a aria-label="fastify" href="/id/doc/environment/fastify" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" preserveAspectRatio="xMidYMid" viewBox="0 0 256 167.509" role="img" aria-label="Fastify logo"><path fill="currentColor" d="M247.942 23.314 256 2.444l-.35-1.293-79.717 21.003C184.433 9.86 181.513 0 181.513 0s-25.457 16.257-44.709 15.832c-19.251-.426-25.457-5.564-54.977 3.853-29.52 9.41-37.86 38.295-46.419 44.5S0 90.603 0 90.603l.058.359 24.207-7.707S17.625 89.51 3.52 108.52l-.659-.609.025.134s11.336 17.324 22.463 14.121c1.118-.325 2.377-.859 3.753-1.56 4.48 2.495 10.327 4.947 16.783 5.622 0 0-4.37-5.08-8.016-10.86.984-.634 1.994-1.293 3.02-1.96l-.476.334 9.217 3.386-1.017-8.666c.033-.017.058-.042.091-.059l9.059 3.328-1.126-7.882a76.868 76.868 0 0 1 3.436-1.693l9.443-35.717 39.045-26.634-3.103 7.808c-7.916 19.468-22.78 24.064-22.78 24.064l-6.206 2.352c-4.612 5.455-6.556 6.798-8.14 25.107 3.72-.934 7.273-1.16 10.492-.292 16.683 4.496 22.463 24.599 17.967 30.162-1.126 1.393-3.803 3.77-7.181 6.565h-6.773l-.092 5.488c-.234.184-.467.359-.693.542h-6.89l-.083 5.355c-.609.468-1.218.918-1.801 1.36-6.473.133-14.673-5.514-14.673-5.514 0 5.139 4.28 13.046 4.28 13.046s.283-.133.758-.367c-.417.309-.65.476-.65.476s17.324 11.552 28.235 7.273c9.7-3.804 34.816-23.606 56.495-32.981l65.603-17.283 8.65-22.413-49.997 13.17V83.597l58.664-15.457 8.65-22.413-67.297 17.734V43.324z"></path></svg><!--/$--></span>Fastify</span></a><a aria-label="hono" href="/id/doc/environment/hono" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" preserveAspectRatio="xMidYMid" viewBox="0 0 256 330" role="img" aria-label="Hono logo"><path d="M134.129.029c.876-.113 1.65.108 2.319.662a1256.253 1256.253 0 0 1 69.573 93.427c16.094 24.231 29.788 49.851 41.082 76.862 18.037 48.108 8.65 89.963-28.16 125.564-32.209 27.22-69.314 37.822-111.318 31.805-50.208-10.237-84.332-39.28-102.373-87.133C.553 225.638-.993 209.736.614 193.51c2.676-27.93 9.302-54.877 19.878-80.838 4.407-10.592 10.15-20.31 17.228-29.154a381.88 381.88 0 0 1 16.565 21.203c2.44 2.55 4.98 4.98 7.62 7.289C82.06 72.01 106.135 34.685 134.13.029Z" fill="#FF5B11" opacity=".993"></path><path d="M129.49 53.7c24.314 28.2 46.29 58.238 65.93 90.114a187.318 187.318 0 0 1 15.24 33.13c8.338 32.804-.607 59.86-26.836 81.169-25.367 17.85-53.196 23.15-83.488 15.902-32.666-10.136-51.55-32.113-56.653-65.929-1.238-10.662-.133-21.043 3.314-31.142a225.41 225.41 0 0 1 17.89-35.78l19.878-29.155a5509.508 5509.508 0 0 0 44.726-58.31Z" fill="#FF9758"></path></svg><!--/$--></span>Hono</span></a><a aria-label="adonis" href="/id/doc/environment/adonisjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg style="z-index:0" class="shrink-0 size-3.5" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" role="img" aria-label="Adonis logo"><path d="M106.812 307.933l78.418-178.207c13.23-30.039 38.692-46.332 70.77-46.332 32.078 0 57.535 16.29 70.773 46.328l78.414 178.211c3.562 8.656 6.617 19.86 6.617 29.531 0 44.297-31.059 75.356-75.36 75.356-15.085 0-27.07-3.848-39.198-7.746-12.43-3.993-25.012-8.036-41.246-8.036-16.047 0-28.938 4.079-41.614 8.09-12.257 3.88-24.316 7.692-38.832 7.692-44.296 0-75.359-31.055-75.359-75.352 0-9.676 3.059-20.879 6.617-29.535z" fill="#fff"></path><path d="M6 256c0 201.628 48.371 250 250 250 201.628 0 250-48.372 250-250C506 54.37 457.627 6 256 6 54.37 6 6 54.371 6 256zm100.812 51.933l78.418-178.207c13.23-30.039 38.692-46.332 70.77-46.332 32.078 0 57.535 16.29 70.773 46.328l78.414 178.211c3.562 8.656 6.617 19.86 6.617 29.531 0 44.297-31.059 75.356-75.36 75.356-15.085 0-27.07-3.848-39.198-7.746-12.43-3.993-25.012-8.036-41.246-8.036-16.047 0-28.938 4.079-41.614 8.09-12.257 3.88-24.316 7.692-38.832 7.692-44.296 0-75.359-31.055-75.359-75.352 0-9.676 3.059-20.879 6.621-29.535h-.004zM256 160.785L178.605 335.94c22.914-10.695 49.39-15.785 77.395-15.785 26.988 0 54.48 5.09 76.374 15.781L256 160.789v-.004z" fill="#5a45ff"></path></svg><!--/$--></span>Adonis</span></a></div></div></div></div></div></li><li><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full py-0! pl-0!" aria-expanded="false" aria-pressed="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1u8qb9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap"><span class="truncate font-semibold text-neutral transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text" label="other"><span class="flex items-center gap-1.5 opacity-60">Lainnya</span></span></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out" id="_R_1u8qb9bcq_-accordion-content" aria-labelledby="_R_1u8qb9bcq_-accordion-content"><div style="min-height:0px" class=""><div class="pl-3 text-sm"><div class="flex flex-col items-start gap-2 p-1 text-neutral transition-colors hover:text-text"><a aria-label="lynx-and-react" href="/id/doc/environment/lynx-and-react" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-xs transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="27" height="28" viewBox="0 0 27 28" fill="currentColor" role="img" aria-label="Lynx logo" xmlns="http://www.w3.org/2000/svg" style="z-index:0" class="shrink-0 size-3.5"><g style="opacity:0"></g><g><circle style="fill:#ffffff;stroke-width:0.2;stroke:#1a1a1a;stroke-dasharray:none" cx="13.533393" cy="-14.052804" r="13.173257" transform="scale(1,-1)"></circle><g transform="matrix(0.81399984,0,0,0.81399984,2.5290274,2.4955799)" style="fill:#000000"><path fill-rule="evenodd" clip-rule="evenodd" d="M 7.56542,6.19594 3.90642,8.7164 C 3.50877,8.99031 3.23346,9.40191 3.13675,9.86708 L 2.77902,11.5878 C 2.76005,11.679 2.71799,11.7642 2.65665,11.8355 l -1.660344,2.1766 c -0.223545,0.2601 -0.218154,0.9511 0.394134,1.3936 0.23479,0.2046 0.54871,0.6634 0.90578,1.1853 0.75602,1.1049 1.70547,2.4926 2.5069,2.3484 1.13408,-0.3984 2.52232,-0.5259 3.58816,0 2.07192,1.7888 1.56321,3.4381 0.83386,5.8027 -0.29349,0.9515 -0.62271,2.0188 -0.83386,3.2576 0.99515,-3.622 3.23292,-7.8286 7.26792,-9.256 -0.727,-0.5939 -2.2106,-1.1456 -3.5235,-1.2784 0,0 4.0334,-3.4532 9.0082,-5.0399 C 17.671,4.16205 11.9386,0.213095 11.9386,0.213095 11.6465,-0.148197 11.0566,-0.0296711 10.9349,0.414774 10.8371,1.72112 10.675,2.60942 10.4074,3.44676 L 8.39128,1.12029 C 8.18068,0.866399 7.75965,1.013 7.76176,1.33949 8.10312,3.23719 8.05521,4.30239 7.56542,6.19594 Z M 8.9846,6.02248 8.99663,6.02171 C 9.02298,6.02002 9.0489,6.01659 9.07424,6.01153 Z M 11.7123,1.7617 C 13.094,4.1491 13.7199,5.5054 13.9322,8.03659 12.4625,7.2017 11.8221,6.98923 10.7413,6.99451 11.3718,5.0773 11.5644,3.92284 11.7123,1.7617 Z" fill="white" style="fill:#000000"></path><path d="m 20.5926,19.4929 c -5.6277,1.2877 -8.8245,3.2269 -11.26936,8.5072 4.38876,-7.3634 17.67436,-6.0465 17.67436,-6.0465 -0.2482,-1.2028 -2.8897,-3.4965 -4.627,-4.9033 0,0 1.4016,-1.7231 4.5,-2.5953 0,0 -5.9571,0.3452 -9.4251,2.2177 1.1235,0.5929 2.5626,1.5936 3.1471,2.8202 z" fill="white" style="fill:#000000"></path></g></g></svg><!--/$--></span>Lynx dan React</span></a></div></div></div></div></div></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="plugins"><span class="flex items-center gap-1.5 opacity-60">Plugins</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="syncJSON" href="/id/doc/plugin/sync-json" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">JSON</span></a></li><li><a aria-label="syncPO" href="/id/doc/plugin/sync-po" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">gettext (.po)</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="dev-tools"><span class="flex items-center gap-1.5 opacity-60">Alat pengembang</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="vs-code-extension" href="/id/doc/vs-code-extension" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Ekstensi VS Code</span></a></li><li><a aria-label="mcp-server" href="/id/doc/mcp-server" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Server MCP</span></a></li><li><a aria-label="agent-skills" href="/id/doc/agent_skills" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Keahlian agen</span></a></li><li><a aria-label="lsp" href="/id/doc/lsp" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">Language Server Protocol</span></a></li></ul></div><div><span class="flex w-full truncate text-nowrap p-2 text-left font-semibold text-neutral transition-color" label="releases"><span class="flex items-center gap-1.5 opacity-60">Rilis</span></span><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="v9" href="/id/doc/releases/v9" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v9</span></a></li><li><a aria-label="v8" href="/id/doc/rilis/v8" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v8</span></a></li><li><a aria-label="v7" href="/id/doc/releases/v7" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v7</span></a></li><li><a aria-label="v6" href="/id/doc/releases/v6" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60">v6</span></a></li></ul></div><div><a aria-label="benchmark" href="/id/doc/benchmark" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Benchmark</span></a><ul class="mt-4 flex flex-col gap-4 border-neutral border-l-[0.5px] p-1 text-base"><li><a aria-label="nextjs" href="/id/doc/benchmark/nextjs" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg width="800px" height="800px" viewBox="0 0 256 256" version="1.1" preserveAspectRatio="xMidYMid" fill="currentColor" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Nextjs logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m 119.90598,4.4814875 c -0.53154,0.048313 -2.22282,0.2174192 -3.745,0.3382075 C 81.054703,7.9843533 48.17125,26.923985 27.344258,56.034007 15.746859,72.219661 8.329357,90.57951 5.5266527,110.02645 c -0.9906106,6.78831 -1.1114168,8.7934 -1.1114168,17.99748 0,9.20409 0.1208062,11.20918 1.1114168,17.99749 6.7168263,46.40692 39.7452473,85.39745 84.5401943,99.84374 8.021533,2.58488 16.477973,4.34839 26.094133,5.41133 3.745,0.41069 19.93304,0.41069 23.67803,0 16.59877,-1.83598 30.66062,-5.94279 44.52917,-13.021 2.12619,-1.08709 2.53693,-1.37699 2.247,-1.61856 -0.19329,-0.14494 -9.25375,-12.29627 -20.12631,-26.98414 l -19.7639,-26.69426 -24.76528,-36.64721 c -13.62694,-20.14753 -24.83776,-36.62307 -24.934405,-36.62307 -0.09665,-0.0242 -0.19329,16.25813 -0.241612,36.13991 -0.07248,34.81123 -0.09665,36.21238 -0.531547,37.03375 -0.628193,1.18372 -1.111418,1.66687 -2.12619,2.19834 -0.77316,0.38652 -1.449674,0.459 -5.098022,0.459 h -4.179896 l -1.111416,-0.70058 c -0.724838,-0.45899 -1.256386,-1.06293 -1.618805,-1.7635 l -0.507385,-1.08711 0.04832,-48.43617 0.07249,-48.460335 0.748999,-0.94215 c 0.386579,-0.507311 1.208061,-1.159569 1.787931,-1.47362 0.990612,-0.483153 1.377191,-0.531468 5.557087,-0.531468 4.928894,0 5.750376,0.193262 7.030921,1.594408 0.36242,0.386523 13.7719,20.582355 29.81498,44.909155 16.04305,24.3268 37.98146,57.54363 48.75739,73.85007 l 19.5706,29.64148 0.99061,-0.65225 c 8.77054,-5.70121 18.04845,-13.81819 25.39347,-22.27339 15.63232,-17.94917 25.70756,-39.83604 29.09014,-63.17237 0.99062,-6.78831 1.11141,-8.7934 1.11141,-17.99749 0,-9.20408 -0.12079,-11.20917 -1.11141,-17.99748 C 243.75652,63.619523 210.72809,24.629005 165.93316,10.182703 158.03243,7.6219874 149.62432,5.8584758 140.20143,4.7955375 137.88194,4.5539609 121.91136,4.2882259 119.90598,4.4814875 Z m 50.59365,74.7439055 c 1.15974,0.579785 2.10202,1.691038 2.44028,2.850608 0.1933,0.6281 0.24162,14.059778 0.1933,44.329369 l -0.0725,43.43554 -7.65911,-11.74064 -7.68328,-11.74064 v -31.57411 c 0,-20.413252 0.0966,-31.888157 0.24161,-32.443785 0.38658,-1.352829 1.23223,-2.415769 2.39196,-3.043868 0.99061,-0.507311 1.35304,-0.555627 5.14636,-0.555627 3.57585,0 4.20405,0.04831 5.00138,0.483153 z" fill="currentColor"></path></svg><!--/$--></span>Next.js</span></a></li><li><a aria-label="tanstack" href="/id/doc/benchmark/tanstack" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg height="660" viewBox="0 0 663 660" width="663" xmlns="http://www.w3.org/2000/svg" fill="currentColor" role="img" aria-label="Tanstack logo" style="z-index:0" class="shrink-0 size-3.5"><path d="m305.114318.62443771c8.717817-1.14462121 17.926803-.36545135 26.712694-.36545135 32.548987 0 64.505987 5.05339923 95.64868 14.63098274 39.74418 12.2236582 76.762804 31.7666864 109.435876 57.477568 40.046637 31.5132839 73.228974 72.8472109 94.520714 119.2362609 39.836383 86.790386 39.544267 191.973146-1.268422 278.398081-26.388695 55.880442-68.724007 102.650458-119.964986 136.75724-41.808813 27.828603-90.706831 44.862601-140.45707 50.89341-63.325458 7.677926-131.784923-3.541603-188.712259-32.729444-106.868873-54.795293-179.52309291-165.076271-180.9604082-285.932068-.27660564-23.300971.08616998-46.74071 4.69884909-69.814998 7.51316071-37.57857 20.61272131-73.903917 40.28618971-106.877282 21.2814003-35.670293 48.7704861-67.1473767 81.6882804-92.5255597 38.602429-29.7610135 83.467691-51.1674988 130.978372-62.05777669 11.473831-2.62966514 22.9946-4.0869914 34.57273-5.4964306l3.658171-.44480576c3.050084-.37153079 6.104217-.74794222 9.162589-1.14972654zm-110.555861 549.44131429c-14.716752 1.577863-30.238964 4.25635-42.869928 12.522173 2.84343.683658 6.102369.004954 9.068638 0 7.124652-.011559 14.317732-.279903 21.434964.032202 17.817402.781913 36.381729 3.63214 53.58741 8.350042 22.029372 6.040631 41.432961 17.928687 62.656049 25.945156 22.389644 8.456554 44.67706 11.084675 68.427 11.084675 11.96813 0 23.845573-.035504 35.450133-3.302696-6.056202-3.225083-14.72582-2.619864-21.434964-3.963236-14.556814-2.915455-28.868774-6.474936-42.869928-11.470264-10.304996-3.676672-20.230803-8.214291-30.11097-12.848661l-6.348531-2.985046c-9.1705-4.309263-18.363277-8.560752-27.845391-12.142608-24.932161-9.418465-52.560181-14.071964-79.144482-11.221737zm22.259385-62.614168c-29.163917 0-58.660076 5.137344-84.915434 18.369597-6.361238 3.206092-12.407546 7.02566-18.137277 11.258891-1.746125 1.290529-4.841829 2.948483-5.487351 5.191839-.654591 2.275558 1.685942 4.182039 3.014086 5.637703 6.562396-3.497556 12.797498-7.199878 19.78612-9.855246 45.19892-17.169893 99.992458-13.570779 145.098218 2.172348 22.494346 7.851335 43.219483 19.592421 65.129314 28.800338 24.503461 10.297807 49.53043 16.975034 75.846795 20.399104 31.04195 4.037546 66.433549.7654 94.808495-13.242161 9.970556-4.921843 23.814245-12.422267 28.030337-23.320339-5.207047.454947-9.892236 2.685918-14.83959 4.224149-7.866632 2.445646-15.827248 4.51974-23.908229 6.138887-27.388113 5.486604-56.512458 6.619429-84.091013 1.639788-25.991939-4.693152-50.142596-14.119246-74.179513-24.03502l-3.068058-1.268177c-2.045137-.846788-4.089983-1.695816-6.135603-2.544467l-3.069142-1.272366c-12.279956-5.085721-24.606928-10.110797-37.210937-14.51024-24.485325-8.546552-50.726667-13.784628-76.671218-13.784628zm51.114145-447.9909432c-34.959602 7.7225298-66.276908 22.7605319-96.457338 41.7180089-17.521434 11.0054099-34.281927 22.2799893-49.465301 36.4444283-22.5792616 21.065423-39.8360564 46.668751-54.8866988 73.411509-15.507372 27.55357-25.4498976 59.665686-30.2554517 90.824149-4.7140432 30.568106-5.4906485 62.70747-.0906864 93.301172 6.7503648 38.248526 19.5989769 74.140579 39.8896436 107.337631 6.8187918-3.184625 11.659796-10.445603 17.3128555-15.336896 11.4149428-9.875888 23.3995608-19.029311 36.2745548-26.928535 4.765981-2.923712 9.662222-5.194315 14.83959-7.275014 1.953055-.785216 5.14604-1.502727 6.06527-3.647828 1.460876-3.406732-1.240754-9.335897-1.704904-12.865654-1.324845-10.095517-2.124534-20.362774-1.874735-30.549941.725492-29.668947 6.269727-59.751557 16.825623-87.521453 7.954845-20.924233 20.10682-39.922168 34.502872-56.971512 4.884699-5.785498 10.077731-11.170545 15.437296-16.512656 3.167428-3.157378 7.098271-5.858983 9.068639-9.908915-10.336599.006606-20.674847 2.987289-30.503603 6.013385-21.174447 6.519522-41.801477 16.19312-59.358362 29.841512-8.008432 6.226409-13.873368 14.387371-21.44733 20.939921-2.32322 2.010516-6.484901 4.704691-9.695199 3.187928-4.8500728-2.29042-4.1014979-11.835213-4.6571581-16.222019-2.1369011-16.873476 4.2548401-38.216325 12.3778671-52.843142 13.039878-23.479694 37.150915-43.528712 65.467327-42.82854 12.228647.302197 22.934587 4.551115 34.625711 7.324555-2.964621-4.211764-6.939158-7.28162-10.717482-10.733763-9.257431-8.459031-19.382979-16.184864-30.503603-22.028985-4.474136-2.350694-9.291232-3.77911-14.015169-5.506421-2.375159-.867783-5.36616-2.062533-6.259834-4.702213-1.654614-4.888817 7.148561-9.416813 10.381943-11.478522 12.499882-7.969406 27.826705-14.525258 42.869928-14.894334 23.509209-.577147 46.479246 12.467678 56.162903 34.665926 3.404469 7.803171 4.411273 16.054969 5.079109 24.382907l.121749 1.56229.174325 2.345587c.01913.260708.038244.521433.057403.782164l.11601 1.56437.120128 1.563971c7.38352-6.019164 12.576553-14.876995 19.78612-21.323859 16.861073-15.07846 39.936636-21.7722 61.831627-14.984333 19.786945 6.133107 36.984382 19.788105 47.105807 37.959541 2.648042 4.754231 10.035685 16.373942 4.698379 21.109183-4.177345 3.707277-9.475079.818243-13.880788-.719162-3.33605-1.16376-6.782939-1.90214-10.241828-2.585698l-1.887262-.369639c-.629089-.122886-1.257979-.246187-1.886079-.372129-11.980496-2.401886-25.91652-2.152533-37.923398-.041284-7.762754 1.364839-15.349083 4.127545-23.083807 5.271929v1.651348c21.149714.175043 41.608563 12.240618 52.043268 30.549941 4.323267 7.585468 6.482428 16.267431 8.138691 24.770223 2.047864 10.50918.608423 21.958802-2.263037 32.201289-.962925 3.433979-2.710699 9.255807-6.817143 10.046802-2.902789.558982-5.36781-2.330878-7.024898-4.279468-4.343878-5.10762-8.475879-9.96341-13.573278-14.374161-12.895604-11.157333-26.530715-21.449361-40.396663-31.373138-7.362086-5.269452-15.425755-12.12007-23.908229-15.340199 2.385052 5.745041 4.721463 11.086326 5.532694 17.339156 2.385876 18.392716-5.314223 35.704625-16.87179 49.540445-3.526876 4.222498-7.29943 8.475545-11.744712 11.755948-1.843407 1.360711-4.156734 3.137561-6.595373 2.752797-7.645687-1.207961-8.555849-12.73272-9.728176-18.637115-3.970415-19.998652-2.375984-39.861068 3.132802-59.448534-4.901187 2.485279-8.443727 7.923994-11.521293 12.385111-6.770975 9.816439-12.645804 20.199291-16.858599 31.375615-16.777806 44.519521-16.616219 96.664142 5.118834 139.523233 2.427098 4.786433 6.110614 4.144058 10.894733 4.144058.720854 0 1.44257-.004515 2.164851-.010924l2.168232-.022283c4.338648-.045438 8.686803-.064635 12.979772.508795 2.227588.297243 5.320818.032202 7.084256 1.673642 2.111344 1.966755.986008 5.338808.4996 7.758859-1.358647 6.765574-1.812904 12.914369-1.812904 19.816178 9.02412-1.398692 11.525415-15.866153 14.724172-23.118874 3.624982-8.216283 7.313444-16.440823 10.667192-24.770223 1.648843-4.093692 3.854171-8.671229 3.275427-13.210785-.649644-5.10184-4.335633-10.510831-6.904531-14.862134-4.86244-8.234447-10.389363-16.70834-13.969002-25.595896-2.861567-7.104926-.197036-15.983399 7.871579-18.521521 4.450228-1.400344 9.198073 1.345848 12.094266 4.562675 6.07269 6.74328 9.992815 16.777697 14.401823 24.692609l34.394873 61.925556c2.920926 5.243856 5.848447 10.481933 8.836976 15.687808 1.165732 2.031158 2.352075 5.167068 4.740424 6.0332 2.127008.77118 5.033095-.325315 7.148561-.748886 5.492297-1.099798 10.97635-2.287117 16.488434-3.28288 6.605266-1.193099 16.673928-.969342 21.434964-6.129805-6.963066-2.205375-15.011895-2.074919-22.259386-1.577863-4.352947.298894-9.178287 1.856116-13.178381-.686135-5.953149-3.783239-9.910373-12.522173-13.552668-18.377854-8.980425-14.439388-17.441465-29.095929-26.041008-43.760726l-1.376261-2.335014-2.765943-4.665258c-1.380597-2.334387-2.750786-4.67476-4.079753-7.036188-1.02723-1.826391-2.549937-4.233231-1.078344-6.24705 1.545791-2.114476 4.91472-2.239146 7.956473-2.243117l.603351.000261c1.195428.001526 2.315572.002427 3.222811-.11692 12.27399-1.615019 24.718635-2.952611 37.098976-2.952611-.963749-3.352237-3.719791-7.141255-2.838484-10.73046 1.972017-8.030506 13.526287-10.543033 18.899867-4.780653 3.60767 3.868283 5.704174 9.192229 8.051303 13.859765 3.097352 6.162006 6.624228 12.118418 9.940876 18.16483 5.805578 10.585967 12.146205 20.881297 18.116667 31.375615.49237.865561.999687 1.726685 1.512269 2.587098l.771613 1.290552c2.577138 4.303168 5.164895 8.635123 6.553094 13.461506-20.735854-.9487-36.30176-25.018751-45.343193-41.283704-.721369 2.604176.450959 4.928448 1.388326 7.431066 1.948109 5.197619 4.276275 10.147535 7.20627 14.862134 4.184765 6.732546 8.982075 13.665732 15.313633 18.553722 11.236043 8.673707 26.05255 8.721596 39.572241 7.794364 8.669619-.595311 19.50252-4.542034 28.030338-1.864372 8.513803 2.673532 11.940924 12.063098 6.884745 19.276187-3.787393 5.403211-8.842747 7.443452-15.128962 8.257566 4.445282 9.53571 10.268996 18.385285 14.490036 28.072919 1.758491 4.035895 3.59118 10.22102 7.8048 12.350433 2.805507 1.416857 6.824562.09743 9.85761.034678-3.043765-8.053625-8.742992-14.887729-11.541904-23.118874 8.533589.390544 16.786875 4.843404 24.732651 7.685374 15.630376 5.590144 31.063836 11.701854 46.475333 17.86913l7.112077 2.848685c6.338978 2.538947 12.71588 5.052299 18.961699 7.812528 2.285297 1.009799 5.449427 3.370401 7.975455 1.917215 2.061054-1.186494 3.394144-4.015253 4.665403-5.931643 3.55573-5.361927 6.775921-10.928622 9.965609-16.513481 12.774414-22.36586 22.143967-46.872692 28.402976-71.833646 20.645168-82.323009 2.934117-173.156241-46.677107-241.922507-19.061454-26.420745-43.033164-49.262193-69.46165-68.1783861-66.13923-47.336721-152.911262-66.294198-232.486917-48.7172481zm135.205158 410.5292842c-17.532977 4.570931-35.601827 8.714164-53.58741 11.040088 2.365265 8.052799 8.145286 15.885969 12.376218 23.118874 1.635653 2.796558 3.3859 6.541816 6.618457 7.755557 3.651364 1.370619 8.063669-.853747 11.508927-1.975838-1.595256-4.364513-4.279573-8.292245-6.476657-12.385112-.905215-1.687677-2.305907-3.685809-1.559805-5.68972 1.410585-3.786541 7.266452-3.563609 10.509727-4.221671 8.54678-1.733916 17.004522-3.898008 25.557073-5.611281 3.150939-.631641 7.538512-2.342438 10.705115-1.285575 2.371037.791232 3.800147 2.744743 5.152304 4.781948l.606196.918752c.80912 1.222827 1.637246 2.41754 2.671212 3.351165 3.457625 3.121874 8.628398 3.60159 13.017619 4.453686-2.678546-6.027421-7.130424-11.301001-9.984571-17.339156-1.659561-3.511592-3.023155-8.677834-6.656381-10.707341-5.005064-2.795733-15.341663 2.461334-20.458024 3.795624zm-110.472507-40.151706c-.825246 10.467897-4.036369 18.984725-9.068639 28.072919 5.76683.729896 11.649079.989984 17.312856 2.39363 4.244947 1.051908 8.156828 3.058296 12.366325 4.211763-2.250671-6.157877-6.426367-11.651913-9.661398-17.339156-3.266358-5.740912-6.189758-12.717032-10.949144-17.339156z" transform="translate(.9778)"></path></svg><!--/$--></span>TanStack</span></a></li><li><a aria-label="vue" href="/id/doc/benchmark/vue" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid" viewBox="0 0 261.76 226.69" role="img" aria-label="Vuejs logo" style="z-index:0" class="shrink-0 size-3.5"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"></path></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"></path></g></g></svg><!--/$--></span>Vue</span></a></li><li><a aria-label="solid" href="/id/doc/benchmark/solid" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Solid logo" style="z-index:0" class="shrink-0 size-3.5"><defs><linearGradient id="a" x1="27.5" x2="152" y1="3" y2="63.5" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset=".1" stop-color="#76b3e1"></stop><stop offset=".3" stop-color="#dcf2fd"></stop><stop offset="1" stop-color="#76b3e1"></stop></linearGradient><linearGradient id="b" x1="95.8" x2="74" y1="32.6" y2="105.2" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76b3e1"></stop><stop offset=".5" stop-color="#4377bb"></stop><stop offset="1" stop-color="#1f3b77"></stop></linearGradient><linearGradient id="c" x1="18.4" x2="144.3" y1="64.2" y2="149.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#315aa9"></stop><stop offset=".5" stop-color="#518ac8"></stop><stop offset="1" stop-color="#315aa9"></stop></linearGradient><linearGradient id="d" x1="75.2" x2="24.4" y1="74.5" y2="260.8" gradientTransform="translate(-3.22 1.507) scale(.80503)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#4377bb"></stop><stop offset=".5" stop-color="#1a336b"></stop><stop offset="1" stop-color="#1a336b"></stop></linearGradient></defs><path fill="#76b3e1" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z"></path><path fill="url(#a)" d="M128 29.683S85.333-1.713 52.327 5.532l-2.415.805c-4.83 1.61-8.855 4.025-11.27 7.245l-1.61 2.415-12.076 20.931 20.93 4.025c8.856 5.636 20.127 8.05 30.592 5.636l37.031 7.245z" opacity=".3"></path><path fill="#518ac8" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z"></path><path fill="url(#b)" d="m38.642 29.683-3.22.805C21.735 34.513 17.71 47.394 24.955 58.664c8.05 10.465 24.956 16.1 38.641 12.076l49.912-16.906S70.843 22.438 38.642 29.683z" opacity=".3"></path><path fill="url(#c)" d="M104.654 65.91a36.226 36.226 0 0 0-38.641-12.076L16.1 69.934 0 98.111l90.164 15.295 16.1-28.981c3.22-5.635 2.415-12.075-1.61-18.516z"></path><path fill="url(#d)" d="M88.553 94.085A36.226 36.226 0 0 0 49.912 82.01L0 98.11s42.667 32.202 75.673 24.152l2.415-.806c13.686-4.025 18.516-16.905 10.465-27.37z"></path></svg><!--/$--></span>Solid</span></a></li><li><a aria-label="svelte" href="/id/doc/benchmark/svelte" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text truncate font-semibold transition-color block w-full flex-row items-center text-nowrap p-2 text-left text-sm transition-colors hover:text-text"><span class="flex items-center gap-1.5 opacity-60"><span class="mr-1 flex items-center"><!--$--><svg xmlns="http://www.w3.org/2000/svg" viewBox="10 10 130 130" role="img" aria-label="Svelte logo" style="z-index:0" class="shrink-0 size-3.5"><path style="fill:none" d="M0,.2H150v150H0Z" transform="translate(0 -0.2)"></path><path style="fill:#FF3E00" d="M120.85,29.22v-.09C109.38,12.72,86.74,7.86,70.36,18.29L41.61,36.61a32.94,32.94,0,0,0-14.9,22A34.73,34.73,0,0,0,30.12,81,33.12,33.12,0,0,0,25.19,93.3a35.19,35.19,0,0,0,6,26.6c11.47,16.4,34.12,21.27,50.49,10.84l28.75-18.25a33.08,33.08,0,0,0,14.91-22,34.79,34.79,0,0,0-3.43-22.31,33.14,33.14,0,0,0,4.94-12.32A35.16,35.16,0,0,0,120.85,29.22Zm-8.23,23.46a22.87,22.87,0,0,1-.68,2.68L111.39,57l-1.47-1.1a37.31,37.31,0,0,0-11.24-5.63L97.57,50l.1-1.1a6.47,6.47,0,0,0-1.16-4.28,6.88,6.88,0,0,0-7.35-2.65,6,6,0,0,0-1.76.77L58.63,61a6,6,0,0,0-2.7,4A6.44,6.44,0,0,0,57,69.82a6.89,6.89,0,0,0,7.33,2.74,6.44,6.44,0,0,0,1.76-.78l11-7A20.75,20.75,0,0,1,83,62.22a22.83,22.83,0,0,1,24.51,9.09,21.09,21.09,0,0,1,3.61,16,19.8,19.8,0,0,1-9,13.29L73.4,118.92a21.53,21.53,0,0,1-5.85,2.57A22.87,22.87,0,0,1,43,112.39a21.14,21.14,0,0,1-3.6-16,18.39,18.39,0,0,1,.68-2.65l.54-1.66,1.48,1.1a37.25,37.25,0,0,0,11.21,5.58l1.1.32-.09,1.11a6.43,6.43,0,0,0,1.2,4.24,6.86,6.86,0,0,0,7.38,2.73,6.06,6.06,0,0,0,1.77-.77L93.41,88.08a6,6,0,0,0,2.7-4A6.36,6.36,0,0,0,95,79.25a6.9,6.9,0,0,0-7.39-2.74,6.31,6.31,0,0,0-1.76.78l-11,7A21.05,21.05,0,0,1,69,86.84a22.84,22.84,0,0,1-24.48-9.08,21.13,21.13,0,0,1-3.58-16,19.83,19.83,0,0,1,9-13.29L78.7,30.15a21.2,21.2,0,0,1,5.8-2.56A22.85,22.85,0,0,1,109,36.69,21.09,21.09,0,0,1,112.62,52.68Z" transform="translate(0 -0.2)"></path></svg><!--/$--></span>Svelte</span></a></li></ul></div><div><a aria-label="Kunjungi blog" href="/id/blog" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text flex w-full truncate text-nowrap p-2 text-left font-semibold transition-color"><span class="flex items-center gap-1.5 opacity-60">Blog</span></a></div><div><a aria-label="Klik untuk membuka chatbot dokumentasi cerdas bertenaga AI" href="/id/doc/chat" target="_self" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl text-text w-full truncate text-nowrap p-2 text-left font-semibold transition-color flex items-center"><span class="flex items-center gap-1.5 opacity-60"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg>Ajukan pertanyaan</span></a></div></nav></div></div></div></div></div></div></div></aside><div class="mx-1 mb-3 flex min-h-0 min-w-0 flex-1 flex-row rounded-2xl border border-neutral/40 bg-background md:mr-2"><article aria-label="Konten dokumentasi" class="no-scrollbar relative mb-3 h-full max-h-[calc(100vh-4.5rem)] w-auto flex-1 grow overflow-auto px-4 pb-24 max-md:pl-10 md:px-10" id="content"><div class="m-auto max-w-3xl"><nav aria-label="breadcrumb"><ol class="flex flex-row flex-wrap items-center gap-2 mt-12 ml-3 text-xs" itemScope="" itemType="http://schema.org/BreadcrumbList"><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><a href="/id/doc/get-started" aria-label="Go to Documentation" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral" itemProp="item" itemScope="" itemType="https://schema.org/WebPage" itemID="/id/doc/get-started"><span itemProp="name">Documentation</span></a><meta itemProp="position" content="1"/></li><li aria-hidden="true" class="flex items-center"><span class="text-neutral"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></span></li><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><span itemProp="item" class="inline-flex items-center font-medium text-neutral-700 transition-colors duration-200"><span itemProp="name">Lingkungan</span><meta itemProp="position" content="2"/></span></li><li aria-hidden="true" class="flex items-center"><span class="text-neutral"><svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></span></li><li itemProp="itemListElement" itemScope="" itemType="https://schema.org/ListItem" class="flex items-center"><a href="https://intlayer.org/id/doc/environment/vite-and-svelte" aria-label="Go to Vite dan Svelte" target="_self" aria-current="page" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral" itemProp="item" itemScope="" itemType="https://schema.org/WebPage" itemID="https://intlayer.org/id/doc/environment/vite-and-svelte"><span itemProp="name">Vite dan Svelte</span></a><meta itemProp="position" content="3"/></li></ol></nav><header class="z-10 mx-auto mt-5 flex flex-col gap-2 px-4 py-2 text-xs"><span class="flex items-center gap-2">Penulis<!-- -->:<!-- --> <div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-author-social-medias" aria-haspopup="true"><a href="https://github.com/aymericzip" aria-label="Halaman github Aymeric PINEAU" rel="noopener noreferrer nofollow" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl flex items-center gap-2 text-neutral"><div class="rounded-full border-text ring-offset-0 transition-ring duration-200 size-7 border-[1px] p-0.25 scale-70" aria-label="Avatar Aymeric PINEAU" role="img"><div class="relative flex aspect-square size-full flex-row items-center justify-center"><div class="absolute top-0 left-0 flex aspect-square size-full flex-col items-center justify-center rounded-full bg-text text-text-opposite"><img class="size-full rounded-full object-cover" src="https://avatars.githubusercontent.com/u/62554073?v=4&size=124" srcSet="https://avatars.githubusercontent.com/u/62554073?v=4&size=124" alt="Avatar Aymeric PINEAU" width="59" height="59" loading="lazy" draggable="false"/></div></div></div>Aymeric PINEAU</a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 flex w-auto min-w-0 flex-row gap-2 p-2 delay-200 group-hover/popover:delay-100" role="group" aria-labelledby="unrollable-panel-button-author-social-medias" id="unrollable-panel-author-social-medias"><a href="https://www.linkedin.com/in/aymericpineau/" aria-label="Go to https://www.linkedin.com/in/aymericpineau/" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg role="img" aria-label="LinkedIn logo" xmlns="http://www.w3.org/2000/svg" width="72" height="72" viewBox="0 0 72 72" class="h-auto max-h-full max-w-full"><mask id="linkedin-mask"><rect width="72" height="72" fill="white"></rect><path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="black"></path></mask><rect width="72" height="72" rx="8" fill="currentColor" mask="url(#linkedin-mask)"></rect></svg></a><a href="https://x.com/aymericzip" aria-label="Go to https://x.com/aymericzip" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 271" width="300" height="271" fill="currentColor" role="img" aria-label="X logo" class="h-auto max-h-full max-w-full"><path d="m236 0h46l-101 115 118 156h-92.6l-72.5-94.8-83 94.8h-46l107-123-113-148h94.9l65.5 86.6zm-16.1 244h25.5l-165-218h-27.4z"></path></svg></a><a href="https://github.com/aymericzip" aria-label="Go to https://github.com/aymericzip" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl max-h-5 max-w-5 shrink-0 transition-colors hover:text-primary"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="h-auto max-h-full max-w-full"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg></a></div></div></span><div class="flex w-full flex-row justify-between gap-4 py-2"><span class="block">Dibuat<!-- -->:<span class="ml-2 text-neutral">2025-04-18</span></span><span class="block">Terakhir diperbarui<!-- -->:<span class="ml-2 text-neutral">2026-05-31</span></span></div></header><div class="text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/70 p-0 border-text sticky top-10 z-10 mx-auto mt-5 flex max-w-3xl flex-col gap-2 px-4 py-2 max-md:overflow-x-auto"><div class="flex w-full flex-row justify-between gap-4"><div class="flex w-full shrink flex-row items-center justify-start gap-4"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-mcp" aria-haspopup="true"><a aria-label="Lihat template aplikasi" rel="noopener noreferrer" href="https://github.dev/aymericzip/intlayer-vite-svelte-template" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg role="img" aria-label="GitHub logo" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="size-4"><path d="M127.975 10C61.1744 10 7 64.167 7 130.99C7 184.444 41.663 229.787 89.7396 245.786C95.7928 246.9 97.9987 243.164 97.9987 239.955C97.9987 237.088 97.8947 229.475 97.8353 219.382C64.1824 226.69 57.082 203.161 57.082 203.161C51.5784 189.182 43.6461 185.461 43.6461 185.461C32.6612 177.96 44.4779 178.108 44.4779 178.108C56.6215 178.963 63.0089 190.579 63.0089 190.579C73.8007 209.065 91.329 203.725 98.2215 200.628C99.3208 192.814 102.448 187.482 105.901 184.459C79.0369 181.406 50.7911 171.023 50.7911 124.662C50.7911 111.456 55.5074 100.65 63.2466 92.1974C61.9988 89.1374 57.847 76.8304 64.435 60.1785C64.435 60.1785 74.588 56.9254 97.7016 72.582C107.35 69.8934 117.703 68.5565 127.99 68.5045C138.269 68.5565 148.615 69.8934 158.278 72.582C181.377 56.9254 191.515 60.1785 191.515 60.1785C198.118 76.8304 193.966 89.1374 192.726 92.1974C200.48 100.65 205.159 111.456 205.159 124.662C205.159 171.142 176.869 181.369 149.923 184.362C154.26 188.098 158.13 195.481 158.13 206.77C158.13 222.939 157.981 235.989 157.981 239.955C157.981 243.193 160.165 246.959 166.3 245.778C214.339 229.743 248.973 184.429 248.973 130.99C248.973 64.167 194.798 10 127.975 10Z"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-mcp" id="unrollable-panel-mcp"><strong>Lihat template aplikasi di GitHub</strong><p class="text-neutral">Halaman ini memiliki template aplikasi yang tersedia.</p></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-application-showcase" aria-haspopup="true"><a aria-label="Lihat aplikasi showcase" rel="noopener noreferrer" href="https://intlayer-vite-svelte-template.vercel.app" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe size-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-application-showcase" id="unrollable-panel-application-showcase"><strong>Lihat aplikasi showcase</strong><p class="text-neutral">Halaman ini menautkan ke demo langsung template.</p></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-summarize" aria-haspopup="true"><a href="https://chatgpt.com/?q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan ChatGPT" rel="noopener noreferrer nofollow" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><!--$--><svg role="img" aria-label="ChatGPT logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" fill="currentColor" class="size-4"><path d="m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z"></path></svg><!--/$--></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral left-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-50 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-summarize" id="unrollable-panel-summarize"><strong>Referensikan dokumen ini ke asisten AI favorit Anda</strong><a href="https://chatgpt.com/?q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan ChatGPT" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="ChatGPT logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 320" fill="currentColor" class="size-4"><path d="m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z"></path></svg><!--/$-->ChatGPT</a><a href="https://claude.ai/new?q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan Claude" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Anthropic logo" fill="none" viewBox="0 0 24 24" height="24" width="24" class="size-4"><path fill="currentColor" d="m13.788825 3.932 6.43325 16.136075h3.5279L17.316725 3.932H13.788825Z" stroke-width="0.25"></path><path fill="currentColor" d="m6.325375 13.682775 2.20125 -5.67065 2.201275 5.67065H6.325375ZM6.68225 3.932 0.25 20.068075h3.596525l1.3155 -3.3886h6.729425l1.315275 3.3886h3.59655L10.371 3.932H6.68225Z" stroke-width="0.25"></path></svg><!--/$-->Claude</a><a href="https://chat.deepseek.com/?q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan DeepSeek" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="DeepSeek logo" fill="currentColor" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z"></path></svg><!--/$-->DeepSeek</a><a href="https://www.google.com/search?udm=50&aep=11&q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan Google AI mode" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Google AI logo" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="size-4"><path d="M915.2 448l-4.2-17.8H524V594h231.2c-24 114-135.4 174-226.4 174-66.2 0-136-27.8-182.2-72.6-47.4-46-77.6-113.8-77.6-183.6 0-69 31-138 76.2-183.4 45-45.2 113.2-70.8 181-70.8 77.6 0 133.2 41.2 154 60l116.4-115.8c-34.2-30-128-105.6-274.2-105.6-112.8 0-221 43.2-300 122C144.4 295.8 104 408 104 512s38.2 210.8 113.8 289c80.8 83.4 195.2 127 313 127 107.2 0 208.8-42 281.2-118.2 71.2-75 108-178.8 108-287.6 0-45.8-4.6-73-4.8-74.2z"></path></svg><!--/$-->Google AI mode</a><a href="https://gemini.google.com/?q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan Gemini" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Gemini logo" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="size-4"><path d="M16 8.016A8.522 8.522 0 008.016 16h-.032A8.521 8.521 0 000 8.016v-.032A8.521 8.521 0 007.984 0h.032A8.522 8.522 0 0016 7.984v.032z" fill="currentColor"></path></svg><!--/$-->Gemini</a><a href="https://www.perplexity.ai/search/new?q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan Perplexity" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg width="400" role="img" aria-label="Perplexity logo" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg" class="size-4"><path fill-rule="evenodd" clip-rule="evenodd" d="M101.008 42L190.99 124.905L190.99 124.886L190.99 42.1913H208.506L208.506 125.276L298.891 42V136.524L336 136.524V272.866H299.005V357.035L208.506 277.525L208.506 357.948H190.99L190.99 278.836L101.11 358V272.866H64V136.524H101.008V42ZM177.785 153.826H81.5159V255.564H101.088V223.472L177.785 153.826ZM118.625 231.149V319.392L190.99 255.655L190.99 165.421L118.625 231.149ZM209.01 254.812V165.336L281.396 231.068V272.866H281.489V318.491L209.01 254.812ZM299.005 255.564H318.484V153.826L222.932 153.826L299.005 222.751V255.564ZM281.375 136.524V81.7983L221.977 136.524L281.375 136.524ZM177.921 136.524H118.524V81.7983L177.921 136.524Z" fill="currentColor"></path></svg><!--/$-->Perplexity</a><a href="https://chat.mistral.ai/chat/?q=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan Mistral" rel="noopener noreferrer nofollow" target="_blank" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg fill="currentColor" role="img" aria-label="Mistral logo" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path clip-rule="evenodd" d="M3.428 3.4h3.429v3.428h3.429v3.429h-.002 3.431V6.828h3.427V3.4h3.43v13.714H24v3.429H13.714v-3.428h-3.428v-3.429h-3.43v3.428h3.43v3.429H0v-3.429h3.428V3.4zm10.286 13.715h3.428v-3.429h-3.427v3.429z"></path></svg><!--/$-->Mistral</a><a href=" https://x.com/i/grok?text=Ringkas dokumen berikut: https://intlayer.org/id/doc/environment/vite-and-svelte.md" aria-label="Ringkas menggunakan Grok" target="_self" class="duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex flex-row items-center gap-4 p-3"><!--$--><svg role="img" aria-label="Grok logo" fill="currentColor" fill-rule="evenodd" height="1em" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg" class="size-4"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg><!--/$-->Grok</a><p class="text-neutral">Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda</p></div></div><div class="flex size-5 h-8 flex-1 flex-row items-center justify-between gap-5 p-2"><svg role="progressbar" viewBox="0 0 10 10" aria-valuenow="0" aria-valuemin="0" aria-valuemax="1" class="block h-full shrink-0"><circle cx="5" cy="5" r="4" fill="none" stroke-width="1" class="stroke-current/25"></circle><circle cx="5" cy="5" r="4" fill="none" stroke-width="1" stroke="currentColor" stroke-dasharray="25.132741228718345" stroke-dashoffset="25.132741228718345" stroke-linecap="round" transform="rotate(-90 5 5)" class="transition-all"></circle></svg><span class="w-full flex-1 truncate text-neutral text-xs"></span></div></div><div class="flex shrink-0 flex-row items-center justify-end gap-4"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-outdated-translation" aria-haspopup="true"><div class="flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock size-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6l4 2"></path></svg></div><div class="backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-neutral text-sm" role="group" aria-labelledby="unrollable-panel-button-outdated-translation" id="unrollable-panel-outdated-translation"><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 divide-y divide-dashed divide-text/20 border-text gap-0 mt-3 max-h-[60vh] min-w-64" role="list" aria-label="Document history"><h4 class="mb-2 pb-4 font-medium text-sm text-text">Riwayat Versi</h4><ol class="divide-y divide-dashed divide-text/20 overflow-y-auto p-1"><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->8.9.0</span><span class="text-nowrap">4/5/2026</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Tambahkan perintah init"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->7.5.9</span><span class="text-nowrap">30/12/2025</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Memperbarui dokumen"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->5.5.11</span><span class="text-nowrap">19/11/2025</span></div></li><li class="flex flex-row items-center justify-between gap-3 px-2 py-1 pr-1.5"><span class="mt-1 text-text text-xs">"Memulai riwayat"</span><div class="flex flex-col items-end justify-between gap-1 px-2 py-1 text-neutral text-sm"><span class="text-nowrap">v<!-- -->5.5.10</span><span class="text-nowrap">29/6/2025</span></div></li></ol></div></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-language" aria-haspopup="true"><div class="flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages size-4" aria-hidden="true"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg></div><div class="backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-neutral text-sm" role="group" aria-labelledby="unrollable-panel-button-language" id="unrollable-panel-language"><p>Konten halaman ini diterjemahkan menggunakan AI.</p><a aria-label="Klik untuk mengubah bahasa ke bahasa Inggris" href="/doc/environment/vite-and-svelte" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text">Lihat versi terakhir dari konten aslinya dalam bahasa Inggris</a></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-contribute" aria-haspopup="true"><a aria-label="Klik di sini untuk berkontribusi" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/edit/main/docs/docs/id/intlayer_with_vite+svelte.md" target="_blank" class="gap-3 duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text flex p-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-pen size-4" aria-hidden="true"><path d="M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"></path></svg></a><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-1 flex-col gap-2 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-contribute" id="unrollable-panel-contribute"><strong>Sunting dokumen ini</strong><p class="text-neutral">Jika Anda memiliki ide untuk meningkatkan dokumentasi ini, silakan berkontribusi dengan mengajukan pull request di GitHub.</p><a aria-label="Klik di sini untuk berkontribusi" rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+svelte.md" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text">Tautan GitHub ke dokumentasi<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div></div><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center p-2" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-4" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin</strong><p class="text-neutral">Salin Markdown dokumentasi ke clipboard</p></div></div></div></div></div><div class="m-auto flex max-w-2xl flex-col gap-8 p-4 text-text/90 max-md:px-0"><div class="flex flex-col gap-8 py-10"><h1 class="text-3xl mb-8 text-text" id="terjemahkan-situs-web-vite-dan-svelte-anda-menggunakan-intlayer--internasionalisasi-i18n">Terjemahkan situs web Vite dan Svelte Anda menggunakan Intlayer | Internasionalisasi (i18n)</h1><div class="relative w-full rounded-xl border border-card"><div class="flex shrink-0 gap-3 p-3 sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto"><div class="relative z-0 flex size-full flex-row items-center gap-2 border-text text-text" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none" data-active="true" role="tab" aria-selected="true" aria-controls="tabpanel-code" id="tab-code" type="button" tabindex="0">Kode</button><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none text-neutral/70" data-active="false" role="tab" aria-selected="false" aria-controls="tabpanel-demo" id="tab-demo" type="button" tabindex="-1">Demo</button></div></div><div class="relative w-full min-w-0 overflow-x-clip [-webkit-clip-path:inset(0)] [clip-path:inset(0)]" style="touch-action:pan-y"><div role="tablist" aria-orientation="horizontal" class="grid w-full min-w-0 transition-transform duration-300 ease-in-out" style="grid-template-columns:repeat(2, 100%);transform:translateX(-0%)"><div role="tabpanel" aria-labelledby="tab-code" id="tabpanel-code" aria-hidden="false" tabindex="0" data-active="true" class="w-full min-w-0 p-3 opacity-100 transition-opacity duration-300 ease-in-out"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts" title="Demo CodeSandbox - Intlayer" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">ide.intlayer.org<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div></div></div><div role="tabpanel" aria-labelledby="tab-demo" id="tabpanel-demo" aria-hidden="true" tabindex="-1" data-active="false" class="w-full min-w-0 p-3 transition-opacity duration-300 ease-in-out pointer-events-none opacity-0"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://intlayer-vite-svelte-template.vercel.app" title="Demo - intlayer-vite-svelte-template" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://intlayer-vite-svelte-template.vercel.app/" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">intlayer-vite-svelte-template.vercel.app<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div></div></div></div></div></div><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="daftar-isi" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Daftar Isi</h2><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="mengapa-intlayer-dibandingkan-alternatif" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Mengapa Intlayer dibandingkan alternatif?</h2><p>Dibandingkan dengan solusi utama seperti <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-i18n</code> atau <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">i18next</code>, Intlayer adalah solusi yang hadir dengan pengoptimalan terintegrasi seperti:</p> <div class="text-text rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl px-3 py-2 border-[1.3px] border-neutral/20 backdrop-blur-none bg-transparent flex flex-col gap-1 overflow-hidden"> <div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Cakupan Ramping Penuh</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_1259j9bcq_-accordion-content" aria-labelledby="_R_1259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Intlayer dioptimalkan untuk bekerja sempurna dengan Svelte dengan menawarkan <strong class="text-text">pelingkupan konten tingkat komponen</strong>, <strong class="text-text">terjemahan reaktif</strong>, dan semua fitur yang diperlukan untuk meningkatkan internasionalisasi (i18n).</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_1i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Ukuran bundle</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_1i59j9bcq_-accordion-content" aria-labelledby="_R_1i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Daripada memuat file JSON berukuran besar ke halaman Anda, muat saja konten yang diperlukan. Intlayer membantu <strong class="text-text">mengurangi ukuran bundle dan halaman Anda hingga 50%</strong>.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_2259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Kemampuan Pemeliharaan</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_2259j9bcq_-accordion-content" aria-labelledby="_R_2259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Mencakup konten aplikasi Anda <strong class="text-text">memfasilitasi pemeliharaan</strong> untuk aplikasi berskala besar. Anda dapat menduplikasi atau menghapus satu folder fitur tanpa beban mental untuk meninjau seluruh basis kode konten Anda. Selain itu, Intlayer <strong class="text-text">diketik sepenuhnya</strong> untuk memastikan keakuratan konten Anda.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_2i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Agen AI</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_2i59j9bcq_-accordion-content" aria-labelledby="_R_2i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Menempatkan konten bersama <strong class="text-text">mengurangi konteks yang diperlukan</strong> dengan Model Bahasa Besar (LLM). Intlayer juga dilengkapi dengan serangkaian alat, seperti <strong class="text-text">CLI</strong> untuk menguji terjemahan yang hilang,<strong class="text-text"><a href="/id/doc/lsp" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">LSP</a></strong>, <strong class="text-text"><a href="/id/doc/mcp-server" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">MCP</a></strong>, dan <strong class="text-text"><a href="/id/doc/agent_skills" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">agent skill</a></strong>, untuk menjadikan pengalaman pengembang (DX) lebih lancar bagi agen AI.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_3259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Otomatisasi</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_3259j9bcq_-accordion-content" aria-labelledby="_R_3259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Gunakan otomatisasi untuk menerjemahkan dalam saluran CI/CD Anda menggunakan LLM pilihan Anda dengan biaya penyedia AI Anda. Intlayer juga menawarkan <strong class="text-text">compiler</strong> untuk mengotomatiskan ekstraksi konten, serta <a href="/id/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">platform web</a> untuk membantu <strong class="text-text">menerjemahkan di latar belakang</strong>.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_3i59j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Pertunjukan</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_3i59j9bcq_-accordion-content" aria-labelledby="_R_3i59j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Menghubungkan file JSON berukuran besar ke komponen dapat menyebabkan masalah kinerja dan reaktivitas. Intlayer mengoptimalkan pemuatan konten Anda pada waktu pembuatan.</p> </div></div></div></div><div class="w-full"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 min-h-8 px-6 text-sm max-md:py-2 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-start text-left w-full flex items-center justify-between gap-2 text-lg!" aria-expanded="false" aria-busy="false" aria-disabled="false" aria-controls="_R_4259j9bcq_-accordion-content"><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="flex-1 truncate whitespace-nowrap">Menskalakan tanpa pengembang</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down flex-none shrink-0 size-4 ml-3 transform transition-transform duration-500 ease-in-out -rotate-180" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg></button><div tabindex="-1" role="region" class="group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out divide-y divide-neutral" id="_R_4259j9bcq_-accordion-content" aria-labelledby="_R_4259j9bcq_-accordion-content"><div style="min-height:0px" class="divide-y divide-neutral"><div class="mb-8 flex flex-col gap-6 px-4 pt-6 text-sm text-text/80"> <p>Lebih dari sekedar solusi i18n, Intlayer menyediakan <strong class="text-text"><a href="/id/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">editor visual</a></strong> yang dihosting sendiri dan <strong class="text-text"><a href="/id/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">CMS lengkap</a></strong> untuk membantu Anda mengelola konten multibahasa secara <strong class="text-text">real-time</strong>, membuat kolaborasi dengan penerjemah, copywriter, dan anggota tim lainnya menjadi lancar. Konten dapat disimpan secara lokal dan/atau jarak jauh.</p> </div></div></div></div></div><hr class="mx-6 mt-16 border-dashed text-neutral"/><h2 class="mb-2 text-2xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-16 text-text" id="panduan-langkah-demi-langkah-untuk-mengatur-intlayer-dalam-aplikasi-vite-dan-svelte" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Panduan Langkah demi Langkah untuk Mengatur Intlayer dalam Aplikasi Vite dan Svelte</h2><div class="flex flex-col text-text backdrop-blur rounded-2xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-3xl bg-card/70 border-[1.3px] border-neutral/20 gap-0 overflow-hidden p-0"><iframe sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" loading="lazy" src="https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts" title="Demo CodeSandbox - Cara Menginternasionalisasi aplikasi Anda menggunakan Intlayer" class="block max-h-[80vh] min-h-[12rem] w-full m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"></iframe><div class="flex items-center justify-between gap-3 px-3 py-1"><a href="https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts" aria-label="" rel="noopener noreferrer" target="_blank" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] hover:bg-current/0 hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-neutral text-xs underline-offset-2 hover:text-text hover:underline">ide.intlayer.org<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Open embedded page in fullscreen" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Open embedded page in fullscreen</span></button></div></div><p>Lihat <a rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer-vite-svelte-template" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Template Aplikasi<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a> di GitHub.</p> <ol class="list-none"> <li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">1</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-1-instalasi-dependensi" aria-label="Langkah 1: Instalasi Dependensi">Instalasi Dependensi</h3></div> <p>Instal paket yang diperlukan menggunakan npm:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Pilih pengelola paket"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm install intlayer svelte-intlayer</span><span class="line block w-full">npm install vite-intlayer --save-dev</span><span class="line block w-full">npx intlayer init</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> <ul class="mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80"><li><p><strong class="text-text">intlayer</strong></p> <p>Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, <a href="/id/doc/concept/content" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">deklarasi konten</a>, transpile, dan <a href="/id/doc/concept/cli" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">perintah CLI</a>.</p> </li><li><p><strong class="text-text">svelte-intlayer</strong> Paket yang mengintegrasikan Intlayer dengan aplikasi Svelte. Ini menyediakan context providers dan hooks untuk internasionalisasi Svelte.</p> </li><li><p><strong class="text-text">vite-intlayer</strong><br/>Termasuk plugin Vite untuk mengintegrasikan Intlayer dengan <a rel="noopener noreferrer" href="https://vite.dev/guide/why.html#why-bundle-for-production" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Vite bundler<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a>, serta middleware untuk mendeteksi locale yang dipilih pengguna, mengelola cookie, dan menangani pengalihan URL.</p> </li></ul></div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">2</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-2-konfigurasi-proyek-anda" aria-label="Langkah 2: Konfigurasi proyek Anda">Konfigurasi proyek Anda</h3></div> <p>Buat file konfigurasi untuk mengatur bahasa aplikasi Anda:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">intlayer.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { Locales, type IntlayerConfig } from "intlayer";</span><span class="line block w-full"></span><span class="line block w-full">const config: IntlayerConfig = {</span><span class="line block w-full"> internationalization: {</span><span class="line block w-full"> locales: [</span><span class="line block w-full"> Locales.ENGLISH,</span><span class="line block w-full"> Locales.FRENCH,</span><span class="line block w-full"> Locales.SPANISH,</span><span class="line block w-full"> // Locale lain milik Anda</span><span class="line block w-full"> ],</span><span class="line block w-full"> defaultLocale: Locales.ENGLISH,</span><span class="line block w-full"> },</span><span class="line block w-full">};</span><span class="line block w-full"></span><span class="line block w-full">export default config;</span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, pengalihan middleware, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan lainnya. Untuk daftar lengkap parameter yang tersedia, lihat <a href="/id/doc/concept/configuration" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">dokumentasi konfigurasi</a>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">3</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-3-integrasikan-intlayer-dalam-konfigurasi-vite-anda" aria-label="Langkah 3: Integrasikan Intlayer dalam Konfigurasi Vite Anda">Integrasikan Intlayer dalam Konfigurasi Vite Anda</h3></div> <p>Tambahkan plugin intlayer ke dalam konfigurasi Anda.</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { defineConfig } from "vite";</span><span class="line block w-full">import { svelte } from "@sveltejs/vite-plugin-svelte";</span><span class="line block w-full">import { intlayer } from "vite-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">// https://vitejs.dev/config/</span><span class="line block w-full">export default defineConfig({</span><span class="line block w-full"> plugins: [svelte(), intlayer()],</span><span class="line block w-full">});</span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Plugin Vite <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer()</code> digunakan untuk mengintegrasikan Intlayer dengan Vite. Plugin ini memastikan pembuatan file deklarasi konten dan memantau file tersebut dalam mode pengembangan. Plugin ini juga mendefinisikan variabel lingkungan Intlayer dalam aplikasi Vite. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">4</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-4-deklarasikan-konten-anda" aria-label="Langkah 4: Deklarasikan Konten Anda">Deklarasikan Konten Anda</h3></div> <p>Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/app.content.tsx</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Pilih format kamus"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { t, type Dictionary } from "intlayer"; const appContent = { key: "app", content: { title: t({ en: "Hello World", fr: "Bonjour le monde", es: "Hola mundo", }), }, } satisfies Dictionary; export default appContent;</code></pre></div></div> <!-- --> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama mereka dimasukkan ke dalam direktori <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">contentDir</code> (secara default, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">./src</code>). Dan sesuai dengan ekstensi file deklarasi konten (secara default, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}</code>).</blockquote> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Untuk detail lebih lanjut, lihat <a href="/id/doc/concept/content" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">dokumentasi deklarasi konten</a>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">5</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-5-gunakan-intlayer-dalam-kode-anda" aria-label="Langkah 5: Gunakan Intlayer dalam Kode Anda">Gunakan Intlayer dalam Kode Anda</h3></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script></span><span class="line block w-full"> import { useIntlayer } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full"> const content = useIntlayer("app");</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div></span><span class="line block w-full"></span><span class="line block w-full"></span><span class="line block w-full"><!-- Render konten sebagai konten sederhana --></span><span class="line block w-full"><h1>{$content.title}</h1></span><span class="line block w-full"><!-- Untuk merender konten yang dapat diedit menggunakan editor --></span><span class="line block w-full"><h1>{@const Title = $content.title}<Title /></h1></span><span class="line block w-full"><!-- Untuk merender konten sebagai string --></span><span class="line block w-full"><div aria-label={$content.title.value}></div></span><span class="line block w-full"><div aria-label={$content.title.toString()}></div></span><span class="line block w-full"><div aria-label={String($content.title)}></div></span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Jika aplikasi Anda sudah ada, Anda dapat menggunakan <a href="/id/doc/compiler" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Intlayer Compiler</a> secara kombinasi dengan <a href="/id/doc/concept/cli/extract" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">perintah extract</a> untuk mengonversi ribuan komponen dalam satu detik.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">6</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-6-ubah-bahasa-konten-anda" aria-label="Langkah 6: Ubah bahasa konten Anda">Ubah bahasa konten Anda</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opsional</span></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { getLocaleName } from 'intlayer';</span><span class="line block w-full">import { useLocale } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">// Dapatkan informasi locale dan fungsi setLocale</span><span class="line block w-full">const { locale, availableLocales, setLocale } = useLocale();</span><span class="line block w-full"></span><span class="line block w-full">// Tangani perubahan locale</span><span class="line block w-full">const changeLocale = (event: Event) => {</span><span class="line block w-full"> const target = event.target as HTMLSelectElement;</span><span class="line block w-full"> const newLocale = target.value;</span><span class="line block w-full"> setLocale(newLocale);</span><span class="line block w-full">};</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div></span><span class="line block w-full"> <select value={$locale} on:change={changeLocale}></span><span class="line block w-full"> {#each availableLocales ?? [] as loc}</span><span class="line block w-full"> <option value={loc}></span><span class="line block w-full"> {getLocaleName(loc)}</span><span class="line block w-full"> </option></span><span class="line block w-full"> {/each}</span><span class="line block w-full"> </select></span><span class="line block w-full"></div></span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">7</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-7-render-markdown" aria-label="Langkah 7: Render Markdown">Render Markdown</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opsional</span></div> <p>Intlayer mendukung rendering konten Markdown langsung di aplikasi Svelte Anda. Secara default, Markdown diperlakukan sebagai teks biasa. Untuk mengubah Markdown menjadi HTML kaya, Anda dapat mengintegrasikan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">@humanspeak/svelte-markdown</code>, atau parser markdown lainnya.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Untuk melihat cara mendeklarasikan konten markdown menggunakan paket <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code>, lihat <a rel="noopener noreferrer" href="https://github.com/aymericzip/intlayer/tree/main/docs/docs/id/dictionary/markdown.md" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">dokumen markdown<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a>.</blockquote> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script></span><span class="line block w-full"> import { setIntlayerMarkdown } from "svelte-intlayer";</span><span class="line block w-full"></span><span class="line block w-full"> setIntlayerMarkdown((markdown) =></span><span class="line block w-full"> // render konten markdown sebagai string</span><span class="line block w-full"> return markdown;</span><span class="line block w-full"> );</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><h1>{$content.markdownContent}</h1></span></code></pre></div></div><!--/$--></div></div></div> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Anda juga dapat mengakses data front-matter markdown Anda menggunakan properti <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">content.markdownContent.metadata.xxx</code>.</blockquote> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">8</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-8-siapkan-editor-/-cms-intlayer" aria-label="Langkah 8: Siapkan editor / CMS intlayer">Siapkan editor / CMS intlayer</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opsional</span></div> <p>Untuk menyiapkan editor intlayer, Anda harus mengikuti <a href="/id/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">dokumentasi editor intlayer</a>.</p> <p>Untuk menyiapkan CMS intlayer, Anda harus mengikuti <a href="/id/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">dokumentasi CMS intlayer</a>.</p> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">7</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-7-tambahkan-routing-yang-dilokalkan-ke-aplikasi-anda" aria-label="Langkah 7: Tambahkan Routing yang dilokalkan ke aplikasi Anda">Tambahkan Routing yang dilokalkan ke aplikasi Anda</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opsional</span></div> <p>Untuk menangani routing yang dilokalkan dalam aplikasi Svelte Anda, Anda dapat menggunakan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code> bersama dengan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">localeFlatMap</code> dari Intlayer untuk menghasilkan rute untuk setiap locale.</p> <p>Pertama, instal <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Pilih pengelola paket"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm install svelte-spa-router</span><span class="line block w-full">npx intlayer init</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> <p>Kemudian, buat file <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Router.svelte</code> untuk mendefinisikan rute Anda:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/Router.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { localeFlatMap } from "intlayer";</span><span class="line block w-full">import Router from "svelte-spa-router";</span><span class="line block w-full">import { wrap } from "svelte-spa-router/wrap";</span><span class="line block w-full">import App from "./App.svelte";</span><span class="line block w-full"></span><span class="line block w-full">const routes = Object.fromEntries(</span><span class="line block w-full"> localeFlatMap(({locale, urlPrefix}) => [</span><span class="line block w-full"> [</span><span class="line block w-full"> urlPrefix || '/',</span><span class="line block w-full"> wrap({</span><span class="line block w-full"> component: App as any,</span><span class="line block w-full"> props: {</span><span class="line block w-full"> locale,</span><span class="line block w-full"> },</span><span class="line block w-full"> }),</span><span class="line block w-full"> ],</span><span class="line block w-full"> ])</span><span class="line block w-full">);</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><Router {routes} /></span></code></pre></div></div><!--/$--></div></div></div> <p>Perbarui <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">main.ts</code> Anda untuk memasang komponen <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Router</code> menggantikan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">App</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/main.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { mount } from "svelte";</span><span class="line block w-full">import Router from "./Router.svelte";</span><span class="line block w-full"></span><span class="line block w-full">const app = mount(Router, {</span><span class="line block w-full"> target: document.getElementById("app")!,</span><span class="line block w-full">});</span><span class="line block w-full"></span><span class="line block w-full">export default app;</span></code></pre></div></div><!--/$--></div></div></div> <p>Terakhir, perbarui <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">App.svelte</code> Anda untuk menerima properti <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">locale</code> dan menggunakannya dengan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">useIntlayer</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/App.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import type { Locale } from 'intlayer';</span><span class="line block w-full">import { useIntlayer } from "svelte-intlayer";</span><span class="line block w-full">import Counter from './lib/Counter.svelte';</span><span class="line block w-full">import LocaleSwitcher from './lib/LocaleSwitcher.svelte';</span><span class="line block w-full"></span><span class="line block w-full">export let locale: Locale;</span><span class="line block w-full"></span><span class="line block w-full">$: content = useIntlayer('app', locale);</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><main></span><span class="line block w-full"> <div class="locale-switcher-container"></span><span class="line block w-full"> <LocaleSwitcher currentLocale={locale} /></span><span class="line block w-full"> </div></span><span class="line block w-full"></span><span class="line block w-full"> <!-- ... sisa aplikasi Anda ... --></span><span class="line block w-full"></main></span></code></pre></div></div><!--/$--></div></div></div> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="konfigurasi-routing-server-side-opsional" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Konfigurasi Routing Server-Side (Opsional)</h4><p>Secara paralel, Anda juga dapat menggunakan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerProxy</code> untuk menambahkan routing sisi server ke aplikasi Anda. Plugin ini akan secara otomatis mendeteksi locale saat ini berdasarkan URL dan mengatur cookie locale yang sesuai. Jika tidak ada locale yang ditentukan, plugin akan menentukan locale yang paling sesuai berdasarkan preferensi bahasa browser pengguna. Jika tidak ada locale yang terdeteksi, maka akan mengarahkan ulang ke locale default.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Perlu diperhatikan bahwa untuk menggunakan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerProxy</code> di produksi, Anda perlu memindahkan paket <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">vite-intlayer</code> dari <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">devDependencies</code> ke <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">dependencies</code>.</blockquote> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Pilih format kode"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import { intlayer, intlayerProxy } from "vite-intlayer"; typescript {3,7} fileName="vite.config.ts" codeFormat="typescript" import { defineConfig } from "vite"; import { svelte } from "@sveltejs/vite-plugin-svelte"; import { intlayer, intlayerProxy } from "vite-intlayer"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [intlayerProxy(), // should be placed first svelte(), intlayer()], });</code></pre></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">8</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-8-ubah-url-saat-locale-berubah" aria-label="Langkah 8: Ubah URL saat locale berubah">Ubah URL saat locale berubah</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opsional</span></div> <p>Untuk memungkinkan pengguna mengganti bahasa dan memperbarui URL sesuai, Anda dapat membuat komponen <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">LocaleSwitcher</code>. Komponen ini akan menggunakan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getLocalizedUrl</code> dari <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code> dan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">push</code> dari <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">svelte-spa-router</code>.</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">src/lib/LocaleSwitcher.svelte</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"><script lang="ts"></span><span class="line block w-full">import { getLocaleName, getLocalizedUrl } from "intlayer";</span><span class="line block w-full">import { useLocale } from "svelte-intlayer";</span><span class="line block w-full">import { push } from "svelte-spa-router";</span><span class="line block w-full"></span><span class="line block w-full">export let currentLocale: string | undefined = undefined;</span><span class="line block w-full"></span><span class="line block w-full">// Dapatkan informasi locale</span><span class="line block w-full">const { locale, availableLocales } = useLocale();</span><span class="line block w-full"></span><span class="line block w-full">// Tangani perubahan locale</span><span class="line block w-full">const changeLocale = (event: Event) => {</span><span class="line block w-full"> const target = event.target as HTMLSelectElement;</span><span class="line block w-full"> const newLocale = target.value;</span><span class="line block w-full"> const currentUrl = window.location.pathname;</span><span class="line block w-full"> const url = getLocalizedUrl( currentUrl, newLocale);</span><span class="line block w-full"> push(url);</span><span class="line block w-full">};</span><span class="line block w-full"></script></span><span class="line block w-full"></span><span class="line block w-full"><div class="locale-switcher"></span><span class="line block w-full"> <select value={currentLocale ?? $locale} onchange={changeLocale}></span><span class="line block w-full"> {#each availableLocales ?? [] as loc}</span><span class="line block w-full"> <option value={loc}></span><span class="line block w-full"> {getLocaleName(loc)}</span><span class="line block w-full"> </option></span><span class="line block w-full"> {/each}</span><span class="line block w-full"> </select></span><span class="line block w-full"></div></span></code></pre></div></div><!--/$--></div></div></div> </div></li><li class="group relative flex w-full flex-1 gap-4"><div class="flex flex-col max-md:hidden" aria-hidden="true"><div class="ml-4 h-10 border-text/20 border-l border-dashed group-first-of-type:hidden"></div><span class="flex size-8 shrink-0 items-center justify-center rounded-full border-2 border-text/30 border-dotted bg-background font-black text-base text-text/70 max-md:hidden group-first-of-type:mt-10">1</span><div class="ml-4 flex-1 border-text/20 border-l border-dashed group-last-of-type:h-40 group-last-of-type:flex-none group-last-of-type:[-webkit-mask-image:linear-gradient(to_bottom,black,transparent)] group-last-of-type:[mask-image:linear-gradient(to_bottom,black,transparent)]"></div></div><div class="mt-10 mb-8 flex w-full min-w-0 flex-col gap-8"><div class="flex items-center items-center gap-2"><h3 class="mb-2 relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 font-semibold text-lg text-text" id="step-1-ekstrak-konten-komponen-anda" aria-label="Langkah 1: Ekstrak konten komponen Anda">Ekstrak konten komponen Anda</h3><span class="mb-2 ml-4 rounded-full bg-neutral/15 px-3 py-1 text-text/90 text-xs">Opsional</span></div> <p>Jika Anda memiliki basis kode yang ada, mengubah ribuan file bisa memakan waktu lama.</p> <p>Untuk memudahkan proses ini, Intlayer mengusulkan <a href="/id/doc/compiler" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">compiler</a> / <a href="/id/doc/concept/cli/extract" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">extractor</a> untuk mengubah komponen Anda dan mengekstrak kontennya.</p> <p>Untuk mengaturnya, Anda dapat menambahkan bagian <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">compiler</code> di file <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer.config.ts</code> Anda:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">intlayer.config.ts</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Pilih format kode"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><pre class="min-w-0 max-w-full overflow-x-auto"><code>import { type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { // ... Sisa konfigurasi Anda compiler: { /** * Menunjukkan apakah compiler harus diaktifkan. */ enabled: true, /** * Menentukan jalur file output */ output: ({ fileName, extension }) => `./${fileName}${extension}`, /** * Menunjukkan apakah komponen harus disimpan setelah diubah. Dengan begitu, compiler dapat dijalankan satu kali saja untuk mengubah aplikasi, lalu dapat dihapus. */ saveComponents: false, /** * Prefiks kunci kamus */ dictionaryKeyPrefix: "", }, }; export default config;</code></pre></div></div> <div class="relative w-full rounded-xl border border-card"><div class="flex shrink-0 gap-3 p-3 sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto"><div class="relative z-0 flex size-full flex-row items-center gap-2 border-text text-text" aria-orientation="horizontal" aria-multiselectable="false" role="tablist"><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none" data-active="true" role="tab" aria-selected="true" aria-controls="tabpanel-Perintah ekstrak" id="tab-Perintah ekstrak" type="button" tabindex="0">Perintah ekstrak</button><button class="cursor-pointer whitespace-nowrap rounded-md px-4 py-1 font-medium text-sm transition-colors focus:outline-none text-neutral/70" data-active="false" role="tab" aria-selected="false" aria-controls="tabpanel-Compiler Babel" id="tab-Compiler Babel" type="button" tabindex="-1">Compiler Babel</button></div></div><div class="relative w-full min-w-0 overflow-x-clip [-webkit-clip-path:inset(0)] [clip-path:inset(0)]" style="touch-action:pan-y"><div role="tablist" aria-orientation="horizontal" class="grid w-full min-w-0 transition-transform duration-300 ease-in-out" style="grid-template-columns:repeat(2, 100%);transform:translateX(-0%)"><div role="tabpanel" aria-labelledby="tab-Perintah ekstrak" id="tabpanel-Perintah ekstrak" aria-hidden="false" tabindex="0" data-active="true" class="w-full min-w-0 p-3 opacity-100 transition-opacity duration-300 ease-in-out"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <p>Jalankan extractor untuk mengubah komponen Anda dan mengekstrak kontennya</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Pilih pengelola paket"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npx intlayer extract</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> </div></div><div role="tabpanel" aria-labelledby="tab-Compiler Babel" id="tabpanel-Compiler Babel" aria-hidden="true" tabindex="-1" data-active="false" class="w-full min-w-0 p-3 transition-opacity duration-300 ease-in-out pointer-events-none opacity-0"><div class="flex w-full min-w-0 flex-col items-stretch gap-6"> <p>Perbarui <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">vite.config.ts</code> Anda untuk menyertakan plugin <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayerCompiler</code>:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">vite.config.ts</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import { defineConfig } from "vite";</span><span class="line block w-full">import { intlayer, intlayerCompiler } from "vite-intlayer";</span><span class="line block w-full"></span><span class="line block w-full">export default defineConfig({</span><span class="line block w-full"> plugins: [</span><span class="line block w-full"> intlayer(),</span><span class="line block w-full"> intlayerCompiler(), // Menambahkan plugin compiler</span><span class="line block w-full"> ],</span><span class="line block w-full">});</span></code></pre></div></div><!--/$--></div></div></div> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"><button type="button" role="combobox" aria-expanded="false" aria-autocomplete="none" dir="ltr" data-state="closed" class="flex w-full cursor-pointer items-center justify-between whitespace-nowrap select-text text-base shadow-none outline-none md:text-sm rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl px-2 py-3 md:py-2 bg-neutral-50 dark:bg-neutral-950 text-text ring-0 focus-visible:outline-none focus-visible:ring-3 focus-visible:ring-neutral-200 dark:focus-visible:ring-neutral-500 focus-visible:ring-offset-white dark:focus-visible:ring-offset-neutral-500 [box-shadow:none] focus:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-error [&>span]:line-clamp-1 py-1!" aria-label="Pilih pengelola paket"><span style="pointer-events:none"></span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-up-down size-4 opacity-50" aria-hidden="true"><path d="m7 15 5 5 5-5"></path><path d="m7 9 5-5 5 5"></path></svg></button><select aria-hidden="true" tabindex="-1" style="position:absolute;border:0;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;word-wrap:normal"></select></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex items-center h-11"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">npm run build # Atau npm run dev</span></code></pre></div></div><!--/$--></div></div></div> <!-- --> <!-- --> <!-- --> </div></div></div></div></div></div></li></ol><h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="konfigurasi-git" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Konfigurasi Git</h3><p>Disarankan untuk mengabaikan file-file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari meng-commit file tersebut ke repositori Git Anda.</p> <p>Untuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">.gitignore</code> Anda:</p> <div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">bash</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full"># Abaikan file yang dihasilkan oleh Intlayer</span><span class="line block w-full">.intlayer</span></code></pre></div></div><!--/$--></div></div></div> <h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="ekstensi-vs-code" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Ekstensi VS Code</h3><p>Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal <strong class="text-text">Ekstensi VS Code Intlayer</strong> resmi.</p> <p><a rel="noopener noreferrer" href="https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension" target="_blank" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">Pasang dari VS Code Marketplace<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 inline-block size-4" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></p> <p>Ekstensi ini menyediakan:</p> <ul class="mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80"><li><strong class="text-text">Autocompletion</strong> untuk kunci terjemahan.</li><li><strong class="text-text">Deteksi kesalahan waktu nyata</strong> untuk terjemahan yang hilang.</li><li><strong class="text-text">Pratinjau inline</strong> dari konten yang diterjemahkan.</li><li><strong class="text-text">Tindakan cepat</strong> untuk dengan mudah membuat dan memperbarui terjemahan.</li></ul><p>Untuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat <a href="/id/doc/vs-code-extension" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">dokumentasi Ekstensi VS Code Intlayer</a>.</p> <hr class="mx-6 mt-16 border-dashed text-neutral"/><h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="opsional-sitemap-dan-robotstxt-generate-saat-build" aria-label="Click to scroll to section undefined and copy the link to the clipboard">(Opsional) Sitemap dan robots.txt (generate saat build)</h3><p>Intlayer menyediakan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generateSitemap</code> dan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getMultilingualUrls</code> untuk memformat <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">sitemap.xml</code> multibahasa dan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">robots.txt</code> yang siap untuk crawler, lalu menulisnya secara otomatis ke <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">public/</code>. Biasanya skrip Node kecil dijalankan <strong class="text-text">sebelum</strong> Vite (misalnya hook npm <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">predev</code> / <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">prebuild</code>).</p> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="sitemap" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Sitemap</h4><p>Generator sitemap Intlayer menghormati konfigurasi locale dan menambahkan metadata untuk crawler.</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Sitemap mendukung namespace <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">xhtml:link</code> (hreflang). Alih-alih hanya daftar URL datar, Intlayer menghubungkan semua varian bahasa setiap halaman secara dua arah (mis. <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/about</code>, <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/fr/about</code>, atau <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">/about?lang=fr</code> tergantung mode routing).</blockquote> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="robotstxt" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Robots.txt</h4><p>Gunakan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">getMultilingualUrls</code> agar aturan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">Disallow</code> mencakup semua varian URL jalur sensitif.</p> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="1-buat-generate-seomjs-di-root-proyek" aria-label="Click to scroll to section undefined and copy the link to the clipboard">1. Buat <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.mjs</code> di root proyek</h4><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">generate-seo.mjs</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">import fs from "fs";</span><span class="line block w-full">import path from "path";</span><span class="line block w-full">import { fileURLToPath } from "url";</span><span class="line block w-full">import { generateSitemap, getMultilingualUrls } from "intlayer";</span><span class="line block w-full"></span><span class="line block w-full">const __dirname = path.dirname(fileURLToPath(import.meta.url));</span><span class="line block w-full"></span><span class="line block w-full">const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(</span><span class="line block w-full"> /\/$/,</span><span class="line block w-full"> ""</span><span class="line block w-full">);</span><span class="line block w-full"></span><span class="line block w-full">const pathList = [</span><span class="line block w-full"> { path: "/", changefreq: "daily", priority: 1.0 },</span><span class="line block w-full"> { path: "/about", changefreq: "monthly", priority: 0.7 },</span><span class="line block w-full">];</span><span class="line block w-full"></span><span class="line block w-full">const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });</span><span class="line block w-full">fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);</span><span class="line block w-full"></span><span class="line block w-full">const getAllMultilingualUrls = (urls) =></span><span class="line block w-full"> urls.flatMap((url) => Object.values(getMultilingualUrls(url)));</span><span class="line block w-full"></span><span class="line block w-full">const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);</span><span class="line block w-full"></span><span class="line block w-full">const robotsTxt = [</span><span class="line block w-full"> "User-agent: *",</span><span class="line block w-full"> "Allow: /",</span><span class="line block w-full"> ...disallowedPaths.map((path) => `Disallow: ${path}`),</span><span class="line block w-full"> "",</span><span class="line block w-full"> `Sitemap: ${SITE_URL}/sitemap.xml`,</span><span class="line block w-full">].join("\n");</span><span class="line block w-full"></span><span class="line block w-full">fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);</span><span class="line block w-full"></span><span class="line block w-full">console.log("SEO files generated successfully.");</span></code></pre></div></div><!--/$--></div></div></div> <p>Paket <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">intlayer</code> harus terpasang. Setel <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">SITE_URL</code> di lingkungan produksi (misalnya di CI).</p> <blockquote class="mt-5 gap-3 border-card border-l-4 pl-5 text-neutral [&_strong]:text-neutral">Disarankan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.mjs</code> untuk ESM Node. Jika memakai <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">generate-seo.js</code>, pastikan <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">"type": "module"</code> di <code class="rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm">package.json</code> atau aktifkan ESM lainnya.</blockquote> <h4 class="text-lg relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-3 text-text" id="2-jalankan-skrip-sebelum-vite" aria-label="Click to scroll to section undefined and copy the link to the clipboard">2. Jalankan skrip sebelum Vite</h4><div class="flex flex-col text-text backdrop-blur rounded-lg [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/40 p-0 border-text gap-0 relative min-w-0 max-w-full text-sm leading-6 with-line-number ml-0"><div class="grid w-full grid-cols-[1fr_auto] items-center justify-between rounded-t-xl bg-card/50 py-1.5 pr-12 pl-4 text-neutral text-xs"><span class="truncate">package.json</span><div class="flex items-center gap-2"></div></div><div class="sticky top-46 z-20"><div class="absolute right-2 bottom-0 flex h-7 items-center"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-copy" aria-haspopup="true"><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-lg border-none bg-current/0 transition *:text-current! hover:bg-current/10 aria-[current]:bg-current/5 justify-center text-center" aria-label="Salin konten" aria-busy="false" aria-disabled="false" tabindex="0" title="Salin konten"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy flex-none shrink-0 size-3" aria-hidden="true"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Salin konten</span></button><div class="text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 border-text absolute z-60 rounded-md ring-1 ring-neutral right-0 top-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:right-2 before:-top-2.5 before:border-r-[10px] before:border-r-transparent before:border-b-[10px] before:border-b-neutral before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800 flex min-w-64 flex-col gap-3 p-3 text-sm" role="group" aria-labelledby="unrollable-panel-button-copy" id="unrollable-panel-copy"><strong>Salin kode</strong><p class="text-neutral">Salin kode ke clipboard</p></div></div></div></div><div class="grid w-full min-w-0 max-w-full overflow-x-auto p-2"><div class="flex w-full min-w-0 max-w-full overflow-x-auto"><!--$--><div class="[&_pre.shiki]:!bg-transparent min-w-0 max-w-full overflow-auto bg-transparent [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden [&_pre.shiki]:max-w-full [&_pre.shiki]:overflow-x-auto [&_pre::-webkit-scrollbar]:hidden [&_pre]:[-ms-overflow-style:none] [&_pre]:[scrollbar-width:none]"><div class="min-w-0 max-w-full overflow-x-auto"><pre class="min-w-0 max-w-full overflow-x-auto [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden"><code><span class="line block w-full">{</span><span class="line block w-full"> "scripts": {</span><span class="line block w-full"> "dev": "vite",</span><span class="line block w-full"> "prebuild": "node generate-seo.mjs",</span><span class="line block w-full"> "build": "vite build",</span><span class="line block w-full"> "preview": "vite preview"</span><span class="line block w-full"> }</span><span class="line block w-full">}</span></code></pre></div></div><!--/$--></div></div></div> <p>Sesuaikan perintah jika memakai pnpm atau yarn. Skrip juga bisa dipanggil dari CI.</p> <h3 class="mb-2 text-xl relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8 after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100 mt-5 text-text" id="melangkah-lebih-jauh" aria-label="Click to scroll to section undefined and copy the link to the clipboard">Melangkah Lebih Jauh</h3><p>Untuk melangkah lebih jauh, Anda dapat mengimplementasikan <a href="/id/doc/concept/editor" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">editor visual</a> atau mengeksternalisasi konten Anda menggunakan <a href="/id/doc/concept/cms" target="_self" class="gap-3 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 h-auto justify-start border-inherit bg-current/0 px-1 font-medium decoration-[1.5] underline-offset-5 hover:bg-current/0 hover:text-current/80 hover:underline hover:underline-offset-6 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl underline">CMS</a>.</p></div></div><div class="my-3 flex flex-row flex-wrap justify-between gap-3 px-10 text-sm"><a aria-label="Kembali ke bagian sebelumnya" target="_self" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative cursor-pointer border-[1.3px] border-current text-center font-medium ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral min-h-8 text-sm max-md:py-2 ring-neutral/20 wrap-break-words ml-auto flex h-auto w-full max-w-1/2 flex-1 flex-row items-center justify-start gap-2 whitespace-normal text-nowrap rounded-lg px-2 py-5" to="/id/doc/environment/vite-and-solid"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left size-5" aria-hidden="true"><path d="m15 18-6-6 6-6"></path></svg><span class="text-text">Vite dan Solid</span></a><a aria-label="Lanjut ke bagian berikutnya" target="_self" class="transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 relative cursor-pointer border-[1.3px] border-current text-center font-medium ring-0 *:text-text hover:bg-current/20 hover:ring-5 aria-selected:ring-5 aria-[current]:ring-5 [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-neutral min-h-8 text-sm max-md:py-2 ring-neutral/20 wrap-break-words ml-auto flex h-auto w-full max-w-1/2 flex-1 flex-row items-center justify-end gap-2 whitespace-normal text-nowrap rounded-lg px-2 py-5" to="/id/doc/environment/sveltekit"><span class="text-text">SvelteKit</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right size-5" aria-hidden="true"><path d="m9 18 6-6-6-6"></path></svg></a></div></div></article><aside aria-label="Di halaman ini" class="flex flex-none flex-row max-lg:hidden"><div class="relative flex min-h-0 w-70 flex-1 flex-col"><div class="relative z-10 mt-10 flex w-full flex-row items-center pt-2"><h2 class="ml-3 text-nowrap text-neutral/80 text-sm uppercase">Di halaman ini</h2><div class="absolute bottom-0 left-0 h-8 w-full translate-y-full bg-linear-to-b from-background/90 backdrop-blur"></div></div><div class="relative flex min-h-0 w-full flex-1 overflow-hidden rounded-2xl md:pt-0"><div class="mt-4 flex pl-3"><nav class="flex h-full min-h-0 flex-col"><ul class="flex min-h-0 flex-1 flex-col gap-3 overflow-auto pt-8 pr-3 pb-20"></ul></nav></div><div class="border-dashed transition max-h-[80%] cursor-ns-resize border-neutral-200 border-t-[1px] dark:border-neutral-950 before:absolute before:top-0 before:left-1/2 before:z-10 before:block before:h-1 before:w-10 before:-translate-x-1/2 before:-translate-y-1/2 before:transform before:cursor-ns-resize before:rounded-full before:bg-neutral-200 before:transition before:content-[""] dark:before:bg-neutral-950 active:border-neutral-400 active:before:bg-neutral-400 dark:active:border-neutral-600 active:dark:before:bg-neutral-600 absolute bottom-0 left-0 size-full bg-background/70 backdrop-blur" style="height:250px;min-height:0px" aria-valuemin="0" aria-valuenow="250" aria-label="Resizable component - drag the handle to adjust height" role="slider" tabindex="0"><div role="presentation" class="absolute top-0 left-0 size-full cursor-default overflow-hidden"><div class="justify-bottom size-full text-sm"><div class="flex size-full flex-col items-center justify-between overflow-auto"><div class="relative flex size-full flex-auto"><div class="absolute inset-0 size-full"><div data-testid="virtuoso-scroller" data-virtuoso-scroller="true" style="height:100%;outline:none;overflow-y:auto;position:relative;-webkit-overflow-scrolling:touch" tabindex="0"><div data-viewport-type="element" style="height:100%;position:absolute;top:0;width:100%"><div data-testid="virtuoso-item-list" style="box-sizing:border-box;margin-top:0;padding-bottom:0;padding-top:0"></div><div></div></div></div></div></div><div class="w-full flex-1"><form class="item-end flex h-auto flex-col items-end justify-center gap-3 px-4 py-3" autoComplete="off" noValidate=""><div class="flex w-full flex-col flex-wrap gap-2 px-1 py-2" id="_R_ukqj9bcq_"><textarea class="w-full select-text text-base shadow-none outline-none transition-all duration-300 md:text-sm ring-0 disabled:opacity-50 rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl text-text bg-neutral-50 dark:bg-neutral-950 ring-text/20 disabled:ring-0 hover:ring-3 focus-within:ring-4 focus-visible:outline-none focus-visible:ring-4 [box-shadow:none] focus:[box-shadow:none] aria-invalid:border-error px-2 py-3 md:py-2 overflow-y-auto resize-none" data-testid="question" id="question" name="question" rows="2" placeholder="Tanyakan apa saja..." aria-label="Ajukan pertanyaan Anda kepada Dokumentasi Cerdas bertenaga AI kami" aria-describedby="_R_ukqj9bcq_-form-item-description" aria-invalid="false"></textarea></div><div class="ml-auto flex items-center justify-end gap-2 max-md:w-full"><div class="group/popover relative flex cursor-pointer" id="unrollable-panel-button-chat-info" aria-haspopup="true"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info z-50 mr-3 text-neutral" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg><div class="flex flex-col text-text backdrop-blur [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-xl bg-card/95 p-0 border-text gap-0 absolute z-60 min-w-full rounded-md ring-1 ring-neutral left-1/2 -translate-x-1/2 bottom-[calc(100%+1rem)] before:absolute before:z-[999] before:h-0 before:w-0 before:content-[""] before:left-1/2 before:-translate-x-1/2 before:-bottom-2.5 before:border-t-[10px] before:border-t-neutral before:border-r-[10px] before:border-r-transparent before:border-l-[10px] before:border-l-transparent overflow-x-visible opacity-0 transition-all duration-400 ease-in-out invisible group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:delay-800" role="group" aria-labelledby="unrollable-panel-button-chat-info" id="unrollable-panel-chat-info"><p class="min-w-60 max-w-60 p-4 text-neutral text-xs">Diskusi bersifat anonim dan ditinjau secara berkala untuk mengatasi masalah umum. Jangan ragu untuk berbagi ide fitur, masukan tentang dokumentasi, atau apa pun yang terkait dengan Intlayer, kami menggunakan masukan ini untuk membentuk peta jalan dan meningkatkan produk.</p></div></div><button role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center" aria-label="Klik untuk membuka chatbot" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-move-diagonal flex-none shrink-0 size-4" aria-hidden="true"><path d="M11 19H5v-6"></path><path d="M13 5h6v6"></path><path d="M19 5 5 19"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Klik untuk membuka chatbot</span></button><button disabled="" role="button" type="button" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl rounded-2xl border-[1.3px] border-current bg-current/0 *:text-current! hover:bg-current/20 focus-visible:bg-current/20 hover:ring-5 focus-visible:ring-5 aria-selected:ring-5 justify-center text-center opacity-0" aria-label="Klik untuk mengosongkan" aria-busy="false" aria-disabled="true"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eraser flex-none shrink-0 size-4" aria-hidden="true"><path d="M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21"></path><path d="m5.082 11.09 8.828 8.828"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Klik untuk mengosongkan</span></button><button role="button" type="submit" class="relative inline-flex cursor-pointer items-center justify-center font-medium ring-0 transition-all duration-300 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 p-1.5 text-text ring-text/20 *:text-text-opposite rounded-xl [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl bg-current hover:bg-current/90 hover:ring-5 aria-selected:ring-5 justify-center text-center" aria-label="Klik untuk mengirim pertanyaan" aria-busy="false" aria-disabled="false"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up flex-none shrink-0 size-4" aria-hidden="true"><path d="m5 12 7-7 7 7"></path><path d="M12 19V5"></path></svg><div class="flex items-center justify-center transition-[width] duration-300"></div><span class="sr-only">Klik untuk mengirim pertanyaan</span></button></div></form></div></div></div></div></div></div></div></aside></div></div></main><div class="flex w-full flex-0 flex-col"></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--><script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-Bw9yQaJj.js","/assets/chunk-Cyuzqnbw.js","/assets/preload-helper-B8fFrdxC.js","/assets/contributors-hwMJZD2h.js","/assets/frequent-questions-ColnmfP0.js","/assets/buildOrganizationJsonLd-CDgipqaX.js","/assets/_-XYNRneuJ.js","/assets/buildWebsiteJsonLd-C0N39csk.js","/assets/esm-3MTWDjoQ.js","/assets/package_mock-BDluuYi_.js","/assets/NotFoundComponent-Bgr-e0gL.js","/assets/_-C4167Raf.js","/assets/blog-BzPtT7kP.js","/assets/chat-D_eebsPv.js","/assets/search-CiZlrVdG.js","/assets/_-PkJ9jxsi.js","/assets/privacy-notice-gc0H7wqY.js","/assets/terms-of-service-B15yrD0Q.js","/assets/seo-6taQxeNF.js","/assets/dist-BB4NsXlo.js","/assets/dist-ClM9H4W8.js","/assets/scroll-restoration-Ds11_EjL.js","/assets/IsRestoringProvider-DPTyBt-E.js","/assets/mutation-Bsa9tKKh.js","/assets/Match-DiNoTNTM.js","/assets/useStore-DlCoWsDY.js","/assets/matchContext-IegwGVKo.js","/assets/defer-BLyZxUjE.js","/assets/createServerFn-CXa74b5t.js","/assets/dist-BlKQxgFq.js","/assets/cn-SXa2TCS8.js","/assets/features-animation-Du4JOzyU.js","/assets/Link-aa68EiCJ.js","/assets/x-DL_kax-t.js","/assets/react-dom-BJD-Lcob.js","/assets/compiler-runtime-CQOss3SY.js","/assets/jsx-runtime-CXk3X59i.js","/assets/react-Bi8cP4Js.js","/assets/getHTMLTextDir-C8-9aPEx.js","/assets/usePersistedStore-BzkChKRN.js","/assets/routes-Cre-4Fxz.js","/assets/esm-DRNfMHzC.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-Bw9yQaJj.js"}}]},"/{-$locale}":$R[8]={preloads:$R[9]=["/assets/route-CQW21vXM.js"]},"/{-$locale}/_docs":$R[10]={preloads:$R[11]=["/assets/route-DnecKG0E.js","/assets/PageLayout-U6A7rpHn.js"]},"/{-$locale}/_docs/doc/$":$R[12]={preloads:$R[13]=["/assets/_-BJyRGMQ_.js","/assets/DocPageNavigation-Cjem7A8P.js","/assets/DocumentationRender-BDCy3TqB.js","/assets/DocPageLayout-5Kt9kfLJ.js"]}}},matches:$R[14]=[$R[15]={i:"__root__�",u:1785028728422,s:"success",ssr:!0},$R[16]={i:"�{-$locale}�id",u:1785028728423,s:"success",ssr:!0},$R[17]={i:"�{-$locale}�_docs�id",u:1785028728423,s:"success",ssr:!0},$R[18]={i:"�{-$locale}�_docs�doc�$�id�doc�environment�vite-and-svelte",u:1785028728688,s:"success",l:$R[19]={locale:"id",slugs:$R[20]=["environment","vite-and-svelte"],docData:$R[21]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Svelte multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[22]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[23]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[24]=[$R[25]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[26]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[27]={version:"5.5.11",date:"2025-11-19",changes:"\"Memperbarui dokumen\""},$R[28]={version:"5.5.10",date:"2025-06-29",changes:"\"Memulai riwayat\""}],author:$R[29]={name:"Aymeric PINEAU",title:"Founder of Intlayer, open-source multilingual CMS for Next.js and React",url:"https://github.com/aymericzip",image:"https://avatars.githubusercontent.com/u/62554073?v=4&size=124",socialMedias:$R[30]=["https://www.linkedin.com/in/aymericpineau/","https://x.com/aymericzip","https://github.com/aymericzip"],knowsAbout:$R[31]=["Expert in technical internationalization","Senior software engineer","Multilingual SEO","AI translation automation"],github:"aymericzip"},docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+svelte.md",relativeUrl:"/id/doc/environment/vite-and-svelte",url:"https://intlayer.org/id/doc/environment/vite-and-svelte"},defaultDocData:$R[32]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Complete guide to translate your app",description:"No more i18next. The 2026 guide to building a multilingual (i18n) Vite + Svelte app. Translate with AI agents and optimize bundle size, SEO and performances.",keywords:$R[33]=["Internationalization","Documentation","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[34]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[35]=[$R[36]={version:"8.9.0",date:"2026-05-04",changes:"\"Update Solid useIntlayer API usage to direct property access\""},$R[37]={version:"7.5.9",date:"2025-12-30",changes:"\"Add init command\""},$R[38]={version:"5.5.11",date:"2025-11-19",changes:"\"Update documentation\""},$R[39]={version:"5.5.10",date:"2025-06-29",changes:"\"Initial history\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_with_vite+svelte.md",relativeUrl:"/doc/environment/vite-and-svelte",url:"https://intlayer.org/doc/environment/vite-and-svelte"},docContent:"---\ncreatedAt: 2025-04-18\nupdatedAt: 2026-05-31\ntitle: \"Vite + Svelte i18n - Panduan lengkap menerjemahkan aplikasi Anda\"\ndescription: \"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Svelte multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.\"\nkeywords:\n - Internasionalisasi\n - Dokumentasi\n - Intlayer\n - Vite\n - Svelte\n - JavaScript\nslugs:\n - doc\n - environment\n - vite-and-svelte\napplicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template\napplicationShowcase: https://intlayer-vite-svelte-template.vercel.app\nhistory:\n - version: 8.9.0\n date: 2026-05-04\n changes: \"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\"\n - version: 7.5.9\n date: 2025-12-30\n changes: \"Tambahkan perintah init\"\n - version: 5.5.11\n date: 2025-11-19\n changes: \"Memperbarui dokumen\"\n - version: 5.5.10\n date: 2025-06-29\n changes: \"Memulai riwayat\"\nauthor: aymericzip\n---\n\n# Terjemahkan situs web Vite dan Svelte Anda menggunakan Intlayer | Internasionalisasi (i18n)\n\n\x3CTabs defaultTab=\"code\">\n \x3CTab label=\"Kode\" value=\"code\">\n\n\x3Ciframe\n src=\"https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Demo CodeSandbox - Intlayer\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\n \x3C/Tab>\n \x3CTab label=\"Demo\" value=\"demo\">\n\n\x3Ciframe\n src=\"https://intlayer-vite-svelte-template.vercel.app\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Demo - intlayer-vite-svelte-template\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\n \x3C/Tab>\n\x3C/Tabs>\n\n## Daftar Isi\n\n\x3CTOC/>\n\n## Mengapa Intlayer dibandingkan alternatif?\n\nDibandingkan dengan solusi utama seperti `svelte-i18n` atau `i18next`, Intlayer adalah solusi yang hadir dengan pengoptimalan terintegrasi seperti:\n\n\x3CAccordionGroup>\n\n\x3CAccordion header=\"Cakupan Ramping Penuh\">\n\nIntlayer dioptimalkan untuk bekerja sempurna dengan Svelte dengan menawarkan **pelingkupan konten tingkat komponen**, **terjemahan reaktif**, dan semua fitur yang diperlukan untuk meningkatkan internasionalisasi (i18n).\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Ukuran bundle\">\n\nDaripada memuat file JSON berukuran besar ke halaman Anda, muat saja konten yang diperlukan. Intlayer membantu **mengurangi ukuran bundle dan halaman Anda hingga 50%**.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Kemampuan Pemeliharaan\">\n\nMencakup konten aplikasi Anda **memfasilitasi pemeliharaan** untuk aplikasi berskala besar. Anda dapat menduplikasi atau menghapus satu folder fitur tanpa beban mental untuk meninjau seluruh basis kode konten Anda. Selain itu, Intlayer **diketik sepenuhnya** untuk memastikan keakuratan konten Anda.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Agen AI\">\n\nMenempatkan konten bersama **mengurangi konteks yang diperlukan** dengan Model Bahasa Besar (LLM). Intlayer juga dilengkapi dengan serangkaian alat, seperti **CLI** untuk menguji terjemahan yang hilang,**[LSP](/id/doc/lsp)**, **[MCP](/id/doc/mcp-server)**, dan **[agent skill](/id/doc/agent_skills)**, untuk menjadikan pengalaman pengembang (DX) lebih lancar bagi agen AI.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Otomatisasi\">\n\nGunakan otomatisasi untuk menerjemahkan dalam saluran CI/CD Anda menggunakan LLM pilihan Anda dengan biaya penyedia AI Anda. Intlayer juga menawarkan **compiler** untuk mengotomatiskan ekstraksi konten, serta [platform web](/id/doc/concept/cms) untuk membantu **menerjemahkan di latar belakang**.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Pertunjukan\">\n\nMenghubungkan file JSON berukuran besar ke komponen dapat menyebabkan masalah kinerja dan reaktivitas. Intlayer mengoptimalkan pemuatan konten Anda pada waktu pembuatan.\n\n\x3C/Accordion>\n\n\x3CAccordion header=\"Menskalakan tanpa pengembang\">\n\nLebih dari sekedar solusi i18n, Intlayer menyediakan **[editor visual](/id/doc/concept/editor)** yang dihosting sendiri dan **[CMS lengkap](/id/doc/concept/cms)** untuk membantu Anda mengelola konten multibahasa secara **real-time**, membuat kolaborasi dengan penerjemah, copywriter, dan anggota tim lainnya menjadi lancar. Konten dapat disimpan secara lokal dan/atau jarak jauh.\n\n\x3C/Accordion>\n\x3C/AccordionGroup>\n\n---\n\n## Panduan Langkah demi Langkah untuk Mengatur Intlayer dalam Aplikasi Vite dan Svelte\n\n\x3Ciframe\n src=\"https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts\"\n className=\"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full\"\n title=\"Demo CodeSandbox - Cara Menginternasionalisasi aplikasi Anda menggunakan Intlayer\"\n sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n loading=\"lazy\"\n/>\n\nLihat [Template Aplikasi](https://github.com/aymericzip/intlayer-vite-svelte-template) di GitHub.\n\n\x3CSteps>\n\n\x3CStep number={1} title=\"Instalasi Dependensi\">\n\nInstal paket yang diperlukan menggunakan npm:\n\n```bash packageManager=\"npm\"\nnpm install intlayer svelte-intlayer\nnpm install vite-intlayer --save-dev\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add intlayer svelte-intlayer\npnpm add vite-intlayer --save-dev\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add intlayer svelte-intlayer\nyarn add vite-intlayer --save-dev\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add intlayer svelte-intlayer\nbun add vite-intlayer --save-dev\nbun x intlayer init\n```\n\n- **intlayer**\n\n Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, [deklarasi konten](/id/doc/concept/content), transpile, dan [perintah CLI](/id/doc/concept/cli).\n\n- **svelte-intlayer**\n Paket yang mengintegrasikan Intlayer dengan aplikasi Svelte. Ini menyediakan context providers dan hooks untuk internasionalisasi Svelte.\n\n- **vite-intlayer** \n Termasuk plugin Vite untuk mengintegrasikan Intlayer dengan [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production), serta middleware untuk mendeteksi locale yang dipilih pengguna, mengelola cookie, dan menangani pengalihan URL.\n\n\x3C/Step>\n\n\x3CStep number={2} title=\"Konfigurasi proyek Anda\">\n\nBuat file konfigurasi untuk mengatur bahasa aplikasi Anda:\n\n```typescript fileName=\"intlayer.config.ts\"\nimport { Locales, type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n internationalization: {\n locales: [\n Locales.ENGLISH,\n Locales.FRENCH,\n Locales.SPANISH,\n // Locale lain milik Anda\n ],\n defaultLocale: Locales.ENGLISH,\n },\n};\n\nexport default config;\n```\n\n> Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, pengalihan middleware, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan lainnya. Untuk daftar lengkap parameter yang tersedia, lihat [dokumentasi konfigurasi](/id/doc/concept/configuration).\n\n\x3C/Step>\n\n\x3CStep number={3} title=\"Integrasikan Intlayer dalam Konfigurasi Vite Anda\">\n\nTambahkan plugin intlayer ke dalam konfigurasi Anda.\n\n```typescript fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [svelte(), intlayer()],\n});\n```\n\n> Plugin Vite `intlayer()` digunakan untuk mengintegrasikan Intlayer dengan Vite. Plugin ini memastikan pembuatan file deklarasi konten dan memantau file tersebut dalam mode pengembangan. Plugin ini juga mendefinisikan variabel lingkungan Intlayer dalam aplikasi Vite. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa.\n\n\x3C/Step>\n\n\x3CStep number={4} title=\"Deklarasikan Konten Anda\">\n\nBuat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:\n\n```tsx fileName=\"src/app.content.tsx\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { t, type Dictionary } from \"intlayer\";\n\nconst appContent = {\n key: \"app\",\n content: {\n title: t({\n en: \"Hello World\",\n fr: \"Bonjour le monde\",\n es: \"Hola mundo\",\n }),\n },\n} satisfies Dictionary;\n\nexport default appContent;\n```\n\n```json fileName=\"src/app.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"app\",\n \"content\": {\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Hello World\",\n \"fr\": \"Bonjour le monde\",\n \"es\": \"Hola mundo\"\n }\n }\n }\n}\n```\n\n> Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama mereka dimasukkan ke dalam direktori `contentDir` (secara default, `./src`). Dan sesuai dengan ekstensi file deklarasi konten (secara default, `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`).\n\n> Untuk detail lebih lanjut, lihat [dokumentasi deklarasi konten](/id/doc/concept/content).\n\n\x3C/Step>\n\n\x3CStep number={5} title=\"Gunakan Intlayer dalam Kode Anda\">\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript>\n import { useIntlayer } from \"svelte-intlayer\";\n\n const content = useIntlayer(\"app\");\n\x3C/script>\n\n\x3Cdiv>\n\n\n\x3C!-- Render konten sebagai konten sederhana -->\n\x3Ch1>{$content.title}\x3C/h1>\n\x3C!-- Untuk merender konten yang dapat diedit menggunakan editor -->\n\x3Ch1>{@const Title = $content.title}\x3CTitle />\x3C/h1>\n\x3C!-- Untuk merender konten sebagai string -->\n\x3Cdiv aria-label={$content.title.value}>\x3C/div>\n\x3Cdiv aria-label={$content.title.toString()}>\x3C/div>\n\x3Cdiv aria-label={String($content.title)}>\x3C/div>\n```\n\n> Jika aplikasi Anda sudah ada, Anda dapat menggunakan [Intlayer Compiler](/id/doc/compiler) secara kombinasi dengan [perintah extract](/id/doc/concept/cli/extract) untuk mengonversi ribuan komponen dalam satu detik.\n\n\x3C/Step>\n\n\x3CStep number={6} title=\"Ubah bahasa konten Anda\" isOptional={true}>\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Dapatkan informasi locale dan fungsi setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Tangani perubahan locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n\x3C/script>\n\n\x3Cdiv>\n \x3Cselect value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n```\n\n\x3C/Step>\n\n\x3CStep number={7} title=\"Render Markdown\" isOptional={true}>\n\nIntlayer mendukung rendering konten Markdown langsung di aplikasi Svelte Anda. Secara default, Markdown diperlakukan sebagai teks biasa. Untuk mengubah Markdown menjadi HTML kaya, Anda dapat mengintegrasikan `@humanspeak/svelte-markdown`, atau parser markdown lainnya.\n\n> Untuk melihat cara mendeklarasikan konten markdown menggunakan paket `intlayer`, lihat [dokumen markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/id/dictionary/markdown.md).\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // render konten markdown sebagai string\n return markdown;\n );\n\x3C/script>\n\n\x3Ch1>{$content.markdownContent}\x3C/h1>\n```\n\n> Anda juga dapat mengakses data front-matter markdown Anda menggunakan properti `content.markdownContent.metadata.xxx`.\n\n\x3C/Step>\n\n\x3CStep number={8} title=\"Siapkan editor / CMS intlayer\" isOptional={true}>\n\nUntuk menyiapkan editor intlayer, Anda harus mengikuti [dokumentasi editor intlayer](/id/doc/concept/editor).\n\nUntuk menyiapkan CMS intlayer, Anda harus mengikuti [dokumentasi CMS intlayer](/id/doc/concept/cms).\n\n\x3C/Step>\n\n\x3CStep number={7} title=\"Tambahkan Routing yang dilokalkan ke aplikasi Anda\" isOptional={true}>\n\nUntuk menangani routing yang dilokalkan dalam aplikasi Svelte Anda, Anda dapat menggunakan `svelte-spa-router` bersama dengan `localeFlatMap` dari Intlayer untuk menghasilkan rute untuk setiap locale.\n\nPertama, instal `svelte-spa-router`:\n\n```bash packageManager=\"npm\"\nnpm install svelte-spa-router\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add svelte-spa-router\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add svelte-spa-router\nyarn intlayer init\n```\n\n```bash packageManager=\"bun\"\nbun add svelte-spa-router\n```\n\nKemudian, buat file `Router.svelte` untuk mendefinisikan rute Anda:\n\n```svelte fileName=\"src/Router.svelte\"\n\x3Cscript lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n\x3C/script>\n\n\x3CRouter {routes} />\n```\n\nPerbarui `main.ts` Anda untuk memasang komponen `Router` menggantikan `App`:\n\n```typescript fileName=\"src/main.ts\"\nimport { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n```\n\nTerakhir, perbarui `App.svelte` Anda untuk menerima properti `locale` dan menggunakannya dengan `useIntlayer`:\n\n```svelte fileName=\"src/App.svelte\"\n\x3Cscript lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n$: content = useIntlayer('app', locale);\n\x3C/script>\n\n\x3Cmain>\n \x3Cdiv class=\"locale-switcher-container\">\n \x3CLocaleSwitcher currentLocale={locale} />\n \x3C/div>\n\n \x3C!-- ... sisa aplikasi Anda ... -->\n\x3C/main>\n```\n\n#### Konfigurasi Routing Server-Side (Opsional)\n\nSecara paralel, Anda juga dapat menggunakan `intlayerProxy` untuk menambahkan routing sisi server ke aplikasi Anda. Plugin ini akan secara otomatis mendeteksi locale saat ini berdasarkan URL dan mengatur cookie locale yang sesuai. Jika tidak ada locale yang ditentukan, plugin akan menentukan locale yang paling sesuai berdasarkan preferensi bahasa browser pengguna. Jika tidak ada locale yang terdeteksi, maka akan mengarahkan ulang ke locale default.\n\n> Perlu diperhatikan bahwa untuk menggunakan `intlayerProxy` di produksi, Anda perlu memindahkan paket `vite-intlayer` dari `devDependencies` ke `dependencies`.\n\n```typescript {3,7} fileName=\"vite.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\ntypescript {3,7} fileName=\"vite.config.ts\" codeFormat=\"typescript\"\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n```\n\n\x3C/Step>\n\n\x3CStep number={8} title=\"Ubah URL saat locale berubah\" isOptional={true}>\n\nUntuk memungkinkan pengguna mengganti bahasa dan memperbarui URL sesuai, Anda dapat membuat komponen `LocaleSwitcher`. Komponen ini akan menggunakan `getLocalizedUrl` dari `intlayer` dan `push` dari `svelte-spa-router`.\n\n```svelte fileName=\"src/lib/LocaleSwitcher.svelte\"\n\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Dapatkan informasi locale\nconst { locale, availableLocales } = useLocale();\n\n// Tangani perubahan locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n\x3C/script>\n\n\x3Cdiv class=\"locale-switcher\">\n \x3Cselect value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n```\n\n\x3C/Step>\n\n\x3CStep number={1} title=\"Ekstrak konten komponen Anda\" isOptional={true}>\n\nJika Anda memiliki basis kode yang ada, mengubah ribuan file bisa memakan waktu lama.\n\nUntuk memudahkan proses ini, Intlayer mengusulkan [compiler](/id/doc/compiler) / [extractor](/id/doc/concept/cli/extract) untuk mengubah komponen Anda dan mengekstrak kontennya.\n\nUntuk mengaturnya, Anda dapat menambahkan bagian `compiler` di file `intlayer.config.ts` Anda:\n\n```typescript fileName=\"intlayer.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Sisa konfigurasi Anda\n compiler: {\n /**\n * Menunjukkan apakah compiler harus diaktifkan.\n */\n enabled: true,\n\n /**\n * Menentukan jalur file output\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Menunjukkan apakah komponen harus disimpan setelah diubah. Dengan begitu, compiler dapat dijalankan satu kali saja untuk mengubah aplikasi, lalu dapat dihapus.\n */\n saveComponents: false,\n\n /**\n * Prefiks kunci kamus\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n```\n\n\x3CTabs>\n \x3CTab value='Perintah ekstrak'>\n\nJalankan extractor untuk mengubah komponen Anda dan mengekstrak kontennya\n\n```bash packageManager=\"npm\"\nnpx intlayer extract\n```\n\n```bash packageManager=\"pnpm\"\npnpm intlayer extract\n```\n\n```bash packageManager=\"yarn\"\nyarn intlayer extract\n```\n\n```bash packageManager=\"bun\"\nbun x intlayer extract\n```\n\n \x3C/Tab>\n \x3CTab value='Compiler Babel'>\n\nPerbarui `vite.config.ts` Anda untuk menyertakan plugin `intlayerCompiler`:\n\n```ts fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Menambahkan plugin compiler\n ],\n});\n```\n\n```bash packageManager=\"npm\"\nnpm run build # Atau npm run dev\n```\n\n```bash packageManager=\"pnpm\"\npnpm run build # Or pnpm run dev\n```\n\n```bash packageManager=\"yarn\"\nyarn build # Or yarn dev\n```\n\n```bash packageManager=\"bun\"\nbun run build # Or bun run dev\n```\n\n \x3C/Tab>\n\x3C/Tabs>\n\x3C/Step>\n\n\x3C/Steps>\n\n### Konfigurasi Git\n\nDisarankan untuk mengabaikan file-file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari meng-commit file tersebut ke repositori Git Anda.\n\nUntuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file `.gitignore` Anda:\n\n```bash\n# Abaikan file yang dihasilkan oleh Intlayer\n.intlayer\n```\n\n### Ekstensi VS Code\n\nUntuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal **Ekstensi VS Code Intlayer** resmi.\n\n[Pasang dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nEkstensi ini menyediakan:\n\n- **Autocompletion** untuk kunci terjemahan.\n- **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.\n- **Pratinjau inline** dari konten yang diterjemahkan.\n- **Tindakan cepat** untuk dengan mudah membuat dan memperbarui terjemahan.\n\nUntuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat [dokumentasi Ekstensi VS Code Intlayer](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### (Opsional) Sitemap dan robots.txt (generate saat build)\n\nIntlayer menyediakan `generateSitemap` dan `getMultilingualUrls` untuk memformat `sitemap.xml` multibahasa dan `robots.txt` yang siap untuk crawler, lalu menulisnya secara otomatis ke `public/`. Biasanya skrip Node kecil dijalankan **sebelum** Vite (misalnya hook npm `predev` / `prebuild`).\n\n#### Sitemap\n\nGenerator sitemap Intlayer menghormati konfigurasi locale dan menambahkan metadata untuk crawler.\n\n> Sitemap mendukung namespace `xhtml:link` (hreflang). Alih-alih hanya daftar URL datar, Intlayer menghubungkan semua varian bahasa setiap halaman secara dua arah (mis. `/about`, `/fr/about`, atau `/about?lang=fr` tergantung mode routing).\n\n#### Robots.txt\n\nGunakan `getMultilingualUrls` agar aturan `Disallow` mencakup semua varian URL jalur sensitif.\n\n#### 1. Buat `generate-seo.mjs` di root proyek\n\n```javascript fileName=\"generate-seo.mjs\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n```\n\nPaket `intlayer` harus terpasang. Setel `SITE_URL` di lingkungan produksi (misalnya di CI).\n\n> Disarankan `generate-seo.mjs` untuk ESM Node. Jika memakai `generate-seo.js`, pastikan `\"type\": \"module\"` di `package.json` atau aktifkan ESM lainnya.\n\n#### 2. Jalankan skrip sebelum Vite\n\n```json fileName=\"package.json\"\n{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n```\n\nSesuaikan perintah jika memakai pnpm atau yarn. Skrip juga bisa dipanggil dari CI.\n\n### Melangkah Lebih Jauh\n\nUntuk melangkah lebih jauh, Anda dapat mengimplementasikan [editor visual](/id/doc/concept/editor) atau mengeksternalisasi konten Anda menggunakan [CMS](/id/doc/concept/cms).\n",docParsed:$R[40]={ast:$R[41]=[$R[42]={children:$R[43]=[$R[44]={text:"Terjemahkan situs web Vite dan Svelte Anda menggunakan Intlayer | Internasionalisasi (i18n)",type:"27"}],id:"terjemahkan-situs-web-vite-dan-svelte-anda-menggunakan-intlayer--internasionalisasi-i18n",level:1,type:"9"},$R[45]={attrs:$R[46]={defaultTab:"code"},noInnerParse:!1,tag:"Tabs",children:$R[47]=[$R[48]={attrs:$R[49]={label:"Kode",value:"code"},noInnerParse:!1,tag:"Tab",children:$R[50]=[$R[51]={type:"19"},$R[52]={attrs:$R[53]={src:"https://ide.intlayer.org/aymericzip/intlayer-vite-svelte-template?file=intlayer.config.ts",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Demo CodeSandbox - Intlayer",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"}],type:"34"},$R[54]={attrs:$R[55]={label:"Demo",value:"demo"},noInnerParse:!1,tag:"Tab",children:$R[56]=[$R[57]={type:"19"},$R[58]={attrs:$R[59]={src:"https://intlayer-vite-svelte-template.vercel.app",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Demo - intlayer-vite-svelte-template",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"}],type:"34"}],type:"34"},$R[60]={children:$R[61]=[$R[62]={text:"Daftar Isi",type:"27"}],id:"daftar-isi",level:2,type:"9"},$R[63]={attrs:null,tag:"TOC",type:"13"},$R[64]={children:$R[65]=[$R[66]={text:"Mengapa Intlayer dibandingkan alternatif?",type:"27"}],id:"mengapa-intlayer-dibandingkan-alternatif",level:2,type:"9"},$R[67]={children:$R[68]=[$R[69]={text:"Dibandingkan dengan solusi utama seperti ",type:"27"},$R[70]={text:"svelte-i18n",type:"5"},$R[71]={text:" atau ",type:"27"},$R[72]={text:"i18next",type:"5"},$R[73]={text:", Intlayer adalah solusi yang hadir dengan pengoptimalan terintegrasi seperti",type:"27"},$R[74]={text:":",type:"27"}],type:"21"},$R[75]={type:"19"},$R[76]={attrs:null,noInnerParse:!1,tag:"AccordionGroup",children:$R[77]=[$R[78]={type:"19"},$R[79]={attrs:$R[80]={header:"Cakupan Ramping Penuh"},noInnerParse:!1,tag:"Accordion",children:$R[81]=[$R[82]={type:"19"},$R[83]={children:$R[84]=[$R[85]={text:"Intlayer dioptimalkan untuk bekerja sempurna dengan Svelte dengan menawarkan ",type:"27"},$R[86]={children:$R[87]=[$R[88]={text:"pelingkupan konten tingkat komponen",type:"27"}],type:"28"},$R[89]={text:", ",type:"27"},$R[90]={children:$R[91]=[$R[92]={text:"terjemahan reaktif",type:"27"}],type:"28"},$R[93]={text:", dan semua fitur yang diperlukan untuk meningkatkan internasionalisasi (i18n).",type:"27"}],type:"21"},$R[94]={type:"19"}],type:"34"},$R[95]={attrs:$R[96]={header:"Ukuran bundle"},noInnerParse:!1,tag:"Accordion",children:$R[97]=[$R[98]={type:"19"},$R[99]={children:$R[100]=[$R[101]={text:"Daripada memuat file JSON berukuran besar ke halaman Anda, muat saja konten yang diperlukan. Intlayer membantu ",type:"27"},$R[102]={children:$R[103]=[$R[104]={text:"mengurangi ukuran bundle dan halaman Anda hingga 50%",type:"27"}],type:"28"},$R[105]={text:".",type:"27"}],type:"21"},$R[106]={type:"19"}],type:"34"},$R[107]={attrs:$R[108]={header:"Kemampuan Pemeliharaan"},noInnerParse:!1,tag:"Accordion",children:$R[109]=[$R[110]={type:"19"},$R[111]={children:$R[112]=[$R[113]={text:"Mencakup konten aplikasi Anda ",type:"27"},$R[114]={children:$R[115]=[$R[116]={text:"memfasilitasi pemeliharaan",type:"27"}],type:"28"},$R[117]={text:" untuk aplikasi berskala besar. Anda dapat menduplikasi atau menghapus satu folder fitur tanpa beban mental untuk meninjau seluruh basis kode konten Anda. Selain itu, Intlayer ",type:"27"},$R[118]={children:$R[119]=[$R[120]={text:"diketik sepenuhnya",type:"27"}],type:"28"},$R[121]={text:" untuk memastikan keakuratan konten Anda.",type:"27"}],type:"21"},$R[122]={type:"19"}],type:"34"},$R[123]={attrs:$R[124]={header:"Agen AI"},noInnerParse:!1,tag:"Accordion",children:$R[125]=[$R[126]={type:"19"},$R[127]={children:$R[128]=[$R[129]={text:"Menempatkan konten bersama ",type:"27"},$R[130]={children:$R[131]=[$R[132]={text:"mengurangi konteks yang diperlukan",type:"27"}],type:"28"},$R[133]={text:" dengan Model Bahasa Besar (LLM). Intlayer juga dilengkapi dengan serangkaian alat, seperti ",type:"27"},$R[134]={children:$R[135]=[$R[136]={text:"CLI",type:"27"}],type:"28"},$R[137]={text:" untuk menguji terjemahan yang hilang,",type:"27"},$R[138]={children:$R[139]=[$R[140]={children:$R[141]=[$R[142]={text:"LSP",type:"27"}],target:"/id/doc/lsp",title:void 0,type:"15"}],type:"28"},$R[143]={text:", ",type:"27"},$R[144]={children:$R[145]=[$R[146]={children:$R[147]=[$R[148]={text:"MCP",type:"27"}],target:"/id/doc/mcp-server",title:void 0,type:"15"}],type:"28"},$R[149]={text:", dan ",type:"27"},$R[150]={children:$R[151]=[$R[152]={children:$R[153]=[$R[154]={text:"agent skill",type:"27"}],target:"/id/doc/agent_skills",title:void 0,type:"15"}],type:"28"},$R[155]={text:", untuk menjadikan pengalaman pengembang (DX) lebih lancar bagi agen AI.",type:"27"}],type:"21"},$R[156]={type:"19"}],type:"34"},$R[157]={attrs:$R[158]={header:"Otomatisasi"},noInnerParse:!1,tag:"Accordion",children:$R[159]=[$R[160]={type:"19"},$R[161]={children:$R[162]=[$R[163]={text:"Gunakan otomatisasi untuk menerjemahkan dalam saluran CI/CD Anda menggunakan LLM pilihan Anda dengan biaya penyedia AI Anda. Intlayer juga menawarkan ",type:"27"},$R[164]={children:$R[165]=[$R[166]={text:"compiler",type:"27"}],type:"28"},$R[167]={text:" untuk mengotomatiskan ekstraksi konten, serta ",type:"27"},$R[168]={children:$R[169]=[$R[170]={text:"platform web",type:"27"}],target:"/id/doc/concept/cms",title:void 0,type:"15"},$R[171]={text:" untuk membantu ",type:"27"},$R[172]={children:$R[173]=[$R[174]={text:"menerjemahkan di latar belakang",type:"27"}],type:"28"},$R[175]={text:".",type:"27"}],type:"21"},$R[176]={type:"19"}],type:"34"},$R[177]={attrs:$R[178]={header:"Pertunjukan"},noInnerParse:!1,tag:"Accordion",children:$R[179]=[$R[180]={type:"19"},$R[181]={children:$R[182]=[$R[183]={text:"Menghubungkan file JSON berukuran besar ke komponen dapat menyebabkan masalah kinerja dan reaktivitas. Intlayer mengoptimalkan pemuatan konten Anda pada waktu pembuatan.",type:"27"}],type:"21"},$R[184]={type:"19"}],type:"34"},$R[185]={attrs:$R[186]={header:"Menskalakan tanpa pengembang"},noInnerParse:!1,tag:"Accordion",children:$R[187]=[$R[188]={type:"19"},$R[189]={children:$R[190]=[$R[191]={text:"Lebih dari sekedar solusi i18n, Intlayer menyediakan ",type:"27"},$R[192]={children:$R[193]=[$R[194]={children:$R[195]=[$R[196]={text:"editor visual",type:"27"}],target:"/id/doc/concept/editor",title:void 0,type:"15"}],type:"28"},$R[197]={text:" yang dihosting sendiri dan ",type:"27"},$R[198]={children:$R[199]=[$R[200]={children:$R[201]=[$R[202]={text:"CMS lengkap",type:"27"}],target:"/id/doc/concept/cms",title:void 0,type:"15"}],type:"28"},$R[203]={text:" untuk membantu Anda mengelola konten multibahasa secara ",type:"27"},$R[204]={children:$R[205]=[$R[206]={text:"real",type:"27"},$R[207]={text:"-time",type:"27"}],type:"28"},$R[208]={text:", membuat kolaborasi dengan penerjemah, copywriter, dan anggota tim lainnya menjadi lancar. Konten dapat disimpan secara lokal dan/atau jarak jauh.",type:"27"}],type:"21"},$R[209]={type:"19"}],type:"34"}],type:"34"},$R[210]={type:"2"},$R[211]={children:$R[212]=[$R[213]={text:"Panduan Langkah demi Langkah untuk Mengatur Intlayer dalam Aplikasi Vite dan Svelte",type:"27"}],id:"panduan-langkah-demi-langkah-untuk-mengatur-intlayer-dalam-aplikasi-vite-dan-svelte",level:2,type:"9"},$R[214]={attrs:$R[215]={src:"https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts",className:"m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full",title:"Demo CodeSandbox - Cara Menginternasionalisasi aplikasi Anda menggunakan Intlayer",sandbox:"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts",loading:"lazy"},tag:"iframe",type:"13"},$R[216]={children:$R[217]=[$R[218]={text:"Lihat ",type:"27"},$R[219]={children:$R[220]=[$R[221]={text:"Template Aplikasi",type:"27"}],target:"https://github.com/aymericzip/intlayer-vite-svelte-template",title:void 0,type:"15"},$R[222]={text:" di GitHub.",type:"27"}],type:"21"},$R[223]={type:"19"},$R[224]={attrs:null,noInnerParse:!1,tag:"Steps",children:$R[225]=[$R[226]={type:"19"},$R[227]={attrs:$R[228]={number:"1",title:"Instalasi Dependensi"},noInnerParse:!1,tag:"Step",children:$R[229]=[$R[230]={type:"19"},$R[231]={children:$R[232]=[$R[233]={text:"Instal paket yang diperlukan menggunakan npm",type:"27"},$R[234]={text:":",type:"27"}],type:"21"},$R[235]={type:"19"},$R[236]={attrs:$R[237]={packageManager:"npm"},lang:"bash",text:"npm install intlayer svelte-intlayer\nnpm install vite-intlayer --save-dev\nnpx intlayer init\n",type:"3"},$R[238]={type:"19"},$R[239]={attrs:$R[240]={packageManager:"pnpm"},lang:"bash",text:"pnpm add intlayer svelte-intlayer\npnpm add vite-intlayer --save-dev\npnpm intlayer init\n",type:"3"},$R[241]={type:"19"},$R[242]={attrs:$R[243]={packageManager:"yarn"},lang:"bash",text:"yarn add intlayer svelte-intlayer\nyarn add vite-intlayer --save-dev\nyarn intlayer init\n",type:"3"},$R[244]={type:"19"},$R[245]={attrs:$R[246]={packageManager:"bun"},lang:"bash",text:"bun add intlayer svelte-intlayer\nbun add vite-intlayer --save-dev\nbun x intlayer init\n",type:"3"},$R[247]={type:"19"},$R[248]={items:$R[249]=[$R[250]=[$R[251]={children:$R[252]=[$R[253]={children:$R[254]=[$R[255]={text:"intlayer",type:"27"}],type:"28"}],type:"21"},$R[256]={type:"19"},$R[257]={children:$R[258]=[$R[259]={text:"Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, ",type:"27"},$R[260]={children:$R[261]=[$R[262]={text:"deklarasi konten",type:"27"}],target:"/id/doc/concept/content",title:void 0,type:"15"},$R[263]={text:", transpile, dan ",type:"27"},$R[264]={children:$R[265]=[$R[266]={text:"perintah CLI",type:"27"}],target:"/id/doc/concept/cli",title:void 0,type:"15"},$R[267]={text:".",type:"27"}],type:"21"},$R[268]={type:"19"}],$R[269]=[$R[270]={children:$R[271]=[$R[272]={children:$R[273]=[$R[274]={text:"svelte",type:"27"},$R[275]={text:"-intlayer",type:"27"}],type:"28"},$R[276]={text:"\nPaket yang mengintegrasikan Intlayer dengan aplikasi Svelte. Ini menyediakan context providers dan hooks untuk internasionalisasi Svelte.",type:"27"}],type:"21"},$R[277]={type:"19"}],$R[278]=[$R[279]={children:$R[280]=[$R[281]={children:$R[282]=[$R[283]={text:"vite",type:"27"},$R[284]={text:"-intlayer",type:"27"}],type:"28"},$R[285]={type:"1"},$R[286]={text:"Termasuk plugin Vite untuk mengintegrasikan Intlayer dengan ",type:"27"},$R[287]={children:$R[288]=[$R[289]={text:"Vite bundler",type:"27"}],target:"https://vite.dev/guide/why.html#why-bundle-for-production",title:void 0,type:"15"},$R[290]={text:", serta middleware untuk mendeteksi locale yang dipilih pengguna, mengelola cookie, dan menangani pengalihan URL.",type:"27"}],type:"21"},$R[291]={type:"19"}]],ordered:!1,start:void 0,type:"33"}],type:"34"},$R[292]={attrs:$R[293]={number:"2",title:"Konfigurasi proyek Anda"},noInnerParse:!1,tag:"Step",children:$R[294]=[$R[295]={type:"19"},$R[296]={children:$R[297]=[$R[298]={text:"Buat file konfigurasi untuk mengatur bahasa aplikasi Anda",type:"27"},$R[299]={text:":",type:"27"}],type:"21"},$R[300]={type:"19"},$R[301]={attrs:$R[302]={fileName:"intlayer.config.ts"},lang:"typescript",text:"import { Locales, type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n internationalization: {\n locales: [\n Locales.ENGLISH,\n Locales.FRENCH,\n Locales.SPANISH,\n // Locale lain milik Anda\n ],\n defaultLocale: Locales.ENGLISH,\n },\n};\n\nexport default config;\n",type:"3"},$R[303]={type:"19"},$R[304]={alert:void 0,children:$R[305]=[$R[306]={text:"Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, pengalihan middleware, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan lainnya. Untuk daftar lengkap parameter yang tersedia, lihat ",type:"27"},$R[307]={children:$R[308]=[$R[309]={text:"dokumentasi konfigurasi",type:"27"}],target:"/id/doc/concept/configuration",title:void 0,type:"15"},$R[310]={text:".",type:"27"}],type:"0"},$R[311]={type:"19"}],type:"34"},$R[312]={attrs:$R[313]={number:"3",title:"Integrasikan Intlayer dalam Konfigurasi Vite Anda"},noInnerParse:!1,tag:"Step",children:$R[314]=[$R[315]={type:"19"},$R[316]={children:$R[317]=[$R[318]={text:"Tambahkan plugin intlayer ke dalam konfigurasi Anda.",type:"27"}],type:"21"},$R[319]={type:"19"},$R[320]={attrs:$R[321]={fileName:"vite.config.ts"},lang:"typescript",text:"import { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [svelte(), intlayer()],\n});\n",type:"3"},$R[322]={type:"19"},$R[323]={alert:void 0,children:$R[324]=[$R[325]={text:"Plugin Vite ",type:"27"},$R[326]={text:"intlayer()",type:"5"},$R[327]={text:" digunakan untuk mengintegrasikan Intlayer dengan Vite. Plugin ini memastikan pembuatan file deklarasi konten dan memantau file tersebut dalam mode pengembangan. Plugin ini juga mendefinisikan variabel lingkungan Intlayer dalam aplikasi Vite. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa.",type:"27"}],type:"0"},$R[328]={type:"19"}],type:"34"},$R[329]={attrs:$R[330]={number:"4",title:"Deklarasikan Konten Anda"},noInnerParse:!1,tag:"Step",children:$R[331]=[$R[332]={type:"19"},$R[333]={children:$R[334]=[$R[335]={text:"Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan",type:"27"},$R[336]={text:":",type:"27"}],type:"21"},$R[337]={type:"19"},$R[338]={attrs:$R[339]={fileName:"src/app.content.tsx",contentDeclarationFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"tsx",text:"import { t, type Dictionary } from \"intlayer\";\n\nconst appContent = {\n key: \"app\",\n content: {\n title: t({\n en: \"Hello World\",\n fr: \"Bonjour le monde\",\n es: \"Hola mundo\",\n }),\n },\n} satisfies Dictionary;\n\nexport default appContent;\n",type:"3"},$R[340]={type:"19"},$R[341]={attrs:$R[342]={fileName:"src/app.content.json",contentDeclarationFormat:"json"},lang:"json",text:"{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"app\",\n \"content\": {\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Hello World\",\n \"fr\": \"Bonjour le monde\",\n \"es\": \"Hola mundo\"\n }\n }\n }\n}\n",type:"3"},$R[343]={type:"19"},$R[344]={alert:void 0,children:$R[345]=[$R[346]={text:"Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama mereka dimasukkan ke dalam direktori ",type:"27"},$R[347]={text:"contentDir",type:"5"},$R[348]={text:" (secara default, ",type:"27"},$R[349]={text:"./src",type:"5"},$R[350]={text:"). Dan sesuai dengan ekstensi file deklarasi konten (secara default, ",type:"27"},$R[351]={text:".content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}",type:"5"},$R[352]={text:").",type:"27"}],type:"0"},$R[353]={type:"19"},$R[354]={alert:void 0,children:$R[355]=[$R[356]={text:"Untuk detail lebih lanjut, lihat ",type:"27"},$R[357]={children:$R[358]=[$R[359]={text:"dokumentasi deklarasi konten",type:"27"}],target:"/id/doc/concept/content",title:void 0,type:"15"},$R[360]={text:".",type:"27"}],type:"0"},$R[361]={type:"19"}],type:"34"},$R[362]={attrs:$R[363]={number:"5",title:"Gunakan Intlayer dalam Kode Anda"},noInnerParse:!1,tag:"Step",children:$R[364]=[$R[365]={type:"19"},$R[366]={attrs:$R[367]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript>\n import { useIntlayer } from \"svelte-intlayer\";\n\n const content = useIntlayer(\"app\");\n\x3C/script>\n\n\x3Cdiv>\n\n\n\x3C!-- Render konten sebagai konten sederhana -->\n\x3Ch1>{$content.title}\x3C/h1>\n\x3C!-- Untuk merender konten yang dapat diedit menggunakan editor -->\n\x3Ch1>{@const Title = $content.title}\x3CTitle />\x3C/h1>\n\x3C!-- Untuk merender konten sebagai string -->\n\x3Cdiv aria-label={$content.title.value}>\x3C/div>\n\x3Cdiv aria-label={$content.title.toString()}>\x3C/div>\n\x3Cdiv aria-label={String($content.title)}>\x3C/div>\n",type:"3"},$R[368]={type:"19"},$R[369]={alert:void 0,children:$R[370]=[$R[371]={text:"Jika aplikasi Anda sudah ada, Anda dapat menggunakan ",type:"27"},$R[372]={children:$R[373]=[$R[374]={text:"Intlayer Compiler",type:"27"}],target:"/id/doc/compiler",title:void 0,type:"15"},$R[375]={text:" secara kombinasi dengan ",type:"27"},$R[376]={children:$R[377]=[$R[378]={text:"perintah extract",type:"27"}],target:"/id/doc/concept/cli/extract",title:void 0,type:"15"},$R[379]={text:" untuk mengonversi ribuan komponen dalam satu detik.",type:"27"}],type:"0"},$R[380]={type:"19"}],type:"34"},$R[381]={attrs:$R[382]={number:"6",title:"Ubah bahasa konten Anda",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[383]=[$R[384]={type:"19"},$R[385]={attrs:$R[386]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { getLocaleName } from 'intlayer';\nimport { useLocale } from \"svelte-intlayer\";\n\n// Dapatkan informasi locale dan fungsi setLocale\nconst { locale, availableLocales, setLocale } = useLocale();\n\n// Tangani perubahan locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n setLocale(newLocale);\n};\n\x3C/script>\n\n\x3Cdiv>\n \x3Cselect value={$locale} on:change={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n",type:"3"},$R[387]={type:"19"}],type:"34"},$R[388]={attrs:$R[389]={number:"7",title:"Render Markdown",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[390]=[$R[391]={type:"19"},$R[392]={children:$R[393]=[$R[394]={text:"Intlayer mendukung rendering konten Markdown langsung di aplikasi Svelte Anda. Secara default, Markdown diperlakukan sebagai teks biasa. Untuk mengubah Markdown menjadi HTML kaya, Anda dapat mengintegrasikan ",type:"27"},$R[395]={text:"@humanspeak/svelte-markdown",type:"5"},$R[396]={text:", atau parser markdown lainnya.",type:"27"}],type:"21"},$R[397]={type:"19"},$R[398]={alert:void 0,children:$R[399]=[$R[400]={text:"Untuk melihat cara mendeklarasikan konten markdown menggunakan paket ",type:"27"},$R[401]={text:"intlayer",type:"5"},$R[402]={text:", lihat ",type:"27"},$R[403]={children:$R[404]=[$R[405]={text:"dokumen markdown",type:"27"}],target:"https://github.com/aymericzip/intlayer/tree/main/docs/docs/id/dictionary/markdown.md",title:void 0,type:"15"},$R[406]={text:".",type:"27"}],type:"0"},$R[407]={type:"19"},$R[408]={attrs:$R[409]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript>\n import { setIntlayerMarkdown } from \"svelte-intlayer\";\n\n setIntlayerMarkdown((markdown) =>\n // render konten markdown sebagai string\n return markdown;\n );\n\x3C/script>\n\n\x3Ch1>{$content.markdownContent}\x3C/h1>\n",type:"3"},$R[410]={type:"19"},$R[411]={alert:void 0,children:$R[412]=[$R[413]={text:"Anda juga dapat mengakses data front",type:"27"},$R[414]={text:"-matter markdown Anda menggunakan properti ",type:"27"},$R[415]={text:"content.markdownContent.metadata.xxx",type:"5"},$R[416]={text:".",type:"27"}],type:"0"},$R[417]={type:"19"}],type:"34"},$R[418]={attrs:$R[419]={number:"8",title:"Siapkan editor / CMS intlayer",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[420]=[$R[421]={type:"19"},$R[422]={children:$R[423]=[$R[424]={text:"Untuk menyiapkan editor intlayer, Anda harus mengikuti ",type:"27"},$R[425]={children:$R[426]=[$R[427]={text:"dokumentasi editor intlayer",type:"27"}],target:"/id/doc/concept/editor",title:void 0,type:"15"},$R[428]={text:".",type:"27"}],type:"21"},$R[429]={type:"19"},$R[430]={children:$R[431]=[$R[432]={text:"Untuk menyiapkan CMS intlayer, Anda harus mengikuti ",type:"27"},$R[433]={children:$R[434]=[$R[435]={text:"dokumentasi CMS intlayer",type:"27"}],target:"/id/doc/concept/cms",title:void 0,type:"15"},$R[436]={text:".",type:"27"}],type:"21"},$R[437]={type:"19"}],type:"34"},$R[438]={attrs:$R[439]={number:"7",title:"Tambahkan Routing yang dilokalkan ke aplikasi Anda",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[440]=[$R[441]={type:"19"},$R[442]={children:$R[443]=[$R[444]={text:"Untuk menangani routing yang dilokalkan dalam aplikasi Svelte Anda, Anda dapat menggunakan ",type:"27"},$R[445]={text:"svelte-spa-router",type:"5"},$R[446]={text:" bersama dengan ",type:"27"},$R[447]={text:"localeFlatMap",type:"5"},$R[448]={text:" dari Intlayer untuk menghasilkan rute untuk setiap locale.",type:"27"}],type:"21"},$R[449]={type:"19"},$R[450]={children:$R[451]=[$R[452]={text:"Pertama, instal ",type:"27"},$R[453]={text:"svelte-spa-router",type:"5"},$R[454]={text:":",type:"27"}],type:"21"},$R[455]={type:"19"},$R[456]={attrs:$R[457]={packageManager:"npm"},lang:"bash",text:"npm install svelte-spa-router\nnpx intlayer init\n",type:"3"},$R[458]={type:"19"},$R[459]={attrs:$R[460]={packageManager:"pnpm"},lang:"bash",text:"pnpm add svelte-spa-router\npnpm intlayer init\n",type:"3"},$R[461]={type:"19"},$R[462]={attrs:$R[463]={packageManager:"yarn"},lang:"bash",text:"yarn add svelte-spa-router\nyarn intlayer init\n",type:"3"},$R[464]={type:"19"},$R[465]={attrs:$R[466]={packageManager:"bun"},lang:"bash",text:"bun add svelte-spa-router\n",type:"3"},$R[467]={type:"19"},$R[468]={children:$R[469]=[$R[470]={text:"Kemudian, buat file ",type:"27"},$R[471]={text:"Router.svelte",type:"5"},$R[472]={text:" untuk mendefinisikan rute Anda",type:"27"},$R[473]={text:":",type:"27"}],type:"21"},$R[474]={type:"19"},$R[475]={attrs:$R[476]={fileName:"src/Router.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { localeFlatMap } from \"intlayer\";\nimport Router from \"svelte-spa-router\";\nimport { wrap } from \"svelte-spa-router/wrap\";\nimport App from \"./App.svelte\";\n\nconst routes = Object.fromEntries(\n localeFlatMap(({locale, urlPrefix}) => [\n [\n urlPrefix || '/',\n wrap({\n component: App as any,\n props: {\n locale,\n },\n }),\n ],\n ])\n);\n\x3C/script>\n\n\x3CRouter {routes} />\n",type:"3"},$R[477]={type:"19"},$R[478]={children:$R[479]=[$R[480]={text:"Perbarui ",type:"27"},$R[481]={text:"main.ts",type:"5"},$R[482]={text:" Anda untuk memasang komponen ",type:"27"},$R[483]={text:"Router",type:"5"},$R[484]={text:" menggantikan ",type:"27"},$R[485]={text:"App",type:"5"},$R[486]={text:":",type:"27"}],type:"21"},$R[487]={type:"19"},$R[488]={attrs:$R[489]={fileName:"src/main.ts"},lang:"typescript",text:"import { mount } from \"svelte\";\nimport Router from \"./Router.svelte\";\n\nconst app = mount(Router, {\n target: document.getElementById(\"app\")!,\n});\n\nexport default app;\n",type:"3"},$R[490]={type:"19"},$R[491]={children:$R[492]=[$R[493]={text:"Terakhir, perbarui ",type:"27"},$R[494]={text:"App.svelte",type:"5"},$R[495]={text:" Anda untuk menerima properti ",type:"27"},$R[496]={text:"locale",type:"5"},$R[497]={text:" dan menggunakannya dengan ",type:"27"},$R[498]={text:"useIntlayer",type:"5"},$R[499]={text:":",type:"27"}],type:"21"},$R[500]={type:"19"},$R[501]={attrs:$R[502]={fileName:"src/App.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport type { Locale } from 'intlayer';\nimport { useIntlayer } from \"svelte-intlayer\";\nimport Counter from './lib/Counter.svelte';\nimport LocaleSwitcher from './lib/LocaleSwitcher.svelte';\n\nexport let locale: Locale;\n\n$: content = useIntlayer('app', locale);\n\x3C/script>\n\n\x3Cmain>\n \x3Cdiv class=\"locale-switcher-container\">\n \x3CLocaleSwitcher currentLocale={locale} />\n \x3C/div>\n\n \x3C!-- ... sisa aplikasi Anda ... -->\n\x3C/main>\n",type:"3"},$R[503]={type:"19"},$R[504]={children:$R[505]=[$R[506]={text:"Konfigurasi Routing Server",type:"27"},$R[507]={text:"-Side (Opsional)",type:"27"}],id:"konfigurasi-routing-server-side-opsional",level:4,type:"9"},$R[508]={children:$R[509]=[$R[510]={text:"Secara paralel, Anda juga dapat menggunakan ",type:"27"},$R[511]={text:"intlayerProxy",type:"5"},$R[512]={text:" untuk menambahkan routing sisi server ke aplikasi Anda. Plugin ini akan secara otomatis mendeteksi locale saat ini berdasarkan URL dan mengatur cookie locale yang sesuai. Jika tidak ada locale yang ditentukan, plugin akan menentukan locale yang paling sesuai berdasarkan preferensi bahasa browser pengguna. Jika tidak ada locale yang terdeteksi, maka akan mengarahkan ulang ke locale default.",type:"27"}],type:"21"},$R[513]={type:"19"},$R[514]={alert:void 0,children:$R[515]=[$R[516]={text:"Perlu diperhatikan bahwa untuk menggunakan ",type:"27"},$R[517]={text:"intlayerProxy",type:"5"},$R[518]={text:" di produksi, Anda perlu memindahkan paket ",type:"27"},$R[519]={text:"vite-intlayer",type:"5"},$R[520]={text:" dari ",type:"27"},$R[521]={text:"devDependencies",type:"5"},$R[522]={text:" ke ",type:"27"},$R[523]={text:"dependencies",type:"5"},$R[524]={text:".",type:"27"}],type:"0"},$R[525]={type:"19"},$R[526]={attrs:$R[527]={3:!0,7:!0,fileName:"vite.config.ts",codeFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"typescript",text:"import { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\ntypescript {3,7} fileName=\"vite.config.ts\" codeFormat=\"typescript\"\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [intlayerProxy(), // should be placed first\n svelte(), intlayer()],\n});\n",type:"3"},$R[528]={type:"19"}],type:"34"},$R[529]={attrs:$R[530]={number:"8",title:"Ubah URL saat locale berubah",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[531]=[$R[532]={type:"19"},$R[533]={children:$R[534]=[$R[535]={text:"Untuk memungkinkan pengguna mengganti bahasa dan memperbarui URL sesuai, Anda dapat membuat komponen ",type:"27"},$R[536]={text:"LocaleSwitcher",type:"5"},$R[537]={text:". Komponen ini akan menggunakan ",type:"27"},$R[538]={text:"getLocalizedUrl",type:"5"},$R[539]={text:" dari ",type:"27"},$R[540]={text:"intlayer",type:"5"},$R[541]={text:" dan ",type:"27"},$R[542]={text:"push",type:"5"},$R[543]={text:" dari ",type:"27"},$R[544]={text:"svelte-spa-router",type:"5"},$R[545]={text:".",type:"27"}],type:"21"},$R[546]={type:"19"},$R[547]={attrs:$R[548]={fileName:"src/lib/LocaleSwitcher.svelte"},lang:"svelte",text:"\x3Cscript lang=\"ts\">\nimport { getLocaleName, getLocalizedUrl } from \"intlayer\";\nimport { useLocale } from \"svelte-intlayer\";\nimport { push } from \"svelte-spa-router\";\n\nexport let currentLocale: string | undefined = undefined;\n\n// Dapatkan informasi locale\nconst { locale, availableLocales } = useLocale();\n\n// Tangani perubahan locale\nconst changeLocale = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const newLocale = target.value;\n const currentUrl = window.location.pathname;\n const url = getLocalizedUrl( currentUrl, newLocale);\n push(url);\n};\n\x3C/script>\n\n\x3Cdiv class=\"locale-switcher\">\n \x3Cselect value={currentLocale ?? $locale} onchange={changeLocale}>\n {#each availableLocales ?? [] as loc}\n \x3Coption value={loc}>\n {getLocaleName(loc)}\n \x3C/option>\n {/each}\n \x3C/select>\n\x3C/div>\n",type:"3"},$R[549]={type:"19"}],type:"34"},$R[550]={attrs:$R[551]={number:"1",title:"Ekstrak konten komponen Anda",isOptional:!0},noInnerParse:!1,tag:"Step",children:$R[552]=[$R[553]={type:"19"},$R[554]={children:$R[555]=[$R[556]={text:"Jika Anda memiliki basis kode yang ada, mengubah ribuan file bisa memakan waktu lama.",type:"27"}],type:"21"},$R[557]={type:"19"},$R[558]={children:$R[559]=[$R[560]={text:"Untuk memudahkan proses ini, Intlayer mengusulkan ",type:"27"},$R[561]={children:$R[562]=[$R[563]={text:"compiler",type:"27"}],target:"/id/doc/compiler",title:void 0,type:"15"},$R[564]={text:" / ",type:"27"},$R[565]={children:$R[566]=[$R[567]={text:"extractor",type:"27"}],target:"/id/doc/concept/cli/extract",title:void 0,type:"15"},$R[568]={text:" untuk mengubah komponen Anda dan mengekstrak kontennya.",type:"27"}],type:"21"},$R[569]={type:"19"},$R[570]={children:$R[571]=[$R[572]={text:"Untuk mengaturnya, Anda dapat menambahkan bagian ",type:"27"},$R[573]={text:"compiler",type:"5"},$R[574]={text:" di file ",type:"27"},$R[575]={text:"intlayer.config.ts",type:"5"},$R[576]={text:" Anda",type:"27"},$R[577]={text:":",type:"27"}],type:"21"},$R[578]={type:"19"},$R[579]={attrs:$R[580]={fileName:"intlayer.config.ts",codeFormat:"[\"typescript\", \"esm\", \"commonjs\"]"},lang:"typescript",text:"import { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Sisa konfigurasi Anda\n compiler: {\n /**\n * Menunjukkan apakah compiler harus diaktifkan.\n */\n enabled: true,\n\n /**\n * Menentukan jalur file output\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Menunjukkan apakah komponen harus disimpan setelah diubah. Dengan begitu, compiler dapat dijalankan satu kali saja untuk mengubah aplikasi, lalu dapat dihapus.\n */\n saveComponents: false,\n\n /**\n * Prefiks kunci kamus\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n",type:"3"},$R[581]={type:"19"},$R[582]={attrs:null,noInnerParse:!1,tag:"Tabs",children:$R[583]=[$R[584]={attrs:$R[585]={value:"Perintah ekstrak"},noInnerParse:!1,tag:"Tab",children:$R[586]=[$R[587]={type:"19"},$R[588]={children:$R[589]=[$R[590]={text:"Jalankan extractor untuk mengubah komponen Anda dan mengekstrak kontennya",type:"27"}],type:"21"},$R[591]={type:"19"},$R[592]={attrs:$R[593]={packageManager:"npm"},lang:"bash",text:"npx intlayer extract\n",type:"3"},$R[594]={type:"19"},$R[595]={attrs:$R[596]={packageManager:"pnpm"},lang:"bash",text:"pnpm intlayer extract\n",type:"3"},$R[597]={type:"19"},$R[598]={attrs:$R[599]={packageManager:"yarn"},lang:"bash",text:"yarn intlayer extract\n",type:"3"},$R[600]={type:"19"},$R[601]={attrs:$R[602]={packageManager:"bun"},lang:"bash",text:"bun x intlayer extract\n",type:"3"},$R[603]={type:"19"}],type:"34"},$R[604]={attrs:$R[605]={value:"Compiler Babel"},noInnerParse:!1,tag:"Tab",children:$R[606]=[$R[607]={type:"19"},$R[608]={children:$R[609]=[$R[610]={text:"Perbarui ",type:"27"},$R[611]={text:"vite.config.ts",type:"5"},$R[612]={text:" Anda untuk menyertakan plugin ",type:"27"},$R[613]={text:"intlayerCompiler",type:"5"},$R[614]={text:":",type:"27"}],type:"21"},$R[615]={type:"19"},$R[616]={attrs:$R[617]={fileName:"vite.config.ts"},lang:"ts",text:"import { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Menambahkan plugin compiler\n ],\n});\n",type:"3"},$R[618]={type:"19"},$R[619]={attrs:$R[620]={packageManager:"npm"},lang:"bash",text:"npm run build # Atau npm run dev\n",type:"3"},$R[621]={type:"19"},$R[622]={attrs:$R[623]={packageManager:"pnpm"},lang:"bash",text:"pnpm run build # Or pnpm run dev\n",type:"3"},$R[624]={type:"19"},$R[625]={attrs:$R[626]={packageManager:"yarn"},lang:"bash",text:"yarn build # Or yarn dev\n",type:"3"},$R[627]={type:"19"},$R[628]={attrs:$R[629]={packageManager:"bun"},lang:"bash",text:"bun run build # Or bun run dev\n",type:"3"},$R[630]={type:"19"}],type:"34"}],type:"34"}],type:"34"}],type:"34"},$R[631]={children:$R[632]=[$R[633]={text:"Konfigurasi Git",type:"27"}],id:"konfigurasi-git",level:3,type:"9"},$R[634]={children:$R[635]=[$R[636]={text:"Disarankan untuk mengabaikan file",type:"27"},$R[637]={text:"-file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari meng",type:"27"},$R[638]={text:"-commit file tersebut ke repositori Git Anda.",type:"27"}],type:"21"},$R[639]={type:"19"},$R[640]={children:$R[641]=[$R[642]={text:"Untuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file ",type:"27"},$R[643]={text:".gitignore",type:"5"},$R[644]={text:" Anda",type:"27"},$R[645]={text:":",type:"27"}],type:"21"},$R[646]={type:"19"},$R[647]={attrs:null,lang:"bash",text:"# Abaikan file yang dihasilkan oleh Intlayer\n.intlayer\n",type:"3"},$R[648]={type:"19"},$R[649]={children:$R[650]=[$R[651]={text:"Ekstensi VS Code",type:"27"}],id:"ekstensi-vs-code",level:3,type:"9"},$R[652]={children:$R[653]=[$R[654]={text:"Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal ",type:"27"},$R[655]={children:$R[656]=[$R[657]={text:"Ekstensi VS Code Intlayer",type:"27"}],type:"28"},$R[658]={text:" resmi.",type:"27"}],type:"21"},$R[659]={type:"19"},$R[660]={children:$R[661]=[$R[662]={children:$R[663]=[$R[664]={text:"Pasang dari VS Code Marketplace",type:"27"}],target:"https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension",title:void 0,type:"15"}],type:"21"},$R[665]={type:"19"},$R[666]={children:$R[667]=[$R[668]={text:"Ekstensi ini menyediakan",type:"27"},$R[669]={text:":",type:"27"}],type:"21"},$R[670]={type:"19"},$R[671]={items:$R[672]=[$R[673]=[$R[674]={children:$R[675]=[$R[676]={text:"Autocompletion",type:"27"}],type:"28"},$R[677]={text:" untuk kunci terjemahan.",type:"27"}],$R[678]=[$R[679]={children:$R[680]=[$R[681]={text:"Deteksi kesalahan waktu nyata",type:"27"}],type:"28"},$R[682]={text:" untuk terjemahan yang hilang.",type:"27"}],$R[683]=[$R[684]={children:$R[685]=[$R[686]={text:"Pratinjau inline",type:"27"}],type:"28"},$R[687]={text:" dari konten yang diterjemahkan.",type:"27"}],$R[688]=[$R[689]={children:$R[690]=[$R[691]={text:"Tindakan cepat",type:"27"}],type:"28"},$R[692]={text:" untuk dengan mudah membuat dan memperbarui terjemahan.",type:"27"}]],ordered:!1,start:void 0,type:"33"},$R[693]={children:$R[694]=[$R[695]={text:"Untuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat ",type:"27"},$R[696]={children:$R[697]=[$R[698]={text:"dokumentasi Ekstensi VS Code Intlayer",type:"27"}],target:"https://intlayer.org/doc/vs-code-extension",title:void 0,type:"15"},$R[699]={text:".",type:"27"}],type:"21"},$R[700]={type:"19"},$R[701]={type:"2"},$R[702]={children:$R[703]=[$R[704]={text:"(Opsional) Sitemap dan robots.txt (generate saat build)",type:"27"}],id:"opsional-sitemap-dan-robotstxt-generate-saat-build",level:3,type:"9"},$R[705]={children:$R[706]=[$R[707]={text:"Intlayer menyediakan ",type:"27"},$R[708]={text:"generateSitemap",type:"5"},$R[709]={text:" dan ",type:"27"},$R[710]={text:"getMultilingualUrls",type:"5"},$R[711]={text:" untuk memformat ",type:"27"},$R[712]={text:"sitemap.xml",type:"5"},$R[713]={text:" multibahasa dan ",type:"27"},$R[714]={text:"robots.txt",type:"5"},$R[715]={text:" yang siap untuk crawler, lalu menulisnya secara otomatis ke ",type:"27"},$R[716]={text:"public/",type:"5"},$R[717]={text:". Biasanya skrip Node kecil dijalankan ",type:"27"},$R[718]={children:$R[719]=[$R[720]={text:"sebelum",type:"27"}],type:"28"},$R[721]={text:" Vite (misalnya hook npm ",type:"27"},$R[722]={text:"predev",type:"5"},$R[723]={text:" / ",type:"27"},$R[724]={text:"prebuild",type:"5"},$R[725]={text:").",type:"27"}],type:"21"},$R[726]={type:"19"},$R[727]={children:$R[728]=[$R[729]={text:"Sitemap",type:"27"}],id:"sitemap",level:4,type:"9"},$R[730]={children:$R[731]=[$R[732]={text:"Generator sitemap Intlayer menghormati konfigurasi locale dan menambahkan metadata untuk crawler.",type:"27"}],type:"21"},$R[733]={type:"19"},$R[734]={alert:void 0,children:$R[735]=[$R[736]={text:"Sitemap mendukung namespace ",type:"27"},$R[737]={text:"xhtml:link",type:"5"},$R[738]={text:" (hreflang). Alih",type:"27"},$R[739]={text:"-alih hanya daftar URL datar, Intlayer menghubungkan semua varian bahasa setiap halaman secara dua arah (mis. ",type:"27"},$R[740]={text:"/about",type:"5"},$R[741]={text:", ",type:"27"},$R[742]={text:"/fr/about",type:"5"},$R[743]={text:", atau ",type:"27"},$R[744]={text:"/about?lang=fr",type:"5"},$R[745]={text:" tergantung mode routing).",type:"27"}],type:"0"},$R[746]={type:"19"},$R[747]={children:$R[748]=[$R[749]={text:"Robots.txt",type:"27"}],id:"robotstxt",level:4,type:"9"},$R[750]={children:$R[751]=[$R[752]={text:"Gunakan ",type:"27"},$R[753]={text:"getMultilingualUrls",type:"5"},$R[754]={text:" agar aturan ",type:"27"},$R[755]={text:"Disallow",type:"5"},$R[756]={text:" mencakup semua varian URL jalur sensitif.",type:"27"}],type:"21"},$R[757]={type:"19"},$R[758]={children:$R[759]=[$R[760]={text:"1. Buat ",type:"27"},$R[761]={text:"generate-seo.mjs",type:"5"},$R[762]={text:" di root proyek",type:"27"}],id:"1-buat-generate-seomjs-di-root-proyek",level:4,type:"9"},$R[763]={attrs:$R[764]={fileName:"generate-seo.mjs"},lang:"javascript",text:"import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n",type:"3"},$R[765]={type:"19"},$R[766]={children:$R[767]=[$R[768]={text:"Paket ",type:"27"},$R[769]={text:"intlayer",type:"5"},$R[770]={text:" harus terpasang. Setel ",type:"27"},$R[771]={text:"SITE_URL",type:"5"},$R[772]={text:" di lingkungan produksi (misalnya di CI).",type:"27"}],type:"21"},$R[773]={type:"19"},$R[774]={alert:void 0,children:$R[775]=[$R[776]={text:"Disarankan ",type:"27"},$R[777]={text:"generate-seo.mjs",type:"5"},$R[778]={text:" untuk ESM Node. Jika memakai ",type:"27"},$R[779]={text:"generate-seo.js",type:"5"},$R[780]={text:", pastikan ",type:"27"},$R[781]={text:"\"type\": \"module\"",type:"5"},$R[782]={text:" di ",type:"27"},$R[783]={text:"package.json",type:"5"},$R[784]={text:" atau aktifkan ESM lainnya.",type:"27"}],type:"0"},$R[785]={type:"19"},$R[786]={children:$R[787]=[$R[788]={text:"2. Jalankan skrip sebelum Vite",type:"27"}],id:"2-jalankan-skrip-sebelum-vite",level:4,type:"9"},$R[789]={attrs:$R[790]={fileName:"package.json"},lang:"json",text:"{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n",type:"3"},$R[791]={type:"19"},$R[792]={children:$R[793]=[$R[794]={text:"Sesuaikan perintah jika memakai pnpm atau yarn. Skrip juga bisa dipanggil dari CI.",type:"27"}],type:"21"},$R[795]={type:"19"},$R[796]={children:$R[797]=[$R[798]={text:"Melangkah Lebih Jauh",type:"27"}],id:"melangkah-lebih-jauh",level:3,type:"9"},$R[799]={children:$R[800]=[$R[801]={text:"Untuk melangkah lebih jauh, Anda dapat mengimplementasikan ",type:"27"},$R[802]={children:$R[803]=[$R[804]={text:"editor visual",type:"27"}],target:"/id/doc/concept/editor",title:void 0,type:"15"},$R[805]={text:" atau mengeksternalisasi konten Anda menggunakan ",type:"27"},$R[806]={children:$R[807]=[$R[808]={text:"CMS",type:"27"}],target:"/id/doc/concept/cms",title:void 0,type:"15"},$R[809]={text:".",type:"27"}],type:"21"},$R[810]={type:"19"}],footnotes:$R[811]=[],inline:!1},nextDoc:$R[812]={title:"SvelteKit",url:"/id/doc/environment/sveltekit"},prevDoc:$R[813]={title:"Vite dan Solid",url:"/id/doc/environment/vite-and-solid"},navData:$R[814]={why:$R[815]={title:"Mengapa Intlayer?",default:$R[816]={createdAt:"2024-08-14",updatedAt:"2026-05-31",title:"Ketertarikan pada Intlayer",description:"Temukan manfaat dan keuntungan menggunakan Intlayer dalam proyek Anda. Pahami mengapa Intlayer menonjol di antara kerangka kerja lainnya.",keywords:$R[817]=["Manfaat","Keuntungan","Intlayer","Kerangka Kerja","Perbandingan"],slugs:$R[818]=["doc","why"],history:$R[819]=[$R[820]={version:"8.11.2",date:"2026-05-31",changes:"\"Tambahkan Mengapa Intlayer di atas bagian alternatif\""},$R[821]={version:"7.3.1",date:"2025-11-27",changes:"\"Rilis Kompiler\""},$R[822]={version:"5.8.0",date:"2025-08-19",changes:"\"Pembaruan tabel komparatif\""},$R[823]={version:"5.5.10",date:"2025-06-29",changes:"\"Riwayat awal\""}],author:"aymericzip",docKey:"./docs/en/interest_of_intlayer.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/interest_of_intlayer.md",relativeUrl:"/id/doc/why",url:"https://intlayer.org/id/doc/why"}},"get-started":$R[824]={title:"Mulai",default:$R[825]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Pengenalan",description:"Temukan bagaimana Intlayer bekerja. Lihat langkah-langkah yang digunakan oleh Intlayer di aplikasi Anda. Temukan apa yang dilakukan oleh berbagai paket yang ada.",keywords:$R[826]=["Pengenalan","Memulai","Intlayer","Aplikasi","Paket"],slugs:$R[827]=["doc","get-started"],history:$R[828]=[$R[829]={version:"5.5.10",date:"2025-06-29",changes:"\"Init history\""}],author:"aymericzip",docKey:"./docs/en/introduction.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/introduction.md",relativeUrl:"/id/doc/get-started",url:"https://intlayer.org/id/doc/get-started"}},concept:$R[830]={title:"Konsep",subSections:$R[831]={"how-works-intlayer":$R[832]={title:"Bagaimana Intlayer bekerja",default:$R[833]={createdAt:"2024-08-12",updatedAt:"2025-06-29",title:"Cara Kerja Intlayer",description:"Pelajari bagaimana Intlayer beroperasi secara internal. Pahami arsitektur dan komponen yang membuat Intlayer kuat.",keywords:$R[834]=["Intlayer","Cara kerjanya","Arsitektur","Komponen","Cara kerja internal"],slugs:$R[835]=["doc","concept","how-works-intlayer"],history:$R[836]=[$R[837]={version:"5.5.10",date:"2025-06-29",changes:"\"Riwayat awal\""}],author:"aymericzip",docKey:"./docs/en/how_works_intlayer.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/how_works_intlayer.md",relativeUrl:"/id/doc/concept/how-works-intlayer",url:"https://intlayer.org/id/doc/concept/how-works-intlayer"}},configuration:$R[838]={title:"Konfigurasi",default:$R[839]={createdAt:"2024-08-13",updatedAt:"2026-05-12",title:"Konfigurasi",description:"Pelajari cara mengonfigurasi Intlayer untuk aplikasi Anda. Pahami berbagai pengaturan dan opsi yang tersedia untuk menyesuaikan Intlayer sesuai kebutuhan Anda.",keywords:$R[840]=["Konfigurasi","Pengaturan","Kustomisasi","Intlayer","Opsi"],slugs:$R[841]=["doc","concept","configuration"],history:$R[842]=[$R[843]={version:"8.9.4",date:"2026-05-12",changes:"\"Menambahkan dukungan untuk penyedia LM Studio\""},$R[844]={version:"8.7.0",date:"2026-04-07",changes:"\"Menambahkan opsi `minify` dan `prune` ke konfigurasi build\""},$R[845]={version:"8.7.0",date:"2026-04-03",changes:"\"Menambahkan opsi `currentDomain`\""},$R[846]={version:"8.4.0",date:"2026-03-20",changes:"\"Menambahkan notasi per-locale untuk 'compiler.output' dan 'dictionary.fill'\""},$R[847]={version:"8.3.0",date:"2026-03-11",changes:"\"Memindahkan 'baseDir' dari konfigurasi 'content' ke 'system'\""},$R[848]={version:"8.2.0",date:"2026-03-09",changes:"\"Memperbarui opsi kompiler, menambahkan dukungan 'output' dan 'noMetadata'\""},$R[849]={version:"8.1.7",date:"2026-02-25",changes:"\"Memperbarui opsi kompiler\""},$R[850]={version:"8.1.5",date:"2026-02-23",changes:"\"Menambahkan opsi kompiler 'build-only', dan prefix kamus\""},$R[851]={version:"8.0.6",date:"2026-02-12",changes:"\"Menambahkan dukungan untuk penyedia Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face, dan Together.ai\""},$R[852]={version:"8.0.5",date:"2026-02-06",changes:"\"Menambahkan `dataSerialization` ke konfigurasi AI\""},$R[853]={version:"8.0.0",date:"2026-01-24",changes:"\"Mengubah nama mode impor `live` menjadi `fetch` untuk mendeskripsikan mekanisme dasarnya dengan lebih baik.\""},$R[854]={version:"8.0.0",date:"2026-01-22",changes:"\"Memindahkan konfigurasi build `importMode` ke konfigurasi `dictionary`.\""},$R[855]={version:"8.0.0",date:"2026-01-22",changes:"\"Menambahkan opsi `rewrite` ke konfigurasi routing\""},$R[856]={version:"8.0.0",date:"2026-01-18",changes:"\"Memisahkan konfigurasi sistem dari konfigurasi konten. Memindahkan path internal ke properti `system`. Menambahkan `codeDir` untuk memisahkan file konten dari transformasi kode.\""},$R[857]={version:"8.0.0",date:"2026-01-18",changes:"\"Menambahkan opsi kamus `location` dan `schema`\""},$R[858]={version:"7.5.1",date:"2026-01-10",changes:"\"Menambahkan dukungan untuk format file JSON5 dan JSONC\""},$R[859]={version:"7.5.0",date:"2025-12-17",changes:"\"Menambahkan opsi `buildMode`\""},$R[860]={version:"7.0.0",date:"2025-10-25",changes:"\"Menambahkan konfigurasi `dictionary`\""},$R[861]={version:"7.0.0",date:"2025-10-21",changes:"\"Mengganti `middleware` dengan konfigurasi `routing`\""},$R[862]={version:"7.0.0",date:"2025-10-12",changes:"\"Menambahkan opsi `formatCommand`\""},$R[863]={version:"6.2.0",date:"2025-10-12",changes:"\"Memperbarui opsi `excludedPath`\""},$R[864]={version:"6.0.2",date:"2025-09-23",changes:"\"Menambahkan opsi `outputFormat`\""},$R[865]={version:"6.0.0",date:"2025-09-21",changes:"\"Menghapus bidang `dictionaryOutput` dan bidang `i18nextResourcesDir`\""},$R[866]={version:"6.0.0",date:"2025-09-16",changes:"\"Menambahkan mode impor `live`\""},$R[867]={version:"6.0.0",date:"2025-09-04",changes:"\"Mengganti bidang `hotReload` dengan `liveSync` dan menambahkan bidang `liveSyncPort` dan `liveSyncURL`\""},$R[868]={version:"5.6.1",date:"2025-07-25",changes:"\"Mengganti `activateDynamicImport` dengan opsi `importMode`\""},$R[869]={version:"5.6.0",date:"2025-07-13",changes:"\"Mengubah default contentDir dari `['src']` menjadi `['.']`\""},$R[870]={version:"5.5.11",date:"2025-06-29",changes:"\"Menambahkan perintah `docs`\""}],author:"aymericzip",docKey:"./docs/en/configuration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md",relativeUrl:"/id/doc/concept/configuration",url:"https://intlayer.org/id/doc/concept/configuration"}},cli:$R[871]={title:"CLI",default:$R[872]={createdAt:"2024-08-11",updatedAt:"2026-03-31",title:"CLI - Semua perintah Intlayer CLI untuk situs web multibahasa Anda",description:"Pelajari cara menggunakan Intlayer CLI untuk mengelola situs web multibahasa Anda. Ikuti langkah-langkah dalam dokumentasi online ini untuk menyiapkan proyek Anda dalam hitungan menit.",keywords:$R[873]=["CLI","Antarmuka Baris Perintah","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[874]=["doc","concept","cli"],history:$R[875]=[$R[876]={version:"9.0.0",date:"2026-06-11",changes:"\"Menambahkan konten perintah scan\""},$R[877]={version:"8.6.4",date:"2026-03-31",changes:"\"Menambahkan konten perintah standalone\""},$R[878]={version:"7.5.11",date:"2026-01-06",changes:"\"Menambahkan konten perintah CI\""},$R[879]={version:"7.5.11",date:"2026-01-06",changes:"\"Menambahkan konten perintah list projects\""},$R[880]={version:"7.5.9",date:"2025-12-30",changes:"\"Menambahkan konten perintah init\""},$R[881]={version:"7.2.3",date:"2025-11-22",changes:"\"Menambahkan konten perintah extract\""},$R[882]={version:"7.1.0",date:"2025-11-05",changes:"\"Menambahkan opsi skipIfExists pada perintah translate\""},$R[883]={version:"6.1.4",date:"2025-01-27",changes:"\"Menambahkan alias untuk argumen dan perintah CLI\""},$R[884]={version:"6.1.3",date:"2025-10-05",changes:"\"Menambahkan opsi build pada perintah\""},$R[885]={version:"6.1.2",date:"2025-09-26",changes:"\"Menambahkan konten perintah version\""},$R[886]={version:"6.1.0",date:"2025-09-26",changes:"\"Menyetel opsi verbose ke true secara default melalui CLI\""},$R[887]={version:"6.1.0",date:"2025-09-23",changes:"\"Menambahkan perintah watch dan opsi with\""},$R[888]={version:"6.0.1",date:"2025-09-23",changes:"\"Menambahkan konten perintah editor\""},$R[889]={version:"6.0.0",date:"2025-09-17",changes:"\"Menambahkan perintah content test dan list\""},$R[890]={version:"5.5.11",date:"2025-07-11",changes:"\"Memperbarui dokumentasi parameter perintah CLI\""},$R[891]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/cli/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/index.md",relativeUrl:"/id/doc/concept/cli",url:"https://intlayer.org/id/doc/concept/cli"},subSections:$R[892]={test:$R[893]={title:"Test",default:$R[894]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Uji Terjemahan yang Hilang",description:"Pelajari cara menguji dan mengidentifikasi terjemahan yang hilang dalam kamus Anda.",keywords:$R[895]=["Uji","Terjemahan yang Hilang","CLI","Intlayer"],slugs:$R[896]=["doc","concept","cli","test"],author:"aymericzip",docKey:"./docs/en/cli/test.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/test.md",relativeUrl:"/id/doc/concept/cli/test",url:"https://intlayer.org/id/doc/concept/cli/test"}},fill:$R[897]={title:"Fill",default:$R[898]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Isi Kamus",description:"Pelajari cara mengisi, mengaudit, dan menerjemahkan kamus Anda menggunakan AI.",keywords:$R[899]=["Isi","Audit","Terjemahkan","Kamus","CLI","Intlayer","AI"],slugs:$R[900]=["doc","concept","cli","fill"],author:"aymericzip",docKey:"./docs/en/cli/fill.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/fill.md",relativeUrl:"/id/doc/concept/cli/fill",url:"https://intlayer.org/id/doc/concept/cli/fill"}},build:$R[901]={title:"Build",default:$R[902]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Bangun Kamus",description:"Pelajari cara membangun kamus Intlayer Anda dari file deklarasi konten.",keywords:$R[903]=["Bangun","Kamus","CLI","Intlayer"],slugs:$R[904]=["doc","concept","cli","build"],history:$R[905]=[$R[906]={version:"8.1.5",date:"2026-02-23",changes:"\"Tambahkan opsi checkTypes\""}],author:"aymericzip",docKey:"./docs/en/cli/build.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/build.md",relativeUrl:"/id/doc/concept/cli/build",url:"https://intlayer.org/id/doc/concept/cli/build"}},watch:$R[907]={title:"Watch",default:$R[908]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Pantau Kamus",description:"Pelajari cara memantau perubahan pada file deklarasi konten Anda dan secara otomatis membangun kamus.",keywords:$R[909]=["Pantau","Kamus","CLI","Intlayer"],slugs:$R[910]=["doc","concept","cli","watch"],author:"aymericzip",docKey:"./docs/en/cli/watch.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/watch.md",relativeUrl:"/id/doc/concept/cli/watch",url:"https://intlayer.org/id/doc/concept/cli/watch"}},extract:$R[911]={title:"Extract",default:$R[912]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Ekstrak string",description:"Pelajari cara mengekstrak string dari komponen Anda ke file .content yang berada dekat dengan komponen.",keywords:$R[913]=["Ekstrak","Komponen","Migrasi","CLI","Intlayer"],slugs:$R[914]=["doc","concept","cli","extract"],author:"aymericzip",docKey:"./docs/en/cli/extract.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/extract.md",relativeUrl:"/id/doc/concept/cli/extract",url:"https://intlayer.org/id/doc/concept/cli/extract"}},login:$R[915]={title:"Login",default:$R[916]={createdAt:"2025-12-16",updatedAt:"2025-12-16",title:"CLI - Masuk",description:"Pelajari cara menggunakan perintah login Intlayer CLI untuk mengautentikasi dengan Intlayer CMS dan memperoleh kredensial akses.",keywords:$R[917]=["CLI","Login","Autentikasi","CMS","Intlayer","Kredensial"],slugs:$R[918]=["doc","concept","cli","login"],author:"aymericzip",docKey:"./docs/en/cli/login.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/login.md",relativeUrl:"/id/doc/concept/cli/login",url:"https://intlayer.org/id/doc/concept/cli/login"}},push:$R[919]={title:"Push",default:$R[920]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Dorong Kamus",description:"Pelajari cara mendorong kamus Anda ke editor dan CMS Intlayer.",keywords:$R[921]=["Dorong","Kamus","CLI","Intlayer","Editor","CMS"],slugs:$R[922]=["doc","concept","cli","push"],author:"aymericzip",docKey:"./docs/en/cli/push.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/push.md",relativeUrl:"/id/doc/concept/cli/push",url:"https://intlayer.org/id/doc/concept/cli/push"}},pull:$R[923]={title:"Pull",default:$R[924]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Tarik Kamus",description:"Pelajari cara menarik kamus dari editor dan CMS Intlayer.",keywords:$R[925]=["Tarik","Kamus","CLI","Intlayer","Editor","CMS"],slugs:$R[926]=["doc","concept","cli","pull"],author:"aymericzip",docKey:"./docs/en/cli/pull.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/pull.md",relativeUrl:"/id/doc/concept/cli/pull",url:"https://intlayer.org/id/doc/concept/cli/pull"}},configuration:$R[927]={title:"Configuration",default:$R[928]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Kelola Konfigurasi",description:"Pelajari cara mendapatkan dan mengirim konfigurasi Intlayer Anda ke CMS.",keywords:$R[929]=["Konfigurasi","Config","CLI","Intlayer","CMS"],slugs:$R[930]=["doc","concept","cli","configuration"],author:"aymericzip",docKey:"./docs/en/cli/configuration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/configuration.md",relativeUrl:"/id/doc/concept/cli/configuration",url:"https://intlayer.org/id/doc/concept/cli/configuration"}},list:$R[931]={title:"List",default:$R[932]={createdAt:"2024-08-11",updatedAt:"2026-01-06",title:"Daftar File Deklarasi Konten",description:"Pelajari cara mendaftar semua file deklarasi konten dalam proyek Anda.",keywords:$R[933]=["Daftar","Deklarasi Konten","CLI","Intlayer"],slugs:$R[934]=["doc","concept","cli","list"],history:$R[935]=[$R[936]={version:"7.5.12",date:"2026-01-06",changes:"\"Menambahkan opsi output absolut ke perintah list\""},$R[937]={version:"7.5.11",date:"2026-01-06",changes:"\"Menambahkan opsi output JSON ke perintah list\""}],author:"aymericzip",docKey:"./docs/en/cli/list.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/list.md",relativeUrl:"/id/doc/concept/cli/list",url:"https://intlayer.org/id/doc/concept/cli/list"}},version:$R[938]={title:"Version",default:$R[939]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Periksa Versi CLI",description:"Pelajari cara memeriksa versi Intlayer CLI yang terpasang.",keywords:$R[940]=["Versi","CLI","Intlayer"],slugs:$R[941]=["doc","concept","cli","version"],author:"aymericzip",docKey:"./docs/en/cli/version.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/version.md",relativeUrl:"/id/doc/concept/cli/version",url:"https://intlayer.org/id/doc/concept/cli/version"}},editor:$R[942]={title:"Editor",default:$R[943]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Perintah Editor",description:"Pelajari cara menggunakan perintah editor Intlayer.",keywords:$R[944]=["Editor","Visual Editor","CLI","Intlayer"],slugs:$R[945]=["doc","concept","cli","editor"],author:"aymericzip",docKey:"./docs/en/cli/editor.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/editor.md",relativeUrl:"/id/doc/concept/cli/editor",url:"https://intlayer.org/id/doc/concept/cli/editor"}},live:$R[946]={title:"Live",default:$R[947]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Perintah Live Sync",description:"Pelajari cara menggunakan Live Sync untuk mencerminkan perubahan konten CMS saat runtime.",keywords:$R[948]=["Live Sync","CMS","Runtime","CLI","Intlayer"],slugs:$R[949]=["doc","concept","cli","live"],author:"aymericzip",docKey:"./docs/en/cli/live.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/live.md",relativeUrl:"/id/doc/concept/cli/live",url:"https://intlayer.org/id/doc/concept/cli/live"}},debug:$R[950]={title:"Debug",default:$R[951]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Debug Perintah Intlayer",description:"Pelajari cara melakukan debug dan memecahkan masalah CLI Intlayer.",keywords:$R[952]=["Debug","Memecahkan Masalah","CLI","Intlayer"],slugs:$R[953]=["doc","concept","cli","debug"],author:"aymericzip",docKey:"./docs/en/cli/debug.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/debug.md",relativeUrl:"/id/doc/concept/cli/debug",url:"https://intlayer.org/id/doc/concept/cli/debug"}},"doc-review":$R[954]={title:"Doc Review",default:$R[955]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Tinjau Dokumen",description:"Pelajari cara meninjau file dokumentasi untuk kualitas, konsistensi, dan kelengkapan di berbagai lokal.",keywords:$R[956]=["Tinjau","Dokumen","Dokumentasi","AI","CLI","Intlayer"],slugs:$R[957]=["doc","concept","cli","doc-review"],author:"aymericzip",docKey:"./docs/en/cli/doc-review.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/doc-review.md",relativeUrl:"/id/doc/concept/cli/doc-review",url:"https://intlayer.org/id/doc/concept/cli/doc-review"}},"doc-translate":$R[958]={title:"Doc Translate",default:$R[959]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"Terjemahkan Dokumen",description:"Pelajari cara menerjemahkan file dokumentasi secara otomatis menggunakan layanan terjemahan AI.",keywords:$R[960]=["Terjemahkan","Dokumen","Dokumentasi","AI","CLI","Intlayer"],slugs:$R[961]=["doc","concept","cli","doc-translate"],author:"aymericzip",docKey:"./docs/en/cli/doc-translate.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/doc-translate.md",relativeUrl:"/id/doc/concept/cli/doc-translate",url:"https://intlayer.org/id/doc/concept/cli/doc-translate"}},sdk:$R[962]={title:"SDK",default:$R[963]={createdAt:"2024-08-11",updatedAt:"2025-11-22",title:"CLI SDK",description:"Pelajari cara menggunakan Intlayer CLI SDK dalam kode Anda sendiri.",keywords:$R[964]=["SDK","CLI","Intlayer","Programmatic"],slugs:$R[965]=["doc","concept","cli","sdk"],author:"aymericzip",docKey:"./docs/en/cli/sdk.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/sdk.md",relativeUrl:"/id/doc/concept/cli/sdk",url:"https://intlayer.org/id/doc/concept/cli/sdk"}},scan:$R[966]={title:"Scan",default:$R[967]={createdAt:"2026-06-11",updatedAt:"2026-06-11",title:"Scan Website",description:"Pelajari cara menggunakan perintah scan pada Intlayer CLI untuk mengukur ukuran halaman dan mengaudit kesehatan i18n/SEO dari situs web mana pun.",keywords:$R[968]=["Scan","SEO","i18n","Audit","CLI","Intlayer","Ukuran halaman","Bundel"],slugs:$R[969]=["doc","concept","cli","scan"],history:$R[970]=[$R[971]={version:"9.0.0",date:"2026-06-11",changes:"\"Menambahkan konten perintah scan\""}],author:"aymericzip",docKey:"./docs/en/cli/scan.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/scan.md",relativeUrl:"/id/doc/concept/cli/scan",url:"https://intlayer.org/id/doc/concept/cli/scan"}}}},editor:$R[972]={title:"Editor visual",default:$R[973]={createdAt:"2025-08-23",updatedAt:"2025-09-23",title:"Intlayer Visual Editor | Edit konten Anda menggunakan editor visual",description:"Temukan cara menggunakan Intlayer Editor untuk mengelola situs web multibahasa Anda. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengatur proyek Anda dalam beberapa menit.",keywords:$R[974]=["Editor","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[975]=["doc","concept","editor"],youtubeVideo:"https://www.youtube.com/watch?v=UDDTnirwi_4",history:$R[976]=[$R[977]={version:"6.1.0",date:"2025-09-23",changes:"\"Menambahkan opsi with pada CLI\""},$R[978]={version:"6.0.1",date:"2025-09-22",changes:"\"Mengubah perilaku editor ketika ekstensi file bukan `.json`\""},$R[979]={version:"6.0.0",date:"2025-09-21",changes:"\"Menambahkan perintah reexported\""},$R[980]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_visual_editor.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md",relativeUrl:"/id/doc/concept/editor",url:"https://intlayer.org/id/doc/concept/editor"}},cms:$R[981]={title:"CMS",default:$R[982]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Intlayer CMS | Eksternalisasi konten Anda ke Intlayer CMS",description:"Eksternalisasi konten Anda ke Intlayer CMS untuk mendelegasikan pengelolaan konten kepada tim Anda.",keywords:$R[983]=["CMS","Visual Editor","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[984]=["doc","concept","cms"],youtubeVideo:"https://www.youtube.com/watch?v=UDDTnirwi_4",history:$R[985]=[$R[986]={version:"6.0.1",date:"2025-09-22",changes:"\"Menambahkan dokumentasi live sync\""},$R[987]={version:"6.0.0",date:"2025-09-04",changes:"\"Mengganti field `hotReload` dengan `liveSync`\""},$R[988]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_CMS.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md",relativeUrl:"/id/doc/concept/cms",url:"https://intlayer.org/id/doc/concept/cms"}},"ci-cd":$R[989]={title:"Integrasi CI/CD",default:$R[990]={createdAt:"2025-05-20",updatedAt:"2025-08-13",title:"Integrasi CI/CD",description:"Pelajari cara mengintegrasikan Intlayer ke dalam pipeline CI/CD Anda untuk manajemen konten dan deployment otomatis.",keywords:$R[991]=["CI/CD","Integrasi Berkelanjutan","Deployment Berkelanjutan","Otomatisasi","Internasionalisasi","Dokumentasi","Intlayer"],slugs:$R[992]=["doc","concept","ci-cd"],history:$R[993]=[$R[994]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/CI_CD.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/CI_CD.md",relativeUrl:"/id/doc/concept/ci-cd",url:"https://intlayer.org/id/doc/concept/ci-cd"}},content:$R[995]={title:"Deklarasi konten",default:$R[996]={createdAt:"2025-02-07",updatedAt:"2026-05-12",title:"Berkas Konten",description:"Pelajari cara menyesuaikan ekstensi untuk berkas deklarasi konten Anda. Ikuti dokumentasi ini untuk mengimplementasikan kondisi secara efisien dalam proyek Anda.",keywords:$R[997]=["Berkas Konten","Dokumentasi","Intlayer"],slugs:$R[998]=["doc","concept","content"],history:$R[999]=[$R[1000]={version:"8.10.0",date:"2026-05-19",changes:"\"Tambahkan dukungan format file YAML dan Markdown\""},$R[1001]={version:"8.9.0",date:"2026-05-12",changes:"\"Add `plural` content node type\""},$R[1002]={version:"8.0.0",date:"2026-01-28",changes:"\"Tambahkan tipe node konten `html`\""},$R[1003]={version:"8.0.0",date:"2026-01-24",changes:"\"Rename `live` import mode to `fetch` to better describe the underlying mechanism.\""},$R[1004]={version:"8.0.0",date:"2026-01-18",changes:"\"Tambahkan opsi kamus `location` dan `schema`\""},$R[1005]={version:"7.5.0",date:"2025-12-13",changes:"\"Menambahkan dukungan format ICU dan i18next\""},$R[1006]={version:"7.0.0",date:"2025-10-23",changes:"\"Mengganti nama `autoFill` menjadi `fill`\""},$R[1007]={version:"6.0.0",date:"2025-09-20",changes:"\"Menambahkan dokumentasi fields\""},$R[1008]={version:"5.5.10",date:"2025-06-29",changes:"\"Memulai riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/content_file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md",relativeUrl:"/id/doc/concept/content",url:"https://intlayer.org/id/doc/concept/content"},subSections:$R[1009]={translation:$R[1010]={title:"Terjemahan",default:$R[1011]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Terjemahan",description:"Temukan cara mendeklarasikan dan menggunakan terjemahan di situs web multibahasa Anda. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengatur proyek Anda dalam beberapa menit.",keywords:$R[1012]=["Terjemahan","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1013]=["doc","concept","content","translation"],history:$R[1014]=[$R[1015]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/translation.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/translation.md",relativeUrl:"/id/doc/concept/content/translation",url:"https://intlayer.org/id/doc/concept/content/translation"}},plural:$R[1016]={title:"Plural",default:$R[1017]={createdAt:"2026-05-04",updatedAt:"2026-05-04",title:"Jamak (Plural)",description:"Pelajari cara mendeklarasikan dan menggunakan konten jamak yang sadar lokal (berbasis CLDR) di situs web multibahasa Anda. Ikuti langkah-langkah dalam dokumentasi online ini untuk menyiapkan proyek Anda dalam beberapa menit.",keywords:$R[1018]=["Jamak","Pluralisasi","CLDR","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1019]=["doc","concept","content","plural"],history:$R[1020]=[$R[1021]={version:"8.8.0",date:"2026-05-04",changes:"\"Init history\""}],author:"aymericzip",docKey:"./docs/en/dictionary/plurial.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/plurial.md",relativeUrl:"/id/doc/concept/content/plural",url:"https://intlayer.org/id/doc/concept/content/plural"}},enumeration:$R[1022]={title:"Penumeraan",default:$R[1023]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Enumerasi",description:"Temukan cara mendeklarasikan dan menggunakan enumerasi di situs web multibahasa Anda. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengatur proyek Anda dalam beberapa menit.",keywords:$R[1024]=["Enumerasi","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1025]=["doc","concept","content","enumeration"],history:$R[1026]=[$R[1027]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/enumeration.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/enumeration.md",relativeUrl:"/id/doc/concept/content/enumeration",url:"https://intlayer.org/id/doc/concept/content/enumeration"}},condition:$R[1028]={title:"Kondisi",default:$R[1029]={createdAt:"2025-02-07",updatedAt:"2025-06-29",title:"Konten Kondisional",description:"Pelajari cara menggunakan konten kondisional di Intlayer untuk menampilkan konten secara dinamis berdasarkan kondisi tertentu. Ikuti dokumentasi ini untuk mengimplementasikan kondisi secara efisien dalam proyek Anda.",keywords:$R[1030]=["Konten Kondisional","Rendering Dinamis","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1031]=["doc","concept","content","condition"],history:$R[1032]=[$R[1033]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/condition.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/condition.md",relativeUrl:"/id/doc/concept/content/condition",url:"https://intlayer.org/id/doc/concept/content/condition"}},gender:$R[1034]={title:"Jenis kelamin",default:$R[1035]={createdAt:"2025-07-27",updatedAt:"2025-07-27",title:"Konten Berdasarkan Gender",description:"Pelajari cara menggunakan konten berdasarkan gender di Intlayer untuk menampilkan konten secara dinamis berdasarkan gender. Ikuti dokumentasi ini untuk mengimplementasikan konten spesifik gender secara efisien dalam proyek Anda.",keywords:$R[1036]=["Konten Berdasarkan Gender","Rendering Dinamis","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1037]=["doc","concept","content","gender"],history:$R[1038]=[$R[1039]={version:"5.7.2",date:"2025-07-27",changes:"\"Memperkenalkan konten berdasarkan gender\""}],author:"aymericzip",docKey:"./docs/en/dictionary/gender.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/gender.md",relativeUrl:"/id/doc/concept/content/gender",url:"https://intlayer.org/id/doc/concept/content/gender"}},insertion:$R[1040]={title:"Penambahan",default:$R[1041]={createdAt:"2025-03-13",updatedAt:"2025-06-29",title:"Penyisipan",description:"Pelajari cara mendeklarasikan dan menggunakan placeholder penyisipan dalam konten Anda. Dokumentasi ini memandu Anda melalui langkah-langkah untuk menyisipkan nilai secara dinamis dalam struktur konten yang telah ditentukan.",keywords:$R[1042]=["Penyisipan","Konten Dinamis","Placeholder","Intlayer","Next.js","JavaScript","React"],slugs:$R[1043]=["doc","concept","content","insertion"],history:$R[1044]=[$R[1045]={version:"8.0.0",date:"2026-01-18",changes:"\"Dekorasi otomatis konten penyisipan\""},$R[1046]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/insertion.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/insertion.md",relativeUrl:"/id/doc/concept/content/insertion",url:"https://intlayer.org/id/doc/concept/content/insertion"}},file:$R[1047]={title:"Berkas",default:$R[1048]={createdAt:"2025-03-13",updatedAt:"2025-06-29",title:"File",description:"Pelajari cara menyematkan file eksternal ke dalam kamus konten Anda menggunakan fungsi `file`. Dokumentasi ini menjelaskan bagaimana Intlayer menghubungkan dan mengelola konten file secara dinamis.",keywords:$R[1049]=["File","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1050]=["doc","concept","content","file"],history:$R[1051]=[$R[1052]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/file.md",relativeUrl:"/id/doc/concept/content/file",url:"https://intlayer.org/id/doc/concept/content/file"}},nesting:$R[1053]={title:"Nesting",default:$R[1054]={createdAt:"2025-02-07",updatedAt:"2025-06-29",title:"Penanaman Kamus",description:"Pelajari cara menggunakan penanaman konten di Intlayer untuk menggunakan kembali dan menyusun konten multibahasa Anda secara efisien. Ikuti dokumentasi ini untuk mengimplementasikan penanaman dengan mulus dalam proyek Anda.",keywords:$R[1055]=["Penanaman","Penggunaan Kembali Konten","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1056]=["doc","concept","content","nesting"],history:$R[1057]=[$R[1058]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/nesting.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/nesting.md",relativeUrl:"/id/doc/concept/content/nesting",url:"https://intlayer.org/id/doc/concept/content/nesting"}},markdown:$R[1059]={title:"Markdown",default:$R[1060]={createdAt:"2025-02-07",updatedAt:"2026-05-19",title:"Markdown",description:"Pelajari cara mendeklarasikan dan menggunakan konten Markdown di situs web multibahasa Anda dengan Intlayer. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengintegrasikan Markdown dengan mulus ke dalam proyek Anda.",keywords:$R[1061]=["Markdown","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1062]=["doc","concept","content","markdown"],history:$R[1063]=[$R[1064]={version:"8.11.0",date:"2026-05-28",changes:"\"Mengizinkan pra-parsing AST Markdown untuk SSR / hidrasi\""},$R[1065]={version:"8.10.0",date:"2026-05-19",changes:"\"Menambahkan dukungan untuk file `.content.md`\""},$R[1066]={version:"8.5.0",date:"2026-03-24",changes:"\"Menambahkan objek plugin `intlayerMarkdown`; gunakan `app.use(intlayerMarkdown)` sebagai ganti `app.use(installIntlayerMarkdown)`\""},$R[1067]={version:"8.5.0",date:"2026-03-24",changes:"\"Memindahkan impor dari `{{framework}}-intlayer` ke `{{framework}}-intlayer/markdown`\""},$R[1068]={version:"8.0.0",date:"2026-01-22",changes:"\"Menambahkan utilitas MarkdownRenderer / useMarkdownRenderer / renderMarkdown dan opsi forceInline\""},$R[1069]={version:"8.0.0",date:"2026-01-18",changes:"\"Dekorasi otomatis dari konten markdown, dukungan MDX dan SSR\""},$R[1070]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/markdown.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/markdown.md",relativeUrl:"/id/doc/concept/content/markdown",url:"https://intlayer.org/id/doc/concept/content/markdown"}},html:$R[1071]={title:"HTML",default:$R[1072]={createdAt:"2026-01-20",updatedAt:"2026-01-22",title:"Konten HTML",description:"Pelajari cara mendeklarasikan dan menggunakan konten HTML dengan komponen kustom di Intlayer. Ikuti dokumentasi ini untuk menyematkan konten mirip HTML yang kaya dengan penggantian komponen dinamis dalam proyek yang di-internasionalisasi.",keywords:$R[1073]=["HTML","Komponen Kustom","Konten Kaya","Intlayer","Next.js","JavaScript","React","Vue","Svelte"],slugs:$R[1074]=["doc","concept","content","html"],history:$R[1075]=[$R[1076]={version:"8.5.0",date:"2026-03-24",changes:"\"Add `intlayerHTML` plugin object; use `app.use(intlayerHTML)` instead of `app.use(installIntlayerHTML)`\""},$R[1077]={version:"8.5.0",date:"2026-03-24",changes:"\"move import from `{{framework}}-intlayer` to `{{framework}}-intlayer/html`\""},$R[1078]={version:"8.0.0",date:"2026-01-22",changes:"\"Menambahkan HTMLRenderer / useHTMLRenderer / utilitas renderHTML\""},$R[1079]={version:"8.0.0",date:"2026-01-20",changes:"\"Menambahkan dukungan parsing HTML\""}],author:"aymericzip",docKey:"./docs/en/dictionary/html.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/html.md",relativeUrl:"/id/doc/concept/content/html",url:"https://intlayer.org/id/doc/concept/content/html"}},"function-fetching":$R[1080]={title:"Pengambilan fungsi",default:$R[1081]={createdAt:"2025-08-23",updatedAt:"2025-08-23",title:"Pengambilan Fungsi",description:"Temukan cara mendeklarasikan dan menggunakan pengambilan fungsi di situs web multibahasa Anda. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengatur proyek Anda dalam beberapa menit.",keywords:$R[1082]=["Pengambilan Fungsi","Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React"],slugs:$R[1083]=["doc","concept","content","function-fetching"],history:$R[1084]=[$R[1085]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/dictionary/function_fetching.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/function_fetching.md",relativeUrl:"/id/doc/concept/content/function-fetching",url:"https://intlayer.org/id/doc/concept/content/function-fetching"}}}},"dynamic-dyctionary":$R[1086]={title:"File untuk setiap lokal",default:$R[1087]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Kamus Dinamis",description:"Gambaran umum tentang tiga fitur kamus dinamis Intlayer — koleksi, varian, dan catatan dinamis — untuk membangun konten i18n yang fleksibel dan didorong oleh runtime.",keywords:$R[1088]=["Kamus Dinamis","Koleksi","Varian","Catatan Dinamis","Intlayer","Internasionalisasi"],slugs:$R[1089]=["doc","concept","dynamic-dictionaries"],history:$R[1090]=[$R[1091]={version:"9.0.0",date:"2026-06-12",changes:"\"Rilis fitur kamus dinamis\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/index.md",relativeUrl:"/id/doc/concept/dynamic-dictionaries",url:"https://intlayer.org/id/doc/concept/dynamic-dictionaries"},subSections:$R[1092]={collections:$R[1093]={title:"Koleksi",default:$R[1094]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Koleksi",description:"Gunakan bidang metadata item di file konten Intlayer untuk membangun koleksi terurut dari item yang dilokalkan yang dapat dipilih berdasarkan indeks saat runtime.",keywords:$R[1095]=["Koleksi","Daftar Konten","Konten Dinamis","Intlayer","Internasionalisasi"],slugs:$R[1096]=["doc","concept","collections"],history:$R[1097]=[$R[1098]={version:"9.0.0",date:"2026-06-12",changes:"\"Rilis fitur kamus koleksi\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/collections.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/collections.md",relativeUrl:"/id/doc/concept/collections",url:"https://intlayer.org/id/doc/concept/collections"}},variants:$R[1099]={title:"Varian",default:$R[1100]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Varian",description:"Gunakan bidang metadata variant dalam file konten Intlayer untuk mendeklarasikan alternatif konten bernama (pengujian A/B, spanduk musiman, salinan berbendera fitur) – dan beralih di antaranya saat runtime tanpa perubahan kode.",keywords:$R[1101]=["Varian","Pengujian A/B","Bendera Fitur","Konten Dinamis","Intlayer","Internasionalisasi"],slugs:$R[1102]=["doc","concept","variants"],history:$R[1103]=[$R[1104]={version:"9.0.0",date:"2026-06-12",changes:"\"Rilis fitur varian kamus\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/variants.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/variants.md",relativeUrl:"/id/doc/concept/variants",url:"https://intlayer.org/id/doc/concept/variants"}},"dynamic-content":$R[1105]={title:"Rekaman dinamis",default:$R[1106]={createdAt:"2026-06-12",updatedAt:"2026-06-12",title:"Catatan Dinamis",description:"Gunakan bidang meta dalam file konten Intlayer untuk mendeklarasikan catatan yang dikelola CMS yang diambil pada runtime dengan ID buram, memungkinkan konten dinamis dengan tipe data kuat (strongly-typed) tanpa enumerasi pada waktu kompilasi.",keywords:$R[1107]=["Catatan Dinamis","Konten Dinamis","CMS","Konten Runtime","Intlayer","Internasionalisasi"],slugs:$R[1108]=["doc","concept","dynamic-records"],history:$R[1109]=[$R[1110]={version:"9.0.0",date:"2026-06-12",changes:"\"Rilis fitur konten dinamis\""}],author:"aymericzip",docKey:"./docs/en/dynamic_dictionaries/dynamic_content.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dynamic_dictionaries/dynamic_content.md",relativeUrl:"/id/doc/concept/dynamic-records",url:"https://intlayer.org/id/doc/concept/dynamic-records"}}}},"per-locale-file":$R[1111]={title:"File untuk setiap lokal",default:$R[1112]={createdAt:"2025-04-18",updatedAt:"2025-06-29",title:"Deklarasi Konten `Per-Locale` di Intlayer",description:"Temukan cara mendeklarasikan konten per locale di Intlayer. Ikuti dokumentasi untuk memahami berbagai format dan kasus penggunaan.",keywords:$R[1113]=["Internasionalisasi","Dokumentasi","Intlayer","Per-Locale","TypeScript","JavaScript"],slugs:$R[1114]=["doc","concept","per-locale-file"],history:$R[1115]=[$R[1116]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/per_locale_file.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/per_locale_file.md",relativeUrl:"/id/doc/concept/per-locale-file",url:"https://intlayer.org/id/doc/concept/per-locale-file"}},compiler:$R[1117]={title:"Kompilator",default:$R[1118]={createdAt:"2025-09-09",updatedAt:"2026-03-12",title:"Intlayer Compiler | Ekstraksi Konten Otomatis untuk i18n",description:"Otomatiskan proses internasionalisasi Anda dengan Intlayer Compiler. Ekstrak konten langsung dari komponen Anda untuk i18n yang lebih cepat dan efisien di Vite, Next.js, dan lainnya.",keywords:$R[1119]=["Intlayer","Compiler","Internasionalisasi","i18n","Otomatisasi","Ekstraksi","Kecepatan","Vite","Next.js","React","Vue","Svelte"],slugs:$R[1120]=["doc","compiler"],history:$R[1121]=[$R[1122]={version:"8.2.0",date:"2026-03-09",changes:"\"Perbarui opsi kompiler, tambah dukungan FilePathPattern\""},$R[1123]={version:"8.1.7",date:"2026-02-25",changes:"\"Perbarui opsi kompiler\""},$R[1124]={version:"7.3.1",date:"2025-11-27",changes:"\"Rilis Compiler\""}],author:"aymericzip",docKey:"./docs/en/compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/compiler.md",relativeUrl:"/id/doc/compiler",url:"https://intlayer.org/id/doc/compiler"}},"auto-fill":$R[1125]={title:"Pengisian otomatis",default:$R[1126]={createdAt:"2025-03-13",updatedAt:"2025-09-20",title:"Isi Otomatis",description:"Pelajari cara menggunakan fungsi isi otomatis di Intlayer untuk mengisi konten secara otomatis berdasarkan pola yang telah ditentukan. Ikuti dokumentasi ini untuk mengimplementasikan fitur isi otomatis secara efisien dalam proyek Anda.",keywords:$R[1127]=["Isi Otomatis","Otomatisasi Konten","Konten Dinamis","Intlayer","Next.js","JavaScript","React"],slugs:$R[1128]=["doc","concept","auto-fill"],history:$R[1129]=[$R[1130]={version:"7.0.0",date:"2025-10-23",changes:"\"Mengganti nama `autoFill` menjadi `fill` dan memperbarui perilaku\""},$R[1131]={version:"6.0.0",date:"2025-09-20",changes:"\"Menambahkan konfigurasi global\""},$R[1132]={version:"6.0.0",date:"2025-09-17",changes:"\"Menambahkan variabel `{{fileName}}`\""},$R[1133]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/autoFill.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/autoFill.md",relativeUrl:"/id/doc/concept/auto-fill",url:"https://intlayer.org/id/doc/concept/auto-fill"}},testing:$R[1134]={title:"Pengujian",default:$R[1135]={createdAt:"2025-03-01",updatedAt:"2025-10-05",title:"Menguji konten Anda",description:"Temukan cara menguji konten Anda dengan Intlayer.",keywords:$R[1136]=["Pengujian","Intlayer","Internasionalisasi","CMS","Sistem Manajemen Konten","Editor Visual"],slugs:$R[1137]=["doc","testing"],history:$R[1138]=[$R[1139]={version:"6.0.1",date:"2025-10-05",changes:"\"Membuat pengujian asinkron dan menambahkan opsi build\""},$R[1140]={version:"6.0.0",date:"2025-09-20",changes:"\"Pengenalan pengujian\""}],author:"aymericzip",docKey:"./docs/en/testing.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/testing.md",relativeUrl:"/id/doc/testing",url:"https://intlayer.org/id/doc/testing"}},bundle_optimization:$R[1141]={title:"Optimasi paket",default:$R[1142]={createdAt:"2025-11-25",updatedAt:"2026-06-07",title:"Optimasi Ukuran Bundle & Performa i18n",description:"Kurangi ukuran bundle aplikasi Anda dengan mengoptimalkan konten internasionalisasi (i18n). Pelajari cara memanfaatkan tree shaking dan lazy loading untuk kamus menggunakan Intlayer.",keywords:$R[1143]=["Bundle Optimisation","Content Automation","Dynamic Content","Intlayer","Next.js","JavaScript","React"],slugs:$R[1144]=["doc","concept","bundle-optimization"],history:$R[1145]=[$R[1146]={version:"8.12.0",date:"2026-06-07",changes:"\"Menambahkan `intlayerPurgeBabelPlugin` dan `intlayerMinifyBabelPlugin` untuk Babel/Webpack; menjelaskan pipeline plugin\""},$R[1147]={version:"8.7.0",date:"2026-04-08",changes:"\"Menambahkan opsi `minify` dan `purge` ke konfigurasi build\""}],author:"aymericzip",docKey:"./docs/en/bundle_optimization.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/bundle_optimization.md",relativeUrl:"/id/doc/concept/bundle-optimization",url:"https://intlayer.org/id/doc/concept/bundle-optimization"}}},routing:$R[1148]={title:"Routing",subSections:$R[1149]={custom_url_rewrites:$R[1150]={title:"Penulisan Ulang URL Kustom",default:$R[1151]={createdAt:"2024-08-13",updatedAt:"2026-01-26",title:"Penulisan Ulang URL Kustom",description:"Pelajari cara mengonfigurasi dan menggunakan penulisan ulang URL kustom di Intlayer untuk menentukan jalur spesifik per locale.",keywords:$R[1152]=["Penulisan Ulang URL Kustom","Routing","Internationalization","i18n"],slugs:$R[1153]=["doc","concept","custom_url_rewrites"],history:$R[1154]=[$R[1155]={version:"8.0.0",date:"2026-01-25",changes:"\"Mengimplementasikan penulisan ulang URL terpusat dengan formatter spesifik-framework dan hook useRewriteURL.\""}],author:"aymericzip",docKey:"./docs/en/custom_url_rewrites.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/custom_url_rewrites.md",relativeUrl:"/id/doc/concept/custom_url_rewrites",url:"https://intlayer.org/id/doc/concept/custom_url_rewrites"}},"domains-i18n":$R[1156]={title:"Domain i18n",default:$R[1157]={createdAt:"2026-04-02",updatedAt:"2026-04-02",title:"Domain Kustom",description:"Pelajari cara mengonfigurasi perutean lokal berbasis domain di Intlayer untuk menyajikan berbagai lokal dari nama host khusus.",keywords:$R[1158]=["Domain Kustom","Perutean Domain","Perutean","Internasionalisasi","i18n"],slugs:$R[1159]=["doc","concept","custom_domains"],history:$R[1160]=[$R[1161]={version:"8.5.0",date:"2026-04-02",changes:"\"Tambahkan perutean lokal berbasis domain melalui konfigurasi routing.domains.\""}],author:"aymericzip",docKey:"./docs/en/custom_domains.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/custom_domains.md",relativeUrl:"/id/doc/concept/custom_domains",url:"https://intlayer.org/id/doc/concept/custom_domains"}}}}},environment:$R[1162]={title:"Lingkungan",subSections:$R[1163]={nextjs:$R[1164]={title:"Next.js",default:$R[1165]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 16 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Next.js 16 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1166]=["Internasionalisasi","Dokumentasi","Intlayer","Next.js 16","JavaScript","React"],slugs:$R[1167]=["doc","environment","nextjs"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-16-template",applicationShowcase:"https://intlayer-next-16-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1168]=[$R[1169]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1170]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1171]={version:"7.0.6",date:"2025-11-01",changes:"\"Menambahkan penyebutan `x-default` dalam objek `alternates`\""},$R[1172]={version:"7.0.0",date:"2025-06-29",changes:"\"Riwayat awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_16.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nextjs_16.md",relativeUrl:"/id/doc/environment/nextjs",url:"https://intlayer.org/id/doc/environment/nextjs"},subSections:$R[1173]={14:$R[1174]={title:"Next.js 14 dan App Router",default:$R[1175]={createdAt:"2024-12-06",updatedAt:"2026-05-31",title:"Next.js 14 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Next.js 14 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1176]=["Internasionalisasi","Dokumentasi","Intlayer","Next.js 14","JavaScript","React"],slugs:$R[1177]=["doc","environment","nextjs","14"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-14-template",applicationShowcase:"https://intlayer-next-14-template.vercel.app",history:$R[1178]=[$R[1179]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1180]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1181]={version:"6.2.0",date:"2025-10-09",changes:"\"Menambahkan dokumentasi untuk hook `useLocale` dengan opsi `onLocaleChange`\""},$R[1182]={version:"5.6.6",date:"2025-10-02",changes:"\"Menambahkan dokumentasi untuk fungsi `getLocale` pada server actions\""},$R[1183]={version:"5.6.2",date:"2025-09-22",changes:"\"Menambahkan dokumentasi untuk helper `multipleMiddlewares`\""},$R[1184]={version:"5.6.0",date:"2025-07-06",changes:"\"Mengubah fungsi `withIntlayer()` menjadi fungsi berbasis promise\""},$R[1185]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_14.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nextjs_14.md",relativeUrl:"/id/doc/environment/nextjs/14",url:"https://intlayer.org/id/doc/environment/nextjs/14"},frameworks:$R[1186]=["nextjs","react"]},15:$R[1187]={title:"Next.js 15",default:$R[1188]={createdAt:"2025-10-25",updatedAt:"2026-05-31",title:"Next.js 15 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Next.js 15 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1189]=["Internasionalisasi","Dokumentasi","Intlayer","Next.js 15","JavaScript","React"],slugs:$R[1190]=["doc","environment","nextjs","15"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-15-template",applicationShowcase:"https://next-15-intlayer-template-xt83.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1191]=[$R[1192]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1193]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1194]={version:"7.0.6",date:"2025-11-01",changes:"\"Menambahkan penyebutan `x-default` dalam objek `alternates`\""},$R[1195]={version:"7.0.0",date:"2025-10-25",changes:"\"Menambahkan penyebutan fungsi `withIntlayerSync()`\""},$R[1196]={version:"6.2.0",date:"2025-10-09",changes:"\"Menambahkan dokumentasi untuk hook `useLocale` dengan opsi `onLocaleChange`\""},$R[1197]={version:"5.6.6",date:"2025-10-02",changes:"\"Menambahkan dokumentasi untuk fungsi `getLocale` pada server actions\""},$R[1198]={version:"5.6.2",date:"2025-09-23",changes:"\"Menambahkan dokumentasi untuk pengawasan perubahan kamus pada Turbopack\""},$R[1199]={version:"5.6.2",date:"2025-09-22",changes:"\"Menambahkan dokumentasi untuk helper `multipleMiddlewares`\""},$R[1200]={version:"5.6.0",date:"2025-07-06",changes:"\"Mengubah fungsi `withIntlayer()` menjadi fungsi berbasis promise\""},$R[1201]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_15.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nextjs_15.md",relativeUrl:"/id/doc/environment/nextjs/15",url:"https://intlayer.org/id/doc/environment/nextjs/15"},frameworks:$R[1202]=["nextjs","react"]},"no-locale-path":$R[1203]={title:"Next.js tanpa locale URL",default:$R[1204]={createdAt:"2026-01-10",updatedAt:"2026-05-31",title:"Next.js 16 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Next.js 16 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1205]=["Internasionalisasi","Dokumentasi","Intlayer","Next.js 16","JavaScript","React"],slugs:$R[1206]=["doc","environment","nextjs","no-locale-path"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-no-lolale-path-template",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1207]=[$R[1208]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1209]={version:"8.0.0",date:"2026-01-10",changes:"\"Rilis awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_no_locale_path.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nextjs_no_locale_path.md",relativeUrl:"/id/doc/environment/nextjs/no-locale-path",url:"https://intlayer.org/id/doc/environment/nextjs/no-locale-path"},frameworks:$R[1210]=["nextjs","react"]},"next-with-Page-Router":$R[1211]={title:"Next.js dan Page Router",default:$R[1212]={createdAt:"2024-12-07",updatedAt:"2026-05-31",title:"Next.js Page Router i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Next.js Page Router multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1213]=["Internasionalisasi","Dokumentasi","Intlayer","Page Router","Next.js","JavaScript","React"],slugs:$R[1214]=["doc","environment","nextjs","next-with-page-router"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-14-template",applicationShowcase:"https://intlayer-next-14-template.vercel.app",history:$R[1215]=[$R[1216]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1217]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1218]={version:"5.6.0",date:"2025-07-06",changes:"\"Mengubah fungsi `withIntlayer()` menjadi fungsi berbasis promise\""},$R[1219]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_page_router.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nextjs_page_router.md",relativeUrl:"/id/doc/environment/nextjs/next-with-page-router",url:"https://intlayer.org/id/doc/environment/nextjs/next-with-page-router"},frameworks:$R[1220]=["nextjs","react"]},"next-with-compiler":$R[1221]={title:"Compiler",default:$R[1222]={createdAt:"2026-01-10",updatedAt:"2026-05-31",title:"Next.js i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Next.js multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1223]=["Internasionalisasi","Dokumentasi","Intlayer","Next.js","JavaScript","React","Kompiler","AI"],slugs:$R[1224]=["doc","environment","nextjs","compiler"],applicationTemplate:"https://github.com/aymericzip/intlayer-next-no-lolale-path-template",youtubeVideo:"https://www.youtube.com/watch?v=e_PPG7PTqGU",history:$R[1225]=[$R[1226]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1227]={version:"8.2.0",date:"2026-03-09",changes:"\"Update compiler options, add FilePathPattern support\""},$R[1228]={version:"8.1.6",date:"2026-02-23",changes:"\"Rilis Awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nextjs_compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nextjs_compiler.md",relativeUrl:"/id/doc/environment/nextjs/compiler",url:"https://intlayer.org/id/doc/environment/nextjs/compiler"},frameworks:$R[1229]=["nextjs","react"]}},frameworks:$R[1230]=["nextjs","react"]},"tanstack-start":$R[1231]={title:"Tanstack Start",default:$R[1232]={createdAt:"2025-09-09",updatedAt:"2026-05-31",title:"TanStack Start i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi TanStack Start multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1233]=["Internasionalisasi","Dokumentasi","Intlayer","TanStack Start","React","i18n","TypeScript","Routing Locale"],slugs:$R[1234]=["doc","environment","tanstack-start"],applicationTemplate:"https://github.com/aymericzip/intlayer-tanstack-start-template",applicationShowcase:"https://intlayer-tanstack-start-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=_XTdKVWaeqg",history:$R[1235]=[$R[1236]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1237]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1238]={version:"7.4.0",date:"2025-12-11",changes:"\"Memperkenalkan validatePrefix dan menambah langkah 14: Menangani halaman 404 dengan rute terlokalisasi.\""},$R[1239]={version:"7.3.9",date:"2025-12-05",changes:"\"Menambah langkah 13: Mengambil locale di server actions Anda (Opsional)\""},$R[1240]={version:"7.2.3",date:"2025-11-18",changes:"\"Menambah langkah 13: Adaptasi Nitro\""},$R[1241]={version:"7.1.0",date:"2025-11-17",changes:"\"Memperbaiki default prefix dengan menambahkan fungsi getPrefix, gunakan useLocalizedNavigate, LocaleSwitcher dan LocalizedLink.\""},$R[1242]={version:"6.5.2",date:"2025-10-03",changes:"\"Perbarui dokumen\""},$R[1243]={version:"5.8.1",date:"2025-09-09",changes:"\"Ditambahkan untuk TanStack Start\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_tanstack.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_tanstack.md",relativeUrl:"/id/doc/environment/tanstack-start",url:"https://intlayer.org/id/doc/environment/tanstack-start"},frameworks:$R[1244]=["tanstack","react","vite"],subSections:$R[1245]={"tanstack-start-solid":$R[1246]={title:"Tanstack Start Solid",default:$R[1247]={createdAt:"2025-03-25",updatedAt:"2026-05-31",title:"TanStack Start + Solid i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi TanStack Start + Solid multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1248]=["Internasionalisasi","Dokumentasi","Intlayer","Tanstack Start","Solid","i18n","TypeScript","Perutean Lokal"],slugs:$R[1249]=["doc","environment","tanstack-start","solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-tanstack-start-solid-template",applicationShowcase:"https://intlayer-tanstack-start-solid.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=_XTdKVWaeqg",history:$R[1250]=[$R[1251]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1252]={version:"8.5.1",date:"2026-03-25",changes:"\"Ditambahkan untuk Tanstack Start Solid.js\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_tanstack+solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_tanstack+solid.md",relativeUrl:"/id/doc/environment/tanstack-start/solid",url:"https://intlayer.org/id/doc/environment/tanstack-start/solid"},frameworks:$R[1253]=["solid","tanstack","vite"]}}},astro:$R[1254]={title:"Astro",default:$R[1255]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Astro i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1256]=["internasionalisasi","dokumentasi","Intlayer","Vite","React","i18n","JavaScript"],slugs:$R[1257]=["doc","environment","astro"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1258]=[$R[1259]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1260]={version:"7.5.9",date:"2025-12-30",changes:"\"Menambahkan perintah init\""},$R[1261]={version:"6.2.0",date:"2025-10-03",changes:"\"Pembaruan integrasi Astro, konfigurasi, dan penggunaan\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro.md",relativeUrl:"/id/doc/environment/astro",url:"https://intlayer.org/id/doc/environment/astro"},frameworks:$R[1262]=["astro","vite"],subSections:$R[1263]={"astro-and-react":$R[1264]={title:"Astro dan React",default:$R[1265]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Astro + React i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro + React multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1266]=["internasionalisasi","dokumentasi","Intlayer","Astro","React","i18n","JavaScript"],slugs:$R[1267]=["doc","environment","astro","react"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1268]=[$R[1269]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1270]={version:"7.5.9",date:"2025-12-30",changes:"\"Menambahkan perintah init\""},$R[1271]={version:"6.2.0",date:"2025-10-03",changes:"\"Pembaruan integrasi Astro, konfigurasi, dan penggunaan\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro_react.md",relativeUrl:"/id/doc/environment/astro/react",url:"https://intlayer.org/id/doc/environment/astro/react"},frameworks:$R[1272]=["react","astro","vite"]},"astro-and-svelte":$R[1273]={title:"Astro dan Svelte",default:$R[1274]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Svelte i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro + Svelte multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1275]=["internasionalisasi","dokumentasi","Intlayer","Astro","Svelte","i18n","JavaScript"],slugs:$R[1276]=["doc","environment","astro","svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1277]=[$R[1278]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1279]={version:"8.7.7",date:"2026-04-24",changes:"\"Dokumentasi awal untuk Astro + Svelte\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro_svelte.md",relativeUrl:"/id/doc/environment/astro/svelte",url:"https://intlayer.org/id/doc/environment/astro/svelte"},frameworks:$R[1280]=["svelte","astro","vite"]},"astro-and-vue":$R[1281]={title:"Astro dan Vue",default:$R[1282]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Vue i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro + Vue multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1283]=["internasionalisasi","dokumentasi","Intlayer","Astro","Vue","i18n","JavaScript"],slugs:$R[1284]=["doc","environment","astro","vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1285]=[$R[1286]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1287]={version:"8.7.7",date:"2026-04-24",changes:"\"Dokumentasi awal untuk Astro + Vue\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro_vue.md",relativeUrl:"/id/doc/environment/astro/vue",url:"https://intlayer.org/id/doc/environment/astro/vue"},frameworks:$R[1288]=["vue","astro","vite"]},"astro-and-solid":$R[1289]={title:"Astro dan Solid",default:$R[1290]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Solid i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro + Solid multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1291]=["internasionalisasi","dokumentasi","Intlayer","Astro","Solid","i18n","JavaScript"],slugs:$R[1292]=["doc","environment","astro","solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1293]=[$R[1294]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1295]={version:"8.7.7",date:"2026-04-24",changes:"\"Dokumentasi awal untuk Astro + Solid\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro_solid.md",relativeUrl:"/id/doc/environment/astro/solid",url:"https://intlayer.org/id/doc/environment/astro/solid"},frameworks:$R[1296]=["solid","astro","vite"]},"astro-and-preact":$R[1297]={title:"Astro dan Preact",default:$R[1298]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Preact i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro + Preact multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1299]=["internasionalisasi","dokumentasi","Intlayer","Astro","Preact","i18n","JavaScript"],slugs:$R[1300]=["doc","environment","astro","preact"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1301]=[$R[1302]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1303]={version:"8.7.7",date:"2026-04-24",changes:"\"Dokumentasi awal untuk Astro + Preact\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_preact.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro_preact.md",relativeUrl:"/id/doc/environment/astro/preact",url:"https://intlayer.org/id/doc/environment/astro/preact"},frameworks:$R[1304]=["preact","astro","vite"]},"astro-and-lit":$R[1305]={title:"Astro dan Lit",default:$R[1306]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Lit i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro + Lit multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1307]=["internasionalisasi","dokumentasi","Intlayer","Astro","Lit","Web Components","i18n","JavaScript"],slugs:$R[1308]=["doc","environment","astro","lit"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1309]=[$R[1310]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1311]={version:"8.7.7",date:"2026-04-24",changes:"\"Dokumentasi awal untuk Astro + Lit\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_lit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro_lit.md",relativeUrl:"/id/doc/environment/astro/lit",url:"https://intlayer.org/id/doc/environment/astro/lit"},frameworks:$R[1312]=["lit","astro","vite"]},"astro-and-vanilla-js":$R[1313]={title:"Astro dan Vanilla JS",default:$R[1314]={createdAt:"2026-04-24",updatedAt:"2026-05-31",title:"Astro + Vanilla JS i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Astro + Vanilla JS multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1315]=["internasionalisasi","dokumentasi","Intlayer","Astro","Vanilla JS","JavaScript","TypeScript"],slugs:$R[1316]=["doc","environment","astro","vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-astro-template",applicationShowcase:"https://intlayer-astro-template.vercel.app",history:$R[1317]=[$R[1318]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1319]={version:"8.7.7",date:"2026-04-24",changes:"\"Dokumentasi awal untuk Astro + Vanilla JS\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_astro_vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_astro_vanilla.md",relativeUrl:"/id/doc/environment/astro/vanilla",url:"https://intlayer.org/id/doc/environment/astro/vanilla"},frameworks:$R[1320]=["vanilla","astro","vite"]}}},"vite-and-react":$R[1321]={title:"Vite dan React",default:$R[1322]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Vite + React i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + React multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1323]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","React","i18n","JavaScript"],slugs:$R[1324]=["doc","environment","vite-and-react"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-react-template",applicationShowcase:"https://intlayer-vite-react-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1325]=[$R[1326]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1327]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1328]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+react.md",relativeUrl:"/id/doc/environment/vite-and-react",url:"https://intlayer.org/id/doc/environment/vite-and-react"},subSections:$R[1329]={"react-router-v7":$R[1330]={title:"React Router v7",default:$R[1331]={createdAt:"2025-09-04",updatedAt:"2026-05-31",title:"React Router v7 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi React Router v7 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1332]=["Internasionalisasi","Dokumentasi","Intlayer","React Router v7","React","i18n","TypeScript","Routing Locale"],slugs:$R[1333]=["doc","environment","vite-and-react","react-router-v7"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-router-v7-template",applicationShowcase:"https://intlayer-react-router-v7.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1334]=[$R[1335]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1336]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1337]={version:"7.5.6",date:"2025-12-27",changes:"\"Perbarui Layout dan tangani 404\""},$R[1338]={version:"6.1.5",date:"2025-10-03",changes:"\"Memperbarui dokumen\""},$R[1339]={version:"5.8.2",date:"2025-09-04",changes:"\"Ditambahkan untuk React Router v7\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_router_v7.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_react_router_v7.md",relativeUrl:"/id/doc/environment/vite-and-react/react-router-v7",url:"https://intlayer.org/id/doc/environment/vite-and-react/react-router-v7"},frameworks:$R[1340]=["react","vite"]},"react-router-v7-fs-routes":$R[1341]={title:"React Router v7 (fs-routes)",default:$R[1342]={createdAt:"2025-09-04",updatedAt:"2026-05-31",title:"React Router v7 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi React Router v7 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1343]=["Internasionalisasi","Dokumentasi","Intlayer","React Router v7","React","i18n","TypeScript","Routing Locale"],slugs:$R[1344]=["doc","environment","vite-and-react","react-router-v7-fs-routes"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-router-v7-template",applicationShowcase:"https://intlayer-react-router-v7.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1345]=[$R[1346]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1347]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1348]={version:"6.1.5",date:"2025-10-03",changes:"\"Memperbarui dokumen\""},$R[1349]={version:"5.8.2",date:"2025-09-04",changes:"\"Ditambahkan untuk React Router v7\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_router_v7_fs_routes.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_react_router_v7_fs_routes.md",relativeUrl:"/id/doc/environment/vite-and-react/react-router-v7-fs-routes",url:"https://intlayer.org/id/doc/environment/vite-and-react/react-router-v7-fs-routes"},frameworks:$R[1350]=["react","vite"]},compiler:$R[1351]={title:"Compiler",default:$R[1352]={createdAt:"2024-03-07",updatedAt:"2026-05-31",title:"Vite + React i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + React multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1353]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","React","Kompilator","AI"],slugs:$R[1354]=["doc","environment","vite-and-react","compiler"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-react-template",applicationShowcase:"https://intlayer-vite-react-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=dS9L7uJeak4",history:$R[1355]=[$R[1356]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1357]={version:"8.2.0",date:"2026-03-09",changes:"\"Update compiler options, add FilePathPattern support\""},$R[1358]={version:"8.1.6",date:"2026-02-23",changes:"\"Rilis awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+react_compiler.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+react_compiler.md",relativeUrl:"/id/doc/environment/vite-and-react/compiler",url:"https://intlayer.org/id/doc/environment/vite-and-react/compiler"},frameworks:$R[1359]=["react","vite"]}},frameworks:$R[1360]=["react","vite"]},"vite-and-vue":$R[1361]={title:"Vite dan Vue",default:$R[1362]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Vue i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Vue multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1363]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","Vue","JavaScript"],slugs:$R[1364]=["doc","environment","vite-and-vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-vue-template",applicationShowcase:"https://intlayer-vite-vue-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=IE3XWkZ6a5U",history:$R[1365]=[$R[1366]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1367]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1368]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+vue.md",relativeUrl:"/id/doc/environment/vite-and-vue",url:"https://intlayer.org/id/doc/environment/vite-and-vue"},frameworks:$R[1369]=["vue","vite"],subSections:$R[1370]={"nuxt-and-vue":$R[1371]={title:"Nuxt dan Vue",default:$R[1372]={createdAt:"2025-06-18",updatedAt:"2026-05-31",title:"Nuxt i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Nuxt multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1373]=["Internasionalisasi","Dokumentasi","Intlayer","Nuxt","Vue","JavaScript"],slugs:$R[1374]=["doc","environment","nuxt-and-vue"],applicationTemplate:"https://github.com/aymericzip/intlayer-nuxt-4-template",applicationShowcase:"https://intlayer-nuxt-4-template.vercel.app",youtubeVideo:"https://www.youtube.com/watch?v=nhUcUAVQ6eQ",history:$R[1375]=[$R[1376]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1377]={version:"7.3.11",date:"2025-12-07",changes:"\"Memperbarui LocaleSwitcher, SEO, metadata\""},$R[1378]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_nuxt.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nuxt.md",relativeUrl:"/id/doc/environment/nuxt-and-vue",url:"https://intlayer.org/id/doc/environment/nuxt-and-vue"},frameworks:$R[1379]=["nuxt","vue","vite"]}}},"vite-and-solid":$R[1380]={title:"Vite dan Solid",default:$R[1381]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Solid i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Solid multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1382]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","Solid","JavaScript"],slugs:$R[1383]=["doc","environment","vite-and-solid"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-solid-template",history:$R[1384]=[$R[1385]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1386]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1387]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+solid.md",relativeUrl:"/id/doc/environment/vite-and-solid",url:"https://intlayer.org/id/doc/environment/vite-and-solid"},frameworks:$R[1388]=["solid","vite"]},"vite-and-svelte":$R[1389]={title:"Vite dan Svelte",default:$R[1390]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Svelte i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Svelte multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1391]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","Svelte","JavaScript"],slugs:$R[1392]=["doc","environment","vite-and-svelte"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-svelte-template",applicationShowcase:"https://intlayer-vite-svelte-template.vercel.app",history:$R[1393]=[$R[1394]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1395]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1396]={version:"5.5.11",date:"2025-11-19",changes:"\"Memperbarui dokumen\""},$R[1397]={version:"5.5.10",date:"2025-06-29",changes:"\"Memulai riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+svelte.md",relativeUrl:"/id/doc/environment/vite-and-svelte",url:"https://intlayer.org/id/doc/environment/vite-and-svelte"},subSections:$R[1398]={"vite-and-svelte-kit":$R[1399]={title:"SvelteKit",default:$R[1400]={createdAt:"2025-11-20",updatedAt:"2026-05-31",title:"SvelteKit i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi SvelteKit multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1401]=["Internasionalisasi","Dokumentasi","Intlayer","SvelteKit","JavaScript","SSR"],slugs:$R[1402]=["doc","environment","sveltekit"],applicationTemplate:"https://github.com/aymericzip/intlayer-sveltekit-template",applicationShowcase:"https://intlayer-sveltekit-template.vercel.app",history:$R[1403]=[$R[1404]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1405]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1406]={version:"7.1.10",date:"2025-11-20",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_svelte_kit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_svelte_kit.md",relativeUrl:"/id/doc/environment/sveltekit",url:"https://intlayer.org/id/doc/environment/sveltekit"},frameworks:$R[1407]=["svelte","vite"]}},frameworks:$R[1408]=["svelte","vite"]},"vite-and-preact":$R[1409]={title:"Vite dan Preact",default:$R[1410]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Vite + Preact i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Preact multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1411]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","Preact","JavaScript"],slugs:$R[1412]=["doc","environment","vite-and-preact"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-preact-template",applicationShowcase:"https://intlayer-vite-preact-template.vercel.app",history:$R[1413]=[$R[1414]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1415]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1416]={version:"7.0.0",date:"2025-10-28",changes:"\"Memperbarui komponen LocaleRouter untuk menggunakan konfigurasi rute baru\""},$R[1417]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+preact.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+preact.md",relativeUrl:"/id/doc/environment/vite-and-preact",url:"https://intlayer.org/id/doc/environment/vite-and-preact"},frameworks:$R[1418]=["preact","vite"]},"vite-and-vanilla-js":$R[1419]={title:"Vite dan Vanilla JS",default:$R[1420]={createdAt:"2026-03-23",updatedAt:"2026-05-31",title:"Vite + Vanilla JS i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Vanilla JS multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1421]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","Vanilla JS","JavaScript","TypeScript","HTML"],slugs:$R[1422]=["doc","environment","vite-and-vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-vanilla-template",applicationShowcase:"https://intlayer-vite-vanilla.vercel.app",history:$R[1423]=[$R[1424]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1425]={version:"8.4.10",date:"2026-03-23",changes:"\"Riwayat awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+vanilla.md",relativeUrl:"/id/doc/environment/vite-and-vanilla",url:"https://intlayer.org/id/doc/environment/vite-and-vanilla"},frameworks:$R[1426]=["vanilla","vite"],subSections:$R[1427]={"vanilla-js":$R[1428]={title:"Vanilla JS (tanpa bundler)",default:$R[1429]={createdAt:"2026-03-31",updatedAt:"2026-05-31",title:"Vanilla JS i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vanilla JS multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1430]=["Internasionalisasi","Dokumentasi","Intlayer","Vanilla JS","JavaScript","TypeScript","HTML"],slugs:$R[1431]=["doc","environment","vanilla"],applicationTemplate:"https://github.com/aymericzip/intlayer-vanilla-template",applicationShowcase:"https://intlayer-vanilla-template.vercel.app",history:$R[1432]=[$R[1433]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1434]={version:"8.4.10",date:"2026-03-31",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vanilla.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vanilla.md",relativeUrl:"/id/doc/environment/vanilla",url:"https://intlayer.org/id/doc/environment/vanilla"},frameworks:$R[1435]=["vanilla"]}}},"vite-and-lit":$R[1436]={title:"Vite dan Lit",default:$R[1437]={createdAt:"2026-03-23",updatedAt:"2026-05-31",title:"Vite + Lit i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Vite + Lit multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1438]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","Lit","Web Components","JavaScript"],slugs:$R[1439]=["doc","environment","vite-and-lit"],applicationTemplate:"https://github.com/aymericzip/intlayer-vite-lit-template",applicationShowcase:"https://intlayer-vite-lit-template.vercel.app",history:$R[1440]=[$R[1441]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1442]={version:"8.4.10",date:"2026-03-23",changes:"\"Riwayat awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_vite+lit.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_vite+lit.md",relativeUrl:"/id/doc/environment/vite-and-lit",url:"https://intlayer.org/id/doc/environment/vite-and-lit"},frameworks:$R[1443]=["lit","vite"]},angular:$R[1444]={title:"Angular 21",default:$R[1445]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Angular 21 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Angular 21 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1446]=["Internasionalisasi","Dokumentasi","Intlayer","Angular","JavaScript"],slugs:$R[1447]=["doc","environment","angular"],applicationTemplate:"https://github.com/aymericzip/intlayer-angular-21-template",applicationShowcase:"https://intlayer-angular-21-template.vercel.app/",history:$R[1448]=[$R[1449]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API Solid useIntlayer untuk akses properti langsung\""},$R[1450]={version:"8.0.0",date:"2026-01-26",changes:"\"Rilis versi stabil\""},$R[1451]={version:"8.0.0",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1452]={version:"5.5.10",date:"2025-06-29",changes:"\"Riwayat awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_angular_21.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_angular_21.md",relativeUrl:"/id/doc/environment/angular",url:"https://intlayer.org/id/doc/environment/angular"},subSections:$R[1453]={19:$R[1454]={title:"Angular 19 (Webpack)",default:$R[1455]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Angular 19 i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Angular 19 multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1456]=["Internasionalisasi","Dokumentasi","Intlayer","Angular","JavaScript"],slugs:$R[1457]=["doc","environment","angular","19"],applicationTemplate:"https://github.com/aymericzip/intlayer-angular-19-template",applicationShowcase:"https://intlayer-angular-19-template.vercel.app",history:$R[1458]=[$R[1459]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1460]={version:"8.0.0",date:"2026-01-26",changes:"\"Rilis versi stabil\""},$R[1461]={version:"8.0.0",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1462]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_angular_19.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_angular_19.md",relativeUrl:"/id/doc/environment/angular/19",url:"https://intlayer.org/id/doc/environment/angular/19"},frameworks:$R[1463]=["angular","webpack"]},analog:$R[1464]={title:"Analog",default:$R[1465]={createdAt:"2025-04-18",updatedAt:"2026-05-31",title:"Analog i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Analog multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1466]=["Internationalization","Documentation","Intlayer","Analog","Angular","JavaScript"],slugs:$R[1467]=["doc","environment","analog"],applicationTemplate:"https://github.com/aymericzip/intlayer-analog-template",applicationShowcase:"https://intlayer-analog-template.vercel.app",history:$R[1468]=[$R[1469]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1470]={version:"8.0.4",date:"2026-01-26",changes:"\"Riwayat awal\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_analog.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_analog.md",relativeUrl:"/id/doc/environment/analog",url:"https://intlayer.org/id/doc/environment/analog"},frameworks:$R[1471]=["angular","vite"]}},frameworks:$R[1472]=["angular","vite"]},"create-react-app":$R[1473]={title:"React CRA",default:$R[1474]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"Create React App i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Create React App multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1475]=["Internasionalisasi","Dokumentasi","Intlayer","Create React App","CRA","JavaScript","React"],slugs:$R[1476]=["doc","environment","create-react-app"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-cra-template",history:$R[1477]=[$R[1478]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1479]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1480]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_create_react_app.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_create_react_app.md",relativeUrl:"/id/doc/environment/create-react-app",url:"https://intlayer.org/id/doc/environment/create-react-app"},frameworks:$R[1481]=["react","vite"]},"react-native-and-expo":$R[1482]={title:"React Native dan Expo",default:$R[1483]={createdAt:"2025-06-18",updatedAt:"2026-05-31",title:"Expo + React Native i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Expo + React Native multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1484]=["Internasionalisasi","Dokumentasi","Intlayer","React Native","Expo","JavaScript"],slugs:$R[1485]=["doc","environment","react-native-and-expo"],applicationTemplate:"https://github.com/aymericzip/intlayer-react-native-template",applicationShowcase:"https://intlayer-react-native.vercel.app",history:$R[1486]=[$R[1487]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1488]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1489]={version:"6.1.6",date:"2025-10-02",changes:"\"Menambahkan bagian debug\""},$R[1490]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_react_native+expo.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_react_native+expo.md",relativeUrl:"/id/doc/environment/react-native-and-expo",url:"https://intlayer.org/id/doc/environment/react-native-and-expo"},frameworks:$R[1491]=["react","react-native","expo"]},node:$R[1492]={title:"Node & Backend",subSections:$R[1493]={express:$R[1494]={title:"Express.js",default:$R[1495]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"Express i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Express multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1496]=["Internasionalisasi","Dokumentasi","Intlayer","Express","JavaScript","Backend"],slugs:$R[1497]=["doc","environment","express"],applicationTemplate:"https://github.com/aymericzip/intlayer-express-template",history:$R[1498]=[$R[1499]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1500]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1501]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_express.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_express.md",relativeUrl:"/id/doc/environment/express",url:"https://intlayer.org/id/doc/environment/express"},frameworks:$R[1502]=["express","node"]},nest:$R[1503]={title:"NestJS",default:$R[1504]={createdAt:"2025-09-09",updatedAt:"2026-05-31",title:"NestJS i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi NestJS multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1505]=["Internasionalisasi","Dokumentasi","Intlayer","NestJS","JavaScript","Backend"],slugs:$R[1506]=["doc","environment","nest"],applicationTemplate:"https://github.com/AydinTheFirst/nestjs-intlayer",author:"AydinTheFirst",history:$R[1507]=[$R[1508]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1509]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1510]={version:"5.8.0",date:"2025-09-09",changes:"\"Dokumen awal\""}],docKey:"./docs/en/intlayer_with_nestjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_nestjs.md",relativeUrl:"/id/doc/environment/nest",url:"https://intlayer.org/id/doc/environment/nest"},frameworks:$R[1511]=["nest","node"]},fastify:$R[1512]={title:"Fastify",default:$R[1513]={createdAt:"2025-12-30",updatedAt:"2026-05-31",title:"Fastify i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Fastify multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1514]=["Internasionalisasi","Dokumentasi","Intlayer","Fastify","JavaScript","Backend"],slugs:$R[1515]=["doc","environment","fastify"],applicationTemplate:"https://github.com/aymericzip/intlayer-fastify-template",history:$R[1516]=[$R[1517]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1518]={version:"7.6.0",date:"2025-12-31",changes:"\"Tambah perintah init\""},$R[1519]={version:"7.6.0",date:"2025-12-31",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_fastify.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_fastify.md",relativeUrl:"/id/doc/environment/fastify",url:"https://intlayer.org/id/doc/environment/fastify"},frameworks:$R[1520]=["fastify","node"]},hono:$R[1521]={title:"Hono",default:$R[1522]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"Hono i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Hono multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1523]=["Internasionalisasi","Dokumentasi","Intlayer","Hono","JavaScript","Backend"],slugs:$R[1524]=["doc","environment","hono"],applicationTemplate:"https://github.com/aymericzip/intlayer-hono-template",history:$R[1525]=[$R[1526]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1527]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1528]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_hono.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_hono.md",relativeUrl:"/id/doc/environment/hono",url:"https://intlayer.org/id/doc/environment/hono"},frameworks:$R[1529]=["hono","node"]},adonis:$R[1530]={title:"Adonis",default:$R[1531]={createdAt:"2025-08-23",updatedAt:"2026-05-31",title:"AdonisJS i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi AdonisJS multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1532]=["Internasionalisasi","Dokumentasi","Intlayer","AdonisJS","JavaScript","Backend"],slugs:$R[1533]=["doc","environment","adonisjs"],applicationTemplate:"https://github.com/aymericzip/intlayer-adonis-template",history:$R[1534]=[$R[1535]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1536]={version:"8.0.0",date:"2025-12-30",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_adonisjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_adonisjs.md",relativeUrl:"/id/doc/environment/adonisjs",url:"https://intlayer.org/id/doc/environment/adonisjs"},frameworks:$R[1537]=["adonis","node"]}}},other:$R[1538]={title:"Lainnya",subSections:$R[1539]={"lynx-and-react":$R[1540]={title:"Lynx dan React",default:$R[1541]={createdAt:"2025-03-09",updatedAt:"2026-05-31",title:"Lynx + React i18n - Panduan lengkap menerjemahkan aplikasi Anda",description:"Tidak ada lagi i18next. Panduan 2026 untuk membangun aplikasi Lynx + React multibahasa (i18n). Terjemahkan dengan agen AI dan optimalkan ukuran bundle, SEO, dan performa.",keywords:$R[1542]=["Internasionalisasi","Dokumentasi","Intlayer","Vite","React","Lynx","JavaScript"],slugs:$R[1543]=["doc","environment","lynx-and-react"],applicationTemplate:"https://github.com/aymericzip/intlayer-lynx-template",history:$R[1544]=[$R[1545]={version:"8.9.0",date:"2026-05-04",changes:"\"Perbarui penggunaan API useIntlayer Solid ke akses properti langsung\""},$R[1546]={version:"7.5.9",date:"2025-12-30",changes:"\"Tambahkan perintah init\""},$R[1547]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/intlayer_with_lynx+react.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_with_lynx+react.md",relativeUrl:"/id/doc/environment/lynx-and-react",url:"https://intlayer.org/id/doc/environment/lynx-and-react"},frameworks:$R[1548]=["lynx","react"]}}}}},plugins:$R[1549]={title:"Plugins",subSections:$R[1550]={syncJSON:$R[1551]={title:"JSON",default:$R[1552]={createdAt:"2025-03-13",updatedAt:"2025-12-13",title:"Plugin Sinkronisasi JSON",description:"Sinkronkan kamus Intlayer dengan file JSON i18n pihak ketiga (i18next, next-intl, react-intl, vue-i18n, dan lainnya). Pertahankan i18n Anda yang sudah ada sambil menggunakan Intlayer untuk mengelola, menerjemahkan, dan menguji pesan Anda.",keywords:$R[1553]=["Intlayer","Sinkronisasi JSON","i18next","next-intl","react-intl","vue-i18n","next-translate","nuxt-i18n","LinguiJS","Polyglot.js","Solid-i18next","svelte-i18n","i18n","terjemahan"],slugs:$R[1554]=["doc","plugin","sync-json"],youtubeVideo:"https://www.youtube.com/watch?v=MpGMxniDHNg",history:$R[1555]=[$R[1556]={version:"7.5.0",date:"2025-12-13",changes:"\"Menambahkan dukungan format ICU dan i18next\""},$R[1557]={version:"6.1.6",date:"2025-10-05",changes:"\"Dokumentasi awal plugin Sinkronisasi JSON\""}],author:"aymericzip",docKey:"./docs/en/plugins/sync-json.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/plugins/sync-json.md",relativeUrl:"/id/doc/plugin/sync-json",url:"https://intlayer.org/id/doc/plugin/sync-json"}},syncPO:$R[1558]={title:"gettext (.po)",default:$R[1559]={createdAt:"2026-05-10",updatedAt:"2026-05-10",title:"Plugin Sync PO",description:"Sinkronkan kamus Intlayer dengan file Gettext PO. Pertahankan i18n Anda yang sudah ada sambil menggunakan Intlayer untuk mengelola, menerjemahkan, dan menguji pesan Anda.",keywords:$R[1560]=["Intlayer","Sync PO","Gettext","i18n","terjemahan"],slugs:$R[1561]=["doc","plugin","sync-po"],youtubeVideo:"https://www.youtube.com/watch?v=MpGMxniDHNg",history:$R[1562]=[$R[1563]={version:"8.9.4",date:"2026-05-10",changes:"\"Dokumentasi awal plugin Sync PO\""}],author:"aymericzip",docKey:"./docs/en/plugins/sync-po.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/plugins/sync-po.md",relativeUrl:"/id/doc/plugin/sync-po",url:"https://intlayer.org/id/doc/plugin/sync-po"}}}},"dev-tools":$R[1564]={title:"Alat pengembang",subSections:$R[1565]={"vs-code-extension":$R[1566]={title:"Ekstensi VS Code",default:$R[1567]={createdAt:"2025-03-17",updatedAt:"2025-09-30",title:"Ekstensi VS Code Resmi",description:"Pelajari cara menggunakan ekstensi Intlayer di VS Code untuk meningkatkan alur kerja pengembangan Anda. Navigasi cepat antar konten yang dilokalisasi dan kelola kamus Anda dengan efisien.",keywords:$R[1568]=["Ekstensi VS Code","Intlayer","Lokalisasi","Alat Pengembangan","React","Next.js","JavaScript","TypeScript"],slugs:$R[1569]=["doc","vs-code-extension"],history:$R[1570]=[$R[1571]={version:"6.1.5",date:"2025-09-30",changes:"\"Menambahkan gif demo\""},$R[1572]={version:"6.1.0",date:"2025-09-24",changes:"\"Menambahkan bagian pemilihan lingkungan\""},$R[1573]={version:"6.0.0",date:"2025-09-22",changes:"\"Tab Intlayer / Perintah Isi & Uji\""},$R[1574]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/vs_code_extension.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/vs_code_extension.md",relativeUrl:"/id/doc/vs-code-extension",url:"https://intlayer.org/id/doc/vs-code-extension"}},"mcp-server":$R[1575]={title:"Server MCP",default:$R[1576]={createdAt:"2025-06-07",updatedAt:"2026-03-03",title:"Dokumentasi Server MCP",description:"Jelajahi fitur dan pengaturan Server MCP untuk mengoptimalkan manajemen dan operasi server Anda.",keywords:$R[1577]=["Server MCP","Manajemen Server","Optimasi","Intlayer","Dokumentasi","Pengaturan","Fitur"],slugs:$R[1578]=["doc","mcp-server"],history:$R[1579]=[$R[1580]={version:"5.5.12",date:"2025-07-11",changes:"\"Menambahkan pengaturan ChatGPT\""},$R[1581]={version:"5.5.12",date:"2025-07-10",changes:"\"Menambahkan pengaturan Claude Desktop\""},$R[1582]={version:"5.5.12",date:"2025-07-10",changes:"\"Menambahkan transport Streamable HTTP dan server jarak jauh\""},$R[1583]={version:"5.5.10",date:"2025-06-29",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/mcp_server.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/mcp_server.md",relativeUrl:"/id/doc/mcp-server",url:"https://intlayer.org/id/doc/mcp-server"}},"agent-skills":$R[1584]={title:"Keahlian agen",default:$R[1585]={createdAt:"2026-02-09",updatedAt:"2026-03-03",title:"Keterampilan Agen",description:"Pelajari cara menggunakan Intlayer Agent Skills untuk meningkatkan pemahaman agen AI Anda terhadap proyek Anda, termasuk panduan pengaturan komprehensif untuk Metadata, Sitemaps, dan Server Actions.",keywords:$R[1586]=["Intlayer","Keterampilan Agen","Agen AI","Internasionalisasi","Dokumentasi"],slugs:$R[1587]=["doc","agent_skills"],history:$R[1588]=[$R[1589]={version:"8.1.0",date:"2026-02-09",changes:"\"Inisialisasi riwayat\""}],author:"aymericzip",docKey:"./docs/en/agent_skills.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/agent_skills.md",relativeUrl:"/id/doc/agent_skills",url:"https://intlayer.org/id/doc/agent_skills"}},lsp:$R[1590]={title:"Language Server Protocol",default:$R[1591]={createdAt:"2025-06-07",updatedAt:"2026-05-31",title:"Server LSP Intlayer",description:"Pelajari bagaimana Server Bahasa Intlayer menyediakan fitur \"Go-to-Definition\" dan fitur IDE lainnya untuk useIntlayer, getIntlayer, dan panggilan terkait di semua editor yang didukung.",keywords:$R[1592]=["LSP","Server Bahasa","Go to Definition","IDE","Intlayer","VS Code","Neovim","TypeScript"],slugs:$R[1593]=["doc","lsp"],history:$R[1594]=[$R[1595]={version:"8.12.0",date:"2026-06-01",changes:"\"Release LSP\""}],author:"aymericzip",docKey:"./docs/en/lsp.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/lsp.md",relativeUrl:"/id/doc/lsp",url:"https://intlayer.org/id/doc/lsp"}}}},releases:$R[1596]={title:"Rilis",subSections:$R[1597]={v9:$R[1598]={title:"v9",default:$R[1599]={createdAt:"2026-06-14",updatedAt:"2026-06-14",title:"Intlayer v9 Baru - Apa yang baru?",description:"Temukan apa yang baru di Intlayer v9. Memperkenalkan paket kompatibilitas drop-in untuk pustaka i18n populer dan dukungan untuk Collections, Variants, dan Dynamic Records.",keywords:$R[1600]=["Intlayer","Kompatibilitas","Migrasi","Collections","Variants","Dynamic Records","i18next","next-intl","vue-i18n"],slugs:$R[1601]=["doc","releases","v9"],author:"aymericzip",docKey:"./docs/en/releases/v9.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/releases/v9.md",relativeUrl:"/id/doc/releases/v9",url:"https://intlayer.org/id/doc/releases/v9"}},v8:$R[1602]={title:"v8",default:$R[1603]={createdAt:"2025-09-22",updatedAt:"2026-06-14",title:"Intlayer v8 Baru - Apa yang Baru?",description:"Temukan apa yang baru di Intlayer v8. Peningkatan besar pada pengalaman pengembang, validasi konten, dan pengelolaan kamus.",keywords:$R[1604]=["Intlayer","CMS","Developer Experience","Features","React","Next.js","JavaScript","TypeScript"],youtubeVideo:"https://www.youtube.com/watch?v=ia6JmVf-kkU",slugs:$R[1605]=["doc","releases","v8"],author:"aymericzip",docKey:"./docs/en/releases/v8.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/releases/v8.md",relativeUrl:"/id/doc/rilis/v8",url:"https://intlayer.org/id/doc/rilis/v8"}},v7:$R[1606]={title:"v7",default:$R[1607]={createdAt:"2025-09-22",updatedAt:"2025-09-23",title:"Intlayer v7 Baru - Apa yang Baru?",description:"Temukan apa yang baru di Intlayer v7. Peningkatan besar dalam performa, pengalaman pengembang, dan fitur baru untuk meningkatkan alur kerja internasionalisasi Anda.",keywords:$R[1608]=["Intlayer","Lokalisasi","Pengembangan","Performa","Pengalaman Pengembang","Fitur","React","Next.js","JavaScript","TypeScript"],slugs:$R[1609]=["doc","releases","v7"],author:"aymericzip",docKey:"./docs/en/releases/v7.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/releases/v7.md",relativeUrl:"/id/doc/releases/v7",url:"https://intlayer.org/id/doc/releases/v7"}},v6:$R[1610]={title:"v6",default:$R[1611]={createdAt:"2025-09-22",updatedAt:"2025-09-23",title:"Intlayer v6 Baru - Apa yang Baru?",description:"Temukan apa yang baru di Intlayer v6. Peningkatan besar dalam performa, pengalaman pengembang, dan fitur baru untuk meningkatkan alur kerja internasionalisasi Anda.",keywords:$R[1612]=["Intlayer","Lokalisasi","Pengembangan","Performa","Pengalaman Pengembang","Fitur","React","Next.js","JavaScript","TypeScript"],slugs:$R[1613]=["doc","releases","v6"],author:"aymericzip",docKey:"./docs/en/releases/v6.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/releases/v6.md",relativeUrl:"/id/doc/releases/v6",url:"https://intlayer.org/id/doc/releases/v6"}}}},benchmark:$R[1614]={title:"Benchmark",default:$R[1615]={createdAt:"2026-04-20",updatedAt:"2026-04-20",title:"Benchmark library i18n",description:"Pelajari perbandingan Intlayer dengan library i18n lainnya dalam hal performa dan ukuran bundle.",keywords:$R[1616]=["benchmark","i18n","intl","nextjs","tanstack","intlayer"],slugs:$R[1617]=["doc","benchmark"],history:$R[1618]=[$R[1619]={version:"8.7.5",date:"2026-01-06",changes:"\"Inisialisasi benchmark\""}],author:"aymericzip",docKey:"./docs/en/benchmark/index.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/benchmark/index.md",relativeUrl:"/id/doc/benchmark",url:"https://intlayer.org/id/doc/benchmark"},subSections:$R[1620]={nextjs:$R[1621]={title:"Next.js",default:$R[1622]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Solusi i18n terbaik untuk Next.js tahun 2026 - Laporan Benchmark",description:"Bandingkan library internasionalisasi (i18n) Next.js seperti next-intl, next-i18next, dan Intlayer. Laporan performa terperinci tentang ukuran bundle, kebocoran, dan reaktivitas.",keywords:$R[1623]=["benchmark","i18n","intl","nextjs","performa","intlayer"],slugs:$R[1624]=["doc","benchmark","nextjs"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n",history:$R[1625]=[$R[1626]={version:"8.9.8",date:"2026-05-18",changes:"\"Tambahkan perbandingan bintang GitHub\""},$R[1627]={version:"8.7.5",date:"2026-01-06",changes:"\"Inisialisasi benchmark\""}],docKey:"./docs/en/benchmark/nextjs.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/benchmark/nextjs.md",relativeUrl:"/id/doc/benchmark/nextjs",url:"https://intlayer.org/id/doc/benchmark/nextjs"},frameworks:$R[1628]=["nextjs","react"]},tanstack:$R[1629]={title:"TanStack",default:$R[1630]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Solusi i18n terbaik untuk TanStack Start tahun 2026 - Laporan Benchmark",description:"Bandingkan library internasionalisasi TanStack Start seperti react-i18next, use-intl, dan Intlayer. Laporan performa terperinci tentang ukuran bundle, kebocoran, dan reaktivitas.",keywords:$R[1631]=["benchmark","i18n","intl","tanstack","performa","intlayer"],slugs:$R[1632]=["doc","benchmark","tanstack"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-tanstack-start-template",history:$R[1633]=[$R[1634]={version:"8.9.8",date:"2026-05-18",changes:"\"Tambahkan perbandingan bintang GitHub\""},$R[1635]={version:"8.7.5",date:"2026-01-06",changes:"\"Inisialisasi benchmark\""}],docKey:"./docs/en/benchmark/tanstack.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/benchmark/tanstack.md",relativeUrl:"/id/doc/benchmark/tanstack",url:"https://intlayer.org/id/doc/benchmark/tanstack"},frameworks:$R[1636]=["tanstack","react"]},vue:$R[1637]={title:"Vue",default:$R[1638]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Solusi i18n Terbaik untuk Vue di Tahun 2026 - Laporan Benchmark",description:"Bandingkan pustaka internasionalisasi (i18n) Vue seperti vue-i18n, fluent-vue, dan Intlayer. Laporan performa mendetail tentang ukuran bundle, kebocoran, dan reaktivitas.",keywords:$R[1639]=["benchmark","i18n","intl","vue","performa","intlayer"],slugs:$R[1640]=["doc","benchmark","vue"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-vue-template",history:$R[1641]=[$R[1642]={version:"8.9.8",date:"2026-05-18",changes:"\"Tambahkan perbandingan bintang GitHub\""},$R[1643]={version:"8.7.12",date:"2026-01-06",changes:"\"Inisialisasi benchmark\""}],docKey:"./docs/en/benchmark/vue.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/benchmark/vue.md",relativeUrl:"/id/doc/benchmark/vue",url:"https://intlayer.org/id/doc/benchmark/vue"},frameworks:$R[1644]=["vue"]},solid:$R[1645]={title:"Solid",default:$R[1646]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Solusi i18n Terbaik untuk Solid di Tahun 2026 - Laporan Benchmark",description:"Bandingkan pustaka internasionalisasi (i18n) Solid seperti solid-primitives, solid-i18next, dan Intlayer. Laporan performa mendetail tentang ukuran bundle, kebocoran, dan reaktivitas.",keywords:$R[1647]=["benchmark","i18n","intl","solid","performa","intlayer"],slugs:$R[1648]=["doc","benchmark","solid"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-solid-template",history:$R[1649]=[$R[1650]={version:"8.9.8",date:"2026-05-18",changes:"\"Tambahkan perbandingan bintang GitHub\""},$R[1651]={version:"8.7.12",date:"2026-01-06",changes:"\"Inisialisasi benchmark\""}],docKey:"./docs/en/benchmark/solid.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/benchmark/solid.md",relativeUrl:"/id/doc/benchmark/solid",url:"https://intlayer.org/id/doc/benchmark/solid"},frameworks:$R[1652]=["solid"]},svelte:$R[1653]={title:"Svelte",default:$R[1654]={createdAt:"2026-04-20",updatedAt:"2026-05-18",title:"Solusi i18n Terbaik untuk Svelte di Tahun 2026 - Laporan Benchmark",description:"Bandingkan pustaka internasionalisasi (i18n) Svelte seperti svelte-i18n, Paraglide, dan Intlayer. Laporan performa mendetail tentang ukuran bundle, kebocoran, dan reaktivitas.",keywords:$R[1655]=["benchmark","i18n","intl","svelte","performa","intlayer"],slugs:$R[1656]=["doc","benchmark","svelte"],author:"aymericzip",applicationTemplate:"https://github.com/intlayer-org/benchmark-i18n-svelte-template",history:$R[1657]=[$R[1658]={version:"8.9.8",date:"2026-05-18",changes:"\"Tambahkan perbandingan bintang GitHub\""},$R[1659]={version:"8.7.12",date:"2026-01-06",changes:"\"Inisialisasi benchmark\""}],docKey:"./docs/en/benchmark/svelte.md",githubUrl:"https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/benchmark/svelte.md",relativeUrl:"/id/doc/benchmark/svelte",url:"https://intlayer.org/id/doc/benchmark/svelte"},frameworks:$R[1660]=["svelte"]}}}}},ssr:!0}],lastMatchId:"�{-$locale}�_docs�doc�$�id�doc�environment�vite-and-svelte"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" async="" src="/assets/index-Bw9yQaJj.js"></script></body></html>