create-nextblock 0.13.10 → 0.13.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/docker-template/.dockerignore +23 -23
  2. package/docker-template/.env.docker.example +69 -69
  3. package/docker-template/docker/db/init/99-jwt.sql +6 -6
  4. package/docker-template/docker/db/init/99-roles.sql +25 -25
  5. package/docker-template/docker/kong/kong.yml +112 -112
  6. package/docker-template/scripts/docker-setup.mjs +310 -310
  7. package/libs/db/tsconfig.lib.json +3 -3
  8. package/libs/editor/tsconfig.lib.json +3 -3
  9. package/libs/ui/tsconfig.lib.json +3 -3
  10. package/libs/utils/tsconfig.json +3 -3
  11. package/package.json +1 -1
  12. package/project.json +19 -19
  13. package/templates/nextblock-template/.browserslistrc +11 -11
  14. package/templates/nextblock-template/.dockerignore +23 -23
  15. package/templates/nextblock-template/README.md +34 -34
  16. package/templates/nextblock-template/app/(auth-pages)/layout.tsx +9 -9
  17. package/templates/nextblock-template/app/(auth-pages)/post-sign-in/page.tsx +27 -27
  18. package/templates/nextblock-template/app/(auth-pages)/sign-up/page.tsx +46 -46
  19. package/templates/nextblock-template/app/(auth-pages)/two-factor/page.tsx +51 -51
  20. package/templates/nextblock-template/app/ToasterProvider.tsx +17 -17
  21. package/templates/nextblock-template/app/[slug]/pageClientActions.ts +7 -7
  22. package/templates/nextblock-template/app/actions/consent.ts +57 -57
  23. package/templates/nextblock-template/app/actions/postActions.ts +146 -146
  24. package/templates/nextblock-template/app/actions/productGridActions.ts +40 -40
  25. package/templates/nextblock-template/app/actions/twoFactorEmail.ts +22 -22
  26. package/templates/nextblock-template/app/api/ai/cortex/build-widget/route.ts +153 -153
  27. package/templates/nextblock-template/app/api/ai/generate-blocks/route.ts +96 -96
  28. package/templates/nextblock-template/app/api/brand/email-logo/route.ts +48 -48
  29. package/templates/nextblock-template/app/api/cms/check-updates/route.ts +44 -44
  30. package/templates/nextblock-template/app/api/cms/ecommerce/product-picker/route.ts +151 -151
  31. package/templates/nextblock-template/app/api/cms/full-backup/export/route.ts +33 -33
  32. package/templates/nextblock-template/app/api/cms/full-backup/restore/route.ts +63 -63
  33. package/templates/nextblock-template/app/api/cron/reset-sandbox/route.ts +3490 -3490
  34. package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +5749 -5609
  35. package/templates/nextblock-template/app/api/cron/sync-currencies/route.ts +39 -39
  36. package/templates/nextblock-template/app/api/custom-blocks/db-relations/route.ts +92 -92
  37. package/templates/nextblock-template/app/api/custom-blocks/editor-definitions/route.ts +43 -43
  38. package/templates/nextblock-template/app/api/media/library/route.ts +69 -69
  39. package/templates/nextblock-template/app/api/media/r2-presigned/route.ts +53 -53
  40. package/templates/nextblock-template/app/api/media/record/route.ts +160 -160
  41. package/templates/nextblock-template/app/api/search/route.ts +43 -43
  42. package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +441 -441
  43. package/templates/nextblock-template/app/auth/callback/route.ts +31 -31
  44. package/templates/nextblock-template/app/cart/page.tsx +7 -7
  45. package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
  46. package/templates/nextblock-template/app/cms/blocks/components/MediaLibraryModal.tsx +149 -149
  47. package/templates/nextblock-template/app/cms/blocks/components/MultiEntityPicker.tsx +263 -263
  48. package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
  49. package/templates/nextblock-template/app/cms/blocks/editors/TextBlockEditor.tsx +90 -90
  50. package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
  51. package/templates/nextblock-template/app/cms/components/CortexAiPageContext.tsx +58 -58
  52. package/templates/nextblock-template/app/cms/components/EcommerceActiveContext.tsx +27 -27
  53. package/templates/nextblock-template/app/cms/components/FeedbackModal.tsx +36 -36
  54. package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
  55. package/templates/nextblock-template/app/cms/components/TwoFactorReminderBanner.tsx +45 -45
  56. package/templates/nextblock-template/app/cms/components/github-connect-actions.ts +102 -102
  57. package/templates/nextblock-template/app/cms/components/system-alerts-actions.ts +31 -31
  58. package/templates/nextblock-template/app/cms/custom-blocks/[id]/edit/page.tsx +66 -66
  59. package/templates/nextblock-template/app/cms/custom-blocks/actions.ts +519 -519
  60. package/templates/nextblock-template/app/cms/custom-blocks/components/BlocksLibraryTransferControls.tsx +256 -256
  61. package/templates/nextblock-template/app/cms/custom-blocks/components/DBRelationSelect.tsx +384 -384
  62. package/templates/nextblock-template/app/cms/custom-blocks/components/ImageR2Picker.tsx +221 -221
  63. package/templates/nextblock-template/app/cms/custom-blocks/new/page.tsx +12 -12
  64. package/templates/nextblock-template/app/cms/custom-blocks/page.tsx +438 -438
  65. package/templates/nextblock-template/app/cms/dashboard/actions.ts +228 -228
  66. package/templates/nextblock-template/app/cms/dashboard/components/DashboardOnboarding.tsx +130 -130
  67. package/templates/nextblock-template/app/cms/import-export/actions.ts +226 -226
  68. package/templates/nextblock-template/app/cms/interactions/EmailRecipientsInput.tsx +189 -189
  69. package/templates/nextblock-template/app/cms/layout.tsx +73 -73
  70. package/templates/nextblock-template/app/cms/media/components/FolderNavigator.tsx +273 -273
  71. package/templates/nextblock-template/app/cms/media/components/FolderTree.tsx +122 -122
  72. package/templates/nextblock-template/app/cms/media/components/MediaEditForm.tsx +26 -26
  73. package/templates/nextblock-template/app/cms/media/components/MediaGridClient.tsx +69 -69
  74. package/templates/nextblock-template/app/cms/navigation/components/NavigationMenuDnd.tsx +3 -3
  75. package/templates/nextblock-template/app/cms/products/attributes/page.tsx +12 -12
  76. package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
  77. package/templates/nextblock-template/app/cms/products/inventory/page.tsx +13 -13
  78. package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
  79. package/templates/nextblock-template/app/cms/products/productFormData.ts +133 -133
  80. package/templates/nextblock-template/app/cms/products/settings/page.tsx +5 -5
  81. package/templates/nextblock-template/app/cms/promotions/PromotionsWorkspace.tsx +456 -456
  82. package/templates/nextblock-template/app/cms/promotions/actions.ts +115 -115
  83. package/templates/nextblock-template/app/cms/promotions/page.tsx +31 -31
  84. package/templates/nextblock-template/app/cms/revisions/service.ts +19 -19
  85. package/templates/nextblock-template/app/cms/revisions/utils.ts +132 -132
  86. package/templates/nextblock-template/app/cms/settings/backup-restore/BackupRestoreWorkspace.tsx +1004 -1004
  87. package/templates/nextblock-template/app/cms/settings/backup-restore/page.tsx +29 -29
  88. package/templates/nextblock-template/app/cms/settings/bot-protection/page.tsx +24 -24
  89. package/templates/nextblock-template/app/cms/settings/cortex-ai/SandboxCortexAiSettingsClient.tsx +497 -497
  90. package/templates/nextblock-template/app/cms/settings/currencies/actions.ts +331 -331
  91. package/templates/nextblock-template/app/cms/settings/currencies/page.tsx +494 -494
  92. package/templates/nextblock-template/app/cms/settings/email/page.tsx +28 -28
  93. package/templates/nextblock-template/app/cms/settings/extra-translations/ExtraTranslationsWorkspace.tsx +767 -767
  94. package/templates/nextblock-template/app/cms/settings/extra-translations/page.tsx +93 -93
  95. package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
  96. package/templates/nextblock-template/app/cms/settings/languages/components/LanguageDetectionPanel.tsx +188 -188
  97. package/templates/nextblock-template/app/cms/settings/logos/[id]/edit/page.tsx +7 -7
  98. package/templates/nextblock-template/app/cms/settings/logos/components/BrandingSettingsForm.tsx +339 -339
  99. package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -21
  100. package/templates/nextblock-template/app/cms/settings/logos/components/LogoForm.tsx +20 -20
  101. package/templates/nextblock-template/app/cms/settings/logos/components/SetActiveLogoButton.tsx +42 -42
  102. package/templates/nextblock-template/app/cms/settings/logos/components/SiteSeoSettingsForm.tsx +133 -133
  103. package/templates/nextblock-template/app/cms/settings/logos/new/page.tsx +8 -8
  104. package/templates/nextblock-template/app/cms/settings/packages/package-card.tsx +122 -122
  105. package/templates/nextblock-template/app/cms/settings/privacy/page.tsx +27 -27
  106. package/templates/nextblock-template/app/cms/settings/registration/page.tsx +27 -27
  107. package/templates/nextblock-template/app/cms/settings/security/page.tsx +33 -33
  108. package/templates/nextblock-template/app/cms/settings/taxes/page.tsx +21 -21
  109. package/templates/nextblock-template/app/cms/shipping/page.tsx +20 -20
  110. package/templates/nextblock-template/app/cms/users/components/CreateUserForm.tsx +217 -217
  111. package/templates/nextblock-template/app/cms/users/components/DeleteUserButton.tsx +12 -12
  112. package/templates/nextblock-template/app/cms/users/new/page.tsx +44 -44
  113. package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
  114. package/templates/nextblock-template/app/profile/ProfilePageHeader.tsx +16 -16
  115. package/templates/nextblock-template/app/profile/ProfilePageMissingState.tsx +9 -9
  116. package/templates/nextblock-template/app/profile/account-links.ts +22 -22
  117. package/templates/nextblock-template/app/profile/orders/CustomerOrdersPageClient.tsx +124 -124
  118. package/templates/nextblock-template/app/profile/orders/page.tsx +19 -19
  119. package/templates/nextblock-template/app/profile/password/PasswordSettingsPageClient.tsx +128 -128
  120. package/templates/nextblock-template/app/profile/password/actions.ts +59 -59
  121. package/templates/nextblock-template/app/profile/password/page.tsx +27 -27
  122. package/templates/nextblock-template/app/setup/SetupWizard.tsx +678 -678
  123. package/templates/nextblock-template/app/setup/layout.tsx +13 -13
  124. package/templates/nextblock-template/app/setup/page.tsx +111 -111
  125. package/templates/nextblock-template/app/sitemap.ts +130 -130
  126. package/templates/nextblock-template/components/BlockRenderer.tsx +4 -0
  127. package/templates/nextblock-template/components/CartDrawerLoader.tsx +7 -7
  128. package/templates/nextblock-template/components/DeferredCartDrawer.tsx +23 -23
  129. package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
  130. package/templates/nextblock-template/components/DeferredGoogleTagManager.tsx +70 -70
  131. package/templates/nextblock-template/components/DeferredSpeedInsights.tsx +69 -69
  132. package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
  133. package/templates/nextblock-template/components/FooterNavigation.tsx +32 -32
  134. package/templates/nextblock-template/components/HtmlScriptExecutor.tsx +47 -47
  135. package/templates/nextblock-template/components/LanguageSwitcher.tsx +2 -2
  136. package/templates/nextblock-template/components/PublicEnvBootstrap.tsx +30 -30
  137. package/templates/nextblock-template/components/ResponsiveNav.tsx +14 -14
  138. package/templates/nextblock-template/components/auth/AuthBotProtection.tsx +182 -182
  139. package/templates/nextblock-template/components/blocks/PostCardSkeleton.tsx +12 -12
  140. package/templates/nextblock-template/components/blocks/PostsGridBlock.tsx +12 -12
  141. package/templates/nextblock-template/components/blocks/ProductGridClient.tsx +114 -114
  142. package/templates/nextblock-template/components/blocks/ecommerceRendererLoaders.ts +23 -23
  143. package/templates/nextblock-template/components/blocks/renderers/ClientTextBlockRenderer.tsx +8 -1
  144. package/templates/nextblock-template/components/blocks/renderers/FormBlockRenderer.tsx +249 -249
  145. package/templates/nextblock-template/components/blocks/renderers/SectionBlockRenderer.tsx +3 -0
  146. package/templates/nextblock-template/components/blocks/renderers/VideoEmbedBlockRenderer.tsx +33 -23
  147. package/templates/nextblock-template/components/blocks/types.ts +7 -7
  148. package/templates/nextblock-template/components/env-var-warning.tsx +3 -3
  149. package/templates/nextblock-template/components/form-message.tsx +32 -32
  150. package/templates/nextblock-template/components/media/YouTubeFacade.tsx +105 -0
  151. package/templates/nextblock-template/components/media/youtube-embed-replace.tsx +32 -0
  152. package/templates/nextblock-template/components/privacy/ConsentBanner.tsx +170 -170
  153. package/templates/nextblock-template/components/privacy/ConsentGatedAnalytics.tsx +70 -70
  154. package/templates/nextblock-template/components/renderers/CachedDynamicLayoutEngine.tsx +28 -28
  155. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.test.tsx +166 -166
  156. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.tsx +471 -464
  157. package/templates/nextblock-template/components/submit-button.tsx +23 -23
  158. package/templates/nextblock-template/components/theme-switcher.tsx +8 -8
  159. package/templates/nextblock-template/components/visual-editing/DeferredVisualEditing.tsx +21 -21
  160. package/templates/nextblock-template/context/AuthContext.tsx +23 -23
  161. package/templates/nextblock-template/context/language-rest-client.ts +32 -32
  162. package/templates/nextblock-template/docker/db/init/99-jwt.sql +6 -6
  163. package/templates/nextblock-template/docker/db/init/99-roles.sql +25 -25
  164. package/templates/nextblock-template/docker/kong/kong.yml +112 -112
  165. package/templates/nextblock-template/docs/01-PROJECT-OVERVIEW.md +94 -94
  166. package/templates/nextblock-template/docs/02-ECOMMERCE-CAPABILITIES.md +364 -364
  167. package/templates/nextblock-template/docs/03-CMS-AND-EDITOR.md +202 -202
  168. package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +246 -246
  169. package/templates/nextblock-template/docs/06-CLI-AND-SCAFFOLDING.md +176 -176
  170. package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
  171. package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
  172. package/templates/nextblock-template/docs/11-SELF-HOSTED-DOCKER.md +173 -173
  173. package/templates/nextblock-template/docs/12-VERCEL-DEPLOYMENT.md +170 -170
  174. package/templates/nextblock-template/docs/13-STAYING-UP-TO-DATE.md +151 -151
  175. package/templates/nextblock-template/docs/README.md +39 -39
  176. package/templates/nextblock-template/hooks/use-hotkeys.ts +21 -21
  177. package/templates/nextblock-template/hooks/useGlobalSearch.ts +101 -101
  178. package/templates/nextblock-template/index.d.ts +7 -7
  179. package/templates/nextblock-template/lib/app-secrets.ts +39 -39
  180. package/templates/nextblock-template/lib/auth/cookies.ts +47 -47
  181. package/templates/nextblock-template/lib/auth/crypto.ts +45 -45
  182. package/templates/nextblock-template/lib/auth/trustedDevices.ts +92 -92
  183. package/templates/nextblock-template/lib/auth-redirects.ts +46 -46
  184. package/templates/nextblock-template/lib/blocks/ProductGridBlock.tsx +78 -78
  185. package/templates/nextblock-template/lib/blocks/README.md +13 -13
  186. package/templates/nextblock-template/lib/blocks/product-grid-data.ts +210 -210
  187. package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
  188. package/templates/nextblock-template/lib/cms-transfer/server.ts +2243 -2243
  189. package/templates/nextblock-template/lib/cms-transfer/types.ts +145 -145
  190. package/templates/nextblock-template/lib/custom-block-definitions.ts +87 -87
  191. package/templates/nextblock-template/lib/custom-block-r2-upload-shared.ts +178 -178
  192. package/templates/nextblock-template/lib/custom-block-r2-upload.test.ts +140 -140
  193. package/templates/nextblock-template/lib/custom-block-r2-upload.ts +88 -88
  194. package/templates/nextblock-template/lib/custom-block-relations.test.ts +227 -227
  195. package/templates/nextblock-template/lib/custom-block-relations.ts +279 -279
  196. package/templates/nextblock-template/lib/custom-block-safelist.ts +14 -14
  197. package/templates/nextblock-template/lib/editor/dynamic-extension-core.test.ts +172 -172
  198. package/templates/nextblock-template/lib/editor/dynamic-extension-core.ts +213 -213
  199. package/templates/nextblock-template/lib/editor/dynamic-extension-loader.ts +22 -22
  200. package/templates/nextblock-template/lib/editor/dynamic-extensions.tsx +193 -193
  201. package/templates/nextblock-template/lib/email/branding-format.test.ts +133 -133
  202. package/templates/nextblock-template/lib/email/branding-format.ts +123 -123
  203. package/templates/nextblock-template/lib/email/branding.ts +76 -76
  204. package/templates/nextblock-template/lib/full-backup/manifest.test.ts +121 -121
  205. package/templates/nextblock-template/lib/full-backup/manifest.ts +206 -206
  206. package/templates/nextblock-template/lib/full-backup/server.ts +743 -743
  207. package/templates/nextblock-template/lib/i18n/country-languages.ts +247 -247
  208. package/templates/nextblock-template/lib/i18n/detection.test.ts +197 -197
  209. package/templates/nextblock-template/lib/i18n/detection.ts +192 -192
  210. package/templates/nextblock-template/lib/logos/active-logo.ts +53 -53
  211. package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +54 -54
  212. package/templates/nextblock-template/lib/media/youtube.ts +99 -0
  213. package/templates/nextblock-template/lib/onboarding/actions.ts +31 -31
  214. package/templates/nextblock-template/lib/onboarding/status.ts +222 -222
  215. package/templates/nextblock-template/lib/posts/readTime.ts +60 -60
  216. package/templates/nextblock-template/lib/privacy/consent-client.ts +57 -57
  217. package/templates/nextblock-template/lib/privacy/contact-emails.ts +64 -64
  218. package/templates/nextblock-template/lib/privacy/settings.ts +115 -115
  219. package/templates/nextblock-template/lib/privacy/types.ts +69 -69
  220. package/templates/nextblock-template/lib/promotions/server.test.ts +74 -74
  221. package/templates/nextblock-template/lib/promotions/server.ts +741 -741
  222. package/templates/nextblock-template/lib/resolve-block-relations.test.ts +142 -142
  223. package/templates/nextblock-template/lib/resolve-block-relations.ts +255 -255
  224. package/templates/nextblock-template/lib/search/types.ts +27 -27
  225. package/templates/nextblock-template/lib/setup/actions.ts +460 -460
  226. package/templates/nextblock-template/lib/setup/env-status.ts +125 -125
  227. package/templates/nextblock-template/lib/setup/env-write.ts +111 -111
  228. package/templates/nextblock-template/lib/setup/migrations-bundle.ts +87 -82
  229. package/templates/nextblock-template/lib/setup/provisioning.ts +59 -59
  230. package/templates/nextblock-template/lib/setup/schema-apply.ts +408 -408
  231. package/templates/nextblock-template/lib/setup/system-config.ts +105 -105
  232. package/templates/nextblock-template/lib/setup/types.ts +18 -18
  233. package/templates/nextblock-template/lib/site-url.ts +48 -48
  234. package/templates/nextblock-template/lib/storage/provider.ts +66 -66
  235. package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
  236. package/templates/nextblock-template/lib/updates/check-upstream.ts +441 -441
  237. package/templates/nextblock-template/lib/updates/github-device.ts +206 -206
  238. package/templates/nextblock-template/lib/updates/repo-identity.ts +56 -56
  239. package/templates/nextblock-template/next-env.d.ts +1 -1
  240. package/templates/nextblock-template/next.config.js +6 -0
  241. package/templates/nextblock-template/package.json +1 -1
  242. package/templates/nextblock-template/postcss.config.js +6 -6
  243. package/templates/nextblock-template/scripts/backup.js +115 -115
  244. package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
  245. package/templates/nextblock-template/scripts/restore.js +385 -385
  246. package/templates/nextblock-template/scripts/verify-cortex-ai-build-widget.tsx +98 -98
  247. package/templates/nextblock-template/scripts/verify-cortex-ai-generate-blocks.ts +62 -62
  248. package/templates/nextblock-template/scripts/verify-cortex-ai-global-tools.ts +537 -537
  249. package/templates/nextblock-template/scripts/verify-cortex-ai-routing.ts +58 -58
  250. package/templates/nextblock-template/scripts/verify-custom-block-definitions.ts +188 -188
  251. package/templates/nextblock-template/scripts/verify-dynamic-custom-block-extensions.ts +123 -123
  252. package/templates/nextblock-template/scripts/verify-dynamic-layout-engine.tsx +133 -133
  253. package/templates/nextblock-template/scripts/verify-milestone-2-custom-blocks.ts +65 -65
  254. package/templates/nextblock-template/tailwind.config.js +25 -25
  255. package/templates/nextblock-template/tools/build-migrate.mjs +209 -209
  256. package/templates/nextblock-template/tools/configure-supabase-auth.js +282 -282
  257. package/templates/nextblock-template/tsconfig.tsbuildinfo +1 -1
  258. package/templates/nextblock-template/types/jsdom.d.ts +6 -6
  259. package/tsconfig.base.json +3 -3
@@ -1,247 +1,247 @@
1
- // Ordered ISO 3166-1 alpha-2 country -> primary language candidates (ISO 639-1).
2
- // Used by the "visitor's country" language-detection mode: candidates are matched
3
- // against the site's active language codes in order, so multilingual countries list
4
- // their languages by prevalence (e.g. CH tries de, then fr, then it).
5
- // This is a pragmatic "most likely language" map, not a census — sites that need a
6
- // different mapping should simply not enable country-based detection.
7
- export const COUNTRY_PRIMARY_LANGUAGES: Record<string, string[]> = {
8
- AD: ['ca', 'es', 'fr'],
9
- AE: ['ar', 'en'],
10
- AF: ['fa', 'ps'],
11
- AG: ['en'],
12
- AI: ['en'],
13
- AL: ['sq'],
14
- AM: ['hy', 'ru'],
15
- AO: ['pt'],
16
- AR: ['es'],
17
- AS: ['en'],
18
- AT: ['de'],
19
- AU: ['en'],
20
- AW: ['nl', 'es'],
21
- AX: ['sv'],
22
- AZ: ['az', 'ru'],
23
- BA: ['bs', 'hr', 'sr'],
24
- BB: ['en'],
25
- BD: ['bn'],
26
- BE: ['nl', 'fr', 'de'],
27
- BF: ['fr'],
28
- BG: ['bg'],
29
- BH: ['ar', 'en'],
30
- BI: ['fr', 'rn'],
31
- BJ: ['fr'],
32
- BM: ['en'],
33
- BN: ['ms', 'en'],
34
- BO: ['es'],
35
- BQ: ['nl'],
36
- BR: ['pt'],
37
- BS: ['en'],
38
- BT: ['dz', 'en'],
39
- BW: ['en', 'tn'],
40
- BY: ['ru', 'be'],
41
- BZ: ['en', 'es'],
42
- CA: ['en', 'fr'],
43
- CD: ['fr'],
44
- CF: ['fr'],
45
- CG: ['fr'],
46
- CH: ['de', 'fr', 'it'],
47
- CI: ['fr'],
48
- CK: ['en'],
49
- CL: ['es'],
50
- CM: ['fr', 'en'],
51
- CN: ['zh'],
52
- CO: ['es'],
53
- CR: ['es'],
54
- CU: ['es'],
55
- CV: ['pt'],
56
- CW: ['nl', 'en', 'es'],
57
- CY: ['el', 'tr', 'en'],
58
- CZ: ['cs'],
59
- DE: ['de'],
60
- DJ: ['fr', 'ar'],
61
- DK: ['da'],
62
- DM: ['en'],
63
- DO: ['es'],
64
- DZ: ['ar', 'fr'],
65
- EC: ['es'],
66
- EE: ['et', 'ru'],
67
- EG: ['ar', 'en'],
68
- EH: ['ar'],
69
- ER: ['ti', 'ar', 'en'],
70
- ES: ['es', 'ca', 'gl'],
71
- ET: ['am', 'en'],
72
- FI: ['fi', 'sv'],
73
- FJ: ['en', 'fj'],
74
- FK: ['en'],
75
- FM: ['en'],
76
- FO: ['fo', 'da'],
77
- FR: ['fr'],
78
- GA: ['fr'],
79
- GB: ['en'],
80
- GD: ['en'],
81
- GE: ['ka', 'ru'],
82
- GF: ['fr'],
83
- GG: ['en'],
84
- GH: ['en'],
85
- GI: ['en', 'es'],
86
- GL: ['kl', 'da'],
87
- GM: ['en'],
88
- GN: ['fr'],
89
- GP: ['fr'],
90
- GQ: ['es', 'fr', 'pt'],
91
- GR: ['el'],
92
- GT: ['es'],
93
- GU: ['en'],
94
- GW: ['pt'],
95
- GY: ['en'],
96
- HK: ['zh', 'en'],
97
- HN: ['es'],
98
- HR: ['hr'],
99
- HT: ['fr', 'ht'],
100
- HU: ['hu'],
101
- ID: ['id'],
102
- IE: ['en', 'ga'],
103
- IL: ['he', 'ar', 'en', 'ru'],
104
- IM: ['en'],
105
- IN: ['hi', 'en'],
106
- IQ: ['ar', 'ku'],
107
- IR: ['fa'],
108
- IS: ['is'],
109
- IT: ['it'],
110
- JE: ['en'],
111
- JM: ['en'],
112
- JO: ['ar', 'en'],
113
- JP: ['ja'],
114
- KE: ['en', 'sw'],
115
- KG: ['ky', 'ru'],
116
- KH: ['km'],
117
- KI: ['en'],
118
- KM: ['fr', 'ar'],
119
- KN: ['en'],
120
- KP: ['ko'],
121
- KR: ['ko'],
122
- KW: ['ar', 'en'],
123
- KY: ['en'],
124
- KZ: ['kk', 'ru'],
125
- LA: ['lo'],
126
- LB: ['ar', 'fr', 'en'],
127
- LC: ['en'],
128
- LI: ['de'],
129
- LK: ['si', 'ta', 'en'],
130
- LR: ['en'],
131
- LS: ['en', 'st'],
132
- LT: ['lt', 'ru'],
133
- LU: ['fr', 'de', 'lb'],
134
- LV: ['lv', 'ru'],
135
- LY: ['ar'],
136
- MA: ['ar', 'fr'],
137
- MC: ['fr'],
138
- MD: ['ro', 'ru'],
139
- ME: ['sr'],
140
- MF: ['fr'],
141
- MG: ['fr', 'mg'],
142
- MH: ['en'],
143
- MK: ['mk', 'sq'],
144
- ML: ['fr'],
145
- MM: ['my'],
146
- MN: ['mn'],
147
- MO: ['zh', 'pt'],
148
- MP: ['en'],
149
- MQ: ['fr'],
150
- MR: ['ar', 'fr'],
151
- MS: ['en'],
152
- MT: ['mt', 'en'],
153
- MU: ['en', 'fr'],
154
- MV: ['dv', 'en'],
155
- MW: ['en', 'ny'],
156
- MX: ['es'],
157
- MY: ['ms', 'en', 'zh'],
158
- MZ: ['pt'],
159
- NA: ['en', 'af', 'de'],
160
- NC: ['fr'],
161
- NE: ['fr'],
162
- NF: ['en'],
163
- NG: ['en'],
164
- NI: ['es'],
165
- NL: ['nl'],
166
- NO: ['no', 'nb'],
167
- NP: ['ne'],
168
- NR: ['en'],
169
- NU: ['en'],
170
- NZ: ['en', 'mi'],
171
- OM: ['ar', 'en'],
172
- PA: ['es'],
173
- PE: ['es'],
174
- PF: ['fr'],
175
- PG: ['en'],
176
- PH: ['en', 'tl'],
177
- PK: ['ur', 'en'],
178
- PL: ['pl'],
179
- PM: ['fr'],
180
- PR: ['es', 'en'],
181
- PS: ['ar'],
182
- PT: ['pt'],
183
- PW: ['en'],
184
- PY: ['es', 'gn'],
185
- QA: ['ar', 'en'],
186
- RE: ['fr'],
187
- RO: ['ro'],
188
- RS: ['sr'],
189
- RU: ['ru'],
190
- RW: ['rw', 'en', 'fr'],
191
- SA: ['ar', 'en'],
192
- SB: ['en'],
193
- SC: ['en', 'fr'],
194
- SD: ['ar', 'en'],
195
- SE: ['sv'],
196
- SG: ['en', 'zh', 'ms', 'ta'],
197
- SH: ['en'],
198
- SI: ['sl'],
199
- SJ: ['no', 'nb'],
200
- SK: ['sk'],
201
- SL: ['en'],
202
- SM: ['it'],
203
- SN: ['fr'],
204
- SO: ['so', 'ar'],
205
- SR: ['nl'],
206
- SS: ['en', 'ar'],
207
- ST: ['pt'],
208
- SV: ['es'],
209
- SX: ['nl', 'en'],
210
- SY: ['ar'],
211
- SZ: ['en', 'ss'],
212
- TC: ['en'],
213
- TD: ['fr', 'ar'],
214
- TG: ['fr'],
215
- TH: ['th'],
216
- TJ: ['tg', 'ru'],
217
- TK: ['en'],
218
- TL: ['pt'],
219
- TM: ['tk', 'ru'],
220
- TN: ['ar', 'fr'],
221
- TO: ['en', 'to'],
222
- TR: ['tr'],
223
- TT: ['en'],
224
- TV: ['en'],
225
- TW: ['zh'],
226
- TZ: ['sw', 'en'],
227
- UA: ['uk', 'ru'],
228
- UG: ['en', 'sw'],
229
- UM: ['en'],
230
- US: ['en', 'es'],
231
- UY: ['es'],
232
- UZ: ['uz', 'ru'],
233
- VA: ['it'],
234
- VC: ['en'],
235
- VE: ['es'],
236
- VG: ['en'],
237
- VI: ['en'],
238
- VN: ['vi'],
239
- VU: ['en', 'fr'],
240
- WF: ['fr'],
241
- WS: ['en', 'sm'],
242
- YE: ['ar'],
243
- YT: ['fr'],
244
- ZA: ['en', 'af', 'zu'],
245
- ZM: ['en'],
246
- ZW: ['en', 'sn'],
247
- };
1
+ // Ordered ISO 3166-1 alpha-2 country -> primary language candidates (ISO 639-1).
2
+ // Used by the "visitor's country" language-detection mode: candidates are matched
3
+ // against the site's active language codes in order, so multilingual countries list
4
+ // their languages by prevalence (e.g. CH tries de, then fr, then it).
5
+ // This is a pragmatic "most likely language" map, not a census — sites that need a
6
+ // different mapping should simply not enable country-based detection.
7
+ export const COUNTRY_PRIMARY_LANGUAGES: Record<string, string[]> = {
8
+ AD: ['ca', 'es', 'fr'],
9
+ AE: ['ar', 'en'],
10
+ AF: ['fa', 'ps'],
11
+ AG: ['en'],
12
+ AI: ['en'],
13
+ AL: ['sq'],
14
+ AM: ['hy', 'ru'],
15
+ AO: ['pt'],
16
+ AR: ['es'],
17
+ AS: ['en'],
18
+ AT: ['de'],
19
+ AU: ['en'],
20
+ AW: ['nl', 'es'],
21
+ AX: ['sv'],
22
+ AZ: ['az', 'ru'],
23
+ BA: ['bs', 'hr', 'sr'],
24
+ BB: ['en'],
25
+ BD: ['bn'],
26
+ BE: ['nl', 'fr', 'de'],
27
+ BF: ['fr'],
28
+ BG: ['bg'],
29
+ BH: ['ar', 'en'],
30
+ BI: ['fr', 'rn'],
31
+ BJ: ['fr'],
32
+ BM: ['en'],
33
+ BN: ['ms', 'en'],
34
+ BO: ['es'],
35
+ BQ: ['nl'],
36
+ BR: ['pt'],
37
+ BS: ['en'],
38
+ BT: ['dz', 'en'],
39
+ BW: ['en', 'tn'],
40
+ BY: ['ru', 'be'],
41
+ BZ: ['en', 'es'],
42
+ CA: ['en', 'fr'],
43
+ CD: ['fr'],
44
+ CF: ['fr'],
45
+ CG: ['fr'],
46
+ CH: ['de', 'fr', 'it'],
47
+ CI: ['fr'],
48
+ CK: ['en'],
49
+ CL: ['es'],
50
+ CM: ['fr', 'en'],
51
+ CN: ['zh'],
52
+ CO: ['es'],
53
+ CR: ['es'],
54
+ CU: ['es'],
55
+ CV: ['pt'],
56
+ CW: ['nl', 'en', 'es'],
57
+ CY: ['el', 'tr', 'en'],
58
+ CZ: ['cs'],
59
+ DE: ['de'],
60
+ DJ: ['fr', 'ar'],
61
+ DK: ['da'],
62
+ DM: ['en'],
63
+ DO: ['es'],
64
+ DZ: ['ar', 'fr'],
65
+ EC: ['es'],
66
+ EE: ['et', 'ru'],
67
+ EG: ['ar', 'en'],
68
+ EH: ['ar'],
69
+ ER: ['ti', 'ar', 'en'],
70
+ ES: ['es', 'ca', 'gl'],
71
+ ET: ['am', 'en'],
72
+ FI: ['fi', 'sv'],
73
+ FJ: ['en', 'fj'],
74
+ FK: ['en'],
75
+ FM: ['en'],
76
+ FO: ['fo', 'da'],
77
+ FR: ['fr'],
78
+ GA: ['fr'],
79
+ GB: ['en'],
80
+ GD: ['en'],
81
+ GE: ['ka', 'ru'],
82
+ GF: ['fr'],
83
+ GG: ['en'],
84
+ GH: ['en'],
85
+ GI: ['en', 'es'],
86
+ GL: ['kl', 'da'],
87
+ GM: ['en'],
88
+ GN: ['fr'],
89
+ GP: ['fr'],
90
+ GQ: ['es', 'fr', 'pt'],
91
+ GR: ['el'],
92
+ GT: ['es'],
93
+ GU: ['en'],
94
+ GW: ['pt'],
95
+ GY: ['en'],
96
+ HK: ['zh', 'en'],
97
+ HN: ['es'],
98
+ HR: ['hr'],
99
+ HT: ['fr', 'ht'],
100
+ HU: ['hu'],
101
+ ID: ['id'],
102
+ IE: ['en', 'ga'],
103
+ IL: ['he', 'ar', 'en', 'ru'],
104
+ IM: ['en'],
105
+ IN: ['hi', 'en'],
106
+ IQ: ['ar', 'ku'],
107
+ IR: ['fa'],
108
+ IS: ['is'],
109
+ IT: ['it'],
110
+ JE: ['en'],
111
+ JM: ['en'],
112
+ JO: ['ar', 'en'],
113
+ JP: ['ja'],
114
+ KE: ['en', 'sw'],
115
+ KG: ['ky', 'ru'],
116
+ KH: ['km'],
117
+ KI: ['en'],
118
+ KM: ['fr', 'ar'],
119
+ KN: ['en'],
120
+ KP: ['ko'],
121
+ KR: ['ko'],
122
+ KW: ['ar', 'en'],
123
+ KY: ['en'],
124
+ KZ: ['kk', 'ru'],
125
+ LA: ['lo'],
126
+ LB: ['ar', 'fr', 'en'],
127
+ LC: ['en'],
128
+ LI: ['de'],
129
+ LK: ['si', 'ta', 'en'],
130
+ LR: ['en'],
131
+ LS: ['en', 'st'],
132
+ LT: ['lt', 'ru'],
133
+ LU: ['fr', 'de', 'lb'],
134
+ LV: ['lv', 'ru'],
135
+ LY: ['ar'],
136
+ MA: ['ar', 'fr'],
137
+ MC: ['fr'],
138
+ MD: ['ro', 'ru'],
139
+ ME: ['sr'],
140
+ MF: ['fr'],
141
+ MG: ['fr', 'mg'],
142
+ MH: ['en'],
143
+ MK: ['mk', 'sq'],
144
+ ML: ['fr'],
145
+ MM: ['my'],
146
+ MN: ['mn'],
147
+ MO: ['zh', 'pt'],
148
+ MP: ['en'],
149
+ MQ: ['fr'],
150
+ MR: ['ar', 'fr'],
151
+ MS: ['en'],
152
+ MT: ['mt', 'en'],
153
+ MU: ['en', 'fr'],
154
+ MV: ['dv', 'en'],
155
+ MW: ['en', 'ny'],
156
+ MX: ['es'],
157
+ MY: ['ms', 'en', 'zh'],
158
+ MZ: ['pt'],
159
+ NA: ['en', 'af', 'de'],
160
+ NC: ['fr'],
161
+ NE: ['fr'],
162
+ NF: ['en'],
163
+ NG: ['en'],
164
+ NI: ['es'],
165
+ NL: ['nl'],
166
+ NO: ['no', 'nb'],
167
+ NP: ['ne'],
168
+ NR: ['en'],
169
+ NU: ['en'],
170
+ NZ: ['en', 'mi'],
171
+ OM: ['ar', 'en'],
172
+ PA: ['es'],
173
+ PE: ['es'],
174
+ PF: ['fr'],
175
+ PG: ['en'],
176
+ PH: ['en', 'tl'],
177
+ PK: ['ur', 'en'],
178
+ PL: ['pl'],
179
+ PM: ['fr'],
180
+ PR: ['es', 'en'],
181
+ PS: ['ar'],
182
+ PT: ['pt'],
183
+ PW: ['en'],
184
+ PY: ['es', 'gn'],
185
+ QA: ['ar', 'en'],
186
+ RE: ['fr'],
187
+ RO: ['ro'],
188
+ RS: ['sr'],
189
+ RU: ['ru'],
190
+ RW: ['rw', 'en', 'fr'],
191
+ SA: ['ar', 'en'],
192
+ SB: ['en'],
193
+ SC: ['en', 'fr'],
194
+ SD: ['ar', 'en'],
195
+ SE: ['sv'],
196
+ SG: ['en', 'zh', 'ms', 'ta'],
197
+ SH: ['en'],
198
+ SI: ['sl'],
199
+ SJ: ['no', 'nb'],
200
+ SK: ['sk'],
201
+ SL: ['en'],
202
+ SM: ['it'],
203
+ SN: ['fr'],
204
+ SO: ['so', 'ar'],
205
+ SR: ['nl'],
206
+ SS: ['en', 'ar'],
207
+ ST: ['pt'],
208
+ SV: ['es'],
209
+ SX: ['nl', 'en'],
210
+ SY: ['ar'],
211
+ SZ: ['en', 'ss'],
212
+ TC: ['en'],
213
+ TD: ['fr', 'ar'],
214
+ TG: ['fr'],
215
+ TH: ['th'],
216
+ TJ: ['tg', 'ru'],
217
+ TK: ['en'],
218
+ TL: ['pt'],
219
+ TM: ['tk', 'ru'],
220
+ TN: ['ar', 'fr'],
221
+ TO: ['en', 'to'],
222
+ TR: ['tr'],
223
+ TT: ['en'],
224
+ TV: ['en'],
225
+ TW: ['zh'],
226
+ TZ: ['sw', 'en'],
227
+ UA: ['uk', 'ru'],
228
+ UG: ['en', 'sw'],
229
+ UM: ['en'],
230
+ US: ['en', 'es'],
231
+ UY: ['es'],
232
+ UZ: ['uz', 'ru'],
233
+ VA: ['it'],
234
+ VC: ['en'],
235
+ VE: ['es'],
236
+ VG: ['en'],
237
+ VI: ['en'],
238
+ VN: ['vi'],
239
+ VU: ['en', 'fr'],
240
+ WF: ['fr'],
241
+ WS: ['en', 'sm'],
242
+ YE: ['ar'],
243
+ YT: ['fr'],
244
+ ZA: ['en', 'af', 'zu'],
245
+ ZM: ['en'],
246
+ ZW: ['en', 'sn'],
247
+ };