@allbluecn/admin-app 0.2.5 → 0.3.0

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 (1287) hide show
  1. package/LICENSE +661 -0
  2. package/package.json +17 -13
  3. package/src/components/admin/admin-user-menu.tsx +2 -4
  4. package/src/components/admin/developer-log.tsx +3 -5
  5. package/src/components/ai-memory/memory-facts-panel.tsx +383 -0
  6. package/src/components/ai-prompts/preview-panel.tsx +165 -0
  7. package/src/components/ai-prompts/prompt-editor.tsx +328 -0
  8. package/src/components/ai-prompts/prompt-table.tsx +141 -0
  9. package/src/components/ai-prompts/prompt-utils.ts +124 -0
  10. package/src/components/ai-prompts/section-editor.tsx +135 -0
  11. package/src/components/ai-prompts/variable-panel.tsx +128 -0
  12. package/src/components/ai-prompts/version-history.tsx +157 -0
  13. package/src/components/ai-provider/provider-form.tsx +6 -10
  14. package/src/components/ai-provider/provider-table.tsx +33 -13
  15. package/src/components/auth/admin-login-form.tsx +1 -1
  16. package/src/components/component/component-form-dialog.tsx +4 -4
  17. package/src/components/component/component-import-dialog.tsx +2 -2
  18. package/src/components/dependency/changelog-dialog.tsx +2 -4
  19. package/src/components/dependency/columns.tsx +4 -8
  20. package/src/components/dependency/dependency-table.tsx +2 -2
  21. package/src/components/dependency/edit-dialog.tsx +7 -11
  22. package/src/components/invitations/invitations-page.tsx +4 -8
  23. package/src/components/knowledge-public/bookmark-form-dialog.tsx +1 -1
  24. package/src/components/knowledge-public/compliance-form-dialog.tsx +1 -1
  25. package/src/components/knowledge-public/legal-form-dialog.tsx +2 -2
  26. package/src/components/layout/sidebar-02/app-sidebar.tsx +17 -9
  27. package/src/components/layout/sidebar-02/nav-main.tsx +6 -14
  28. package/src/components/layout/sidebar-02/nav-notifications.tsx +3 -7
  29. package/src/components/magicui/rainbow-button.tsx +2 -2
  30. package/src/components/market/columns.tsx +2 -4
  31. package/src/components/market/market-app-form.tsx +2 -2
  32. package/src/components/market/market-app-list.tsx +1 -1
  33. package/src/components/oauth-providers/provider-page.tsx +1 -1
  34. package/src/components/ui/alert-dialog.tsx +28 -57
  35. package/src/components/ui/alert.tsx +3 -4
  36. package/src/components/ui/avatar.tsx +5 -28
  37. package/src/components/ui/badge.tsx +19 -34
  38. package/src/components/ui/button.tsx +14 -41
  39. package/src/components/ui/card.tsx +6 -24
  40. package/src/components/ui/checkbox.tsx +4 -26
  41. package/src/components/ui/collapsible.tsx +6 -37
  42. package/src/components/ui/dialog.tsx +30 -60
  43. package/src/components/ui/dropdown-menu.tsx +118 -137
  44. package/src/components/ui/field.tsx +8 -27
  45. package/src/components/ui/input-group.tsx +13 -26
  46. package/src/components/ui/input.tsx +4 -21
  47. package/src/components/ui/label.tsx +3 -27
  48. package/src/components/ui/pagination.tsx +17 -31
  49. package/src/components/ui/select.tsx +101 -76
  50. package/src/components/ui/separator.tsx +4 -27
  51. package/src/components/ui/sheet.tsx +29 -58
  52. package/src/components/ui/sidebar.tsx +119 -117
  53. package/src/components/ui/skeleton.tsx +1 -18
  54. package/src/components/ui/switch.tsx +5 -24
  55. package/src/components/ui/table.tsx +1 -19
  56. package/src/components/ui/textarea.tsx +2 -20
  57. package/src/components/ui/toast.tsx +282 -0
  58. package/src/components/ui/tooltip.tsx +34 -45
  59. package/src/components/user/settings-activity-log.tsx +1 -1
  60. package/src/components/user/user-create-dialog.tsx +2 -2
  61. package/src/components/user/user-filters.tsx +2 -2
  62. package/src/hooks/use-mobile.ts +0 -17
  63. package/src/lib/pacer.ts +21 -0
  64. package/src/lib/utils.ts +1 -23
  65. package/src/paraglide/.gitignore +3 -0
  66. package/src/paraglide/.prettierignore +3 -0
  67. package/src/paraglide/README.md +162 -0
  68. package/src/paraglide/messages/_index.js +1171 -0
  69. package/src/paraglide/messages/admin_ai_action_addprovider1.js +30 -0
  70. package/src/paraglide/messages/admin_ai_action_editprovider1.js +30 -0
  71. package/src/paraglide/messages/admin_ai_action_managemodels1.js +30 -0
  72. package/src/paraglide/messages/admin_ai_action_testconnection1.js +30 -0
  73. package/src/paraglide/messages/admin_ai_action_toggleenabled1.js +30 -0
  74. package/src/paraglide/messages/admin_ai_form_adapterkind1.js +30 -0
  75. package/src/paraglide/messages/admin_ai_form_adapterkinddesc2.js +30 -0
  76. package/src/paraglide/messages/admin_ai_form_addprovider1.js +30 -0
  77. package/src/paraglide/messages/admin_ai_form_apikeyplaceholder1.js +30 -0
  78. package/src/paraglide/messages/admin_ai_form_badge.js +30 -0
  79. package/src/paraglide/messages/admin_ai_form_badgedesc1.js +30 -0
  80. package/src/paraglide/messages/admin_ai_form_badgeplaceholder1.js +30 -0
  81. package/src/paraglide/messages/admin_ai_form_basicinfo1.js +30 -0
  82. package/src/paraglide/messages/admin_ai_form_brandcolor1.js +30 -0
  83. package/src/paraglide/messages/admin_ai_form_brandcolordesc2.js +30 -0
  84. package/src/paraglide/messages/admin_ai_form_brandname1.js +30 -0
  85. package/src/paraglide/messages/admin_ai_form_brandnamedesc2.js +30 -0
  86. package/src/paraglide/messages/admin_ai_form_category.js +30 -0
  87. package/src/paraglide/messages/admin_ai_form_defaultbaseurl2.js +30 -0
  88. package/src/paraglide/messages/admin_ai_form_defaultbaseurldesc3.js +30 -0
  89. package/src/paraglide/messages/admin_ai_form_description.js +30 -0
  90. package/src/paraglide/messages/admin_ai_form_descriptiondesc1.js +30 -0
  91. package/src/paraglide/messages/admin_ai_form_displayname1.js +30 -0
  92. package/src/paraglide/messages/admin_ai_form_displaynamedesc2.js +30 -0
  93. package/src/paraglide/messages/admin_ai_form_docsurl1.js +30 -0
  94. package/src/paraglide/messages/admin_ai_form_editprovider1.js +30 -0
  95. package/src/paraglide/messages/admin_ai_form_iconslug1.js +30 -0
  96. package/src/paraglide/messages/admin_ai_form_iconslugdesc2.js +30 -0
  97. package/src/paraglide/messages/admin_ai_form_iconslugplaceholder2.js +30 -0
  98. package/src/paraglide/messages/admin_ai_form_integrationconfig1.js +30 -0
  99. package/src/paraglide/messages/admin_ai_form_keyurl1.js +30 -0
  100. package/src/paraglide/messages/admin_ai_form_localdeploy1.js +30 -0
  101. package/src/paraglide/messages/admin_ai_form_localdeploydesc2.js +30 -0
  102. package/src/paraglide/messages/admin_ai_form_modellist1.js +30 -0
  103. package/src/paraglide/messages/admin_ai_form_modellistdesc2.js +30 -0
  104. package/src/paraglide/messages/admin_ai_form_platformenabled1.js +30 -0
  105. package/src/paraglide/messages/admin_ai_form_platformenableddesc2.js +30 -0
  106. package/src/paraglide/messages/admin_ai_form_preview.js +30 -0
  107. package/src/paraglide/messages/admin_ai_form_previewdesc1.js +30 -0
  108. package/src/paraglide/messages/admin_ai_form_providerid1.js +30 -0
  109. package/src/paraglide/messages/admin_ai_form_provideriddesc2.js +30 -0
  110. package/src/paraglide/messages/admin_ai_form_providerideditnote3.js +30 -0
  111. package/src/paraglide/messages/admin_ai_form_provideridplaceholder2.js +30 -0
  112. package/src/paraglide/messages/admin_ai_form_sortorder1.js +30 -0
  113. package/src/paraglide/messages/admin_ai_form_sortorderdesc2.js +30 -0
  114. package/src/paraglide/messages/admin_ai_form_toast_created.js +30 -0
  115. package/src/paraglide/messages/admin_ai_form_toast_savefailed1.js +30 -0
  116. package/src/paraglide/messages/admin_ai_form_toast_updated.js +30 -0
  117. package/src/paraglide/messages/admin_ai_form_validation_displaynamerequired2.js +30 -0
  118. package/src/paraglide/messages/admin_ai_form_validation_provideridrequired2.js +30 -0
  119. package/src/paraglide/messages/admin_ai_memory_action_clearuser1.js +30 -0
  120. package/src/paraglide/messages/admin_ai_memory_action_query.js +30 -0
  121. package/src/paraglide/messages/admin_ai_memory_clear_cancel.js +30 -0
  122. package/src/paraglide/messages/admin_ai_memory_clear_confirm_action.js +30 -0
  123. package/src/paraglide/messages/admin_ai_memory_clear_confirm_description.js +30 -0
  124. package/src/paraglide/messages/admin_ai_memory_clear_confirm_title.js +30 -0
  125. package/src/paraglide/messages/admin_ai_memory_columns_actions.js +30 -0
  126. package/src/paraglide/messages/admin_ai_memory_columns_content.js +30 -0
  127. package/src/paraglide/messages/admin_ai_memory_columns_createdat1.js +30 -0
  128. package/src/paraglide/messages/admin_ai_memory_columns_threadid1.js +30 -0
  129. package/src/paraglide/messages/admin_ai_memory_delete_cancel.js +30 -0
  130. package/src/paraglide/messages/admin_ai_memory_delete_confirm_action.js +30 -0
  131. package/src/paraglide/messages/admin_ai_memory_delete_confirm_description.js +30 -0
  132. package/src/paraglide/messages/admin_ai_memory_delete_confirm_title.js +30 -0
  133. package/src/paraglide/messages/admin_ai_memory_empty.js +30 -0
  134. package/src/paraglide/messages/admin_ai_memory_emptyhint1.js +30 -0
  135. package/src/paraglide/messages/admin_ai_memory_error_nouserid2.js +30 -0
  136. package/src/paraglide/messages/admin_ai_memory_error_query.js +30 -0
  137. package/src/paraglide/messages/admin_ai_memory_error_title.js +30 -0
  138. package/src/paraglide/messages/admin_ai_memory_form_user.js +30 -0
  139. package/src/paraglide/messages/admin_ai_memory_page_description.js +30 -0
  140. package/src/paraglide/messages/admin_ai_memory_page_title.js +30 -0
  141. package/src/paraglide/messages/admin_ai_memory_placeholder_user.js +30 -0
  142. package/src/paraglide/messages/admin_ai_memory_stat_count.js +30 -0
  143. package/src/paraglide/messages/admin_ai_memory_stat_lastwrite1.js +30 -0
  144. package/src/paraglide/messages/admin_ai_memory_toast_cleared.js +30 -0
  145. package/src/paraglide/messages/admin_ai_memory_toast_deleted.js +30 -0
  146. package/src/paraglide/messages/admin_ai_model_apifetched1.js +30 -0
  147. package/src/paraglide/messages/admin_ai_model_capabilities.js +30 -0
  148. package/src/paraglide/messages/admin_ai_model_custom.js +30 -0
  149. package/src/paraglide/messages/admin_ai_model_id.js +30 -0
  150. package/src/paraglide/messages/admin_ai_model_inputprice1.js +30 -0
  151. package/src/paraglide/messages/admin_ai_model_name.js +30 -0
  152. package/src/paraglide/messages/admin_ai_model_outputprice1.js +30 -0
  153. package/src/paraglide/messages/admin_ai_page_create.js +30 -0
  154. package/src/paraglide/messages/admin_ai_page_description.js +30 -0
  155. package/src/paraglide/messages/admin_ai_page_edit.js +30 -0
  156. package/src/paraglide/messages/admin_ai_page_title.js +30 -0
  157. package/src/paraglide/messages/admin_ai_prompts_active.js +30 -0
  158. package/src/paraglide/messages/admin_ai_prompts_back.js +30 -0
  159. package/src/paraglide/messages/admin_ai_prompts_badge_protected.js +30 -0
  160. package/src/paraglide/messages/admin_ai_prompts_cache_hint.js +30 -0
  161. package/src/paraglide/messages/admin_ai_prompts_columns_active.js +30 -0
  162. package/src/paraglide/messages/admin_ai_prompts_columns_key.js +30 -0
  163. package/src/paraglide/messages/admin_ai_prompts_columns_name.js +30 -0
  164. package/src/paraglide/messages/admin_ai_prompts_columns_protected.js +30 -0
  165. package/src/paraglide/messages/admin_ai_prompts_columns_updatedat1.js +30 -0
  166. package/src/paraglide/messages/admin_ai_prompts_columns_version.js +30 -0
  167. package/src/paraglide/messages/admin_ai_prompts_description.js +30 -0
  168. package/src/paraglide/messages/admin_ai_prompts_description_placeholder.js +30 -0
  169. package/src/paraglide/messages/admin_ai_prompts_edit.js +30 -0
  170. package/src/paraglide/messages/admin_ai_prompts_name.js +30 -0
  171. package/src/paraglide/messages/admin_ai_prompts_name_placeholder.js +30 -0
  172. package/src/paraglide/messages/admin_ai_prompts_note_placeholder.js +30 -0
  173. package/src/paraglide/messages/admin_ai_prompts_page_description.js +30 -0
  174. package/src/paraglide/messages/admin_ai_prompts_page_title.js +30 -0
  175. package/src/paraglide/messages/admin_ai_prompts_preview_empty.js +30 -0
  176. package/src/paraglide/messages/admin_ai_prompts_preview_generating.js +30 -0
  177. package/src/paraglide/messages/admin_ai_prompts_preview_hint.js +30 -0
  178. package/src/paraglide/messages/admin_ai_prompts_preview_nocontent1.js +30 -0
  179. package/src/paraglide/messages/admin_ai_prompts_preview_placeholder.js +30 -0
  180. package/src/paraglide/messages/admin_ai_prompts_preview_section.js +30 -0
  181. package/src/paraglide/messages/admin_ai_prompts_preview_title.js +30 -0
  182. package/src/paraglide/messages/admin_ai_prompts_protected_hint.js +30 -0
  183. package/src/paraglide/messages/admin_ai_prompts_rollback.js +30 -0
  184. package/src/paraglide/messages/admin_ai_prompts_rollback_confirm_action.js +30 -0
  185. package/src/paraglide/messages/admin_ai_prompts_rollback_confirm_description.js +30 -0
  186. package/src/paraglide/messages/admin_ai_prompts_rollback_confirm_title.js +30 -0
  187. package/src/paraglide/messages/admin_ai_prompts_save.js +30 -0
  188. package/src/paraglide/messages/admin_ai_prompts_section_add.js +30 -0
  189. package/src/paraglide/messages/admin_ai_prompts_section_id.js +30 -0
  190. package/src/paraglide/messages/admin_ai_prompts_section_movedown1.js +30 -0
  191. package/src/paraglide/messages/admin_ai_prompts_section_moveup1.js +30 -0
  192. package/src/paraglide/messages/admin_ai_prompts_section_order.js +30 -0
  193. package/src/paraglide/messages/admin_ai_prompts_section_remove.js +30 -0
  194. package/src/paraglide/messages/admin_ai_prompts_section_template_placeholder.js +30 -0
  195. package/src/paraglide/messages/admin_ai_prompts_sections_empty.js +30 -0
  196. package/src/paraglide/messages/admin_ai_prompts_sections_hint.js +30 -0
  197. package/src/paraglide/messages/admin_ai_prompts_sections_title.js +30 -0
  198. package/src/paraglide/messages/admin_ai_prompts_toast_activated.js +30 -0
  199. package/src/paraglide/messages/admin_ai_prompts_toast_failed.js +30 -0
  200. package/src/paraglide/messages/admin_ai_prompts_toast_protected_locked.js +30 -0
  201. package/src/paraglide/messages/admin_ai_prompts_toast_rolled_back.js +30 -0
  202. package/src/paraglide/messages/admin_ai_prompts_toast_save_failed.js +30 -0
  203. package/src/paraglide/messages/admin_ai_prompts_toast_saved.js +30 -0
  204. package/src/paraglide/messages/admin_ai_prompts_variable_add.js +30 -0
  205. package/src/paraglide/messages/admin_ai_prompts_variable_declarehint1.js +30 -0
  206. package/src/paraglide/messages/admin_ai_prompts_variable_description_placeholder.js +30 -0
  207. package/src/paraglide/messages/admin_ai_prompts_variable_name_placeholder.js +30 -0
  208. package/src/paraglide/messages/admin_ai_prompts_variable_remove.js +30 -0
  209. package/src/paraglide/messages/admin_ai_prompts_variable_undeclared.js +30 -0
  210. package/src/paraglide/messages/admin_ai_prompts_variables_empty.js +30 -0
  211. package/src/paraglide/messages/admin_ai_prompts_variables_title.js +30 -0
  212. package/src/paraglide/messages/admin_ai_prompts_versions_current.js +30 -0
  213. package/src/paraglide/messages/admin_ai_prompts_versions_empty.js +30 -0
  214. package/src/paraglide/messages/admin_ai_prompts_versions_hint.js +30 -0
  215. package/src/paraglide/messages/admin_ai_prompts_versions_nonote1.js +30 -0
  216. package/src/paraglide/messages/admin_ai_prompts_versions_title.js +30 -0
  217. package/src/paraglide/messages/admin_ai_prompts_versions_unknowncreator1.js +30 -0
  218. package/src/paraglide/messages/admin_ai_provider_apikey1.js +30 -0
  219. package/src/paraglide/messages/admin_ai_provider_baseurl1.js +30 -0
  220. package/src/paraglide/messages/admin_ai_provider_brandcolor1.js +30 -0
  221. package/src/paraglide/messages/admin_ai_provider_brandname1.js +30 -0
  222. package/src/paraglide/messages/admin_ai_provider_category.js +30 -0
  223. package/src/paraglide/messages/admin_ai_provider_defaultbaseurl2.js +30 -0
  224. package/src/paraglide/messages/admin_ai_provider_description.js +30 -0
  225. package/src/paraglide/messages/admin_ai_provider_disabled.js +30 -0
  226. package/src/paraglide/messages/admin_ai_provider_displayname1.js +30 -0
  227. package/src/paraglide/messages/admin_ai_provider_docsurl1.js +30 -0
  228. package/src/paraglide/messages/admin_ai_provider_enabled.js +30 -0
  229. package/src/paraglide/messages/admin_ai_provider_iconslug1.js +30 -0
  230. package/src/paraglide/messages/admin_ai_provider_islocal1.js +30 -0
  231. package/src/paraglide/messages/admin_ai_provider_keyplaceholder1.js +30 -0
  232. package/src/paraglide/messages/admin_ai_provider_keyurl1.js +30 -0
  233. package/src/paraglide/messages/admin_ai_provider_kind.js +30 -0
  234. package/src/paraglide/messages/admin_ai_provider_models.js +30 -0
  235. package/src/paraglide/messages/admin_ai_provider_monthlyusage1.js +30 -0
  236. package/src/paraglide/messages/admin_ai_provider_name.js +30 -0
  237. package/src/paraglide/messages/admin_ai_provider_sortorder1.js +30 -0
  238. package/src/paraglide/messages/admin_ai_provider_status.js +30 -0
  239. package/src/paraglide/messages/admin_ai_provider_totalkeys1.js +30 -0
  240. package/src/paraglide/messages/admin_ai_table_addprovider1.js +30 -0
  241. package/src/paraglide/messages/admin_ai_table_columns_actions.js +30 -0
  242. package/src/paraglide/messages/admin_ai_table_columns_adapterkind1.js +30 -0
  243. package/src/paraglide/messages/admin_ai_table_columns_badge.js +30 -0
  244. package/src/paraglide/messages/admin_ai_table_columns_category.js +30 -0
  245. package/src/paraglide/messages/admin_ai_table_columns_modelcount1.js +30 -0
  246. package/src/paraglide/messages/admin_ai_table_columns_platformenabled1.js +30 -0
  247. package/src/paraglide/messages/admin_ai_table_columns_provider.js +30 -0
  248. package/src/paraglide/messages/admin_ai_table_columns_userconfigcount2.js +30 -0
  249. package/src/paraglide/messages/admin_ai_table_delete.js +30 -0
  250. package/src/paraglide/messages/admin_ai_table_deleteconfirm_confirm1.js +30 -0
  251. package/src/paraglide/messages/admin_ai_table_deleteconfirm_description1.js +30 -0
  252. package/src/paraglide/messages/admin_ai_table_deleteconfirm_title1.js +30 -0
  253. package/src/paraglide/messages/admin_ai_table_deletedisabled1.js +30 -0
  254. package/src/paraglide/messages/admin_ai_table_edit.js +30 -0
  255. package/src/paraglide/messages/admin_ai_table_enabledtoggle1.js +30 -0
  256. package/src/paraglide/messages/admin_ai_table_pagedescription1.js +30 -0
  257. package/src/paraglide/messages/admin_ai_table_pagetitle1.js +30 -0
  258. package/src/paraglide/messages/admin_ai_table_seedfromseed2.js +30 -0
  259. package/src/paraglide/messages/admin_ai_table_toast_deleted.js +30 -0
  260. package/src/paraglide/messages/admin_ai_table_toast_deletefailed1.js +30 -0
  261. package/src/paraglide/messages/admin_ai_table_toast_seedcreated1.js +30 -0
  262. package/src/paraglide/messages/admin_ai_table_toast_seedfailed1.js +30 -0
  263. package/src/paraglide/messages/admin_ai_table_toast_seednonew2.js +30 -0
  264. package/src/paraglide/messages/admin_ai_table_toast_updated.js +30 -0
  265. package/src/paraglide/messages/admin_billing_action_cancel.js +30 -0
  266. package/src/paraglide/messages/admin_billing_action_downgrade.js +30 -0
  267. package/src/paraglide/messages/admin_billing_action_exportdata1.js +30 -0
  268. package/src/paraglide/messages/admin_billing_action_retrypayment1.js +30 -0
  269. package/src/paraglide/messages/admin_billing_action_upgrade.js +30 -0
  270. package/src/paraglide/messages/admin_billing_invoice_cny.js +30 -0
  271. package/src/paraglide/messages/admin_billing_invoice_date.js +30 -0
  272. package/src/paraglide/messages/admin_billing_invoice_duedate1.js +30 -0
  273. package/src/paraglide/messages/admin_billing_invoice_number.js +30 -0
  274. package/src/paraglide/messages/admin_billing_invoice_paid.js +30 -0
  275. package/src/paraglide/messages/admin_billing_invoice_total.js +30 -0
  276. package/src/paraglide/messages/admin_billing_invoice_unpaid.js +30 -0
  277. package/src/paraglide/messages/admin_billing_invoice_usd.js +30 -0
  278. package/src/paraglide/messages/admin_billing_invoice_view.js +30 -0
  279. package/src/paraglide/messages/admin_billing_page_description.js +30 -0
  280. package/src/paraglide/messages/admin_billing_page_selectsubmenu1.js +30 -0
  281. package/src/paraglide/messages/admin_billing_page_title.js +30 -0
  282. package/src/paraglide/messages/admin_billing_subscription_action.js +30 -0
  283. package/src/paraglide/messages/admin_billing_subscription_active.js +30 -0
  284. package/src/paraglide/messages/admin_billing_subscription_amount.js +30 -0
  285. package/src/paraglide/messages/admin_billing_subscription_back.js +30 -0
  286. package/src/paraglide/messages/admin_billing_subscription_cancelled.js +30 -0
  287. package/src/paraglide/messages/admin_billing_subscription_count.js +30 -0
  288. package/src/paraglide/messages/admin_billing_subscription_currency.js +30 -0
  289. package/src/paraglide/messages/admin_billing_subscription_detail.js +30 -0
  290. package/src/paraglide/messages/admin_billing_subscription_detailtitle1.js +30 -0
  291. package/src/paraglide/messages/admin_billing_subscription_empty.js +30 -0
  292. package/src/paraglide/messages/admin_billing_subscription_enddate1.js +30 -0
  293. package/src/paraglide/messages/admin_billing_subscription_expires.js +30 -0
  294. package/src/paraglide/messages/admin_billing_subscription_interval.js +30 -0
  295. package/src/paraglide/messages/admin_billing_subscription_invoiceamount1.js +30 -0
  296. package/src/paraglide/messages/admin_billing_subscription_invoicedate1.js +30 -0
  297. package/src/paraglide/messages/admin_billing_subscription_invoicestatus1.js +30 -0
  298. package/src/paraglide/messages/admin_billing_subscription_invoicestitle1.js +30 -0
  299. package/src/paraglide/messages/admin_billing_subscription_notfound1.js +30 -0
  300. package/src/paraglide/messages/admin_billing_subscription_overdue.js +30 -0
  301. package/src/paraglide/messages/admin_billing_subscription_periodend1.js +30 -0
  302. package/src/paraglide/messages/admin_billing_subscription_periodstart1.js +30 -0
  303. package/src/paraglide/messages/admin_billing_subscription_plan.js +30 -0
  304. package/src/paraglide/messages/admin_billing_subscription_providersubscription1.js +30 -0
  305. package/src/paraglide/messages/admin_billing_subscription_seats.js +30 -0
  306. package/src/paraglide/messages/admin_billing_subscription_startdate1.js +30 -0
  307. package/src/paraglide/messages/admin_billing_subscription_status.js +30 -0
  308. package/src/paraglide/messages/admin_billing_subscription_totalusers1.js +30 -0
  309. package/src/paraglide/messages/admin_billing_subscription_trialing.js +30 -0
  310. package/src/paraglide/messages/admin_billing_subscription_workspace.js +30 -0
  311. package/src/paraglide/messages/admin_invitations_action_delete.js +30 -0
  312. package/src/paraglide/messages/admin_invitations_action_toggle_disable.js +30 -0
  313. package/src/paraglide/messages/admin_invitations_action_toggle_enable.js +30 -0
  314. package/src/paraglide/messages/admin_invitations_action_view_uses.js +30 -0
  315. package/src/paraglide/messages/admin_invitations_create_code_help.js +30 -0
  316. package/src/paraglide/messages/admin_invitations_create_code_label.js +30 -0
  317. package/src/paraglide/messages/admin_invitations_create_code_placeholder.js +30 -0
  318. package/src/paraglide/messages/admin_invitations_create_desc.js +30 -0
  319. package/src/paraglide/messages/admin_invitations_create_maxuses_label.js +30 -0
  320. package/src/paraglide/messages/admin_invitations_create_submit.js +30 -0
  321. package/src/paraglide/messages/admin_invitations_create_title.js +30 -0
  322. package/src/paraglide/messages/admin_invitations_create_validdays_label.js +30 -0
  323. package/src/paraglide/messages/admin_invitations_delete_confirm_desc.js +30 -0
  324. package/src/paraglide/messages/admin_invitations_delete_confirm_title.js +30 -0
  325. package/src/paraglide/messages/admin_invitations_delete_disabled_hint.js +30 -0
  326. package/src/paraglide/messages/admin_invitations_empty.js +30 -0
  327. package/src/paraglide/messages/admin_invitations_mode_invite.js +30 -0
  328. package/src/paraglide/messages/admin_invitations_mode_invite_desc.js +30 -0
  329. package/src/paraglide/messages/admin_invitations_mode_open.js +30 -0
  330. package/src/paraglide/messages/admin_invitations_mode_open_desc.js +30 -0
  331. package/src/paraglide/messages/admin_invitations_mode_title.js +30 -0
  332. package/src/paraglide/messages/admin_invitations_page_subtitle.js +30 -0
  333. package/src/paraglide/messages/admin_invitations_page_title.js +30 -0
  334. package/src/paraglide/messages/admin_invitations_status_active.js +30 -0
  335. package/src/paraglide/messages/admin_invitations_status_disabled.js +30 -0
  336. package/src/paraglide/messages/admin_invitations_status_exhausted.js +30 -0
  337. package/src/paraglide/messages/admin_invitations_status_expired.js +30 -0
  338. package/src/paraglide/messages/admin_invitations_table_columns_actions.js +30 -0
  339. package/src/paraglide/messages/admin_invitations_table_columns_code.js +30 -0
  340. package/src/paraglide/messages/admin_invitations_table_columns_creator.js +30 -0
  341. package/src/paraglide/messages/admin_invitations_table_columns_expires.js +30 -0
  342. package/src/paraglide/messages/admin_invitations_table_columns_status.js +30 -0
  343. package/src/paraglide/messages/admin_invitations_table_columns_uses.js +30 -0
  344. package/src/paraglide/messages/admin_invitations_toast_copied.js +30 -0
  345. package/src/paraglide/messages/admin_invitations_toast_copyfailed1.js +30 -0
  346. package/src/paraglide/messages/admin_invitations_toast_created.js +30 -0
  347. package/src/paraglide/messages/admin_invitations_toast_createfailed1.js +30 -0
  348. package/src/paraglide/messages/admin_invitations_toast_deleted.js +30 -0
  349. package/src/paraglide/messages/admin_invitations_toast_deletefailed1.js +30 -0
  350. package/src/paraglide/messages/admin_invitations_toast_modefailed1.js +30 -0
  351. package/src/paraglide/messages/admin_invitations_toast_modeupdated1.js +30 -0
  352. package/src/paraglide/messages/admin_invitations_toast_toggled.js +30 -0
  353. package/src/paraglide/messages/admin_invitations_toast_togglefailed1.js +30 -0
  354. package/src/paraglide/messages/admin_invitations_uses_column_usedat.js +30 -0
  355. package/src/paraglide/messages/admin_invitations_uses_column_username.js +30 -0
  356. package/src/paraglide/messages/admin_invitations_uses_empty.js +30 -0
  357. package/src/paraglide/messages/admin_invitations_uses_title.js +30 -0
  358. package/src/paraglide/messages/admin_loginproviders_action_delete1.js +30 -0
  359. package/src/paraglide/messages/admin_loginproviders_action_hidesecret2.js +30 -0
  360. package/src/paraglide/messages/admin_loginproviders_action_save1.js +30 -0
  361. package/src/paraglide/messages/admin_loginproviders_action_showsecret2.js +30 -0
  362. package/src/paraglide/messages/admin_loginproviders_action_test1.js +30 -0
  363. package/src/paraglide/messages/admin_loginproviders_cache_hint1.js +30 -0
  364. package/src/paraglide/messages/admin_loginproviders_delete_confirm_desc1.js +30 -0
  365. package/src/paraglide/messages/admin_loginproviders_delete_confirm_title1.js +30 -0
  366. package/src/paraglide/messages/admin_loginproviders_field_clientid2.js +30 -0
  367. package/src/paraglide/messages/admin_loginproviders_field_clientid_placeholder2.js +30 -0
  368. package/src/paraglide/messages/admin_loginproviders_field_clientsecret2.js +30 -0
  369. package/src/paraglide/messages/admin_loginproviders_field_clientsecret_desc2.js +30 -0
  370. package/src/paraglide/messages/admin_loginproviders_field_clientsecret_hint2.js +30 -0
  371. package/src/paraglide/messages/admin_loginproviders_field_clientsecret_placeholder2.js +30 -0
  372. package/src/paraglide/messages/admin_loginproviders_field_enabled1.js +30 -0
  373. package/src/paraglide/messages/admin_loginproviders_page_subtitle1.js +30 -0
  374. package/src/paraglide/messages/admin_loginproviders_page_title1.js +30 -0
  375. package/src/paraglide/messages/admin_loginproviders_source_db1.js +30 -0
  376. package/src/paraglide/messages/admin_loginproviders_source_env1.js +30 -0
  377. package/src/paraglide/messages/admin_loginproviders_source_none1.js +30 -0
  378. package/src/paraglide/messages/admin_loginproviders_toast_deleted1.js +30 -0
  379. package/src/paraglide/messages/admin_loginproviders_toast_deletefailed2.js +30 -0
  380. package/src/paraglide/messages/admin_loginproviders_toast_saved1.js +30 -0
  381. package/src/paraglide/messages/admin_loginproviders_toast_savefailed2.js +30 -0
  382. package/src/paraglide/messages/admin_loginproviders_toast_testfailed2.js +30 -0
  383. package/src/paraglide/messages/admin_loginproviders_toast_testok2.js +30 -0
  384. package/src/paraglide/messages/admin_users_action_changerole1.js +30 -0
  385. package/src/paraglide/messages/admin_users_action_changestatus1.js +30 -0
  386. package/src/paraglide/messages/admin_users_action_resetpassword1.js +30 -0
  387. package/src/paraglide/messages/admin_users_detail_account_createdat1.js +30 -0
  388. package/src/paraglide/messages/admin_users_detail_account_description.js +30 -0
  389. package/src/paraglide/messages/admin_users_detail_account_lastlogin1.js +30 -0
  390. package/src/paraglide/messages/admin_users_detail_account_neverloggedin2.js +30 -0
  391. package/src/paraglide/messages/admin_users_detail_account_title.js +30 -0
  392. package/src/paraglide/messages/admin_users_detail_account_updatedat1.js +30 -0
  393. package/src/paraglide/messages/admin_users_detail_errorloading1.js +30 -0
  394. package/src/paraglide/messages/admin_users_detail_loginlogs_csvheader2.js +30 -0
  395. package/src/paraglide/messages/admin_users_detail_loginlogs_description1.js +30 -0
  396. package/src/paraglide/messages/admin_users_detail_loginlogs_exportsuccess2.js +30 -0
  397. package/src/paraglide/messages/admin_users_detail_loginlogs_failure1.js +30 -0
  398. package/src/paraglide/messages/admin_users_detail_loginlogs_success1.js +30 -0
  399. package/src/paraglide/messages/admin_users_detail_loginlogs_title1.js +30 -0
  400. package/src/paraglide/messages/admin_users_detail_loginlogs_unknownreason2.js +30 -0
  401. package/src/paraglide/messages/admin_users_detail_profile_description.js +30 -0
  402. package/src/paraglide/messages/admin_users_detail_profile_title.js +30 -0
  403. package/src/paraglide/messages/admin_users_detail_retry.js +30 -0
  404. package/src/paraglide/messages/admin_users_detail_stats_apps.js +30 -0
  405. package/src/paraglide/messages/admin_users_detail_stats_description.js +30 -0
  406. package/src/paraglide/messages/admin_users_detail_stats_marketapps1.js +30 -0
  407. package/src/paraglide/messages/admin_users_detail_stats_prds.js +30 -0
  408. package/src/paraglide/messages/admin_users_detail_stats_reviews.js +30 -0
  409. package/src/paraglide/messages/admin_users_detail_stats_title.js +30 -0
  410. package/src/paraglide/messages/admin_users_detail_usernotfound2.js +30 -0
  411. package/src/paraglide/messages/admin_users_dialog_delete_confirm.js +30 -0
  412. package/src/paraglide/messages/admin_users_dialog_delete_description.js +30 -0
  413. package/src/paraglide/messages/admin_users_dialog_delete_placeholder.js +30 -0
  414. package/src/paraglide/messages/admin_users_dialog_delete_title.js +30 -0
  415. package/src/paraglide/messages/admin_users_dialog_password_confirm.js +30 -0
  416. package/src/paraglide/messages/admin_users_dialog_password_newpassword1.js +30 -0
  417. package/src/paraglide/messages/admin_users_dialog_password_title.js +30 -0
  418. package/src/paraglide/messages/admin_users_dialog_role_newrole1.js +30 -0
  419. package/src/paraglide/messages/admin_users_dialog_role_title.js +30 -0
  420. package/src/paraglide/messages/admin_users_dialog_status_newstatus1.js +30 -0
  421. package/src/paraglide/messages/admin_users_dialog_status_title.js +30 -0
  422. package/src/paraglide/messages/admin_users_page_createuser1.js +30 -0
  423. package/src/paraglide/messages/admin_users_page_description.js +30 -0
  424. package/src/paraglide/messages/admin_users_page_title.js +30 -0
  425. package/src/paraglide/messages/admin_users_page_total.js +30 -0
  426. package/src/paraglide/messages/admin_users_role_admin.js +30 -0
  427. package/src/paraglide/messages/admin_users_role_guest.js +30 -0
  428. package/src/paraglide/messages/admin_users_role_superadmin1.js +30 -0
  429. package/src/paraglide/messages/admin_users_role_user.js +30 -0
  430. package/src/paraglide/messages/admin_users_status_active.js +30 -0
  431. package/src/paraglide/messages/admin_users_status_banned.js +30 -0
  432. package/src/paraglide/messages/admin_users_status_inactive.js +30 -0
  433. package/src/paraglide/messages/admin_users_toast_deletefailed1.js +30 -0
  434. package/src/paraglide/messages/admin_users_toast_passwordreset1.js +30 -0
  435. package/src/paraglide/messages/admin_users_toast_resetfailed1.js +30 -0
  436. package/src/paraglide/messages/admin_users_toast_roleupdated1.js +30 -0
  437. package/src/paraglide/messages/admin_users_toast_statusupdated1.js +30 -0
  438. package/src/paraglide/messages/admin_users_toast_updatefailed1.js +30 -0
  439. package/src/paraglide/messages/admin_users_toast_userdeleted1.js +30 -0
  440. package/src/paraglide/messages/common_activitylog_actiontype2.js +30 -0
  441. package/src/paraglide/messages/common_activitylog_actiontypes_all2.js +30 -0
  442. package/src/paraglide/messages/common_activitylog_actiontypes_delete2.js +30 -0
  443. package/src/paraglide/messages/common_activitylog_actiontypes_export2.js +30 -0
  444. package/src/paraglide/messages/common_activitylog_actiontypes_login2.js +30 -0
  445. package/src/paraglide/messages/common_activitylog_actiontypes_logout2.js +30 -0
  446. package/src/paraglide/messages/common_activitylog_actiontypes_password_change2.js +30 -0
  447. package/src/paraglide/messages/common_activitylog_actiontypes_profile_update2.js +30 -0
  448. package/src/paraglide/messages/common_activitylog_actiontypes_settings_change2.js +30 -0
  449. package/src/paraglide/messages/common_activitylog_description1.js +30 -0
  450. package/src/paraglide/messages/common_activitylog_empty1.js +30 -0
  451. package/src/paraglide/messages/common_activitylog_emptyhint_default2.js +30 -0
  452. package/src/paraglide/messages/common_activitylog_emptyhint_filtered2.js +30 -0
  453. package/src/paraglide/messages/common_activitylog_enddate2.js +30 -0
  454. package/src/paraglide/messages/common_activitylog_exporting1.js +30 -0
  455. package/src/paraglide/messages/common_activitylog_exportlog2.js +30 -0
  456. package/src/paraglide/messages/common_activitylog_justnow2.js +30 -0
  457. package/src/paraglide/messages/common_activitylog_search1.js +30 -0
  458. package/src/paraglide/messages/common_activitylog_searchplaceholder2.js +30 -0
  459. package/src/paraglide/messages/common_activitylog_startdate2.js +30 -0
  460. package/src/paraglide/messages/common_activitylog_status_failed1.js +30 -0
  461. package/src/paraglide/messages/common_activitylog_status_success1.js +30 -0
  462. package/src/paraglide/messages/common_activitylog_title1.js +30 -0
  463. package/src/paraglide/messages/common_activitylog_total1.js +30 -0
  464. package/src/paraglide/messages/common_activitylog_unknown1.js +30 -0
  465. package/src/paraglide/messages/common_apps_title.js +29 -0
  466. package/src/paraglide/messages/common_button_back.js +29 -0
  467. package/src/paraglide/messages/common_button_cancel.js +29 -0
  468. package/src/paraglide/messages/common_button_close.js +29 -0
  469. package/src/paraglide/messages/common_button_confirm.js +29 -0
  470. package/src/paraglide/messages/common_button_create.js +29 -0
  471. package/src/paraglide/messages/common_button_delete.js +29 -0
  472. package/src/paraglide/messages/common_button_edit.js +29 -0
  473. package/src/paraglide/messages/common_button_next.js +29 -0
  474. package/src/paraglide/messages/common_button_reset.js +29 -0
  475. package/src/paraglide/messages/common_button_save.js +29 -0
  476. package/src/paraglide/messages/common_button_search.js +29 -0
  477. package/src/paraglide/messages/common_button_submit.js +29 -0
  478. package/src/paraglide/messages/common_common_backtolist2.js +30 -0
  479. package/src/paraglide/messages/common_common_cancel.js +29 -0
  480. package/src/paraglide/messages/common_common_comingsoon1.js +30 -0
  481. package/src/paraglide/messages/common_common_create.js +29 -0
  482. package/src/paraglide/messages/common_common_delete.js +29 -0
  483. package/src/paraglide/messages/common_common_deleted.js +29 -0
  484. package/src/paraglide/messages/common_common_deletefailed1.js +30 -0
  485. package/src/paraglide/messages/common_common_deleting.js +29 -0
  486. package/src/paraglide/messages/common_common_edit.js +29 -0
  487. package/src/paraglide/messages/common_common_empty.js +29 -0
  488. package/src/paraglide/messages/common_common_none.js +29 -0
  489. package/src/paraglide/messages/common_common_refresh.js +29 -0
  490. package/src/paraglide/messages/common_common_role_admin5.js +30 -0
  491. package/src/paraglide/messages/common_common_role_guest5.js +30 -0
  492. package/src/paraglide/messages/common_common_role_operator8.js +30 -0
  493. package/src/paraglide/messages/common_common_role_super_admin10.js +30 -0
  494. package/src/paraglide/messages/common_common_role_user4.js +30 -0
  495. package/src/paraglide/messages/common_common_search.js +29 -0
  496. package/src/paraglide/messages/common_common_timeago_days1.js +30 -0
  497. package/src/paraglide/messages/common_common_timeago_hours1.js +30 -0
  498. package/src/paraglide/messages/common_common_timeago_minutes1.js +30 -0
  499. package/src/paraglide/messages/common_common_timeago_seconds1.js +30 -0
  500. package/src/paraglide/messages/common_component_categories_base.js +29 -0
  501. package/src/paraglide/messages/common_component_categories_block.js +29 -0
  502. package/src/paraglide/messages/common_component_categories_template.js +29 -0
  503. package/src/paraglide/messages/common_component_form_category.js +29 -0
  504. package/src/paraglide/messages/common_component_form_create.js +29 -0
  505. package/src/paraglide/messages/common_component_form_created.js +29 -0
  506. package/src/paraglide/messages/common_component_form_defaultheight1.js +30 -0
  507. package/src/paraglide/messages/common_component_form_defaultprops1.js +30 -0
  508. package/src/paraglide/messages/common_component_form_defaultwidth1.js +30 -0
  509. package/src/paraglide/messages/common_component_form_description.js +29 -0
  510. package/src/paraglide/messages/common_component_form_descriptionplaceholder1.js +30 -0
  511. package/src/paraglide/messages/common_component_form_edit.js +29 -0
  512. package/src/paraglide/messages/common_component_form_hidden.js +29 -0
  513. package/src/paraglide/messages/common_component_form_name.js +29 -0
  514. package/src/paraglide/messages/common_component_form_nameplaceholder1.js +30 -0
  515. package/src/paraglide/messages/common_component_form_namerequired1.js +30 -0
  516. package/src/paraglide/messages/common_component_form_path.js +29 -0
  517. package/src/paraglide/messages/common_component_form_pathhint1.js +30 -0
  518. package/src/paraglide/messages/common_component_form_pathplaceholder1.js +30 -0
  519. package/src/paraglide/messages/common_component_form_preview.js +29 -0
  520. package/src/paraglide/messages/common_component_form_previewunavailable1.js +30 -0
  521. package/src/paraglide/messages/common_component_form_savefailed1.js +30 -0
  522. package/src/paraglide/messages/common_component_form_saving.js +29 -0
  523. package/src/paraglide/messages/common_component_form_sortorder1.js +30 -0
  524. package/src/paraglide/messages/common_component_form_subcategory1.js +30 -0
  525. package/src/paraglide/messages/common_component_form_subcategoryplaceholder2.js +30 -0
  526. package/src/paraglide/messages/common_component_form_tags.js +29 -0
  527. package/src/paraglide/messages/common_component_form_tagsplaceholder1.js +30 -0
  528. package/src/paraglide/messages/common_component_form_type.js +29 -0
  529. package/src/paraglide/messages/common_component_form_updated.js +29 -0
  530. package/src/paraglide/messages/common_component_table_columns_actions.js +29 -0
  531. package/src/paraglide/messages/common_component_table_columns_category.js +29 -0
  532. package/src/paraglide/messages/common_component_table_columns_component.js +29 -0
  533. package/src/paraglide/messages/common_component_table_columns_source.js +29 -0
  534. package/src/paraglide/messages/common_component_table_columns_status.js +29 -0
  535. package/src/paraglide/messages/common_component_table_columns_tags.js +29 -0
  536. package/src/paraglide/messages/common_component_table_columns_type.js +29 -0
  537. package/src/paraglide/messages/common_component_table_empty.js +29 -0
  538. package/src/paraglide/messages/common_component_table_status_hidden.js +29 -0
  539. package/src/paraglide/messages/common_component_table_status_visible.js +29 -0
  540. package/src/paraglide/messages/common_component_types_base.js +29 -0
  541. package/src/paraglide/messages/common_component_types_block.js +29 -0
  542. package/src/paraglide/messages/common_component_types_template.js +29 -0
  543. package/src/paraglide/messages/common_dashboard_subtitle.js +29 -0
  544. package/src/paraglide/messages/common_dashboard_title.js +29 -0
  545. package/src/paraglide/messages/common_dependencies_description.js +29 -0
  546. package/src/paraglide/messages/common_dependencies_hint_currentversion1.js +30 -0
  547. package/src/paraglide/messages/common_dependencies_hint_currentversionsuffix2.js +30 -0
  548. package/src/paraglide/messages/common_dependencies_hint_latestversion1.js +31 -0
  549. package/src/paraglide/messages/common_dependencies_hint_watchlist1.js +30 -0
  550. package/src/paraglide/messages/common_dependencies_title.js +29 -0
  551. package/src/paraglide/messages/common_dependency_edit_category.js +29 -0
  552. package/src/paraglide/messages/common_dependency_edit_description.js +29 -0
  553. package/src/paraglide/messages/common_dependency_edit_descriptionplaceholder1.js +30 -0
  554. package/src/paraglide/messages/common_dependency_edit_dialogtitle1.js +30 -0
  555. package/src/paraglide/messages/common_dependency_edit_displayname1.js +30 -0
  556. package/src/paraglide/messages/common_dependency_edit_homepage.js +29 -0
  557. package/src/paraglide/messages/common_dependency_edit_notes.js +29 -0
  558. package/src/paraglide/messages/common_dependency_edit_notesplaceholder1.js +30 -0
  559. package/src/paraglide/messages/common_dependency_edit_priority.js +29 -0
  560. package/src/paraglide/messages/common_dependency_edit_saved.js +29 -0
  561. package/src/paraglide/messages/common_dependency_edit_savefailed1.js +30 -0
  562. package/src/paraglide/messages/common_dependency_edit_untracked.js +29 -0
  563. package/src/paraglide/messages/common_dependency_edit_watched.js +29 -0
  564. package/src/paraglide/messages/common_dependency_statuslabel_latest1.js +30 -0
  565. package/src/paraglide/messages/common_dependency_statuslabel_major1.js +30 -0
  566. package/src/paraglide/messages/common_dependency_statuslabel_minor1.js +30 -0
  567. package/src/paraglide/messages/common_dependency_statuslabel_patch1.js +30 -0
  568. package/src/paraglide/messages/common_dependency_statuslabel_unknown1.js +30 -0
  569. package/src/paraglide/messages/common_dependency_table_allcategory1.js +30 -0
  570. package/src/paraglide/messages/common_dependency_table_cell_changelogbtn1.js +30 -0
  571. package/src/paraglide/messages/common_dependency_table_cell_highpriority1.js +30 -0
  572. package/src/paraglide/messages/common_dependency_table_cell_notinstalled1.js +30 -0
  573. package/src/paraglide/messages/common_dependency_table_cell_synctooltip1.js +30 -0
  574. package/src/paraglide/messages/common_dependency_table_cell_untracked.js +29 -0
  575. package/src/paraglide/messages/common_dependency_table_cell_viewchangelog1.js +30 -0
  576. package/src/paraglide/messages/common_dependency_table_columns_actions.js +29 -0
  577. package/src/paraglide/messages/common_dependency_table_columns_category.js +29 -0
  578. package/src/paraglide/messages/common_dependency_table_columns_changelog.js +29 -0
  579. package/src/paraglide/messages/common_dependency_table_columns_currentversion1.js +30 -0
  580. package/src/paraglide/messages/common_dependency_table_columns_dependency.js +29 -0
  581. package/src/paraglide/messages/common_dependency_table_columns_description.js +29 -0
  582. package/src/paraglide/messages/common_dependency_table_columns_lastsync1.js +30 -0
  583. package/src/paraglide/messages/common_dependency_table_columns_latestversion1.js +30 -0
  584. package/src/paraglide/messages/common_dependency_table_columns_status.js +29 -0
  585. package/src/paraglide/messages/common_dependency_table_empty.js +29 -0
  586. package/src/paraglide/messages/common_dependency_table_pagination_next.js +29 -0
  587. package/src/paraglide/messages/common_dependency_table_pagination_prev.js +29 -0
  588. package/src/paraglide/messages/common_dependency_table_pagination_total.js +29 -0
  589. package/src/paraglide/messages/common_dependency_table_searchplaceholder1.js +30 -0
  590. package/src/paraglide/messages/common_dependency_table_stats_outdated.js +29 -0
  591. package/src/paraglide/messages/common_dependency_table_stats_watched.js +29 -0
  592. package/src/paraglide/messages/common_dependency_table_statusfilter_all1.js +30 -0
  593. package/src/paraglide/messages/common_dependency_table_statusfilter_latest1.js +30 -0
  594. package/src/paraglide/messages/common_dependency_table_statusfilter_major1.js +30 -0
  595. package/src/paraglide/messages/common_dependency_table_statusfilter_minor1.js +30 -0
  596. package/src/paraglide/messages/common_dependency_table_statusfilter_patch1.js +30 -0
  597. package/src/paraglide/messages/common_dependency_table_statusfilter_unknown1.js +30 -0
  598. package/src/paraglide/messages/common_dependency_table_syncall1.js +30 -0
  599. package/src/paraglide/messages/common_dependency_table_toast_nosyncable1.js +30 -0
  600. package/src/paraglide/messages/common_dependency_table_toast_syncfailed1.js +30 -0
  601. package/src/paraglide/messages/common_dependency_table_toast_syncfailedcount2.js +30 -0
  602. package/src/paraglide/messages/common_dependency_table_toast_syncsuccess1.js +30 -0
  603. package/src/paraglide/messages/common_dependency_table_toast_unknown.js +29 -0
  604. package/src/paraglide/messages/common_dependency_table_toast_updated.js +29 -0
  605. package/src/paraglide/messages/common_dependency_table_viewfilter_all1.js +30 -0
  606. package/src/paraglide/messages/common_dependency_table_viewfilter_watched1.js +30 -0
  607. package/src/paraglide/messages/common_dependency_timeago_days1.js +30 -0
  608. package/src/paraglide/messages/common_dependency_timeago_hours1.js +30 -0
  609. package/src/paraglide/messages/common_dependency_timeago_justnow2.js +30 -0
  610. package/src/paraglide/messages/common_dependency_timeago_minutes1.js +30 -0
  611. package/src/paraglide/messages/common_developerlogs_addentry2.js +30 -0
  612. package/src/paraglide/messages/common_developerlogs_alltags2.js +30 -0
  613. package/src/paraglide/messages/common_developerlogs_autogenerate2.js +30 -0
  614. package/src/paraglide/messages/common_developerlogs_autogeneratefailed3.js +30 -0
  615. package/src/paraglide/messages/common_developerlogs_autogeneratesuccess3.js +30 -0
  616. package/src/paraglide/messages/common_developerlogs_autogenerating2.js +30 -0
  617. package/src/paraglide/messages/common_developerlogs_backfilldetails2.js +30 -0
  618. package/src/paraglide/messages/common_developerlogs_backfillfailed2.js +30 -0
  619. package/src/paraglide/messages/common_developerlogs_backfillsuccess2.js +30 -0
  620. package/src/paraglide/messages/common_developerlogs_columns_actions1.js +30 -0
  621. package/src/paraglide/messages/common_developerlogs_columns_createdat2.js +30 -0
  622. package/src/paraglide/messages/common_developerlogs_columns_date1.js +30 -0
  623. package/src/paraglide/messages/common_developerlogs_columns_desc1.js +30 -0
  624. package/src/paraglide/messages/common_developerlogs_columns_tags1.js +30 -0
  625. package/src/paraglide/messages/common_developerlogs_columns_title1.js +30 -0
  626. package/src/paraglide/messages/common_developerlogs_deleteconfirm2.js +30 -0
  627. package/src/paraglide/messages/common_developerlogs_deletesuccess2.js +30 -0
  628. package/src/paraglide/messages/common_developerlogs_description1.js +30 -0
  629. package/src/paraglide/messages/common_developerlogs_editentry2.js +30 -0
  630. package/src/paraglide/messages/common_developerlogs_empty1.js +30 -0
  631. package/src/paraglide/messages/common_developerlogs_form_commitsha_label2.js +30 -0
  632. package/src/paraglide/messages/common_developerlogs_form_commitsha_placeholder2.js +30 -0
  633. package/src/paraglide/messages/common_developerlogs_form_date_label1.js +30 -0
  634. package/src/paraglide/messages/common_developerlogs_form_date_placeholder1.js +30 -0
  635. package/src/paraglide/messages/common_developerlogs_form_desc_label1.js +30 -0
  636. package/src/paraglide/messages/common_developerlogs_form_desc_placeholder1.js +30 -0
  637. package/src/paraglide/messages/common_developerlogs_form_fillrequired2.js +30 -0
  638. package/src/paraglide/messages/common_developerlogs_form_tags_label1.js +30 -0
  639. package/src/paraglide/messages/common_developerlogs_form_tags_placeholder1.js +30 -0
  640. package/src/paraglide/messages/common_developerlogs_form_title_label1.js +30 -0
  641. package/src/paraglide/messages/common_developerlogs_form_title_placeholder1.js +30 -0
  642. package/src/paraglide/messages/common_developerlogs_savesuccess2.js +30 -0
  643. package/src/paraglide/messages/common_developerlogs_searchplaceholder2.js +30 -0
  644. package/src/paraglide/messages/common_developerlogs_tagfilter2.js +30 -0
  645. package/src/paraglide/messages/common_developerlogs_title1.js +30 -0
  646. package/src/paraglide/messages/common_docs_title.js +29 -0
  647. package/src/paraglide/messages/common_errorlist_columns_count1.js +30 -0
  648. package/src/paraglide/messages/common_errorlist_columns_errormessage2.js +30 -0
  649. package/src/paraglide/messages/common_errorlist_columns_errorname2.js +30 -0
  650. package/src/paraglide/messages/common_errorlist_columns_firstseen2.js +30 -0
  651. package/src/paraglide/messages/common_errorlist_columns_lastseen2.js +30 -0
  652. package/src/paraglide/messages/common_errorlist_detail_context1.js +30 -0
  653. package/src/paraglide/messages/common_errorlist_detail_title1.js +30 -0
  654. package/src/paraglide/messages/common_errorpage_error1.js +30 -0
  655. package/src/paraglide/messages/common_errorpage_errormessage2.js +30 -0
  656. package/src/paraglide/messages/common_errorpage_gologin2.js +30 -0
  657. package/src/paraglide/messages/common_errorpage_notfound2.js +30 -0
  658. package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_category1.js +30 -0
  659. package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_createdat2.js +30 -0
  660. package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_tags1.js +30 -0
  661. package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_url1.js +30 -0
  662. package/src/paraglide/messages/common_knowledgepublic_bookmarks_columns_website1.js +30 -0
  663. package/src/paraglide/messages/common_knowledgepublic_bookmarks_deleteconfirmdesc3.js +30 -0
  664. package/src/paraglide/messages/common_knowledgepublic_bookmarks_deleteconfirmtitle3.js +30 -0
  665. package/src/paraglide/messages/common_knowledgepublic_bookmarks_deleted1.js +30 -0
  666. package/src/paraglide/messages/common_knowledgepublic_bookmarks_placeholder1.js +30 -0
  667. package/src/paraglide/messages/common_knowledgepublic_bookmarks_subtitle1.js +30 -0
  668. package/src/paraglide/messages/common_knowledgepublic_bookmarks_synccomplete2.js +30 -0
  669. package/src/paraglide/messages/common_knowledgepublic_bookmarks_syncfailed2.js +30 -0
  670. package/src/paraglide/messages/common_knowledgepublic_bookmarks_syncgithub2.js +30 -0
  671. package/src/paraglide/messages/common_knowledgepublic_bookmarks_syncing1.js +30 -0
  672. package/src/paraglide/messages/common_knowledgepublic_bookmarks_title1.js +30 -0
  673. package/src/paraglide/messages/common_knowledgepublic_compliance_columns_createdat2.js +30 -0
  674. package/src/paraglide/messages/common_knowledgepublic_compliance_columns_industry1.js +30 -0
  675. package/src/paraglide/messages/common_knowledgepublic_compliance_columns_regulatorybody2.js +30 -0
  676. package/src/paraglide/messages/common_knowledgepublic_compliance_columns_tags1.js +30 -0
  677. package/src/paraglide/messages/common_knowledgepublic_compliance_columns_title1.js +30 -0
  678. package/src/paraglide/messages/common_knowledgepublic_compliance_deleteconfirmdesc3.js +30 -0
  679. package/src/paraglide/messages/common_knowledgepublic_compliance_deleteconfirmtitle3.js +30 -0
  680. package/src/paraglide/messages/common_knowledgepublic_compliance_deleted1.js +30 -0
  681. package/src/paraglide/messages/common_knowledgepublic_compliance_placeholder1.js +30 -0
  682. package/src/paraglide/messages/common_knowledgepublic_compliance_subtitle1.js +30 -0
  683. package/src/paraglide/messages/common_knowledgepublic_compliance_title1.js +30 -0
  684. package/src/paraglide/messages/common_knowledgepublic_jurisdictionlabel2.js +30 -0
  685. package/src/paraglide/messages/common_knowledgepublic_legal_columns_category1.js +30 -0
  686. package/src/paraglide/messages/common_knowledgepublic_legal_columns_createdat2.js +30 -0
  687. package/src/paraglide/messages/common_knowledgepublic_legal_columns_jurisdiction1.js +30 -0
  688. package/src/paraglide/messages/common_knowledgepublic_legal_columns_tags1.js +30 -0
  689. package/src/paraglide/messages/common_knowledgepublic_legal_columns_title1.js +30 -0
  690. package/src/paraglide/messages/common_knowledgepublic_legal_deleteconfirmdesc3.js +30 -0
  691. package/src/paraglide/messages/common_knowledgepublic_legal_deleteconfirmtitle3.js +30 -0
  692. package/src/paraglide/messages/common_knowledgepublic_legal_placeholder1.js +30 -0
  693. package/src/paraglide/messages/common_knowledgepublic_legal_subtitle1.js +30 -0
  694. package/src/paraglide/messages/common_knowledgepublic_legal_title1.js +30 -0
  695. package/src/paraglide/messages/common_legalform_category1.js +30 -0
  696. package/src/paraglide/messages/common_legalform_categoryplaceholder2.js +30 -0
  697. package/src/paraglide/messages/common_legalform_categoryrequired2.js +30 -0
  698. package/src/paraglide/messages/common_legalform_code1.js +30 -0
  699. package/src/paraglide/messages/common_legalform_codeplaceholder2.js +30 -0
  700. package/src/paraglide/messages/common_legalform_content1.js +30 -0
  701. package/src/paraglide/messages/common_legalform_contentplaceholder2.js +30 -0
  702. package/src/paraglide/messages/common_legalform_country1.js +30 -0
  703. package/src/paraglide/messages/common_legalform_countryplaceholder2.js +30 -0
  704. package/src/paraglide/messages/common_legalform_create1.js +30 -0
  705. package/src/paraglide/messages/common_legalform_created1.js +30 -0
  706. package/src/paraglide/messages/common_legalform_edit1.js +30 -0
  707. package/src/paraglide/messages/common_legalform_effectivedate2.js +30 -0
  708. package/src/paraglide/messages/common_legalform_issuingauthority2.js +30 -0
  709. package/src/paraglide/messages/common_legalform_issuingauthorityplaceholder3.js +30 -0
  710. package/src/paraglide/messages/common_legalform_jurisdiction1.js +30 -0
  711. package/src/paraglide/messages/common_legalform_jurisdictions_cn_local8.js +30 -0
  712. package/src/paraglide/messages/common_legalform_jurisdictions_cn_national11.js +30 -0
  713. package/src/paraglide/messages/common_legalform_jurisdictions_overseas9.js +30 -0
  714. package/src/paraglide/messages/common_legalform_loadfailed2.js +30 -0
  715. package/src/paraglide/messages/common_legalform_region1.js +30 -0
  716. package/src/paraglide/messages/common_legalform_regionplaceholder2.js +30 -0
  717. package/src/paraglide/messages/common_legalform_savefailed2.js +30 -0
  718. package/src/paraglide/messages/common_legalform_saving1.js +30 -0
  719. package/src/paraglide/messages/common_legalform_sourceurl2.js +30 -0
  720. package/src/paraglide/messages/common_legalform_summary1.js +30 -0
  721. package/src/paraglide/messages/common_legalform_summaryplaceholder2.js +30 -0
  722. package/src/paraglide/messages/common_legalform_tags1.js +30 -0
  723. package/src/paraglide/messages/common_legalform_tagsplaceholder2.js +30 -0
  724. package/src/paraglide/messages/common_legalform_title1.js +30 -0
  725. package/src/paraglide/messages/common_legalform_titleplaceholder2.js +30 -0
  726. package/src/paraglide/messages/common_legalform_titlerequired2.js +30 -0
  727. package/src/paraglide/messages/common_legalform_updated1.js +30 -0
  728. package/src/paraglide/messages/common_login_action.js +29 -0
  729. package/src/paraglide/messages/common_login_admin.js +29 -0
  730. package/src/paraglide/messages/common_login_adminpanel1.js +30 -0
  731. package/src/paraglide/messages/common_login_backtoworkspace2.js +30 -0
  732. package/src/paraglide/messages/common_login_email_label.js +29 -0
  733. package/src/paraglide/messages/common_login_email_placeholder.js +29 -0
  734. package/src/paraglide/messages/common_login_error_enteremail1.js +30 -0
  735. package/src/paraglide/messages/common_login_error_enterpassword1.js +30 -0
  736. package/src/paraglide/messages/common_login_error_invalidcredentials1.js +30 -0
  737. package/src/paraglide/messages/common_login_error_validemail1.js +30 -0
  738. package/src/paraglide/messages/common_login_exitadmin1.js +30 -0
  739. package/src/paraglide/messages/common_login_hidepassword1.js +30 -0
  740. package/src/paraglide/messages/common_login_loading.js +29 -0
  741. package/src/paraglide/messages/common_login_loggingin1.js +30 -0
  742. package/src/paraglide/messages/common_login_loginadmin1.js +30 -0
  743. package/src/paraglide/messages/common_login_logout.js +29 -0
  744. package/src/paraglide/messages/common_login_nopermission1.js +30 -0
  745. package/src/paraglide/messages/common_login_notadmin1.js +30 -0
  746. package/src/paraglide/messages/common_login_oauthwith1.js +30 -0
  747. package/src/paraglide/messages/common_login_password_label.js +29 -0
  748. package/src/paraglide/messages/common_login_password_placeholder.js +29 -0
  749. package/src/paraglide/messages/common_login_rememberme1.js +30 -0
  750. package/src/paraglide/messages/common_login_showpassword1.js +30 -0
  751. package/src/paraglide/messages/common_login_subtitle.js +29 -0
  752. package/src/paraglide/messages/common_login_success.js +29 -0
  753. package/src/paraglide/messages/common_login_switchaccount1.js +30 -0
  754. package/src/paraglide/messages/common_login_switchandlogin2.js +30 -0
  755. package/src/paraglide/messages/common_market_addapp1.js +30 -0
  756. package/src/paraglide/messages/common_market_categories_ai_assistant.js +30 -0
  757. package/src/paraglide/messages/common_market_categories_data_analysis.js +30 -0
  758. package/src/paraglide/messages/common_market_categories_docs_collab.js +30 -0
  759. package/src/paraglide/messages/common_market_categories_other.js +29 -0
  760. package/src/paraglide/messages/common_market_categories_productivity.js +29 -0
  761. package/src/paraglide/messages/common_market_categories_project_mgmt.js +30 -0
  762. package/src/paraglide/messages/common_market_columns_appname1.js +30 -0
  763. package/src/paraglide/messages/common_market_columns_category.js +29 -0
  764. package/src/paraglide/messages/common_market_columns_createdat1.js +30 -0
  765. package/src/paraglide/messages/common_market_columns_downloads.js +29 -0
  766. package/src/paraglide/messages/common_market_columns_entryurl1.js +30 -0
  767. package/src/paraglide/messages/common_market_columns_status.js +29 -0
  768. package/src/paraglide/messages/common_market_deleteconfirmdesc2.js +30 -0
  769. package/src/paraglide/messages/common_market_deleteconfirmtitle2.js +30 -0
  770. package/src/paraglide/messages/common_market_deleted.js +29 -0
  771. package/src/paraglide/messages/common_market_deletefailed1.js +30 -0
  772. package/src/paraglide/messages/common_market_fetchfailed1.js +30 -0
  773. package/src/paraglide/messages/common_market_form_capabilities.js +29 -0
  774. package/src/paraglide/messages/common_market_form_category.js +29 -0
  775. package/src/paraglide/messages/common_market_form_categoryplaceholder1.js +30 -0
  776. package/src/paraglide/messages/common_market_form_create.js +29 -0
  777. package/src/paraglide/messages/common_market_form_created.js +29 -0
  778. package/src/paraglide/messages/common_market_form_description.js +29 -0
  779. package/src/paraglide/messages/common_market_form_descriptionplaceholder1.js +30 -0
  780. package/src/paraglide/messages/common_market_form_displayname1.js +30 -0
  781. package/src/paraglide/messages/common_market_form_displaynameplaceholder2.js +30 -0
  782. package/src/paraglide/messages/common_market_form_edit.js +29 -0
  783. package/src/paraglide/messages/common_market_form_entryurl1.js +30 -0
  784. package/src/paraglide/messages/common_market_form_fillrequired1.js +30 -0
  785. package/src/paraglide/messages/common_market_form_icon.js +29 -0
  786. package/src/paraglide/messages/common_market_form_iconplaceholder1.js +30 -0
  787. package/src/paraglide/messages/common_market_form_name.js +29 -0
  788. package/src/paraglide/messages/common_market_form_nameplaceholder1.js +30 -0
  789. package/src/paraglide/messages/common_market_form_operationfailed1.js +30 -0
  790. package/src/paraglide/messages/common_market_form_submitting.js +29 -0
  791. package/src/paraglide/messages/common_market_form_tags.js +29 -0
  792. package/src/paraglide/messages/common_market_form_tagsplaceholder1.js +30 -0
  793. package/src/paraglide/messages/common_market_form_updated.js +29 -0
  794. package/src/paraglide/messages/common_market_operationfailed1.js +30 -0
  795. package/src/paraglide/messages/common_market_publish.js +29 -0
  796. package/src/paraglide/messages/common_market_statuslabel_draft1.js +30 -0
  797. package/src/paraglide/messages/common_market_statuslabel_published1.js +30 -0
  798. package/src/paraglide/messages/common_market_statuslabel_unpublished1.js +30 -0
  799. package/src/paraglide/messages/common_market_statusupdated1.js +30 -0
  800. package/src/paraglide/messages/common_market_table_addapp1.js +30 -0
  801. package/src/paraglide/messages/common_market_table_deleteconfirmdesc2.js +30 -0
  802. package/src/paraglide/messages/common_market_table_deleteconfirmtitle2.js +30 -0
  803. package/src/paraglide/messages/common_market_title.js +29 -0
  804. package/src/paraglide/messages/common_market_unpublish.js +29 -0
  805. package/src/paraglide/messages/common_metricsstats_benchmarksource2.js +30 -0
  806. package/src/paraglide/messages/common_metricsstats_columns_avg1.js +30 -0
  807. package/src/paraglide/messages/common_metricsstats_columns_count1.js +30 -0
  808. package/src/paraglide/messages/common_metricsstats_columns_description1.js +30 -0
  809. package/src/paraglide/messages/common_metricsstats_columns_max1.js +30 -0
  810. package/src/paraglide/messages/common_metricsstats_columns_metricname2.js +30 -0
  811. package/src/paraglide/messages/common_metricsstats_columns_min1.js +30 -0
  812. package/src/paraglide/messages/common_metricsstats_comparebenchmark2.js +30 -0
  813. package/src/paraglide/messages/common_monitoring_aiusage_alert_affected1.js +30 -0
  814. package/src/paraglide/messages/common_monitoring_aiusage_alert_threshold1.js +30 -0
  815. package/src/paraglide/messages/common_monitoring_aiusage_byokvsmanaged3.js +30 -0
  816. package/src/paraglide/messages/common_monitoring_aiusage_cost1.js +30 -0
  817. package/src/paraglide/messages/common_monitoring_aiusage_count1.js +30 -0
  818. package/src/paraglide/messages/common_monitoring_aiusage_dailytrend2.js +30 -0
  819. package/src/paraglide/messages/common_monitoring_aiusage_description1.js +30 -0
  820. package/src/paraglide/messages/common_monitoring_aiusage_sandbox1.js +30 -0
  821. package/src/paraglide/messages/common_monitoring_aiusage_sandboxvalue2.js +30 -0
  822. package/src/paraglide/messages/common_monitoring_aiusage_title1.js +30 -0
  823. package/src/paraglide/messages/common_monitoring_aiusage_top10users2.js +30 -0
  824. package/src/paraglide/messages/common_monitoring_aiusage_top10workspaces2.js +30 -0
  825. package/src/paraglide/messages/common_monitoring_aiusage_totalcalls2.js +30 -0
  826. package/src/paraglide/messages/common_monitoring_aiusage_totalcost2.js +30 -0
  827. package/src/paraglide/messages/common_monitoring_aiusage_totalitems2.js +30 -0
  828. package/src/paraglide/messages/common_monitoring_aiusage_trend_calls1.js +30 -0
  829. package/src/paraglide/messages/common_monitoring_aiusage_trend_callsaria2.js +30 -0
  830. package/src/paraglide/messages/common_monitoring_aiusage_trend_cost1.js +30 -0
  831. package/src/paraglide/messages/common_monitoring_aiusage_trend_costaria2.js +30 -0
  832. package/src/paraglide/messages/common_monitoring_aiusage_user1.js +30 -0
  833. package/src/paraglide/messages/common_monitoring_aiusage_workspace1.js +30 -0
  834. package/src/paraglide/messages/common_monitoring_errors_cleardata1.js +30 -0
  835. package/src/paraglide/messages/common_monitoring_errors_clearfailed1.js +30 -0
  836. package/src/paraglide/messages/common_monitoring_errors_clearsuccess1.js +30 -0
  837. package/src/paraglide/messages/common_monitoring_errors_description.js +29 -0
  838. package/src/paraglide/messages/common_monitoring_errors_empty.js +29 -0
  839. package/src/paraglide/messages/common_monitoring_errors_stats_errortypes1.js +30 -0
  840. package/src/paraglide/messages/common_monitoring_errors_stats_recenterror1.js +30 -0
  841. package/src/paraglide/messages/common_monitoring_errors_stats_totaloccurrences1.js +30 -0
  842. package/src/paraglide/messages/common_monitoring_errors_title.js +29 -0
  843. package/src/paraglide/messages/common_monitoring_health_autocheck1.js +30 -0
  844. package/src/paraglide/messages/common_monitoring_health_autodisabled1.js +30 -0
  845. package/src/paraglide/messages/common_monitoring_health_autoenabled1.js +30 -0
  846. package/src/paraglide/messages/common_monitoring_health_checknow1.js +30 -0
  847. package/src/paraglide/messages/common_monitoring_health_database_connected.js +29 -0
  848. package/src/paraglide/messages/common_monitoring_health_database_failed.js +29 -0
  849. package/src/paraglide/messages/common_monitoring_health_database_title.js +29 -0
  850. package/src/paraglide/messages/common_monitoring_health_database_unknownerror1.js +30 -0
  851. package/src/paraglide/messages/common_monitoring_health_description.js +29 -0
  852. package/src/paraglide/messages/common_monitoring_health_history.js +29 -0
  853. package/src/paraglide/messages/common_monitoring_health_historycolumns_dblatency2.js +30 -0
  854. package/src/paraglide/messages/common_monitoring_health_historycolumns_status1.js +30 -0
  855. package/src/paraglide/messages/common_monitoring_health_historycolumns_time1.js +30 -0
  856. package/src/paraglide/messages/common_monitoring_health_historycolumns_uptime1.js +30 -0
  857. package/src/paraglide/messages/common_monitoring_health_memory_title.js +29 -0
  858. package/src/paraglide/messages/common_monitoring_health_nextcheck1.js +30 -0
  859. package/src/paraglide/messages/common_monitoring_health_operationfailed1.js +30 -0
  860. package/src/paraglide/messages/common_monitoring_health_runningtime1.js +30 -0
  861. package/src/paraglide/messages/common_monitoring_health_status_abnormal.js +29 -0
  862. package/src/paraglide/messages/common_monitoring_health_status_normal.js +29 -0
  863. package/src/paraglide/messages/common_monitoring_health_title.js +29 -0
  864. package/src/paraglide/messages/common_monitoring_healthcards_available1.js +30 -0
  865. package/src/paraglide/messages/common_monitoring_healthcards_connected1.js +30 -0
  866. package/src/paraglide/messages/common_monitoring_healthcards_cpucores2.js +30 -0
  867. package/src/paraglide/messages/common_monitoring_healthcards_database1.js +30 -0
  868. package/src/paraglide/messages/common_monitoring_healthcards_disconnected1.js +30 -0
  869. package/src/paraglide/messages/common_monitoring_healthcards_diskusage2.js +30 -0
  870. package/src/paraglide/messages/common_monitoring_healthcards_heapusage2.js +30 -0
  871. package/src/paraglide/messages/common_monitoring_healthcards_latency1.js +30 -0
  872. package/src/paraglide/messages/common_monitoring_healthcards_memoryrss4.js +30 -0
  873. package/src/paraglide/messages/common_monitoring_healthcards_runtime1.js +30 -0
  874. package/src/paraglide/messages/common_monitoring_healthcards_systemload2.js +30 -0
  875. package/src/paraglide/messages/common_monitoring_logs_clear7days1.js +30 -0
  876. package/src/paraglide/messages/common_monitoring_logs_clearfailed1.js +30 -0
  877. package/src/paraglide/messages/common_monitoring_logs_clearsuccess1.js +30 -0
  878. package/src/paraglide/messages/common_monitoring_logs_description.js +29 -0
  879. package/src/paraglide/messages/common_monitoring_logs_empty.js +29 -0
  880. package/src/paraglide/messages/common_monitoring_logs_filter_allmethods1.js +30 -0
  881. package/src/paraglide/messages/common_monitoring_logs_filter_allstatus1.js +30 -0
  882. package/src/paraglide/messages/common_monitoring_logs_filter_searchpath1.js +30 -0
  883. package/src/paraglide/messages/common_monitoring_logs_filtermonitoring1.js +30 -0
  884. package/src/paraglide/messages/common_monitoring_logs_query.js +29 -0
  885. package/src/paraglide/messages/common_monitoring_logs_title.js +29 -0
  886. package/src/paraglide/messages/common_monitoring_metrics_cleardata1.js +30 -0
  887. package/src/paraglide/messages/common_monitoring_metrics_clearfailed1.js +30 -0
  888. package/src/paraglide/messages/common_monitoring_metrics_clearsuccess1.js +30 -0
  889. package/src/paraglide/messages/common_monitoring_metrics_columns_avg.js +29 -0
  890. package/src/paraglide/messages/common_monitoring_metrics_columns_count.js +29 -0
  891. package/src/paraglide/messages/common_monitoring_metrics_columns_metricname1.js +30 -0
  892. package/src/paraglide/messages/common_monitoring_metrics_columns_time.js +29 -0
  893. package/src/paraglide/messages/common_monitoring_metrics_description.js +29 -0
  894. package/src/paraglide/messages/common_monitoring_metrics_empty.js +29 -0
  895. package/src/paraglide/messages/common_monitoring_metrics_history.js +29 -0
  896. package/src/paraglide/messages/common_monitoring_metrics_memoryusage1.js +30 -0
  897. package/src/paraglide/messages/common_monitoring_metrics_title.js +29 -0
  898. package/src/paraglide/messages/common_monitoring_nav_aiusage1.js +30 -0
  899. package/src/paraglide/messages/common_monitoring_nav_errors.js +29 -0
  900. package/src/paraglide/messages/common_monitoring_nav_health.js +29 -0
  901. package/src/paraglide/messages/common_monitoring_nav_logs.js +29 -0
  902. package/src/paraglide/messages/common_monitoring_nav_metrics.js +29 -0
  903. package/src/paraglide/messages/common_monitoring_nav_overview.js +29 -0
  904. package/src/paraglide/messages/common_monitoring_nav_sentry.js +29 -0
  905. package/src/paraglide/messages/common_monitoring_overview_description.js +29 -0
  906. package/src/paraglide/messages/common_monitoring_overview_metricssnapshot_empty1.js +30 -0
  907. package/src/paraglide/messages/common_monitoring_overview_metricssnapshot_title1.js +30 -0
  908. package/src/paraglide/messages/common_monitoring_overview_recenterrors_empty1.js +30 -0
  909. package/src/paraglide/messages/common_monitoring_overview_recenterrors_title1.js +30 -0
  910. package/src/paraglide/messages/common_monitoring_overview_requeststats_avgduration2.js +30 -0
  911. package/src/paraglide/messages/common_monitoring_overview_requeststats_errortypes2.js +30 -0
  912. package/src/paraglide/messages/common_monitoring_overview_requeststats_maxduration2.js +30 -0
  913. package/src/paraglide/messages/common_monitoring_overview_requeststats_title1.js +30 -0
  914. package/src/paraglide/messages/common_monitoring_overview_requeststats_totalrequests2.js +30 -0
  915. package/src/paraglide/messages/common_monitoring_overview_title.js +29 -0
  916. package/src/paraglide/messages/common_monitoring_sentry_config_description.js +29 -0
  917. package/src/paraglide/messages/common_monitoring_sentry_config_title.js +29 -0
  918. package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step11.js +30 -0
  919. package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step21.js +30 -0
  920. package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step31.js +30 -0
  921. package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step41.js +30 -0
  922. package/src/paraglide/messages/common_monitoring_sentry_fields_authtoken_instruction_step51.js +30 -0
  923. package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step1.js +29 -0
  924. package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step2.js +29 -0
  925. package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step3.js +29 -0
  926. package/src/paraglide/messages/common_monitoring_sentry_fields_dsn_instruction_step4.js +29 -0
  927. package/src/paraglide/messages/common_monitoring_sentry_fields_obtainmethod1.js +30 -0
  928. package/src/paraglide/messages/common_monitoring_sentry_fields_org_instruction_step1.js +29 -0
  929. package/src/paraglide/messages/common_monitoring_sentry_fields_org_instruction_step2.js +29 -0
  930. package/src/paraglide/messages/common_monitoring_sentry_fields_org_instruction_step3.js +29 -0
  931. package/src/paraglide/messages/common_monitoring_sentry_fields_org_label.js +29 -0
  932. package/src/paraglide/messages/common_monitoring_sentry_fields_project_instruction_step1.js +29 -0
  933. package/src/paraglide/messages/common_monitoring_sentry_fields_project_instruction_step2.js +29 -0
  934. package/src/paraglide/messages/common_monitoring_sentry_fields_project_instruction_step3.js +29 -0
  935. package/src/paraglide/messages/common_monitoring_sentry_fields_project_label.js +29 -0
  936. package/src/paraglide/messages/common_monitoring_sentry_loadfailed1.js +30 -0
  937. package/src/paraglide/messages/common_monitoring_sentry_opensentry1.js +30 -0
  938. package/src/paraglide/messages/common_monitoring_sentry_saveconfig1.js +30 -0
  939. package/src/paraglide/messages/common_monitoring_sentry_savefailed1.js +30 -0
  940. package/src/paraglide/messages/common_monitoring_sentry_savesuccess1.js +30 -0
  941. package/src/paraglide/messages/common_monitoring_sentry_statuscards_dsn_configured1.js +30 -0
  942. package/src/paraglide/messages/common_monitoring_sentry_statuscards_dsn_notconfigured2.js +30 -0
  943. package/src/paraglide/messages/common_monitoring_sentry_statuscards_dsn_title1.js +30 -0
  944. package/src/paraglide/messages/common_monitoring_sentry_statuscards_errors_disabled1.js +30 -0
  945. package/src/paraglide/messages/common_monitoring_sentry_statuscards_errors_enabled1.js +30 -0
  946. package/src/paraglide/messages/common_monitoring_sentry_statuscards_errors_title1.js +30 -0
  947. package/src/paraglide/messages/common_monitoring_sentry_statuscards_performance_disabled1.js +30 -0
  948. package/src/paraglide/messages/common_monitoring_sentry_statuscards_performance_enabled1.js +30 -0
  949. package/src/paraglide/messages/common_monitoring_sentry_statuscards_performance_title1.js +30 -0
  950. package/src/paraglide/messages/common_monitoring_sentry_statuscards_replay_disabled1.js +30 -0
  951. package/src/paraglide/messages/common_monitoring_sentry_statuscards_replay_enabled1.js +30 -0
  952. package/src/paraglide/messages/common_monitoring_sentry_subtitle.js +29 -0
  953. package/src/paraglide/messages/common_monitoring_sentry_title.js +29 -0
  954. package/src/paraglide/messages/common_monitoring_sentry_unsaved.js +29 -0
  955. package/src/paraglide/messages/common_monitoring_sentry_validate_empty.js +29 -0
  956. package/src/paraglide/messages/common_monitoring_sentry_validate_httpsprefix1.js +30 -0
  957. package/src/paraglide/messages/common_monitoring_sentry_validate_missingat1.js +30 -0
  958. package/src/paraglide/messages/common_monitoring_sentry_validate_missingprojectid2.js +30 -0
  959. package/src/paraglide/messages/common_monitoring_sentry_validate_notsentryio2.js +30 -0
  960. package/src/paraglide/messages/common_monitoring_sentry_validate_valid.js +29 -0
  961. package/src/paraglide/messages/common_monitoring_sentry_verify_button.js +29 -0
  962. package/src/paraglide/messages/common_monitoring_sentry_verify_description.js +29 -0
  963. package/src/paraglide/messages/common_monitoring_sentry_verify_error.js +29 -0
  964. package/src/paraglide/messages/common_monitoring_sentry_verify_note.js +29 -0
  965. package/src/paraglide/messages/common_monitoring_sentry_verify_notinitialized1.js +30 -0
  966. package/src/paraglide/messages/common_monitoring_sentry_verify_success.js +29 -0
  967. package/src/paraglide/messages/common_monitoring_sentry_verify_timeout.js +29 -0
  968. package/src/paraglide/messages/common_monitoring_sentry_verify_title.js +29 -0
  969. package/src/paraglide/messages/common_nav_aiprompts1.js +30 -0
  970. package/src/paraglide/messages/common_nav_aiproviders1.js +30 -0
  971. package/src/paraglide/messages/common_nav_apps.js +29 -0
  972. package/src/paraglide/messages/common_nav_billing_invoices.js +29 -0
  973. package/src/paraglide/messages/common_nav_billing_subscriptions.js +29 -0
  974. package/src/paraglide/messages/common_nav_billing_title.js +29 -0
  975. package/src/paraglide/messages/common_nav_components.js +29 -0
  976. package/src/paraglide/messages/common_nav_dashboard.js +29 -0
  977. package/src/paraglide/messages/common_nav_dependencies.js +29 -0
  978. package/src/paraglide/messages/common_nav_developerlogs1.js +30 -0
  979. package/src/paraglide/messages/common_nav_docs.js +29 -0
  980. package/src/paraglide/messages/common_nav_enterprise_audit.js +29 -0
  981. package/src/paraglide/messages/common_nav_enterprise_compliance.js +29 -0
  982. package/src/paraglide/messages/common_nav_enterprise_licenses.js +29 -0
  983. package/src/paraglide/messages/common_nav_enterprise_permissions.js +29 -0
  984. package/src/paraglide/messages/common_nav_enterprise_sso.js +29 -0
  985. package/src/paraglide/messages/common_nav_enterprise_title.js +29 -0
  986. package/src/paraglide/messages/common_nav_knowledgepublic_bookmarks1.js +30 -0
  987. package/src/paraglide/messages/common_nav_knowledgepublic_compliance1.js +30 -0
  988. package/src/paraglide/messages/common_nav_knowledgepublic_laws1.js +30 -0
  989. package/src/paraglide/messages/common_nav_knowledgepublic_title1.js +30 -0
  990. package/src/paraglide/messages/common_nav_market.js +29 -0
  991. package/src/paraglide/messages/common_nav_monitoring_errors.js +29 -0
  992. package/src/paraglide/messages/common_nav_monitoring_health.js +29 -0
  993. package/src/paraglide/messages/common_nav_monitoring_logs.js +29 -0
  994. package/src/paraglide/messages/common_nav_monitoring_metrics.js +29 -0
  995. package/src/paraglide/messages/common_nav_monitoring_overview.js +29 -0
  996. package/src/paraglide/messages/common_nav_monitoring_sentry.js +29 -0
  997. package/src/paraglide/messages/common_nav_monitoring_title.js +29 -0
  998. package/src/paraglide/messages/common_nav_settings.js +29 -0
  999. package/src/paraglide/messages/common_nav_users.js +29 -0
  1000. package/src/paraglide/messages/common_pagination_next.js +29 -0
  1001. package/src/paraglide/messages/common_pagination_prev.js +29 -0
  1002. package/src/paraglide/messages/common_pagination_total.js +29 -0
  1003. package/src/paraglide/messages/common_requestlogtable_columns_description2.js +30 -0
  1004. package/src/paraglide/messages/common_requestlogtable_columns_duration2.js +30 -0
  1005. package/src/paraglide/messages/common_requestlogtable_columns_method2.js +30 -0
  1006. package/src/paraglide/messages/common_requestlogtable_columns_path2.js +30 -0
  1007. package/src/paraglide/messages/common_requestlogtable_columns_status2.js +30 -0
  1008. package/src/paraglide/messages/common_requestlogtable_columns_time2.js +30 -0
  1009. package/src/paraglide/messages/common_requestlogtable_comparebenchmark3.js +30 -0
  1010. package/src/paraglide/messages/common_settings_language.js +29 -0
  1011. package/src/paraglide/messages/common_settings_languagechanged1.js +30 -0
  1012. package/src/paraglide/messages/common_settings_languagechangefailed2.js +30 -0
  1013. package/src/paraglide/messages/common_settings_languagedescription1.js +30 -0
  1014. package/src/paraglide/messages/common_settings_title.js +29 -0
  1015. package/src/paraglide/messages/common_setup_brand_subtitle.js +29 -0
  1016. package/src/paraglide/messages/common_setup_brand_title.js +29 -0
  1017. package/src/paraglide/messages/common_setup_brandfeatures_accountsecurity_desc2.js +30 -0
  1018. package/src/paraglide/messages/common_setup_brandfeatures_accountsecurity_label2.js +30 -0
  1019. package/src/paraglide/messages/common_setup_brandfeatures_datamgmt_desc2.js +30 -0
  1020. package/src/paraglide/messages/common_setup_brandfeatures_datamgmt_label2.js +30 -0
  1021. package/src/paraglide/messages/common_setup_brandfeatures_superadmin_desc2.js +30 -0
  1022. package/src/paraglide/messages/common_setup_brandfeatures_superadmin_label2.js +30 -0
  1023. package/src/paraglide/messages/common_setup_error.js +29 -0
  1024. package/src/paraglide/messages/common_setup_form_confirmpassword_label1.js +30 -0
  1025. package/src/paraglide/messages/common_setup_form_confirmpassword_placeholder1.js +30 -0
  1026. package/src/paraglide/messages/common_setup_form_email_label.js +29 -0
  1027. package/src/paraglide/messages/common_setup_form_email_placeholder.js +29 -0
  1028. package/src/paraglide/messages/common_setup_form_loading.js +29 -0
  1029. package/src/paraglide/messages/common_setup_form_password_label.js +29 -0
  1030. package/src/paraglide/messages/common_setup_form_password_placeholder.js +29 -0
  1031. package/src/paraglide/messages/common_setup_form_submit.js +29 -0
  1032. package/src/paraglide/messages/common_setup_form_subtitle.js +29 -0
  1033. package/src/paraglide/messages/common_setup_form_title.js +29 -0
  1034. package/src/paraglide/messages/common_setup_form_username_label.js +29 -0
  1035. package/src/paraglide/messages/common_setup_form_username_placeholder.js +29 -0
  1036. package/src/paraglide/messages/common_setup_success.js +29 -0
  1037. package/src/paraglide/messages/common_setup_validation_fillallfields2.js +30 -0
  1038. package/src/paraglide/messages/common_setup_validation_passwordmismatch1.js +30 -0
  1039. package/src/paraglide/messages/common_socialplatform_website1.js +30 -0
  1040. package/src/paraglide/messages/common_status_deleting.js +29 -0
  1041. package/src/paraglide/messages/common_status_empty.js +29 -0
  1042. package/src/paraglide/messages/common_status_error.js +29 -0
  1043. package/src/paraglide/messages/common_status_loading.js +29 -0
  1044. package/src/paraglide/messages/common_status_saving.js +29 -0
  1045. package/src/paraglide/messages/common_status_success.js +29 -0
  1046. package/src/paraglide/messages/common_userfilters_clearfilters2.js +30 -0
  1047. package/src/paraglide/messages/common_userfilters_role_admin6.js +30 -0
  1048. package/src/paraglide/messages/common_userfilters_role_all1.js +30 -0
  1049. package/src/paraglide/messages/common_userfilters_role_super_admin11.js +30 -0
  1050. package/src/paraglide/messages/common_userfilters_role_user5.js +30 -0
  1051. package/src/paraglide/messages/common_userfilters_roleplaceholder2.js +30 -0
  1052. package/src/paraglide/messages/common_userfilters_searchplaceholder2.js +30 -0
  1053. package/src/paraglide/messages/common_userfilters_status_active7.js +30 -0
  1054. package/src/paraglide/messages/common_userfilters_status_all1.js +30 -0
  1055. package/src/paraglide/messages/common_userfilters_status_banned7.js +30 -0
  1056. package/src/paraglide/messages/common_userfilters_status_inactive9.js +30 -0
  1057. package/src/paraglide/messages/common_userfilters_statusplaceholder2.js +30 -0
  1058. package/src/paraglide/messages/enterprise_audit_action.js +29 -0
  1059. package/src/paraglide/messages/enterprise_audit_actor.js +29 -0
  1060. package/src/paraglide/messages/enterprise_audit_empty.js +29 -0
  1061. package/src/paraglide/messages/enterprise_audit_event.js +29 -0
  1062. package/src/paraglide/messages/enterprise_audit_failure.js +29 -0
  1063. package/src/paraglide/messages/enterprise_audit_ip.js +29 -0
  1064. package/src/paraglide/messages/enterprise_audit_result.js +29 -0
  1065. package/src/paraglide/messages/enterprise_audit_subtitle.js +29 -0
  1066. package/src/paraglide/messages/enterprise_audit_success.js +29 -0
  1067. package/src/paraglide/messages/enterprise_audit_target.js +29 -0
  1068. package/src/paraglide/messages/enterprise_audit_timestamp.js +29 -0
  1069. package/src/paraglide/messages/enterprise_audit_title.js +29 -0
  1070. package/src/paraglide/messages/enterprise_audit_useragent1.js +30 -0
  1071. package/src/paraglide/messages/enterprise_compliance_certified.js +29 -0
  1072. package/src/paraglide/messages/enterprise_compliance_dataresidency1.js +30 -0
  1073. package/src/paraglide/messages/enterprise_compliance_encryption.js +29 -0
  1074. package/src/paraglide/messages/enterprise_compliance_export_actions_download.js +29 -0
  1075. package/src/paraglide/messages/enterprise_compliance_export_actions_execute.js +29 -0
  1076. package/src/paraglide/messages/enterprise_compliance_export_actions_expired.js +29 -0
  1077. package/src/paraglide/messages/enterprise_compliance_export_actions_processing.js +29 -0
  1078. package/src/paraglide/messages/enterprise_compliance_export_empty.js +29 -0
  1079. package/src/paraglide/messages/enterprise_compliance_export_scope_user.js +29 -0
  1080. package/src/paraglide/messages/enterprise_compliance_export_scope_workspace.js +29 -0
  1081. package/src/paraglide/messages/enterprise_compliance_export_status_completed.js +29 -0
  1082. package/src/paraglide/messages/enterprise_compliance_export_status_expired.js +29 -0
  1083. package/src/paraglide/messages/enterprise_compliance_export_status_failed.js +29 -0
  1084. package/src/paraglide/messages/enterprise_compliance_export_status_pending.js +29 -0
  1085. package/src/paraglide/messages/enterprise_compliance_export_status_processing.js +29 -0
  1086. package/src/paraglide/messages/enterprise_compliance_export_subtitle.js +29 -0
  1087. package/src/paraglide/messages/enterprise_compliance_export_table_actions.js +29 -0
  1088. package/src/paraglide/messages/enterprise_compliance_export_table_createdat1.js +30 -0
  1089. package/src/paraglide/messages/enterprise_compliance_export_table_error.js +29 -0
  1090. package/src/paraglide/messages/enterprise_compliance_export_table_requester.js +29 -0
  1091. package/src/paraglide/messages/enterprise_compliance_export_table_scope.js +29 -0
  1092. package/src/paraglide/messages/enterprise_compliance_export_table_status.js +29 -0
  1093. package/src/paraglide/messages/enterprise_compliance_export_table_target.js +29 -0
  1094. package/src/paraglide/messages/enterprise_compliance_export_table_type.js +29 -0
  1095. package/src/paraglide/messages/enterprise_compliance_export_title.js +29 -0
  1096. package/src/paraglide/messages/enterprise_compliance_export_toast_executed.js +29 -0
  1097. package/src/paraglide/messages/enterprise_compliance_export_toast_executefailed1.js +30 -0
  1098. package/src/paraglide/messages/enterprise_compliance_export_type_delete.js +29 -0
  1099. package/src/paraglide/messages/enterprise_compliance_export_type_export.js +29 -0
  1100. package/src/paraglide/messages/enterprise_compliance_lastreview1.js +30 -0
  1101. package/src/paraglide/messages/enterprise_compliance_nextreview1.js +30 -0
  1102. package/src/paraglide/messages/enterprise_compliance_pendingreview1.js +30 -0
  1103. package/src/paraglide/messages/enterprise_compliance_policy.js +29 -0
  1104. package/src/paraglide/messages/enterprise_compliance_retentiondays1.js +30 -0
  1105. package/src/paraglide/messages/enterprise_compliance_status.js +29 -0
  1106. package/src/paraglide/messages/enterprise_compliance_title.js +29 -0
  1107. package/src/paraglide/messages/enterprise_issue_alertdescription1.js +30 -0
  1108. package/src/paraglide/messages/enterprise_issue_alerttitle1.js +30 -0
  1109. package/src/paraglide/messages/enterprise_issue_customeremail1.js +30 -0
  1110. package/src/paraglide/messages/enterprise_issue_customerid1.js +30 -0
  1111. package/src/paraglide/messages/enterprise_issue_customername1.js +30 -0
  1112. package/src/paraglide/messages/enterprise_issue_description.js +29 -0
  1113. package/src/paraglide/messages/enterprise_issue_enterprisetitle1.js +30 -0
  1114. package/src/paraglide/messages/enterprise_issue_expiresat1.js +30 -0
  1115. package/src/paraglide/messages/enterprise_issue_expiresathint2.js +30 -0
  1116. package/src/paraglide/messages/enterprise_issue_features.js +29 -0
  1117. package/src/paraglide/messages/enterprise_issue_keyoncedescription2.js +30 -0
  1118. package/src/paraglide/messages/enterprise_issue_keyoncetitle2.js +30 -0
  1119. package/src/paraglide/messages/enterprise_issue_plan.js +29 -0
  1120. package/src/paraglide/messages/enterprise_issue_planhint1.js +30 -0
  1121. package/src/paraglide/messages/enterprise_issue_seats.js +29 -0
  1122. package/src/paraglide/messages/enterprise_issue_submit.js +29 -0
  1123. package/src/paraglide/messages/enterprise_issue_successtitle1.js +30 -0
  1124. package/src/paraglide/messages/enterprise_issue_title.js +29 -0
  1125. package/src/paraglide/messages/enterprise_license_action.js +29 -0
  1126. package/src/paraglide/messages/enterprise_license_activatedat1.js +30 -0
  1127. package/src/paraglide/messages/enterprise_license_activationcount1.js +30 -0
  1128. package/src/paraglide/messages/enterprise_license_activationstitle1.js +30 -0
  1129. package/src/paraglide/messages/enterprise_license_active.js +29 -0
  1130. package/src/paraglide/messages/enterprise_license_basicinfo1.js +30 -0
  1131. package/src/paraglide/messages/enterprise_license_count.js +29 -0
  1132. package/src/paraglide/messages/enterprise_license_customer.js +29 -0
  1133. package/src/paraglide/messages/enterprise_license_customerid1.js +30 -0
  1134. package/src/paraglide/messages/enterprise_license_detail.js +29 -0
  1135. package/src/paraglide/messages/enterprise_license_detailtitle1.js +30 -0
  1136. package/src/paraglide/messages/enterprise_license_email.js +29 -0
  1137. package/src/paraglide/messages/enterprise_license_empty.js +29 -0
  1138. package/src/paraglide/messages/enterprise_license_expired.js +29 -0
  1139. package/src/paraglide/messages/enterprise_license_expiresat1.js +30 -0
  1140. package/src/paraglide/messages/enterprise_license_expiresatlabel2.js +30 -0
  1141. package/src/paraglide/messages/enterprise_license_featureauthorization1.js +30 -0
  1142. package/src/paraglide/messages/enterprise_license_features.js +29 -0
  1143. package/src/paraglide/messages/enterprise_license_fingerprint.js +29 -0
  1144. package/src/paraglide/messages/enterprise_license_graceperiod1.js +30 -0
  1145. package/src/paraglide/messages/enterprise_license_instance.js +29 -0
  1146. package/src/paraglide/messages/enterprise_license_issue.js +29 -0
  1147. package/src/paraglide/messages/enterprise_license_issuedat1.js +30 -0
  1148. package/src/paraglide/messages/enterprise_license_issuer.js +29 -0
  1149. package/src/paraglide/messages/enterprise_license_key.js +29 -0
  1150. package/src/paraglide/messages/enterprise_license_keytitle1.js +30 -0
  1151. package/src/paraglide/messages/enterprise_license_lastactive1.js +30 -0
  1152. package/src/paraglide/messages/enterprise_license_managementtitle1.js +30 -0
  1153. package/src/paraglide/messages/enterprise_license_maxusers1.js +30 -0
  1154. package/src/paraglide/messages/enterprise_license_neveractive1.js +30 -0
  1155. package/src/paraglide/messages/enterprise_license_nofeatureauthorization2.js +30 -0
  1156. package/src/paraglide/messages/enterprise_license_notyet1.js +30 -0
  1157. package/src/paraglide/messages/enterprise_license_pendingactivation1.js +30 -0
  1158. package/src/paraglide/messages/enterprise_license_permanent.js +29 -0
  1159. package/src/paraglide/messages/enterprise_license_plan.js +29 -0
  1160. package/src/paraglide/messages/enterprise_license_revoke.js +29 -0
  1161. package/src/paraglide/messages/enterprise_license_revoked.js +29 -0
  1162. package/src/paraglide/messages/enterprise_license_revokedsuccess1.js +30 -0
  1163. package/src/paraglide/messages/enterprise_license_revokedtoast1.js +30 -0
  1164. package/src/paraglide/messages/enterprise_license_seats.js +29 -0
  1165. package/src/paraglide/messages/enterprise_license_status.js +29 -0
  1166. package/src/paraglide/messages/enterprise_license_title.js +29 -0
  1167. package/src/paraglide/messages/enterprise_license_usedusers1.js +30 -0
  1168. package/src/paraglide/messages/enterprise_page_description.js +29 -0
  1169. package/src/paraglide/messages/enterprise_page_title.js +29 -0
  1170. package/src/paraglide/messages/enterprise_permissions_action_createrole1.js +30 -0
  1171. package/src/paraglide/messages/enterprise_permissions_action_delete.js +29 -0
  1172. package/src/paraglide/messages/enterprise_permissions_action_notavailable1.js +30 -0
  1173. package/src/paraglide/messages/enterprise_permissions_action_viewassignments1.js +30 -0
  1174. package/src/paraglide/messages/enterprise_permissions_assign.js +29 -0
  1175. package/src/paraglide/messages/enterprise_permissions_assigndesc1.js +30 -0
  1176. package/src/paraglide/messages/enterprise_permissions_assignuser1.js +30 -0
  1177. package/src/paraglide/messages/enterprise_permissions_createrole1.js +30 -0
  1178. package/src/paraglide/messages/enterprise_permissions_createroledesc2.js +30 -0
  1179. package/src/paraglide/messages/enterprise_permissions_custom.js +29 -0
  1180. package/src/paraglide/messages/enterprise_permissions_dialog_cancel.js +29 -0
  1181. package/src/paraglide/messages/enterprise_permissions_dialog_close.js +29 -0
  1182. package/src/paraglide/messages/enterprise_permissions_dialog_create.js +29 -0
  1183. package/src/paraglide/messages/enterprise_permissions_empty.js +29 -0
  1184. package/src/paraglide/messages/enterprise_permissions_grant.js +29 -0
  1185. package/src/paraglide/messages/enterprise_permissions_inherited.js +29 -0
  1186. package/src/paraglide/messages/enterprise_permissions_level_admin.js +29 -0
  1187. package/src/paraglide/messages/enterprise_permissions_level_none.js +29 -0
  1188. package/src/paraglide/messages/enterprise_permissions_level_read.js +29 -0
  1189. package/src/paraglide/messages/enterprise_permissions_level_write.js +29 -0
  1190. package/src/paraglide/messages/enterprise_permissions_noassignments1.js +30 -0
  1191. package/src/paraglide/messages/enterprise_permissions_permissionsmatrix1.js +30 -0
  1192. package/src/paraglide/messages/enterprise_permissions_revoke.js +29 -0
  1193. package/src/paraglide/messages/enterprise_permissions_role.js +29 -0
  1194. package/src/paraglide/messages/enterprise_permissions_rolename1.js +30 -0
  1195. package/src/paraglide/messages/enterprise_permissions_rolenameplaceholder2.js +30 -0
  1196. package/src/paraglide/messages/enterprise_permissions_scope.js +29 -0
  1197. package/src/paraglide/messages/enterprise_permissions_searchuserplaceholder2.js +30 -0
  1198. package/src/paraglide/messages/enterprise_permissions_subtitle.js +29 -0
  1199. package/src/paraglide/messages/enterprise_permissions_table_actions.js +29 -0
  1200. package/src/paraglide/messages/enterprise_permissions_table_members.js +29 -0
  1201. package/src/paraglide/messages/enterprise_permissions_table_permissions.js +29 -0
  1202. package/src/paraglide/messages/enterprise_permissions_table_role.js +29 -0
  1203. package/src/paraglide/messages/enterprise_permissions_table_type.js +29 -0
  1204. package/src/paraglide/messages/enterprise_permissions_title.js +29 -0
  1205. package/src/paraglide/messages/enterprise_permissions_toast_assigned.js +29 -0
  1206. package/src/paraglide/messages/enterprise_permissions_toast_created.js +29 -0
  1207. package/src/paraglide/messages/enterprise_permissions_toast_deleted.js +29 -0
  1208. package/src/paraglide/messages/enterprise_permissions_toast_namerequired1.js +30 -0
  1209. package/src/paraglide/messages/enterprise_permissions_toast_seeddone1.js +30 -0
  1210. package/src/paraglide/messages/enterprise_permissions_toast_systemrole1.js +30 -0
  1211. package/src/paraglide/messages/enterprise_permissions_toast_unassigned.js +29 -0
  1212. package/src/paraglide/messages/enterprise_permissions_type_custom.js +29 -0
  1213. package/src/paraglide/messages/enterprise_permissions_type_system.js +29 -0
  1214. package/src/paraglide/messages/enterprise_permissions_unassign.js +29 -0
  1215. package/src/paraglide/messages/enterprise_permissions_workspacelabel1.js +30 -0
  1216. package/src/paraglide/messages/enterprise_sso_actiondelete1.js +30 -0
  1217. package/src/paraglide/messages/enterprise_sso_actiondisable1.js +30 -0
  1218. package/src/paraglide/messages/enterprise_sso_actionenable1.js +30 -0
  1219. package/src/paraglide/messages/enterprise_sso_actions.js +29 -0
  1220. package/src/paraglide/messages/enterprise_sso_disabled.js +29 -0
  1221. package/src/paraglide/messages/enterprise_sso_domain.js +29 -0
  1222. package/src/paraglide/messages/enterprise_sso_empty.js +29 -0
  1223. package/src/paraglide/messages/enterprise_sso_enabled.js +29 -0
  1224. package/src/paraglide/messages/enterprise_sso_entityid1.js +30 -0
  1225. package/src/paraglide/messages/enterprise_sso_justintime2.js +30 -0
  1226. package/src/paraglide/messages/enterprise_sso_mappings.js +29 -0
  1227. package/src/paraglide/messages/enterprise_sso_metadataurl1.js +30 -0
  1228. package/src/paraglide/messages/enterprise_sso_provider.js +29 -0
  1229. package/src/paraglide/messages/enterprise_sso_statuslabel1.js +30 -0
  1230. package/src/paraglide/messages/enterprise_sso_subtitle.js +29 -0
  1231. package/src/paraglide/messages/enterprise_sso_syncenabled1.js +30 -0
  1232. package/src/paraglide/messages/enterprise_sso_title.js +29 -0
  1233. package/src/paraglide/messages/enterprise_sso_toastdeleted1.js +30 -0
  1234. package/src/paraglide/messages/enterprise_sso_toastdisabled1.js +30 -0
  1235. package/src/paraglide/messages/enterprise_sso_toastenabled1.js +30 -0
  1236. package/src/paraglide/messages/enterprise_sso_type.js +29 -0
  1237. package/src/paraglide/messages/enterprise_sso_workspace.js +29 -0
  1238. package/src/paraglide/messages/package.json +4 -0
  1239. package/src/paraglide/messages.js +4 -0
  1240. package/src/paraglide/registry.js +46 -0
  1241. package/src/paraglide/runtime.js +2311 -0
  1242. package/src/paraglide/server.js +294 -0
  1243. package/src/routeTree.gen.ts +101 -0
  1244. package/src/routes/__root.tsx +2 -2
  1245. package/src/{components/ui/sonner.tsx → routes/_nav/ai-memory/route.lazy.tsx} +24 -16
  1246. package/src/routes/_nav/ai-memory/route.tsx +31 -0
  1247. package/src/routes/_nav/ai-prompts/$key/route.lazy.tsx +32 -0
  1248. package/src/routes/_nav/ai-prompts/$key/route.tsx +37 -0
  1249. package/src/routes/_nav/ai-prompts/index/route.lazy.tsx +47 -0
  1250. package/src/routes/_nav/ai-prompts/route.lazy.tsx +26 -0
  1251. package/src/routes/_nav/ai-prompts/route.tsx +31 -0
  1252. package/src/routes/_nav/compliance/route.lazy.tsx +2 -4
  1253. package/src/routes/_nav/components/route.lazy.tsx +1 -1
  1254. package/src/routes/_nav/knowledge-public/bookmarks/route.lazy.tsx +1 -1
  1255. package/src/routes/_nav/knowledge-public/compliance/route.lazy.tsx +1 -1
  1256. package/src/routes/_nav/knowledge-public/legal/route.lazy.tsx +1 -1
  1257. package/src/routes/_nav/licenses/$licenseId/route.lazy.tsx +1 -1
  1258. package/src/routes/_nav/monitoring/ai-usage/route.lazy.tsx +10 -1
  1259. package/src/routes/_nav/monitoring/errors/route.lazy.tsx +1 -1
  1260. package/src/routes/_nav/monitoring/health/route.lazy.tsx +1 -1
  1261. package/src/routes/_nav/monitoring/logs/route.lazy.tsx +1 -1
  1262. package/src/routes/_nav/monitoring/metrics/route.lazy.tsx +1 -1
  1263. package/src/routes/_nav/monitoring/sentry/route.lazy.tsx +1 -1
  1264. package/src/routes/_nav/permissions/route.lazy.tsx +2 -2
  1265. package/src/routes/_nav/sso/route.lazy.tsx +1 -1
  1266. package/src/routes/_nav/users/$userId/route.lazy.tsx +3 -3
  1267. package/src/routes/setup/route.lazy.tsx +1 -1
  1268. package/src/server/__tests__/prompt-defaults.test.ts +139 -0
  1269. package/src/server/admin-ai-usage.ts +22 -4
  1270. package/src/server/ai-memory/store.ts +103 -0
  1271. package/src/server/serverFns/ai-memory/clear.ts +31 -0
  1272. package/src/server/serverFns/ai-memory/delete.ts +31 -0
  1273. package/src/server/serverFns/ai-memory/list-users.ts +40 -0
  1274. package/src/server/serverFns/ai-memory/list.ts +54 -0
  1275. package/src/server/serverFns/ai-prompts/activate.ts +53 -0
  1276. package/src/server/serverFns/ai-prompts/get.ts +74 -0
  1277. package/src/server/serverFns/ai-prompts/list.ts +55 -0
  1278. package/src/server/serverFns/ai-prompts/preview.ts +66 -0
  1279. package/src/server/serverFns/ai-prompts/prompt-defaults.ts +63 -0
  1280. package/src/server/serverFns/ai-prompts/prompt-schemas.ts +47 -0
  1281. package/src/server/serverFns/ai-prompts/rollback.ts +86 -0
  1282. package/src/server/serverFns/ai-prompts/save.ts +129 -0
  1283. package/src/server/serverFns/ai-provider/seed-from-seed.ts +64 -0
  1284. package/src/styles/globals.css +92 -77
  1285. package/src/components/layout/sidebar-02/logo.tsx +0 -40
  1286. package/src/components/layout/sidebar-02/team-switcher.tsx +0 -106
  1287. package/src/components/providers/theme-toggle.tsx +0 -59
@@ -0,0 +1,2311 @@
1
+ /* eslint-disable */
2
+
3
+ /** @type {any} */
4
+ const URLPattern = {}
5
+
6
+ /**
7
+ * The project's base locale.
8
+ *
9
+ * @example
10
+ * if (locale === baseLocale) {
11
+ * // do something
12
+ * }
13
+ */
14
+ export const baseLocale = "zh";
15
+ /**
16
+ * The project's locales that have been specified in the settings.
17
+ *
18
+ * @example
19
+ * if (locales.includes(userSelectedLocale) === false) {
20
+ * throw new Error('Locale is not available');
21
+ * }
22
+ */
23
+ export const locales = /** @type {const} */ (["zh","en"]);
24
+ /** @type {string} */
25
+ export const cookieName = "PARAGLIDE_LOCALE";
26
+ /** @type {number} */
27
+ export const cookieMaxAge = 34560000;
28
+ /** @type {string} */
29
+ export const cookieDomain = "";
30
+ /** @type {string} */
31
+ export const localStorageKey = "PARAGLIDE_LOCALE";
32
+ /**
33
+ * @type {Array<"cookie" | "baseLocale" | "globalVariable" | "url" | "preferredLanguage" | "localStorage" | `custom-${string}`>}
34
+ */
35
+ export const strategy = [
36
+ "cookie",
37
+ "globalVariable",
38
+ "baseLocale"
39
+ ];
40
+ /**
41
+ * Route-level strategy overrides.
42
+ *
43
+ * `match` uses URLPattern syntax.
44
+ *
45
+ * @type {Array<{
46
+ * match: string;
47
+ * strategy?: Array<"cookie" | "baseLocale" | "globalVariable" | "url" | "preferredLanguage" | "localStorage" | `custom-${string}`>;
48
+ * exclude?: boolean;
49
+ * }>}
50
+ */
51
+ export const routeStrategies = [];
52
+ /**
53
+ * The used URL patterns.
54
+ *
55
+ * @type {Array<{ pattern: string, localized: Array<[Locale, string]> }>}
56
+ */
57
+ export const urlPatterns = [
58
+ {
59
+ "pattern": ":protocol://:domain(.*)::port?/:path(.*)?",
60
+ "localized": [
61
+ [
62
+ "en",
63
+ ":protocol://:domain(.*)::port?/en/:path(.*)?"
64
+ ],
65
+ [
66
+ "zh",
67
+ ":protocol://:domain(.*)::port?/:path(.*)?"
68
+ ]
69
+ ]
70
+ }
71
+ ];
72
+ /**
73
+ * Controls trailing slash canonicalization for localized URLs.
74
+ *
75
+ * @type {"always" | "never" | undefined}
76
+ */
77
+ export const trailingSlash = undefined;
78
+ /**
79
+ * @typedef {{
80
+ * getStore(): {
81
+ * locale?: Locale,
82
+ * origin?: string,
83
+ * messageCalls?: Set<string>
84
+ * } | undefined,
85
+ * run: (store: { locale?: Locale, origin?: string, messageCalls?: Set<string>},
86
+ * cb: any) => any
87
+ * }} ParaglideAsyncLocalStorage
88
+ */
89
+ /**
90
+ * Server side async local storage that is set by `serverMiddleware()`.
91
+ *
92
+ * The variable is used to retrieve the locale and origin in a server-side
93
+ * rendering context without effecting other requests.
94
+ *
95
+ * @type {ParaglideAsyncLocalStorage | undefined}
96
+ */
97
+ export let serverAsyncLocalStorage = undefined;
98
+ /**
99
+ * Returns the current server-side async local storage instance.
100
+ *
101
+ * Accessing the mutable value through a function keeps it observable when
102
+ * module interceptors wrap exported bindings and snapshot their initial value.
103
+ *
104
+ * @returns {ParaglideAsyncLocalStorage | undefined}
105
+ */
106
+ export function getServerAsyncLocalStorage() {
107
+ return serverAsyncLocalStorage;
108
+ }
109
+ export const disableAsyncLocalStorage = false;
110
+ export const experimentalMiddlewareLocaleSplitting = false;
111
+ export const isServer = typeof window === 'undefined';
112
+ /** @type {Locale | undefined} */
113
+ export const experimentalStaticLocale = undefined;
114
+ /**
115
+ * Sets the server side async local storage.
116
+ *
117
+ * The function is needed because the `runtime.js` file
118
+ * must define the `serverAsyncLocalStorage` variable to
119
+ * avoid a circular import between `runtime.js` and
120
+ * `server.js` files.
121
+ *
122
+ * @param {ParaglideAsyncLocalStorage | undefined} value
123
+ */
124
+ export function overwriteServerAsyncLocalStorage(value) {
125
+ serverAsyncLocalStorage = value;
126
+ }
127
+ const TREE_SHAKE_COOKIE_STRATEGY_USED = true;
128
+ const TREE_SHAKE_URL_STRATEGY_USED = false;
129
+ const TREE_SHAKE_GLOBAL_VARIABLE_STRATEGY_USED = true;
130
+ const TREE_SHAKE_PREFERRED_LANGUAGE_STRATEGY_USED = false;
131
+ const TREE_SHAKE_DEFAULT_URL_PATTERN_USED = true;
132
+ const TREE_SHAKE_LOCAL_STORAGE_STRATEGY_USED = false;
133
+
134
+ /** @type {any} */ (globalThis).__paraglide =
135
+ /** @type {any} */ (globalThis).__paraglide ?? {};
136
+ /** @type {any} */ (globalThis).__paraglide.ssr =
137
+ /** @type {any} */ (globalThis).__paraglide.ssr ?? {};
138
+
139
+ /**
140
+ * This is a fallback to get started with a custom
141
+ * strategy and avoid type errors.
142
+ *
143
+ * The implementation is overwritten
144
+ * by `overwriteGetLocale()` and `defineSetLocale()`.
145
+ *
146
+ * @type {Locale | undefined}
147
+ */
148
+ let _locale;
149
+ let localeInitiallySet = false;
150
+ /**
151
+ * Get the current locale.
152
+ *
153
+ * The locale is resolved using your configured strategies (URL, cookie, localStorage, etc.)
154
+ * in the order they are defined. In SSR contexts, the locale is retrieved from AsyncLocalStorage
155
+ * which is set by the `paraglideMiddleware()`.
156
+ *
157
+ * @see https://paraglidejs.com/strategy - Configure locale detection strategies
158
+ *
159
+ * @example
160
+ * if (getLocale() === 'de') {
161
+ * console.log('Germany 🇩🇪');
162
+ * } else if (getLocale() === 'nl') {
163
+ * console.log('Netherlands 🇳🇱');
164
+ * }
165
+ *
166
+ * @returns {Locale} The current locale.
167
+ */
168
+ export let getLocale = () => {
169
+ if (experimentalStaticLocale !== undefined) {
170
+ return experimentalStaticLocale;
171
+ }
172
+ // if running in a server-side rendering context
173
+ // retrieve the locale from the async local storage
174
+ if (serverAsyncLocalStorage) {
175
+ const locale = serverAsyncLocalStorage?.getStore()?.locale;
176
+ if (locale) {
177
+ return locale;
178
+ }
179
+ }
180
+ let strategyToUse = strategy;
181
+ if (!isServer && typeof window !== "undefined" && window.location?.href) {
182
+ strategyToUse = getStrategyForUrl(window.location.href);
183
+ }
184
+ const resolved = resolveLocaleWithStrategies(strategyToUse, typeof window !== "undefined" ? window.location?.href : undefined);
185
+ if (resolved) {
186
+ if (!localeInitiallySet) {
187
+ _locale = resolved;
188
+ // https://github.com/opral/inlang-paraglide-js/issues/455
189
+ localeInitiallySet = true;
190
+ setLocale(resolved, { reload: false });
191
+ }
192
+ return resolved;
193
+ }
194
+ throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found");
195
+ };
196
+ /**
197
+ * Resolve locale for a given URL using route-aware strategies.
198
+ *
199
+ * @param {string | URL} url
200
+ * @returns {Locale}
201
+ */
202
+ export function getLocaleForUrl(url) {
203
+ if (experimentalStaticLocale !== undefined) {
204
+ return experimentalStaticLocale;
205
+ }
206
+ const strategyToUse = getStrategyForUrl(url);
207
+ const resolved = resolveLocaleWithStrategies(strategyToUse, typeof url === "string" ? url : url.href);
208
+ if (resolved) {
209
+ return resolved;
210
+ }
211
+ throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found");
212
+ }
213
+ /**
214
+ * @param {typeof strategy} strategyToUse
215
+ * @param {string | undefined} urlForUrlStrategy
216
+ * @returns {Locale | undefined}
217
+ */
218
+ function resolveLocaleWithStrategies(strategyToUse, urlForUrlStrategy) {
219
+ /** @type {string | undefined} */
220
+ let locale;
221
+ for (const strat of strategyToUse) {
222
+ if (TREE_SHAKE_COOKIE_STRATEGY_USED && strat === "cookie") {
223
+ locale = extractLocaleFromCookie();
224
+ }
225
+ else if (strat === "baseLocale") {
226
+ locale = baseLocale;
227
+ }
228
+ else if (TREE_SHAKE_URL_STRATEGY_USED &&
229
+ strat === "url" &&
230
+ !isServer &&
231
+ typeof urlForUrlStrategy === "string") {
232
+ locale = extractLocaleFromUrl(urlForUrlStrategy);
233
+ }
234
+ else if (TREE_SHAKE_GLOBAL_VARIABLE_STRATEGY_USED &&
235
+ strat === "globalVariable" &&
236
+ _locale !== undefined) {
237
+ locale = _locale;
238
+ }
239
+ else if (TREE_SHAKE_PREFERRED_LANGUAGE_STRATEGY_USED &&
240
+ strat === "preferredLanguage" &&
241
+ !isServer) {
242
+ locale = extractLocaleFromNavigator();
243
+ }
244
+ else if (TREE_SHAKE_LOCAL_STORAGE_STRATEGY_USED &&
245
+ strat === "localStorage" &&
246
+ !isServer) {
247
+ locale = localStorage.getItem(localStorageKey) ?? undefined;
248
+ }
249
+ else if (isCustomStrategy(strat) && customClientStrategies.has(strat)) {
250
+ const handler = customClientStrategies.get(strat);
251
+ if (handler) {
252
+ const result = handler.getLocale();
253
+ // Handle both sync and async results - skip async in sync getLocale
254
+ if (result instanceof Promise) {
255
+ // Can't await in sync function, skip async strategies
256
+ continue;
257
+ }
258
+ if (result !== undefined) {
259
+ return assertIsLocale(result);
260
+ }
261
+ }
262
+ }
263
+ const matchedLocale = toLocale(locale);
264
+ if (matchedLocale) {
265
+ return matchedLocale;
266
+ }
267
+ }
268
+ return undefined;
269
+ }
270
+ /**
271
+ * Overwrite the `getLocale()` function.
272
+ *
273
+ * Use this function to overwrite how the locale is resolved. This is useful
274
+ * for custom locale resolution or advanced use cases like SSG with concurrent rendering.
275
+ *
276
+ * @see https://paraglidejs.com/strategy
277
+ *
278
+ * @example
279
+ * overwriteGetLocale(() => {
280
+ * return Cookies.get('locale') ?? baseLocale
281
+ * });
282
+ *
283
+ * @param {() => Locale} fn - The new implementation for `getLocale()`.
284
+ */
285
+ export const overwriteGetLocale = (fn) => {
286
+ getLocale = fn;
287
+ };
288
+
289
+ const rtlLanguages = new Set([
290
+ "ar",
291
+ "dv",
292
+ "fa",
293
+ "he",
294
+ "ks",
295
+ "ku",
296
+ "ps",
297
+ "sd",
298
+ "ug",
299
+ "ur",
300
+ "yi",
301
+ ]);
302
+ /**
303
+ * Get writing direction for a locale.
304
+ *
305
+ * Uses `Intl.Locale` text info when available and falls back to a
306
+ * language-based RTL check for runtimes without `getTextInfo()`.
307
+ *
308
+ * @example
309
+ * getTextDirection(); // "ltr" or "rtl" for current locale
310
+ * getTextDirection("ar"); // "rtl"
311
+ * getTextDirection("en"); // "ltr"
312
+ *
313
+ * @param {string} [locale] - Target locale. If not provided, uses `getLocale()`
314
+ * @returns {"ltr" | "rtl"}
315
+ */
316
+ export function getTextDirection(locale = getLocale()) {
317
+ try {
318
+ const intlLocale = /** @type {Intl.Locale & {
319
+ getTextInfo?: () => { direction?: string };
320
+ textInfo?: { direction?: string };
321
+ }} */ (new Intl.Locale(locale));
322
+ const direction = intlLocale.getTextInfo?.().direction ?? intlLocale.textInfo?.direction;
323
+ if (direction === "ltr" || direction === "rtl") {
324
+ return direction;
325
+ }
326
+ }
327
+ catch {
328
+ // Ignore Intl.Locale parsing/runtime errors and use fallback below.
329
+ }
330
+ const language = locale.split("-")[0]?.toLowerCase();
331
+ return rtlLanguages.has(language ?? "") ? "rtl" : "ltr";
332
+ }
333
+
334
+ /**
335
+ * Navigates to the localized URL, or reloads the current page
336
+ *
337
+ * @param {string} [newLocation] The new location
338
+ */
339
+ const navigateOrReload = (newLocation) => {
340
+ if (newLocation) {
341
+ // reload the page by navigating to the new url
342
+ window.location.href = newLocation;
343
+ }
344
+ else {
345
+ // reload the page to reflect the new locale
346
+ window.location.reload();
347
+ }
348
+ };
349
+ /**
350
+ * @typedef {(newLocale: Locale, options?: { reload?: boolean }) => void | Promise<void>} SetLocaleFn
351
+ */
352
+ /**
353
+ * Set the locale.
354
+ *
355
+ * Updates the locale using your configured strategies (cookie, localStorage, URL, etc.).
356
+ * By default, this navigates the client to the localized URL or reloads the current
357
+ * document to reflect the new locale. `reload: false` is a narrow browser-only escape
358
+ * hatch for a fully client-rendered, non-URL-routed surface that owns its reactive
359
+ * updates and document state. It does not re-render the UI or update the document.
360
+ * Do not use it for normal locale pickers, URL-routed pages, or switching an SSR,
361
+ * SSG, or hydrated document. It is incompatible with per-locale builds.
362
+ *
363
+ * If any custom strategy's `setLocale` function is async, then this function
364
+ * will become async as well.
365
+ *
366
+ * @see https://paraglidejs.com/strategy
367
+ *
368
+ * @example
369
+ * setLocale('en');
370
+ *
371
+ * @example
372
+ * setLocale('en', { reload: false });
373
+ *
374
+ * @type {SetLocaleFn}
375
+ */
376
+ export let setLocale = (newLocale, options) => {
377
+ const optionsWithDefaults = {
378
+ reload: true,
379
+ ...options,
380
+ };
381
+ if (experimentalStaticLocale !== undefined &&
382
+ newLocale !== experimentalStaticLocale &&
383
+ optionsWithDefaults.reload === false) {
384
+ console.warn(`Paraglide: setLocale(${JSON.stringify(newLocale)}, { reload: false }) cannot switch away from the statically built locale ${JSON.stringify(experimentalStaticLocale)}. A document navigation is required; reload has been forced to true.`);
385
+ optionsWithDefaults.reload = true;
386
+ }
387
+ // locale is already set
388
+ // https://github.com/opral/inlang-paraglide-js/issues/430
389
+ /** @type {Locale | undefined} */
390
+ let currentLocale;
391
+ try {
392
+ currentLocale = getLocale();
393
+ }
394
+ catch {
395
+ // do nothing, no locale has been set yet.
396
+ }
397
+ /** @type {Array<Promise<void>>} */
398
+ const customSetLocalePromises = [];
399
+ /** @type {string | undefined} */
400
+ let newLocation = undefined;
401
+ let strategyToUse = strategy;
402
+ if (!isServer && typeof window !== "undefined" && window.location?.href) {
403
+ strategyToUse = getStrategyForUrl(window.location.href);
404
+ }
405
+ for (const strat of strategyToUse) {
406
+ if (TREE_SHAKE_GLOBAL_VARIABLE_STRATEGY_USED &&
407
+ strat === "globalVariable") {
408
+ // a default for a custom strategy to get started quickly
409
+ // is likely overwritten by `defineSetLocale()`
410
+ _locale = newLocale;
411
+ }
412
+ else if (TREE_SHAKE_COOKIE_STRATEGY_USED && strat === "cookie") {
413
+ if (isServer ||
414
+ typeof document === "undefined" ||
415
+ typeof window === "undefined") {
416
+ continue;
417
+ }
418
+ // set the cookie
419
+ const cookieString = `${cookieName}=${newLocale}; path=/; max-age=${cookieMaxAge}`;
420
+ document.cookie = cookieDomain
421
+ ? `${cookieString}; domain=${cookieDomain}`
422
+ : cookieString;
423
+ clearLocaleCookieCache();
424
+ }
425
+ else if (strat === "baseLocale") {
426
+ // nothing to be set here. baseLocale is only a fallback
427
+ continue;
428
+ }
429
+ else if (TREE_SHAKE_URL_STRATEGY_USED &&
430
+ strat === "url" &&
431
+ typeof window !== "undefined") {
432
+ // route to the new url
433
+ //
434
+ // this triggers a page reload but a user rarely
435
+ // switches locales, so this should be fine.
436
+ //
437
+ // if the behavior is not desired, the implementation
438
+ // can be overwritten by `defineSetLocale()` to avoid
439
+ // a full page reload.
440
+ newLocation = localizeUrl(window.location.href, {
441
+ locale: newLocale,
442
+ }).href;
443
+ }
444
+ else if (TREE_SHAKE_LOCAL_STORAGE_STRATEGY_USED &&
445
+ strat === "localStorage" &&
446
+ typeof window !== "undefined") {
447
+ // set the localStorage
448
+ localStorage.setItem(localStorageKey, newLocale);
449
+ }
450
+ else if (isCustomStrategy(strat) && customClientStrategies.has(strat)) {
451
+ const handler = customClientStrategies.get(strat);
452
+ if (handler) {
453
+ let result = handler.setLocale(newLocale);
454
+ // Handle async setLocale
455
+ if (result instanceof Promise) {
456
+ result = result.catch((error) => {
457
+ throw new Error(`Custom strategy "${strat}" setLocale failed.`, {
458
+ cause: error,
459
+ });
460
+ });
461
+ customSetLocalePromises.push(result);
462
+ }
463
+ }
464
+ }
465
+ }
466
+ const runReload = () => {
467
+ if (!isServer &&
468
+ optionsWithDefaults.reload &&
469
+ window.location &&
470
+ newLocale !== currentLocale) {
471
+ navigateOrReload(newLocation);
472
+ }
473
+ };
474
+ if (customSetLocalePromises.length) {
475
+ return Promise.all(customSetLocalePromises).then(() => {
476
+ runReload();
477
+ });
478
+ }
479
+ runReload();
480
+ return;
481
+ };
482
+ /**
483
+ * Overwrite the `setLocale()` function.
484
+ *
485
+ * Use this function to overwrite how the locale is set. For example,
486
+ * modify a cookie, env variable, or a user's preference.
487
+ *
488
+ * @example
489
+ * overwriteSetLocale((newLocale) => {
490
+ * // set the locale in a cookie
491
+ * return Cookies.set('locale', newLocale)
492
+ * });
493
+ *
494
+ * @param {SetLocaleFn} fn
495
+ */
496
+ export const overwriteSetLocale = (fn) => {
497
+ setLocale = fn;
498
+ };
499
+
500
+ /**
501
+ * The origin of the current URL.
502
+ *
503
+ * Defaults to "http://example.com" in non-browser environments. If this
504
+ * behavior is not desired, the implementation can be overwritten
505
+ * by `overwriteGetUrlOrigin()`.
506
+ *
507
+ * @type {() => string}
508
+ */
509
+ export let getUrlOrigin = () => {
510
+ if (serverAsyncLocalStorage) {
511
+ return serverAsyncLocalStorage.getStore()?.origin ?? "http://fallback.com";
512
+ }
513
+ else if (typeof window !== "undefined") {
514
+ return window.location.origin;
515
+ }
516
+ return "http://fallback.com";
517
+ };
518
+ /**
519
+ * Overwrite the getUrlOrigin function.
520
+ *
521
+ * Use this function in server environments to
522
+ * define how the URL origin is resolved.
523
+ *
524
+ * @param {() => string} fn - The new implementation for `getUrlOrigin()`.
525
+ */
526
+ export let overwriteGetUrlOrigin = (fn) => {
527
+ getUrlOrigin = fn;
528
+ };
529
+
530
+ /**
531
+ * Coerces a locale-like string to the canonical locale value used by the runtime.
532
+ *
533
+ * @param {unknown} value
534
+ * @returns {Locale | undefined}
535
+ */
536
+ export function toLocale(value) {
537
+ if (typeof value !== "string") {
538
+ return undefined;
539
+ }
540
+ const lowerValue = value.toLowerCase();
541
+ for (const locale of locales) {
542
+ if (locale.toLowerCase() === lowerValue) {
543
+ return locale;
544
+ }
545
+ }
546
+ return undefined;
547
+ }
548
+ /**
549
+ * Check if something is an available locale with the canonical project casing.
550
+ *
551
+ * @example
552
+ * if (isLocale(params.locale)) {
553
+ * setLocale(params.locale);
554
+ * } else {
555
+ * setLocale('en');
556
+ * }
557
+ *
558
+ * Use `toLocale()` when you want case-insensitive matching and canonicalization.
559
+ *
560
+ * @param {unknown} locale
561
+ * @returns {locale is Locale}
562
+ */
563
+ export function isLocale(locale) {
564
+ return !!locale && locales.some((item) => item === locale);
565
+ }
566
+ /**
567
+ * Asserts that the input can be normalized to a locale.
568
+ *
569
+ * @param {unknown} input - The input to check.
570
+ * @returns {Locale} The input normalized to a Locale.
571
+ * @throws {Error} If the input is not a locale.
572
+ */
573
+ export function assertIsLocale(input) {
574
+ const locale = toLocale(input);
575
+ if (locale)
576
+ return locale;
577
+ throw new Error(`Invalid locale: ${input}. Expected one of: ${locales.join(", ")}`);
578
+ }
579
+
580
+ /**
581
+ * Applies the configured trailing slash policy to a URL.
582
+ *
583
+ * The root pathname always remains `/`. Query parameters and hashes are not
584
+ * modified.
585
+ *
586
+ * @param {URL} url
587
+ * @returns {URL}
588
+ */
589
+ function normalizeTrailingSlash(url) {
590
+ if (trailingSlash === undefined || url.pathname === "/") {
591
+ return url;
592
+ }
593
+ if (trailingSlash === "never") {
594
+ url.pathname = url.pathname.replace(/\/+$/, "") || "/";
595
+ }
596
+ else if (trailingSlash === "always") {
597
+ url.pathname = url.pathname.replace(/\/+$/, "") + "/";
598
+ }
599
+ return url;
600
+ }
601
+
602
+ /**
603
+ * Matches a canonical URL while allowing configured patterns to retain their
604
+ * existing trailing slash style.
605
+ *
606
+ * @param {URLPattern} pattern
607
+ * @param {URL} url
608
+ * @returns {any}
609
+ */
610
+ function execUrlPattern(pattern, url) {
611
+ if (trailingSlash === undefined || url.pathname === "/") {
612
+ return pattern.exec(url.href);
613
+ }
614
+ const alias = new URL(url);
615
+ if (trailingSlash === "always") {
616
+ alias.pathname = alias.pathname.replace(/\/+$/, "") || "/";
617
+ // Prefer the slashless alias so the canonical slash does not become part
618
+ // of a terminal wildcard capture.
619
+ return pattern.exec(alias.href) ?? pattern.exec(url.href);
620
+ }
621
+ else if (trailingSlash === "never") {
622
+ const match = pattern.exec(url.href);
623
+ if (match) {
624
+ return match;
625
+ }
626
+ alias.pathname = alias.pathname.replace(/\/+$/, "") + "/";
627
+ return pattern.exec(alias.href);
628
+ }
629
+ return pattern.exec(url.href);
630
+ }
631
+
632
+ /**
633
+ * @typedef {object} ExtractLocaleFromRequestOptions
634
+ * @property {string | URL} [effectiveRequestUrl] - Effective request URL to use for route matching and locale detection with the URL strategy.
635
+ */
636
+ /**
637
+ * Extracts a locale from a request.
638
+ *
639
+ * Use the function on the server to extract the locale
640
+ * from a request.
641
+ *
642
+ * The function goes through the strategies in the order
643
+ * they are defined. If a strategy returns an invalid locale,
644
+ * it will fall back to the next strategy.
645
+ *
646
+ * Note: Custom server strategies are not supported in this synchronous version.
647
+ * Use `extractLocaleFromRequestAsync` if you need custom server strategies with async getLocale methods.
648
+ *
649
+ * @example
650
+ * const locale = extractLocaleFromRequest(request);
651
+ *
652
+ * @param {Request} request
653
+ * @param {ExtractLocaleFromRequestOptions} [options]
654
+ * @returns {Locale}
655
+ */
656
+ export const extractLocaleFromRequest = (request, options = {}) => {
657
+ const effectiveRequestUrl = resolveEffectiveRequestUrl(request, options.effectiveRequestUrl);
658
+ return extractLocaleFromRequestWithStrategies(request, getStrategyForUrl(effectiveRequestUrl), effectiveRequestUrl);
659
+ };
660
+ /**
661
+ * Extracts a locale from a request using the provided strategy order.
662
+ *
663
+ * @param {Request} request
664
+ * @param {typeof strategy} strategies
665
+ * @param {string | URL} [url]
666
+ * @returns {Locale}
667
+ */
668
+ export const extractLocaleFromRequestWithStrategies = (request, strategies, url = request.url) => {
669
+ const effectiveRequestUrl = resolveEffectiveRequestUrl(request, url);
670
+ /** @type {string|undefined} */
671
+ let locale;
672
+ for (const strat of strategies) {
673
+ if (TREE_SHAKE_COOKIE_STRATEGY_USED && strat === "cookie") {
674
+ const cookiePrefix = cookieName + "=";
675
+ locale = request.headers
676
+ .get("cookie")
677
+ ?.split(";")
678
+ .map((c) => c.trim())
679
+ .find((c) => c.startsWith(cookiePrefix))
680
+ ?.slice(cookiePrefix.length);
681
+ }
682
+ else if (TREE_SHAKE_URL_STRATEGY_USED && strat === "url") {
683
+ locale = extractLocaleFromUrl(effectiveRequestUrl);
684
+ }
685
+ else if (TREE_SHAKE_PREFERRED_LANGUAGE_STRATEGY_USED &&
686
+ strat === "preferredLanguage") {
687
+ locale = extractLocaleFromHeader(request);
688
+ }
689
+ else if (strat === "globalVariable") {
690
+ locale = _locale;
691
+ }
692
+ else if (strat === "baseLocale") {
693
+ return baseLocale;
694
+ }
695
+ else if (strat === "localStorage") {
696
+ continue;
697
+ }
698
+ else if (isCustomStrategy(strat)) {
699
+ // Custom strategies are not supported in sync version
700
+ // Use extractLocaleFromRequestAsync for custom server strategies
701
+ continue;
702
+ }
703
+ const matchedLocale = toLocale(locale);
704
+ if (matchedLocale) {
705
+ return matchedLocale;
706
+ }
707
+ }
708
+ throw new Error("No locale found. There is an error in your strategy. Try adding 'baseLocale' as the very last strategy. Read more here https://paraglidejs.com/errors#no-locale-found");
709
+ };
710
+ /**
711
+ * @param {Request} request
712
+ * @param {string | URL | undefined} effectiveRequestUrl
713
+ * @returns {URL}
714
+ */
715
+ function resolveEffectiveRequestUrl(request, effectiveRequestUrl = request.url) {
716
+ if (effectiveRequestUrl instanceof URL) {
717
+ return new URL(effectiveRequestUrl.href);
718
+ }
719
+ return new URL(effectiveRequestUrl, request.url);
720
+ }
721
+
722
+ /**
723
+ * Asynchronously extracts a locale from a request.
724
+ *
725
+ * This function supports async custom server strategies, unlike the synchronous
726
+ * `extractLocaleFromRequest`. Use this function when you have custom server strategies
727
+ * that need to perform asynchronous operations (like database calls) in their getLocale method.
728
+ *
729
+ * The function first processes any custom server strategies asynchronously, then falls back
730
+ * to the synchronous `extractLocaleFromRequest` for all other strategies.
731
+ *
732
+ * @see {@link https://github.com/opral/inlang-paraglide-js/issues/527#issuecomment-2978151022}
733
+ *
734
+ * @example
735
+ * // Basic usage
736
+ * const locale = await extractLocaleFromRequestAsync(request);
737
+ *
738
+ * @example
739
+ * // With custom async server strategy
740
+ * defineCustomServerStrategy("custom-database", {
741
+ * getLocale: async (request) => {
742
+ * const userId = extractUserIdFromRequest(request);
743
+ * return await getUserLocaleFromDatabase(userId);
744
+ * }
745
+ * });
746
+ *
747
+ * const locale = await extractLocaleFromRequestAsync(request);
748
+ *
749
+ * @param {Request} request - The request object to extract the locale from.
750
+ * @param {{ effectiveRequestUrl?: string | URL }} [options] - Effective request URL to use for route matching and locale detection with the URL strategy.
751
+ * @returns {Promise<Locale>} The extracted locale.
752
+ */
753
+ export const extractLocaleFromRequestAsync = async (request, options = {}) => {
754
+ /** @type {string|undefined} */
755
+ let locale;
756
+ const effectiveRequestUrl = resolveEffectiveRequestUrlFromRequestAsync(request, options.effectiveRequestUrl);
757
+ const strategy = getStrategyForUrl(effectiveRequestUrl);
758
+ // Process custom strategies first, in order
759
+ for (const strat of strategy) {
760
+ if (isCustomStrategy(strat) && customServerStrategies.has(strat)) {
761
+ const handler = customServerStrategies.get(strat);
762
+ if (handler) {
763
+ /** @type {string|undefined} */
764
+ locale = await handler.getLocale(request);
765
+ }
766
+ // If we got a valid locale from this custom strategy, use it
767
+ const matchedLocale = toLocale(locale);
768
+ if (matchedLocale) {
769
+ return matchedLocale;
770
+ }
771
+ }
772
+ }
773
+ // If no custom strategy provided a valid locale, fall back to sync version
774
+ return extractLocaleFromRequestWithStrategies(request, strategy, effectiveRequestUrl);
775
+ };
776
+ /**
777
+ * @param {Request} request
778
+ * @param {string | URL | undefined} effectiveRequestUrl
779
+ * @returns {URL}
780
+ */
781
+ function resolveEffectiveRequestUrlFromRequestAsync(request, effectiveRequestUrl = request.url) {
782
+ if (effectiveRequestUrl instanceof URL) {
783
+ return new URL(effectiveRequestUrl.href);
784
+ }
785
+ return new URL(effectiveRequestUrl, request.url);
786
+ }
787
+
788
+ const cookieNamePattern = cookieName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
789
+ const localeCookiePattern = new RegExp(`(?:^|;\\s*)${cookieNamePattern}=([^;]*)`);
790
+ const noCachedLocale = Symbol();
791
+ /** @type {Locale | undefined | typeof noCachedLocale} */
792
+ let cachedLocaleFromCookie = noCachedLocale;
793
+ /**
794
+ * Clears the cached locale from `document.cookie`.
795
+ */
796
+ function clearLocaleCookieCache() {
797
+ cachedLocaleFromCookie = noCachedLocale;
798
+ }
799
+ function scheduleLocaleCookieCacheClear() {
800
+ if (typeof queueMicrotask === "function") {
801
+ queueMicrotask(clearLocaleCookieCache);
802
+ }
803
+ else {
804
+ Promise.resolve().then(clearLocaleCookieCache);
805
+ }
806
+ }
807
+ /**
808
+ * Extracts a cookie from the document.
809
+ *
810
+ * Will return undefined if the document is not available or if the cookie is not set.
811
+ * The `document` object is not available in server-side rendering, so this function should not be called in that context.
812
+ *
813
+ * @returns {Locale | undefined}
814
+ */
815
+ export function extractLocaleFromCookie() {
816
+ if (typeof document === "undefined") {
817
+ return;
818
+ }
819
+ if (cachedLocaleFromCookie !== noCachedLocale) {
820
+ return cachedLocaleFromCookie;
821
+ }
822
+ const match = document.cookie.match(localeCookiePattern);
823
+ const locale = match?.[1];
824
+ cachedLocaleFromCookie = toLocale(locale);
825
+ scheduleLocaleCookieCacheClear();
826
+ return cachedLocaleFromCookie;
827
+ }
828
+
829
+ /**
830
+ * Extracts a locale from the accept-language header.
831
+ *
832
+ * Use the function on the server to extract the locale
833
+ * from the accept-language header that is sent by the client.
834
+ *
835
+ * @example
836
+ * const locale = extractLocaleFromHeader(request);
837
+ *
838
+ * @param {Request} request - The request object to extract the locale from.
839
+ * @returns {Locale | undefined} The negotiated preferred language.
840
+ */
841
+ export function extractLocaleFromHeader(request) {
842
+ const acceptLanguageHeader = request.headers.get("accept-language");
843
+ if (acceptLanguageHeader) {
844
+ // Parse language preferences with their q-values and base language codes
845
+ const languages = acceptLanguageHeader
846
+ .split(",")
847
+ .map((lang) => {
848
+ const [tag, q = "1"] = lang.trim().split(";q=");
849
+ // Get both the full tag and base language code
850
+ const baseTag = tag?.split("-")[0];
851
+ return {
852
+ fullTag: tag,
853
+ baseTag,
854
+ q: Number(q),
855
+ };
856
+ })
857
+ .sort((a, b) => b.q - a.q);
858
+ for (const lang of languages) {
859
+ const fullLocale = toLocale(lang.fullTag);
860
+ if (fullLocale) {
861
+ return fullLocale;
862
+ }
863
+ const baseLocale = toLocale(lang.baseTag);
864
+ if (baseLocale) {
865
+ return baseLocale;
866
+ }
867
+ }
868
+ return undefined;
869
+ }
870
+ return undefined;
871
+ }
872
+
873
+ /**
874
+ * Negotiates a preferred language from navigator.languages.
875
+ *
876
+ * Use the function on the client to extract the locale
877
+ * from the navigator.languages array.
878
+ *
879
+ * @example
880
+ * const locale = extractLocaleFromNavigator();
881
+ *
882
+ * @returns {Locale | undefined}
883
+ */
884
+ export function extractLocaleFromNavigator() {
885
+ if (!navigator?.languages?.length) {
886
+ return undefined;
887
+ }
888
+ const languages = navigator.languages.map((lang) => ({
889
+ fullTag: lang,
890
+ baseTag: lang.split("-")[0],
891
+ }));
892
+ for (const lang of languages) {
893
+ const fullLocale = toLocale(lang.fullTag);
894
+ if (fullLocale) {
895
+ return fullLocale;
896
+ }
897
+ const baseLocale = toLocale(lang.baseTag);
898
+ if (baseLocale) {
899
+ return baseLocale;
900
+ }
901
+ }
902
+ return undefined;
903
+ }
904
+
905
+ /**
906
+ * If extractLocaleFromUrl is called many times on the same page and the URL
907
+ * hasn't changed, we don't need to recompute it every time which can get expensive.
908
+ * We might use a LRU cache if needed, but for now storing only the last result is enough.
909
+ * https://github.com/opral/monorepo/pull/3575#discussion_r2066731243
910
+ */
911
+ /** @type {string|undefined} */
912
+ let cachedUrl;
913
+ /** @type {Locale|undefined} */
914
+ let cachedLocale;
915
+ /**
916
+ * Extracts the locale from a given URL using native URLPattern.
917
+ *
918
+ * The built-in default `/:locale/...` routing is case-insensitive because it
919
+ * canonicalizes the first path segment with `toLocale()`. Custom `urlPatterns`
920
+ * keep URLPattern's normal exact matching semantics for path segments.
921
+ *
922
+ * @param {URL|string} url - The full URL from which to extract the locale.
923
+ * @returns {Locale|undefined} The extracted locale, or undefined if no locale is found.
924
+ */
925
+ export function extractLocaleFromUrl(url) {
926
+ const urlString = typeof url === "string" ? url : url.href;
927
+ if (cachedUrl === urlString) {
928
+ return cachedLocale;
929
+ }
930
+ /** @type {Locale | undefined} */
931
+ let result;
932
+ if (TREE_SHAKE_DEFAULT_URL_PATTERN_USED) {
933
+ const urlObj = typeof url === "string"
934
+ ? new URL(url, "http://example.com")
935
+ : new URL(url);
936
+ result = defaultUrlPatternExtractLocale(normalizeTrailingSlash(urlObj));
937
+ }
938
+ else {
939
+ const urlObj = normalizeTrailingSlash(typeof url === "string" ? new URL(url) : new URL(url));
940
+ // Iterate over URL patterns
941
+ for (const element of urlPatterns) {
942
+ for (const [locale, localizedPattern] of element.localized) {
943
+ const match = execUrlPattern(new URLPattern(localizedPattern, urlObj.href), urlObj);
944
+ if (match) {
945
+ result = locale;
946
+ break;
947
+ }
948
+ }
949
+ if (result)
950
+ break;
951
+ }
952
+ }
953
+ cachedUrl = urlString;
954
+ cachedLocale = result;
955
+ return result;
956
+ }
957
+ /**
958
+ * https://github.com/opral/inlang-paraglide-js/issues/381
959
+ *
960
+ * @param {URL | string} url - The full URL from which to extract the locale.
961
+ * @returns {Locale | undefined} The extracted locale, or undefined if no locale is found.
962
+ */
963
+ function defaultUrlPatternExtractLocale(url) {
964
+ const urlObj = new URL(url, "http://example.com");
965
+ const pathSegments = urlObj.pathname.split("/").filter(Boolean);
966
+ return toLocale(pathSegments[0]) || baseLocale;
967
+ }
968
+
969
+ /**
970
+ * Lower-level URL localization function, primarily used in server contexts.
971
+ *
972
+ * This function is designed for server-side usage where you need precise control
973
+ * over URL localization, such as in middleware or request handlers. It works with
974
+ * URL objects and always returns absolute URLs.
975
+ *
976
+ * For client-side UI components, use `localizeHref()` instead, which provides
977
+ * a more convenient API with relative paths and automatic locale detection.
978
+ *
979
+ * @see https://paraglidejs.com/i18n-routing
980
+ *
981
+ * @example
982
+ * ```typescript
983
+ * // Server middleware example
984
+ * app.use((req, res, next) => {
985
+ * const url = new URL(req.url, `${req.protocol}://${req.headers.host}`);
986
+ * const localized = localizeUrl(url, { locale: "de" });
987
+ *
988
+ * if (localized.href !== url.href) {
989
+ * return res.redirect(localized.href);
990
+ * }
991
+ * next();
992
+ * });
993
+ * ```
994
+ *
995
+ * @example
996
+ * ```typescript
997
+ * // Using with URL patterns
998
+ * const url = new URL("https://example.com/about");
999
+ * localizeUrl(url, { locale: "de" });
1000
+ * // => URL("https://example.com/de/about")
1001
+ *
1002
+ * // Using with domain-based localization
1003
+ * const url = new URL("https://example.com/store");
1004
+ * localizeUrl(url, { locale: "de" });
1005
+ * // => URL("https://de.example.com/store")
1006
+ * ```
1007
+ *
1008
+ * @param {string | URL} url - The URL to localize. If string, must be absolute.
1009
+ * @param {object} [options] - Options for localization
1010
+ * @param {Locale} [options.locale] - Target locale. If not provided, uses getLocale()
1011
+ * @returns {URL} The localized URL, always absolute
1012
+ */
1013
+ export function localizeUrl(url, options) {
1014
+ const targetLocale = options?.locale
1015
+ ? assertIsLocale(options?.locale)
1016
+ : getLocale();
1017
+ if (TREE_SHAKE_DEFAULT_URL_PATTERN_USED) {
1018
+ return localizeUrlDefaultPattern(url, targetLocale);
1019
+ }
1020
+ const originalUrl = typeof url === "string" ? new URL(url) : url;
1021
+ const urlObj = trailingSlash === undefined
1022
+ ? originalUrl
1023
+ : normalizeTrailingSlash(new URL(originalUrl));
1024
+ // Iterate over URL patterns
1025
+ for (const element of urlPatterns) {
1026
+ // Most applications use a locale prefix (and sometimes a fixed domain)
1027
+ // with a trailing catch-all path. Those routes do not need URLPattern's
1028
+ // parser or matcher on every call. Keep the generic matcher below as the
1029
+ // fallback for every other URLPattern shape. This stays inside the outer
1030
+ // loop so specific patterns retain precedence over a later catch-all.
1031
+ const fastPathLocalized = localizeUrlFastPath(urlObj, targetLocale, element);
1032
+ if (fastPathLocalized !== undefined) {
1033
+ return fastPathLocalized;
1034
+ }
1035
+ // match localized patterns
1036
+ for (const [, localizedPattern] of element.localized) {
1037
+ const match = execUrlPattern(getUrlPattern(localizedPattern, urlObj), urlObj);
1038
+ if (!match) {
1039
+ continue;
1040
+ }
1041
+ const targetPattern = element.localized.find(([locale]) => locale === targetLocale)?.[1];
1042
+ if (!targetPattern) {
1043
+ continue;
1044
+ }
1045
+ const localizedUrl = fillPattern(targetPattern, aggregateGroups(match), urlObj.origin);
1046
+ return normalizeTrailingSlash(fillMissingUrlParts(localizedUrl, match));
1047
+ }
1048
+ const unlocalizedMatch = execUrlPattern(getUrlPattern(element.pattern, urlObj), urlObj);
1049
+ if (unlocalizedMatch) {
1050
+ const targetPattern = element.localized.find(([locale]) => locale === targetLocale)?.[1];
1051
+ if (targetPattern) {
1052
+ const localizedUrl = fillPattern(targetPattern, aggregateGroups(unlocalizedMatch), urlObj.origin);
1053
+ return normalizeTrailingSlash(fillMissingUrlParts(localizedUrl, unlocalizedMatch));
1054
+ }
1055
+ }
1056
+ }
1057
+ // If no match found, return the original URL
1058
+ return originalUrl;
1059
+ }
1060
+ /**
1061
+ * https://github.com/opral/inlang-paraglide-js/issues/381
1062
+ *
1063
+ * @param {string | URL} url
1064
+ * @param {Locale} locale
1065
+ * @returns {URL}
1066
+ */
1067
+ function localizeUrlDefaultPattern(url, locale) {
1068
+ const urlObj = normalizeTrailingSlash(typeof url === "string" ? new URL(url, getUrlOrigin()) : new URL(url));
1069
+ const currentLocale = extractLocaleFromUrl(urlObj);
1070
+ // If current locale matches target locale, no change needed
1071
+ if (currentLocale === locale) {
1072
+ return normalizeTrailingSlash(urlObj);
1073
+ }
1074
+ const pathSegments = urlObj.pathname.split("/").filter(Boolean);
1075
+ // If current path starts with a locale, remove it
1076
+ if (pathSegments.length > 0 && toLocale(pathSegments[0])) {
1077
+ pathSegments.shift();
1078
+ }
1079
+ // For base locale, don't add prefix
1080
+ if (locale === baseLocale) {
1081
+ urlObj.pathname = "/" + pathSegments.join("/");
1082
+ }
1083
+ else {
1084
+ // For other locales, add prefix
1085
+ urlObj.pathname = "/" + locale + "/" + pathSegments.join("/");
1086
+ }
1087
+ return normalizeTrailingSlash(urlObj);
1088
+ }
1089
+ /**
1090
+ * Low-level URL de-localization function, primarily used in server contexts.
1091
+ *
1092
+ * This function is designed for server-side usage where you need precise control
1093
+ * over URL de-localization, such as in middleware or request handlers. It works with
1094
+ * URL objects and always returns absolute URLs.
1095
+ *
1096
+ * For client-side UI components, use `deLocalizeHref()` instead, which provides
1097
+ * a more convenient API with relative paths.
1098
+ *
1099
+ * @see https://paraglidejs.com/i18n-routing
1100
+ *
1101
+ * @example
1102
+ * ```typescript
1103
+ * // Server middleware example
1104
+ * app.use((req, res, next) => {
1105
+ * const url = new URL(req.url, `${req.protocol}://${req.headers.host}`);
1106
+ * const baseUrl = deLocalizeUrl(url);
1107
+ *
1108
+ * // Store the base URL for later use
1109
+ * req.baseUrl = baseUrl;
1110
+ * next();
1111
+ * });
1112
+ * ```
1113
+ *
1114
+ * @example
1115
+ * ```typescript
1116
+ * // Using with URL patterns
1117
+ * const url = new URL("https://example.com/de/about");
1118
+ * deLocalizeUrl(url); // => URL("https://example.com/about")
1119
+ *
1120
+ * // Using with domain-based localization
1121
+ * const url = new URL("https://de.example.com/store");
1122
+ * deLocalizeUrl(url); // => URL("https://example.com/store")
1123
+ * ```
1124
+ *
1125
+ * @param {string | URL} url - The URL to de-localize. If string, must be absolute.
1126
+ * @returns {URL} The de-localized URL, always absolute
1127
+ */
1128
+ export function deLocalizeUrl(url) {
1129
+ if (TREE_SHAKE_DEFAULT_URL_PATTERN_USED) {
1130
+ return deLocalizeUrlDefaultPattern(url);
1131
+ }
1132
+ const originalUrl = typeof url === "string" ? new URL(url) : url;
1133
+ const urlObj = trailingSlash === undefined
1134
+ ? originalUrl
1135
+ : normalizeTrailingSlash(new URL(originalUrl));
1136
+ // Iterate over URL patterns
1137
+ for (const element of urlPatterns) {
1138
+ const fastPathDeLocalized = deLocalizeUrlFastPath(urlObj, element);
1139
+ if (fastPathDeLocalized !== undefined) {
1140
+ return fastPathDeLocalized;
1141
+ }
1142
+ // Iterate over localized versions
1143
+ for (const [, localizedPattern] of element.localized) {
1144
+ const match = execUrlPattern(getUrlPattern(localizedPattern, urlObj), urlObj);
1145
+ if (match) {
1146
+ // Convert localized URL back to the base pattern
1147
+ const groups = aggregateGroups(match);
1148
+ const baseUrl = fillPattern(element.pattern, groups, urlObj.origin);
1149
+ return normalizeTrailingSlash(fillMissingUrlParts(baseUrl, match));
1150
+ }
1151
+ }
1152
+ // match unlocalized pattern
1153
+ const unlocalizedMatch = execUrlPattern(getUrlPattern(element.pattern, urlObj), urlObj);
1154
+ if (unlocalizedMatch) {
1155
+ const baseUrl = fillPattern(element.pattern, aggregateGroups(unlocalizedMatch), urlObj.origin);
1156
+ return normalizeTrailingSlash(fillMissingUrlParts(baseUrl, unlocalizedMatch));
1157
+ }
1158
+ }
1159
+ // no match found return the original url
1160
+ return originalUrl;
1161
+ }
1162
+ /**
1163
+ * De-localizes a URL using the default pattern (/:locale/*)
1164
+ * @param {string|URL} url
1165
+ * @returns {URL}
1166
+ */
1167
+ function deLocalizeUrlDefaultPattern(url) {
1168
+ const urlObj = normalizeTrailingSlash(typeof url === "string" ? new URL(url, getUrlOrigin()) : new URL(url));
1169
+ const pathSegments = urlObj.pathname.split("/").filter(Boolean);
1170
+ // If first segment is a locale, remove it
1171
+ if (pathSegments.length > 0 && toLocale(pathSegments[0])) {
1172
+ urlObj.pathname = "/" + pathSegments.slice(1).join("/");
1173
+ }
1174
+ return normalizeTrailingSlash(urlObj);
1175
+ }
1176
+ /**
1177
+ * Takes matches of implicit wildcards in the UrlPattern (when a part is missing
1178
+ * it is equal to '*') and adds them back to the result of fillPattern.
1179
+ *
1180
+ * At least protocol and hostname are required to create a valid URL inside fillPattern.
1181
+ *
1182
+ * @param {URL} url
1183
+ * @param {any} match
1184
+ * @returns {URL}
1185
+ */
1186
+ function fillMissingUrlParts(url, match) {
1187
+ if (match.protocol.groups["0"]) {
1188
+ url.protocol = match.protocol.groups["0"] ?? "";
1189
+ }
1190
+ if (match.hostname.groups["0"]) {
1191
+ url.hostname = match.hostname.groups["0"] ?? "";
1192
+ }
1193
+ if (match.username.groups["0"]) {
1194
+ url.username = match.username.groups["0"] ?? "";
1195
+ }
1196
+ if (match.password.groups["0"]) {
1197
+ url.password = match.password.groups["0"] ?? "";
1198
+ }
1199
+ if (match.port.groups["0"]) {
1200
+ url.port = match.port.groups["0"] ?? "";
1201
+ }
1202
+ if (match.pathname.groups["0"]) {
1203
+ url.pathname = match.pathname.groups["0"] ?? "";
1204
+ }
1205
+ if (match.search.groups["0"]) {
1206
+ url.search = match.search.groups["0"] ?? "";
1207
+ }
1208
+ if (match.hash.groups["0"]) {
1209
+ url.hash = match.hash.groups["0"] ?? "";
1210
+ }
1211
+ return url;
1212
+ }
1213
+ /**
1214
+ * Fills a URL pattern with values for named groups, supporting all URLPattern-style modifiers.
1215
+ *
1216
+ * This function will eventually be replaced by https://github.com/whatwg/urlpattern/issues/73
1217
+ *
1218
+ * Matches:
1219
+ * - :name -> Simple
1220
+ * - :name? -> Optional
1221
+ * - :name+ -> One or more
1222
+ * - :name* -> Zero or more
1223
+ * - :name(...) -> Regex group
1224
+ * - {text} -> Group delimiter
1225
+ * - {text}? -> Optional group delimiter
1226
+ *
1227
+ * If the value is `null`, the segment is removed.
1228
+ *
1229
+ * @param {string} pattern - The URL pattern containing named groups.
1230
+ * @param {Record<string, string | null | undefined>} values - Object of values for named groups.
1231
+ * @param {string} origin - Base URL to use for URL construction.
1232
+ * @returns {URL} - The constructed URL with named groups filled.
1233
+ */
1234
+ function fillPattern(pattern, values, origin) {
1235
+ // Pre-process the pattern to handle explicit port numbers
1236
+ // This detects patterns like "http://localhost:5173" and protects the port number
1237
+ // from being interpreted as a parameter
1238
+ let processedPattern = pattern.replace(/(https?:\/\/[^:/]+):(\d+)(\/|$)/g, (_, protocol, port, slash) => {
1239
+ // Replace ":5173" with "#PORT-5173#" to protect it from parameter replacement
1240
+ return `${protocol}#PORT-${port}#${slash}`;
1241
+ });
1242
+ // First, handle group delimiters with curly braces
1243
+ let processedGroupDelimiters = processedPattern.replace(/\{([^{}]*)\}([?+*]?)/g, (_, content, modifier) => {
1244
+ // For optional group delimiters
1245
+ if (modifier === "?") {
1246
+ // For optional groups, we'll include the content
1247
+ return content;
1248
+ }
1249
+ // For non-optional group delimiters, always include the content
1250
+ return content;
1251
+ });
1252
+ // Then handle named groups
1253
+ let filled = processedGroupDelimiters.replace(/(\/?):([a-zA-Z0-9_]+)(\([^)]*\))?([?+*]?)/g, (_, slash, name, __, modifier) => {
1254
+ const value = values[name];
1255
+ if (value === null) {
1256
+ // If value is null, remove the entire segment including the preceding slash
1257
+ return "";
1258
+ }
1259
+ if (modifier === "?") {
1260
+ // Optional segment
1261
+ return value !== undefined ? `${slash}${value}` : "";
1262
+ }
1263
+ if (modifier === "+" || modifier === "*") {
1264
+ // Repeatable segments
1265
+ if (value === undefined && modifier === "+") {
1266
+ throw new Error(`Missing value for "${name}" (one or more required)`);
1267
+ }
1268
+ return value ? `${slash}${value}` : "";
1269
+ }
1270
+ // Simple named group (no modifier)
1271
+ if (value === undefined) {
1272
+ throw new Error(`Missing value for "${name}"`);
1273
+ }
1274
+ return `${slash}${value}`;
1275
+ });
1276
+ // Restore port numbers
1277
+ filled = filled.replace(/#PORT-(\d+)#/g, ":$1");
1278
+ return new URL(filled, origin);
1279
+ }
1280
+ /**
1281
+ * Aggregates named groups from various parts of the URLPattern match result.
1282
+ *
1283
+ *
1284
+ * @param {any} match - The URLPattern match result object.
1285
+ * @returns {Record<string, string | null | undefined>} An object containing all named groups from the match.
1286
+ */
1287
+ export function aggregateGroups(match) {
1288
+ return {
1289
+ ...match.hash.groups,
1290
+ ...match.hostname.groups,
1291
+ ...match.password.groups,
1292
+ ...match.pathname.groups,
1293
+ ...match.port.groups,
1294
+ ...match.protocol.groups,
1295
+ ...match.search.groups,
1296
+ ...match.username.groups,
1297
+ };
1298
+ }
1299
+ /** @type {Map<string, URLPattern>} */
1300
+ const urlPatternCache = new Map();
1301
+ const URL_PATTERN_CACHE_LIMIT = 128;
1302
+ const ABSOLUTE_URL_PATTERN = /^(?:[A-Za-z][A-Za-z\d+.-]*|:[A-Za-z][A-Za-z\d_-]*):\/\//;
1303
+ /**
1304
+ * URLPattern's base URL affects relative patterns. Absolute patterns only
1305
+ * depend on the pattern itself, while root-relative patterns also depend on
1306
+ * the URL origin. Other relative patterns are deliberately not cached because
1307
+ * their semantics depend on the complete base URL.
1308
+ *
1309
+ * @param {string} pattern
1310
+ * @param {URL} url
1311
+ * @returns {URLPattern}
1312
+ */
1313
+ function getUrlPattern(pattern, url) {
1314
+ const isAbsolutePattern = ABSOLUTE_URL_PATTERN.test(pattern);
1315
+ const isRootRelativePattern = pattern.startsWith("/");
1316
+ if (!isAbsolutePattern && !isRootRelativePattern) {
1317
+ return new URLPattern(pattern, url.href);
1318
+ }
1319
+ const key = isAbsolutePattern
1320
+ ? pattern
1321
+ : JSON.stringify([url.origin, pattern]);
1322
+ const cached = urlPatternCache.get(key);
1323
+ if (cached !== undefined) {
1324
+ // Refresh the entry so frequently used patterns stay in the bounded cache.
1325
+ urlPatternCache.delete(key);
1326
+ urlPatternCache.set(key, cached);
1327
+ return cached;
1328
+ }
1329
+ const compiled = new URLPattern(pattern, url.href);
1330
+ if (urlPatternCache.size >= URL_PATTERN_CACHE_LIMIT) {
1331
+ const oldestKey = urlPatternCache.keys().next().value;
1332
+ if (oldestKey !== undefined)
1333
+ urlPatternCache.delete(oldestKey);
1334
+ }
1335
+ urlPatternCache.set(key, compiled);
1336
+ return compiled;
1337
+ }
1338
+ /**
1339
+ * A small, deliberately conservative subset of URLPattern routing.
1340
+ *
1341
+ * The compiler emits routes such as `/:path(.*)?`, `/de/:path*`, or
1342
+ * `https://example.com/:path*`. For those routes matching is equivalent to a
1343
+ * pathname prefix check and (optionally) an origin check. Everything that has
1344
+ * a dynamic host, a custom path regexp, or another URLPattern modifier keeps
1345
+ * using the generic implementation above.
1346
+ *
1347
+ * @typedef {{
1348
+ * protocol: string | undefined;
1349
+ * hostname: string | undefined;
1350
+ * port: string | undefined;
1351
+ * pathnamePrefix: string;
1352
+ * pathMode: "segments" | "catch-all-optional" | "catch-all-required";
1353
+ * }} FastPathPattern
1354
+ * @typedef {{
1355
+ * base: FastPathPattern;
1356
+ * localized: Array<{ locale: string; pattern: FastPathPattern }>;
1357
+ * }} FastPathRoute
1358
+ */
1359
+ /** @type {WeakMap<object, FastPathRoute | null>} */
1360
+ const fastPathRouteCache = new WeakMap();
1361
+ /**
1362
+ * @param {URL} urlObj
1363
+ * @param {string} targetLocale
1364
+ * @param {{ pattern: string; localized: Array<[string, string]> }} element
1365
+ * @returns {URL | undefined}
1366
+ */
1367
+ function localizeUrlFastPath(urlObj, targetLocale, element) {
1368
+ const route = getFastPathRoute(element);
1369
+ if (route === null)
1370
+ return undefined;
1371
+ // Preserve URLPattern's ordering: localized patterns are checked before
1372
+ // the unlocalized pattern, and the first matching pattern wins.
1373
+ for (const localized of route.localized) {
1374
+ const suffix = matchFastPathPattern(localized.pattern, urlObj);
1375
+ if (suffix === undefined)
1376
+ continue;
1377
+ const target = route.localized.find((candidate) => candidate.locale === targetLocale)?.pattern;
1378
+ if (target === undefined)
1379
+ continue;
1380
+ return applyFastPathPattern(target, suffix, urlObj);
1381
+ }
1382
+ const suffix = matchFastPathPattern(route.base, urlObj);
1383
+ if (suffix !== undefined) {
1384
+ const target = route.localized.find((candidate) => candidate.locale === targetLocale)?.pattern;
1385
+ if (target !== undefined) {
1386
+ return applyFastPathPattern(target, suffix, urlObj);
1387
+ }
1388
+ }
1389
+ return undefined;
1390
+ }
1391
+ /**
1392
+ * @param {URL} urlObj
1393
+ * @param {{ pattern: string; localized: Array<[string, string]> }} element
1394
+ * @returns {URL | undefined}
1395
+ */
1396
+ function deLocalizeUrlFastPath(urlObj, element) {
1397
+ const route = getFastPathRoute(element);
1398
+ if (route === null)
1399
+ return undefined;
1400
+ for (const localized of route.localized) {
1401
+ const suffix = matchFastPathPattern(localized.pattern, urlObj);
1402
+ if (suffix !== undefined) {
1403
+ return applyFastPathPattern(route.base, suffix, urlObj);
1404
+ }
1405
+ }
1406
+ const suffix = matchFastPathPattern(route.base, urlObj);
1407
+ if (suffix !== undefined) {
1408
+ return applyFastPathPattern(route.base, suffix, urlObj);
1409
+ }
1410
+ return undefined;
1411
+ }
1412
+ /**
1413
+ * @param {{ pattern: string; localized: Array<[string, string]> }} element
1414
+ * @returns {FastPathRoute | null}
1415
+ */
1416
+ function getFastPathRoute(element) {
1417
+ const cached = fastPathRouteCache.get(element);
1418
+ if (cached !== undefined)
1419
+ return cached;
1420
+ const base = parseFastPathPattern(element.pattern);
1421
+ if (base === undefined) {
1422
+ fastPathRouteCache.set(element, null);
1423
+ return null;
1424
+ }
1425
+ const localized = [];
1426
+ for (const [locale, pattern] of element.localized) {
1427
+ const parsed = parseFastPathPattern(pattern);
1428
+ if (parsed === undefined || parsed.pathMode !== base.pathMode) {
1429
+ fastPathRouteCache.set(element, null);
1430
+ return null;
1431
+ }
1432
+ localized.push({ locale, pattern: parsed });
1433
+ }
1434
+ const route = { base, localized };
1435
+ fastPathRouteCache.set(element, route);
1436
+ return route;
1437
+ }
1438
+ /**
1439
+ * Parse only catch-all path patterns. In particular, do not treat `:path(.)?`
1440
+ * as a catch-all: URLPattern's `(.)` means exactly one character and cannot be
1441
+ * represented by this prefix matcher without changing routing semantics.
1442
+ *
1443
+ * @param {string} pattern
1444
+ * @returns {FastPathPattern | undefined}
1445
+ */
1446
+ function parseFastPathPattern(pattern) {
1447
+ const wildcard = pattern.match(/\/:path(?:\(\.\*\)(?:\?)?|\*)$/);
1448
+ if (wildcard === null || wildcard.index === undefined)
1449
+ return undefined;
1450
+ const prefix = pattern.slice(0, wildcard.index);
1451
+ const originAndPath = parseFastPathOriginAndPath(prefix);
1452
+ if (originAndPath === undefined)
1453
+ return undefined;
1454
+ const pathMode = wildcard[0].endsWith("*")
1455
+ ? "segments"
1456
+ : wildcard[0].endsWith("?")
1457
+ ? "catch-all-optional"
1458
+ : "catch-all-required";
1459
+ return { ...originAndPath, pathMode };
1460
+ }
1461
+ /**
1462
+ * @param {string} prefix
1463
+ * @returns {FastPathPattern | undefined}
1464
+ */
1465
+ function parseFastPathOriginAndPath(prefix) {
1466
+ if (prefix === "" || prefix.startsWith("/")) {
1467
+ if (hasUrlPatternSyntax(prefix))
1468
+ return undefined;
1469
+ return {
1470
+ protocol: undefined,
1471
+ hostname: undefined,
1472
+ port: undefined,
1473
+ pathnamePrefix: normalizePathPrefix(prefix),
1474
+ pathMode: "catch-all-optional",
1475
+ };
1476
+ }
1477
+ // A `:protocol://host` pattern is common in generated configurations. The
1478
+ // protocol is intentionally left unconstrained, just like URLPattern.
1479
+ const dynamicProtocol = prefix.match(/^:protocol:\/\/([^/]+)(\/.*)?$/);
1480
+ const staticOrigin = prefix.match(/^([A-Za-z][A-Za-z\d+.-]*):\/\/([^/]+)(\/.*)?$/);
1481
+ if (dynamicProtocol !== null) {
1482
+ const dynamicHost = dynamicProtocol[1] ?? "";
1483
+ const hostMatch = dynamicHost.match(/^([^:(){}?*+]+)(?::(\d+))?$/);
1484
+ if (hostMatch === null ||
1485
+ (dynamicProtocol[2] !== undefined &&
1486
+ hasUrlPatternSyntax(dynamicProtocol[2]))) {
1487
+ return undefined;
1488
+ }
1489
+ return {
1490
+ protocol: undefined,
1491
+ hostname: (hostMatch[1] ?? "").toLowerCase(),
1492
+ port: hostMatch[2],
1493
+ pathnamePrefix: normalizePathPrefix(dynamicProtocol[2] ?? ""),
1494
+ pathMode: "catch-all-optional",
1495
+ };
1496
+ }
1497
+ if (staticOrigin === null)
1498
+ return undefined;
1499
+ const host = staticOrigin[2] ?? "";
1500
+ const pathname = staticOrigin[3];
1501
+ const hostMatch = host.match(/^([^:(){}?*+]+)(?::(\d+))?$/);
1502
+ if (hostMatch === null ||
1503
+ (pathname !== undefined && hasUrlPatternSyntax(pathname))) {
1504
+ return undefined;
1505
+ }
1506
+ return {
1507
+ protocol: `${staticOrigin[1]}:`,
1508
+ hostname: (hostMatch[1] ?? "").toLowerCase(),
1509
+ port: normalizePatternPort(hostMatch[2], `${staticOrigin[1]}:`),
1510
+ pathnamePrefix: normalizePathPrefix(pathname ?? ""),
1511
+ pathMode: "catch-all-optional",
1512
+ };
1513
+ }
1514
+ /**
1515
+ * @param {string | undefined} port
1516
+ * @param {string} protocol
1517
+ * @returns {string | undefined}
1518
+ */
1519
+ function normalizePatternPort(port, protocol) {
1520
+ if (port === "80" && protocol === "http:")
1521
+ return "";
1522
+ if (port === "443" && protocol === "https:")
1523
+ return "";
1524
+ return port;
1525
+ }
1526
+ /**
1527
+ * @param {string} value
1528
+ * @returns {boolean}
1529
+ */
1530
+ function hasUrlPatternSyntax(value) {
1531
+ return /[:(){}?*+]/.test(value);
1532
+ }
1533
+ /**
1534
+ * @param {string} pathname
1535
+ * @returns {string}
1536
+ */
1537
+ function normalizePathPrefix(pathname) {
1538
+ if (pathname === "" || pathname === "/")
1539
+ return "/";
1540
+ return pathname.endsWith("/") ? pathname.slice(0, -1) : pathname;
1541
+ }
1542
+ /**
1543
+ * @param {FastPathPattern} pattern
1544
+ * @param {URL} urlObj
1545
+ * @returns {string | undefined}
1546
+ */
1547
+ function matchFastPathPattern(pattern, urlObj) {
1548
+ if (pattern.protocol !== undefined && pattern.protocol !== urlObj.protocol) {
1549
+ return undefined;
1550
+ }
1551
+ if (pattern.hostname !== undefined &&
1552
+ pattern.hostname !== urlObj.hostname.toLowerCase()) {
1553
+ return undefined;
1554
+ }
1555
+ if (pattern.hostname !== undefined) {
1556
+ const expectedPort = pattern.port ?? defaultPortForProtocol(pattern.protocol ?? urlObj.protocol);
1557
+ if (expectedPort !== urlObj.port)
1558
+ return undefined;
1559
+ }
1560
+ const prefix = pattern.pathnamePrefix;
1561
+ if (prefix === "/") {
1562
+ if (urlObj.pathname.startsWith("//"))
1563
+ return undefined;
1564
+ if (pattern.pathMode === "segments") {
1565
+ return isNonEmptyPathSegments(urlObj.pathname)
1566
+ ? urlObj.pathname
1567
+ : undefined;
1568
+ }
1569
+ return urlObj.pathname;
1570
+ }
1571
+ if (urlObj.pathname === prefix) {
1572
+ return pattern.pathMode === "catch-all-required" ? undefined : "";
1573
+ }
1574
+ if (urlObj.pathname.startsWith(`${prefix}/`)) {
1575
+ const suffix = urlObj.pathname.slice(prefix.length);
1576
+ if (suffix.startsWith("//"))
1577
+ return undefined;
1578
+ if (pattern.pathMode === "segments" &&
1579
+ !isNonEmptyPathSegments(suffix)) {
1580
+ return undefined;
1581
+ }
1582
+ return suffix;
1583
+ }
1584
+ return undefined;
1585
+ }
1586
+ /**
1587
+ * @param {string} pathname
1588
+ * @returns {boolean}
1589
+ */
1590
+ function isNonEmptyPathSegments(pathname) {
1591
+ return pathname.length > 1 && !pathname.endsWith("/") && !pathname.includes("//");
1592
+ }
1593
+ /**
1594
+ * URLPattern treats the default port as empty in URL instances.
1595
+ *
1596
+ * @param {string} protocol
1597
+ * @returns {string}
1598
+ */
1599
+ function defaultPortForProtocol(protocol) {
1600
+ if (protocol === "http:")
1601
+ return "";
1602
+ if (protocol === "https:")
1603
+ return "";
1604
+ return "";
1605
+ }
1606
+ /**
1607
+ * @param {FastPathPattern} pattern
1608
+ * @param {string} suffix
1609
+ * @param {URL} source
1610
+ * @returns {URL}
1611
+ */
1612
+ function applyFastPathPattern(pattern, suffix, source) {
1613
+ const localized = new URL(source.href);
1614
+ if (pattern.protocol !== undefined)
1615
+ localized.protocol = pattern.protocol;
1616
+ if (pattern.hostname !== undefined) {
1617
+ localized.hostname = pattern.hostname;
1618
+ localized.port =
1619
+ pattern.port ?? defaultPortForProtocol(localized.protocol);
1620
+ }
1621
+ localized.pathname = joinFastPathPrefix(pattern.pathnamePrefix, suffix);
1622
+ return localized;
1623
+ }
1624
+ /**
1625
+ * @param {string} prefix
1626
+ * @param {string} suffix
1627
+ * @returns {string}
1628
+ */
1629
+ function joinFastPathPrefix(prefix, suffix) {
1630
+ if (prefix === "/")
1631
+ return suffix === "" ? "/" : suffix;
1632
+ if (suffix === "")
1633
+ return prefix;
1634
+ return `${prefix}${suffix.startsWith("/") ? suffix : `/${suffix}`}`;
1635
+ }
1636
+
1637
+ /** @type {string | undefined} */
1638
+ let cachedRouteStrategyUrl;
1639
+ /** @type {{ match: string; strategy?: typeof strategy; exclude?: boolean } | undefined} */
1640
+ let cachedRouteStrategy;
1641
+ /**
1642
+ * Match route policy against both the public URL and its canonical URL.
1643
+ *
1644
+ * The function is deliberately separate from variables.js: configuration is
1645
+ * inert data, while canonicalization and route selection form a routing layer.
1646
+ *
1647
+ * @param {string | URL} url
1648
+ * @returns {{ match: string; strategy?: typeof strategy; exclude?: boolean } | undefined}
1649
+ */
1650
+ export function findMatchingRouteStrategy(url) {
1651
+ if (routeStrategies.length === 0) {
1652
+ return undefined;
1653
+ }
1654
+ const urlString = typeof url === "string" ? url : url.href;
1655
+ if (cachedRouteStrategyUrl === urlString) {
1656
+ return cachedRouteStrategy;
1657
+ }
1658
+ const publicUrl = normalizeTrailingSlash(new URL(urlString, "http://example.com"));
1659
+ const canonicalUrl = deLocalizeUrl(publicUrl);
1660
+ const candidateUrls = canonicalUrl.href === publicUrl.href
1661
+ ? [publicUrl]
1662
+ : [publicUrl, canonicalUrl];
1663
+ let match;
1664
+ for (const candidateUrl of candidateUrls) {
1665
+ for (const routeStrategy of routeStrategies) {
1666
+ const pattern = new URLPattern(routeStrategy.match, candidateUrl.href);
1667
+ if (execUrlPattern(pattern, candidateUrl)) {
1668
+ match = routeStrategy;
1669
+ break;
1670
+ }
1671
+ }
1672
+ if (match)
1673
+ break;
1674
+ }
1675
+ cachedRouteStrategyUrl = urlString;
1676
+ cachedRouteStrategy = match;
1677
+ return match;
1678
+ }
1679
+ /**
1680
+ * Returns the strategy to use for a specific URL.
1681
+ *
1682
+ * If no route strategy matches (or the matching rule is `exclude: true`),
1683
+ * the global strategy is returned.
1684
+ *
1685
+ * @param {string | URL} url
1686
+ * @returns {typeof strategy}
1687
+ */
1688
+ export function getStrategyForUrl(url) {
1689
+ const routeStrategy = findMatchingRouteStrategy(url);
1690
+ if (routeStrategy &&
1691
+ routeStrategy.exclude !== true &&
1692
+ Array.isArray(routeStrategy.strategy)) {
1693
+ return routeStrategy.strategy;
1694
+ }
1695
+ return strategy;
1696
+ }
1697
+ /**
1698
+ * Returns whether the given URL is excluded from middleware i18n processing.
1699
+ *
1700
+ * @param {string | URL} url
1701
+ * @returns {boolean}
1702
+ */
1703
+ export function isExcludedByRouteStrategy(url) {
1704
+ return findMatchingRouteStrategy(url)?.exclude === true;
1705
+ }
1706
+
1707
+ /**
1708
+ * @typedef {object} ShouldRedirectServerInput
1709
+ * @property {Request} request
1710
+ * @property {string | URL} [effectiveRequestUrl] - Effective request URL to use for route matching, locale detection with the URL strategy, and redirect targets.
1711
+ * @property {Locale} [locale]
1712
+ *
1713
+ * @typedef {object} ShouldRedirectClientInput
1714
+ * @property {undefined} [request]
1715
+ * @property {string | URL} [url]
1716
+ * @property {Locale} [locale]
1717
+ *
1718
+ * @typedef {ShouldRedirectServerInput | ShouldRedirectClientInput} ShouldRedirectInput
1719
+ *
1720
+ * @typedef {object} ShouldRedirectResult
1721
+ * @property {boolean} shouldRedirect - Indicates whether the consumer should perform a redirect.
1722
+ * @property {Locale} locale - Locale resolved using the configured strategies.
1723
+ * @property {URL | undefined} redirectUrl - Destination URL when a redirect is required.
1724
+ */
1725
+ /**
1726
+ * Determines whether a redirect is required to align the current URL with the active locale.
1727
+ *
1728
+ * This helper mirrors the logic that powers `paraglideMiddleware`, but works in both server
1729
+ * and client environments. It evaluates the configured strategies in order, computes the
1730
+ * canonical localized URL, and reports when the current URL does not match.
1731
+ *
1732
+ * When called in the browser without arguments, the current `window.location.href` is used.
1733
+ *
1734
+ * @see https://paraglidejs.com/i18n-routing#redirects
1735
+ *
1736
+ * @example
1737
+ * // Client side usage (e.g. TanStack Router beforeLoad hook)
1738
+ * async function beforeLoad({ location }) {
1739
+ * const decision = await shouldRedirect({ url: location.href });
1740
+ *
1741
+ * if (decision.shouldRedirect) {
1742
+ * throw redirect({ to: decision.redirectUrl.href });
1743
+ * }
1744
+ * }
1745
+ *
1746
+ * @example
1747
+ * // Server side usage with a Request
1748
+ * export async function handle(request) {
1749
+ * const decision = await shouldRedirect({ request });
1750
+ *
1751
+ * if (decision.shouldRedirect) {
1752
+ * return Response.redirect(decision.redirectUrl, 307);
1753
+ * }
1754
+ *
1755
+ * return render(request, decision.locale);
1756
+ * }
1757
+ *
1758
+ * @example
1759
+ * // Server side usage behind a proxy where request.url is not public-facing
1760
+ * export async function handle(request) {
1761
+ * const effectiveRequestUrl = new URL(request.url);
1762
+ * effectiveRequestUrl.protocol = "https:";
1763
+ * effectiveRequestUrl.host = "example.com";
1764
+ *
1765
+ * const decision = await shouldRedirect({
1766
+ * request,
1767
+ * effectiveRequestUrl,
1768
+ * });
1769
+ *
1770
+ * if (decision.shouldRedirect) {
1771
+ * return Response.redirect(decision.redirectUrl, 307);
1772
+ * }
1773
+ * }
1774
+ *
1775
+ * @param {ShouldRedirectInput} [input]
1776
+ * @returns {Promise<ShouldRedirectResult>}
1777
+ */
1778
+ export async function shouldRedirect(input = {}) {
1779
+ const currentUrl = resolveUrl(input);
1780
+ const locale = await resolveLocale(input, currentUrl);
1781
+ const strategy = getStrategyForUrl(currentUrl.href);
1782
+ if (isExcludedByRouteStrategy(currentUrl.href) || !strategy.includes("url")) {
1783
+ return { shouldRedirect: false, locale, redirectUrl: undefined };
1784
+ }
1785
+ const localizedUrl = localizeUrl(currentUrl.href, { locale });
1786
+ const shouldRedirectToLocalizedUrl = normalizeUrl(localizedUrl.href) !== normalizeUrl(currentUrl.href);
1787
+ return {
1788
+ shouldRedirect: shouldRedirectToLocalizedUrl,
1789
+ locale,
1790
+ redirectUrl: shouldRedirectToLocalizedUrl ? localizedUrl : undefined,
1791
+ };
1792
+ }
1793
+ /**
1794
+ * Resolves the locale either from the provided input or by using the configured strategies.
1795
+ *
1796
+ * @param {ShouldRedirectInput} input
1797
+ * @param {URL} currentUrl
1798
+ * @returns {Promise<Locale>}
1799
+ */
1800
+ async function resolveLocale(input, currentUrl) {
1801
+ const locale = toLocale(input.locale);
1802
+ if (locale) {
1803
+ return locale;
1804
+ }
1805
+ if (input.request) {
1806
+ return extractLocaleFromRequestAsync(input.request, {
1807
+ effectiveRequestUrl: currentUrl,
1808
+ });
1809
+ }
1810
+ if ("url" in input && typeof input.url !== "undefined") {
1811
+ return getLocaleForUrl(currentUrl.href);
1812
+ }
1813
+ return getLocale();
1814
+ }
1815
+ /**
1816
+ * Resolves the current URL from the provided input or runtime context.
1817
+ *
1818
+ * @param {ShouldRedirectInput} input
1819
+ * @returns {URL}
1820
+ */
1821
+ function resolveUrl(input) {
1822
+ if ("effectiveRequestUrl" in input &&
1823
+ input.effectiveRequestUrl instanceof URL) {
1824
+ return new URL(input.effectiveRequestUrl.href);
1825
+ }
1826
+ if ("effectiveRequestUrl" in input &&
1827
+ typeof input.effectiveRequestUrl === "string") {
1828
+ return new URL(input.effectiveRequestUrl, input.request ? input.request.url : getUrlOrigin());
1829
+ }
1830
+ if (input.request) {
1831
+ return new URL(input.request.url);
1832
+ }
1833
+ if ("url" in input && input.url instanceof URL) {
1834
+ return new URL(input.url.href);
1835
+ }
1836
+ if ("url" in input && typeof input.url === "string") {
1837
+ return new URL(input.url, getUrlOrigin());
1838
+ }
1839
+ if (typeof window !== "undefined" && window?.location?.href) {
1840
+ return new URL(window.location.href);
1841
+ }
1842
+ throw new Error("shouldRedirect() requires either a request, an absolute URL, or must run in a browser environment.");
1843
+ }
1844
+ /**
1845
+ * Normalize url for comparison by stripping the trailing slash.
1846
+ *
1847
+ * @param {string} url
1848
+ * @returns {string}
1849
+ */
1850
+ function normalizeUrl(url) {
1851
+ const urlObj = new URL(url);
1852
+ if (trailingSlash === undefined) {
1853
+ urlObj.pathname = urlObj.pathname.replace(/\/$/, "");
1854
+ }
1855
+ return urlObj.href;
1856
+ }
1857
+
1858
+ /**
1859
+ * High-level URL localization function optimized for client-side UI usage.
1860
+ *
1861
+ * This is a convenience wrapper around `localizeUrl()` that provides features
1862
+ * needed in UI:
1863
+ *
1864
+ * - Accepts relative paths (e.g., "/about")
1865
+ * - Returns relative paths when possible
1866
+ * - Automatically detects current locale if not specified
1867
+ * - Handles string input/output instead of URL objects
1868
+ *
1869
+ * @see https://paraglidejs.com/i18n-routing
1870
+ *
1871
+ * @example
1872
+ * ```typescript
1873
+ * // In a React/Vue/Svelte component
1874
+ * const NavLink = ({ href }) => {
1875
+ * // Automatically uses current locale, keeps path relative
1876
+ * return <a href={localizeHref(href)}>...</a>;
1877
+ * };
1878
+ *
1879
+ * // Examples:
1880
+ * localizeHref("/about")
1881
+ * // => "/de/about" (if current locale is "de")
1882
+ * localizeHref("/store", { locale: "fr" })
1883
+ * // => "/fr/store" (explicit locale)
1884
+ *
1885
+ * // Cross-origin links remain absolute
1886
+ * localizeHref("https://other-site.com/about")
1887
+ * // => "https://other-site.com/de/about"
1888
+ * ```
1889
+ *
1890
+ * For server-side URL localization (e.g., in middleware), use `localizeUrl()`
1891
+ * which provides more precise control over URL handling.
1892
+ *
1893
+ * @param {string} href - The href to localize (can be relative or absolute)
1894
+ * @param {object} [options] - Options for localization
1895
+ * @param {Locale} [options.locale] - Target locale. If not provided, uses `getLocale()`
1896
+ * @returns {string} The localized href, relative if input was relative
1897
+ */
1898
+ export function localizeHref(href, options) {
1899
+ const currentLocale = getLocale();
1900
+ const locale = options?.locale ?? currentLocale;
1901
+ const url = new URL(href, getUrlOrigin());
1902
+ const localized = localizeUrl(url, { locale });
1903
+ // if the origin is identical and the href is relative,
1904
+ // return the relative path
1905
+ if (href.startsWith("/") && url.origin === localized.origin) {
1906
+ // check for cross origin localization in which case an absolute URL must be returned.
1907
+ if (locale !== currentLocale) {
1908
+ const localizedCurrentLocale = localizeUrl(url, {
1909
+ locale: currentLocale,
1910
+ });
1911
+ if (localizedCurrentLocale.origin !== localized.origin) {
1912
+ return localized.href;
1913
+ }
1914
+ }
1915
+ return localized.pathname + localized.search + localized.hash;
1916
+ }
1917
+ return localized.href;
1918
+ }
1919
+ /**
1920
+ * High-level URL de-localization function optimized for client-side UI usage.
1921
+ *
1922
+ * This is a convenience wrapper around `deLocalizeUrl()` that provides features
1923
+ * needed in the UI:
1924
+ *
1925
+ * - Accepts relative paths (e.g., "/de/about")
1926
+ * - Returns relative paths when possible
1927
+ * - Handles string input/output instead of URL objects
1928
+ *
1929
+ * @see https://paraglidejs.com/i18n-routing
1930
+ *
1931
+ * @example
1932
+ * ```typescript
1933
+ * // In a React/Vue/Svelte component
1934
+ * const LocaleSwitcher = ({ href }) => {
1935
+ * // Remove locale prefix before switching
1936
+ * const baseHref = deLocalizeHref(href);
1937
+ * return locales.map(locale =>
1938
+ * <a href={localizeHref(baseHref, { locale })}>
1939
+ * Switch to {locale}
1940
+ * </a>
1941
+ * );
1942
+ * };
1943
+ *
1944
+ * // Examples:
1945
+ * deLocalizeHref("/de/about") // => "/about"
1946
+ * deLocalizeHref("/fr/store") // => "/store"
1947
+ *
1948
+ * // Cross-origin links remain absolute
1949
+ * deLocalizeHref("https://example.com/de/about")
1950
+ * // => "https://example.com/about"
1951
+ * ```
1952
+ *
1953
+ * For server-side URL de-localization (e.g., in middleware), use `deLocalizeUrl()`
1954
+ * which provides more precise control over URL handling.
1955
+ *
1956
+ * @param {string} href - The href to de-localize (can be relative or absolute)
1957
+ * @returns {string} The de-localized href, relative if input was relative
1958
+ */
1959
+ export function deLocalizeHref(href) {
1960
+ const url = new URL(href, getUrlOrigin());
1961
+ const deLocalized = deLocalizeUrl(url);
1962
+ // If the origin is identical and the href is relative,
1963
+ // return the relative path instead of the full URL.
1964
+ if (href.startsWith("/") && url.origin === deLocalized.origin) {
1965
+ return deLocalized.pathname + deLocalized.search + deLocalized.hash;
1966
+ }
1967
+ return deLocalized.href;
1968
+ }
1969
+
1970
+ /**
1971
+ * @param {string} safeModuleId
1972
+ * @param {Locale} locale
1973
+ */
1974
+ export function trackMessageCall(safeModuleId, locale) {
1975
+ if (isServer === false)
1976
+ return;
1977
+ const store = serverAsyncLocalStorage?.getStore();
1978
+ if (store) {
1979
+ store.messageCalls?.add(`${safeModuleId}:${locale}`);
1980
+ }
1981
+ }
1982
+
1983
+ /**
1984
+ * Generates localized URL variants for all provided URLs based on your configured locales and URL patterns.
1985
+ *
1986
+ * This function is essential for Static Site Generation (SSG) where you need to tell your framework
1987
+ * which pages to pre-render at build time. It's also useful for generating sitemaps and
1988
+ * `<link rel="alternate" hreflang>` tags for SEO.
1989
+ *
1990
+ * The function respects your `urlPatterns` configuration - if you have translated pathnames
1991
+ * (e.g., `/about` → `/ueber-uns` for German), it will generate the correct localized paths.
1992
+ *
1993
+ * @see https://paraglidejs.com/static-site-generation
1994
+ *
1995
+ * @example
1996
+ * // Basic usage - generate all locale variants for a list of paths
1997
+ * const localizedUrls = generateStaticLocalizedUrls([
1998
+ * "/",
1999
+ * "/about",
2000
+ * "/blog/post-1",
2001
+ * ]);
2002
+ * // Returns URL objects for each locale:
2003
+ * // ["/en/", "/de/", "/en/about", "/de/about", "/en/blog/post-1", "/de/blog/post-1"]
2004
+ *
2005
+ * @example
2006
+ * // Use with framework SSG APIs
2007
+ * // SvelteKit
2008
+ * export function entries() {
2009
+ * const paths = ["/", "/about", "/contact"];
2010
+ * return generateStaticLocalizedUrls(paths).map(url => ({
2011
+ * locale: extractLocaleFromUrl(url)
2012
+ * }));
2013
+ * }
2014
+ *
2015
+ * @example
2016
+ * // Sitemap generation
2017
+ * const allPages = ["/", "/about", "/blog"];
2018
+ * const sitemapUrls = generateStaticLocalizedUrls(allPages);
2019
+ *
2020
+ * @param {(string | URL)[]} urls - List of canonical URLs or paths to generate localized versions for.
2021
+ * Can be absolute URLs (`https://example.com/about`) or paths (`/about`).
2022
+ * Paths are resolved against `http://localhost` internally.
2023
+ * @returns {URL[]} Array of URL objects representing all localized variants.
2024
+ * The order follows each input URL with all its locale variants before moving to the next URL.
2025
+ */
2026
+ export function generateStaticLocalizedUrls(urls) {
2027
+ /** @type {Set<URL>} */
2028
+ const localizedUrls = new Set();
2029
+ // For default URL pattern, we can optimize the generation
2030
+ if (TREE_SHAKE_DEFAULT_URL_PATTERN_USED) {
2031
+ for (const urlInput of urls) {
2032
+ const originalUrl = urlInput instanceof URL
2033
+ ? urlInput
2034
+ : new URL(urlInput, "http://localhost");
2035
+ const url = trailingSlash === undefined
2036
+ ? originalUrl
2037
+ : normalizeTrailingSlash(new URL(originalUrl));
2038
+ // Base locale doesn't get a prefix
2039
+ localizedUrls.add(url);
2040
+ // Other locales get their code as prefix
2041
+ for (const locale of locales) {
2042
+ if (locale !== baseLocale) {
2043
+ const localizedPath = `/${locale}${url.pathname}${url.search}${url.hash}`;
2044
+ const localizedUrl = new URL(localizedPath, url.origin);
2045
+ localizedUrls.add(normalizeTrailingSlash(localizedUrl));
2046
+ }
2047
+ }
2048
+ }
2049
+ return Array.from(localizedUrls);
2050
+ }
2051
+ // For custom URL patterns, we need to use localizeUrl for each URL and locale
2052
+ for (const urlInput of urls) {
2053
+ const originalUrl = urlInput instanceof URL
2054
+ ? urlInput
2055
+ : new URL(urlInput, "http://localhost");
2056
+ const url = normalizeTrailingSlash(new URL(originalUrl));
2057
+ // Try each URL pattern to find one that matches
2058
+ let patternFound = false;
2059
+ for (const pattern of urlPatterns) {
2060
+ try {
2061
+ // Try to match the unlocalized pattern
2062
+ const unlocalizedMatch = execUrlPattern(new URLPattern(pattern.pattern, url.href), url);
2063
+ if (!unlocalizedMatch)
2064
+ continue;
2065
+ patternFound = true;
2066
+ // Track unique localized URLs to avoid duplicates when patterns are the same
2067
+ const seenUrls = new Set();
2068
+ // Generate localized URL for each locale
2069
+ for (const [locale] of pattern.localized) {
2070
+ try {
2071
+ const localizedUrl = localizeUrl(url, { locale });
2072
+ const urlString = localizedUrl.href;
2073
+ // Only add if we haven't seen this exact URL before
2074
+ if (!seenUrls.has(urlString)) {
2075
+ seenUrls.add(urlString);
2076
+ localizedUrls.add(localizedUrl);
2077
+ }
2078
+ }
2079
+ catch {
2080
+ // Skip if localization fails for this locale
2081
+ continue;
2082
+ }
2083
+ }
2084
+ break;
2085
+ }
2086
+ catch {
2087
+ // Skip if pattern matching fails
2088
+ continue;
2089
+ }
2090
+ }
2091
+ // If no pattern matched, use the URL as is
2092
+ if (!patternFound) {
2093
+ localizedUrls.add(originalUrl);
2094
+ }
2095
+ }
2096
+ return Array.from(localizedUrls);
2097
+ }
2098
+
2099
+ /**
2100
+ * @typedef {"cookie" | "baseLocale" | "globalVariable" | "url" | "preferredLanguage" | "localStorage"} BuiltInStrategy
2101
+ */
2102
+ /**
2103
+ * @typedef {`custom_${string}`} CustomStrategy
2104
+ */
2105
+ /**
2106
+ * @typedef {BuiltInStrategy | CustomStrategy} Strategy
2107
+ */
2108
+ /**
2109
+ * @typedef {Array<Strategy>} Strategies
2110
+ */
2111
+ /**
2112
+ * @typedef {{ getLocale: (request?: Request) => Promise<string | undefined> | (string | undefined) }} CustomServerStrategyHandler
2113
+ */
2114
+ /**
2115
+ * @typedef {{ getLocale: () => Promise<string|undefined> | (string | undefined), setLocale: (locale: string) => Promise<void> | void }} CustomClientStrategyHandler
2116
+ */
2117
+ /** @type {Map<string, CustomServerStrategyHandler>} */
2118
+ export const customServerStrategies = new Map();
2119
+ /** @type {Map<string, CustomClientStrategyHandler>} */
2120
+ export const customClientStrategies = new Map();
2121
+ /**
2122
+ * Checks if the given strategy is a custom strategy.
2123
+ *
2124
+ * @param {unknown} strategy The name of the custom strategy to validate.
2125
+ * Must be a string that starts with "custom-" followed by alphanumeric characters, hyphens, or underscores.
2126
+ * @returns {boolean} Returns true if it is a custom strategy, false otherwise.
2127
+ */
2128
+ export function isCustomStrategy(strategy) {
2129
+ return (typeof strategy === "string" && /^custom-[A-Za-z0-9_-]+$/.test(strategy));
2130
+ }
2131
+ /**
2132
+ * Defines a custom strategy that is executed on the server.
2133
+ *
2134
+ * @see https://paraglidejs.com/strategy#write-your-own-strategy
2135
+ *
2136
+ * @param {string} strategy The name of the custom strategy to define. Must follow the pattern custom-name with alphanumeric characters, hyphens, or underscores.
2137
+ * @param {CustomServerStrategyHandler} handler The handler for the custom strategy, which should implement
2138
+ * the method getLocale.
2139
+ * @returns {void}
2140
+ */
2141
+ export function defineCustomServerStrategy(strategy, handler) {
2142
+ if (!isCustomStrategy(strategy)) {
2143
+ throw new Error(`Invalid custom strategy: "${strategy}". Must be a custom strategy following the pattern custom-name.`);
2144
+ }
2145
+ customServerStrategies.set(strategy, handler);
2146
+ }
2147
+ /**
2148
+ * Defines a custom strategy that is executed on the client.
2149
+ *
2150
+ * @see https://paraglidejs.com/strategy#write-your-own-strategy
2151
+ *
2152
+ * @param {string} strategy The name of the custom strategy to define. Must follow the pattern custom-name with alphanumeric characters, hyphens, or underscores.
2153
+ * @param {CustomClientStrategyHandler} handler The handler for the custom strategy, which should implement the
2154
+ * methods getLocale and setLocale.
2155
+ * @returns {void}
2156
+ */
2157
+ export function defineCustomClientStrategy(strategy, handler) {
2158
+ if (!isCustomStrategy(strategy)) {
2159
+ throw new Error(`Invalid custom strategy: "${strategy}". Must be a custom strategy following the pattern custom-name.`);
2160
+ }
2161
+ customClientStrategies.set(strategy, handler);
2162
+ }
2163
+
2164
+ // ------ TYPES ------
2165
+ export {};
2166
+ /**
2167
+ * A locale that is available in the project.
2168
+ *
2169
+ * @example
2170
+ * setLocale(request.locale as Locale)
2171
+ *
2172
+ * @typedef {typeof locales[number]} Locale
2173
+ */
2174
+ /**
2175
+ * A branded type representing a localized string.
2176
+ *
2177
+ * Message functions return this type instead of \`string\`, enabling TypeScript
2178
+ * to distinguish translated strings from regular strings at compile time.
2179
+ * This allows you to enforce that only properly localized content is used
2180
+ * in your UI components.
2181
+ *
2182
+ * Since \`LocalizedString\` is a branded subtype of \`string\`, it remains fully
2183
+ * backward compatible—you can pass it anywhere a \`string\` is expected.
2184
+ *
2185
+ * @example
2186
+ * // Enforce localized strings in your components
2187
+ * function PageTitle(props: { title: LocalizedString }) {
2188
+ * return <h1>{props.title}</h1>
2189
+ * }
2190
+ *
2191
+ * // ✅ Correct: using a message function
2192
+ * <PageTitle title={m.welcome_title()} />
2193
+ *
2194
+ * // ❌ Type error: raw strings are not LocalizedString
2195
+ * <PageTitle title="Welcome" />
2196
+ *
2197
+ * @example
2198
+ * // LocalizedString is assignable to string (backward compatible)
2199
+ * const localized: LocalizedString = m.greeting()
2200
+ * const str: string = localized // ✅ works fine
2201
+ *
2202
+ * // But string is not assignable to LocalizedString
2203
+ * const raw: LocalizedString = "Hello" // ❌ Type error
2204
+ *
2205
+ * @example
2206
+ * // Catches accidental string concatenation
2207
+ * function showMessage(msg: LocalizedString) { ... }
2208
+ *
2209
+ * showMessage(m.hello()) // ✅
2210
+ * showMessage("Hello " + userName) // ❌ Type error
2211
+ * showMessage(m.hello_user({ name: userName })) // ✅ use params instead
2212
+ *
2213
+ * @typedef {string & { readonly __brand: 'LocalizedString' }} LocalizedString
2214
+ */
2215
+ /**
2216
+ * A single markup option passed to a tag instance.
2217
+ *
2218
+ * @typedef {{
2219
+ * name: string;
2220
+ * value: unknown;
2221
+ * }} MessageMarkupOption
2222
+ */
2223
+ /**
2224
+ * A single static markup attribute attached to a tag instance.
2225
+ *
2226
+ * @typedef {{
2227
+ * name: string;
2228
+ * value: string | true;
2229
+ * }} MessageMarkupAttribute
2230
+ */
2231
+ /**
2232
+ * Record of markup options for a tag instance.
2233
+ *
2234
+ * @typedef {Record<string, unknown>} MessageMarkupOptions
2235
+ */
2236
+ /**
2237
+ * Record of markup attributes for a tag instance.
2238
+ *
2239
+ * @typedef {Record<string, string | true>} MessageMarkupAttributes
2240
+ */
2241
+ /**
2242
+ * Type-level schema for a single markup tag.
2243
+ *
2244
+ * @typedef {{
2245
+ * options: MessageMarkupOptions;
2246
+ * attributes: MessageMarkupAttributes;
2247
+ * children: boolean;
2248
+ * }} MessageMarkupTag
2249
+ */
2250
+ /**
2251
+ * Type-level schema for all markup tags in a message.
2252
+ *
2253
+ * @typedef {Record<string, MessageMarkupTag>} MessageMarkupSchema
2254
+ */
2255
+ /**
2256
+ * Type-only metadata attached to compiled message functions.
2257
+ *
2258
+ * @template Inputs
2259
+ * @template Options
2260
+ * @template {MessageMarkupSchema} [Markup = MessageMarkupSchema]
2261
+ * @typedef {{
2262
+ * readonly __paraglide?: {
2263
+ * inputs: Inputs;
2264
+ * options: Options;
2265
+ * markup: Markup;
2266
+ * };
2267
+ * }} MessageMetadata
2268
+ */
2269
+ /**
2270
+ * A compiled, framework-neutral message part.
2271
+ *
2272
+ * @typedef {{
2273
+ * type: "text";
2274
+ * value: string;
2275
+ * } | {
2276
+ * type: "markup-start";
2277
+ * name: string;
2278
+ * options: MessageMarkupOptions;
2279
+ * attributes: MessageMarkupAttributes;
2280
+ * } | {
2281
+ * type: "markup-end";
2282
+ * name: string;
2283
+ * options: MessageMarkupOptions;
2284
+ * attributes: MessageMarkupAttributes;
2285
+ * } | {
2286
+ * type: "markup-standalone";
2287
+ * name: string;
2288
+ * options: MessageMarkupOptions;
2289
+ * attributes: MessageMarkupAttributes;
2290
+ * }} MessagePart
2291
+ */
2292
+ /**
2293
+ * A message function is a message for a specific locale.
2294
+ *
2295
+ * @example
2296
+ * m.hello({ name: 'world' })
2297
+ *
2298
+ * @typedef {(inputs?: Record<string, never>) => LocalizedString} MessageFunction
2299
+ */
2300
+ /**
2301
+ * A message bundle function that selects the message to be returned.
2302
+ *
2303
+ * Uses `getLocale()` under the hood to determine the locale with an option.
2304
+ *
2305
+ * @template {string} T
2306
+ *
2307
+ * @example
2308
+ * * m.hello({ name: 'world' }, { locale: "en" })
2309
+ *
2310
+ * @typedef {(params: Record<string, never>, options: { locale: T }) => LocalizedString} MessageBundleFunction
2311
+ */