triiiceratops 0.9.5 → 0.9.7

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 (195) hide show
  1. package/dist/chunks/{TriiiceratopsViewer-BGtsfUPF.js → TriiiceratopsViewer-CVbWWD1o.js} +4466 -3476
  2. package/dist/chunks/{openseadragon-BTypULhm.js → openseadragon-H3QhDkLJ.js} +1 -1
  3. package/dist/components/DemoHeader.svelte +3 -6
  4. package/dist/paraglide/messages/_index.d.ts +89 -0
  5. package/dist/paraglide/messages/_index.js +90 -0
  6. package/dist/paraglide/messages/annotations_count.d.ts +6 -0
  7. package/dist/paraglide/messages/annotations_count.js +34 -0
  8. package/dist/paraglide/messages/attribution.d.ts +4 -0
  9. package/dist/paraglide/messages/attribution.js +34 -0
  10. package/dist/paraglide/messages/change_theme_label.d.ts +4 -0
  11. package/dist/paraglide/messages/change_theme_label.js +34 -0
  12. package/dist/paraglide/messages/close.d.ts +4 -0
  13. package/dist/paraglide/messages/close.js +34 -0
  14. package/dist/paraglide/messages/close_gallery.d.ts +4 -0
  15. package/dist/paraglide/messages/close_gallery.js +34 -0
  16. package/dist/paraglide/messages/close_menu.d.ts +4 -0
  17. package/dist/paraglide/messages/close_menu.js +34 -0
  18. package/dist/paraglide/messages/close_search.d.ts +4 -0
  19. package/dist/paraglide/messages/close_search.js +34 -0
  20. package/dist/paraglide/messages/copied.d.ts +4 -0
  21. package/dist/paraglide/messages/copied.js +34 -0
  22. package/dist/paraglide/messages/copy_config.d.ts +4 -0
  23. package/dist/paraglide/messages/copy_config.js +34 -0
  24. package/dist/paraglide/messages/demo_header_active_canvas.d.ts +4 -0
  25. package/dist/paraglide/messages/demo_header_active_canvas.js +34 -0
  26. package/dist/paraglide/messages/demo_header_external_controls.d.ts +4 -0
  27. package/dist/paraglide/messages/demo_header_external_controls.js +34 -0
  28. package/dist/paraglide/messages/docs.d.ts +4 -0
  29. package/dist/paraglide/messages/docs.js +34 -0
  30. package/dist/paraglide/messages/enter_full_screen.d.ts +4 -0
  31. package/dist/paraglide/messages/enter_full_screen.js +34 -0
  32. package/dist/paraglide/messages/error_prefix.d.ts +4 -0
  33. package/dist/paraglide/messages/error_prefix.js +34 -0
  34. package/dist/paraglide/messages/exit_full_screen.d.ts +4 -0
  35. package/dist/paraglide/messages/exit_full_screen.js +34 -0
  36. package/dist/paraglide/messages/gallery.d.ts +4 -0
  37. package/dist/paraglide/messages/gallery.js +34 -0
  38. package/dist/paraglide/messages/github.d.ts +4 -0
  39. package/dist/paraglide/messages/github.js +34 -0
  40. package/dist/paraglide/messages/hello_world.d.ts +4 -0
  41. package/dist/paraglide/messages/hello_world.js +34 -0
  42. package/dist/paraglide/messages/hide_all_annotations.d.ts +4 -0
  43. package/dist/paraglide/messages/hide_all_annotations.js +34 -0
  44. package/dist/paraglide/messages/hide_annotations.d.ts +4 -0
  45. package/dist/paraglide/messages/hide_annotations.js +34 -0
  46. package/dist/paraglide/messages/hide_gallery.d.ts +4 -0
  47. package/dist/paraglide/messages/hide_gallery.js +34 -0
  48. package/dist/paraglide/messages/iiif_manifest_label.d.ts +4 -0
  49. package/dist/paraglide/messages/iiif_manifest_label.js +34 -0
  50. package/dist/paraglide/messages/image_adjustments.d.ts +4 -0
  51. package/dist/paraglide/messages/image_adjustments.js +34 -0
  52. package/dist/paraglide/messages/language_select_label.d.ts +4 -0
  53. package/dist/paraglide/messages/language_select_label.js +34 -0
  54. package/dist/paraglide/messages/license.d.ts +4 -0
  55. package/dist/paraglide/messages/license.js +34 -0
  56. package/dist/paraglide/messages/load.d.ts +4 -0
  57. package/dist/paraglide/messages/load.js +34 -0
  58. package/dist/paraglide/messages/loading.d.ts +4 -0
  59. package/dist/paraglide/messages/loading.js +34 -0
  60. package/dist/paraglide/messages/manifest_placeholder.d.ts +4 -0
  61. package/dist/paraglide/messages/manifest_placeholder.js +34 -0
  62. package/dist/paraglide/messages/menu.d.ts +4 -0
  63. package/dist/paraglide/messages/menu.js +34 -0
  64. package/dist/paraglide/messages/metadata.d.ts +4 -0
  65. package/dist/paraglide/messages/metadata.js +34 -0
  66. package/dist/paraglide/messages/metadata_label_fallback.d.ts +4 -0
  67. package/dist/paraglide/messages/metadata_label_fallback.js +34 -0
  68. package/dist/paraglide/messages/next_canvas.d.ts +4 -0
  69. package/dist/paraglide/messages/next_canvas.js +34 -0
  70. package/dist/paraglide/messages/no_annotations_available.d.ts +4 -0
  71. package/dist/paraglide/messages/no_annotations_available.js +34 -0
  72. package/dist/paraglide/messages/no_canvases_loaded.d.ts +4 -0
  73. package/dist/paraglide/messages/no_canvases_loaded.js +34 -0
  74. package/dist/paraglide/messages/no_content.d.ts +4 -0
  75. package/dist/paraglide/messages/no_content.js +34 -0
  76. package/dist/paraglide/messages/no_image_found.d.ts +4 -0
  77. package/dist/paraglide/messages/no_image_found.js +34 -0
  78. package/dist/paraglide/messages/plugins_tooltip.d.ts +4 -0
  79. package/dist/paraglide/messages/plugins_tooltip.js +34 -0
  80. package/dist/paraglide/messages/previous_canvas.d.ts +4 -0
  81. package/dist/paraglide/messages/previous_canvas.js +34 -0
  82. package/dist/paraglide/messages/search.d.ts +4 -0
  83. package/dist/paraglide/messages/search.js +34 -0
  84. package/dist/paraglide/messages/search_panel_close.d.ts +4 -0
  85. package/dist/paraglide/messages/search_panel_close.js +34 -0
  86. package/dist/paraglide/messages/search_panel_instruction.d.ts +4 -0
  87. package/dist/paraglide/messages/search_panel_instruction.js +34 -0
  88. package/dist/paraglide/messages/search_panel_no_results.d.ts +6 -0
  89. package/dist/paraglide/messages/search_panel_no_results.js +34 -0
  90. package/dist/paraglide/messages/search_panel_placeholder.d.ts +4 -0
  91. package/dist/paraglide/messages/search_panel_placeholder.js +34 -0
  92. package/dist/paraglide/messages/search_panel_results_count.d.ts +6 -0
  93. package/dist/paraglide/messages/search_panel_results_count.js +34 -0
  94. package/dist/paraglide/messages/search_panel_title.d.ts +4 -0
  95. package/dist/paraglide/messages/search_panel_title.js +34 -0
  96. package/dist/paraglide/messages/settings_category_configuration.d.ts +4 -0
  97. package/dist/paraglide/messages/settings_category_configuration.js +34 -0
  98. package/dist/paraglide/messages/settings_category_general.d.ts +4 -0
  99. package/dist/paraglide/messages/settings_category_general.js +34 -0
  100. package/dist/paraglide/messages/settings_label.d.ts +4 -0
  101. package/dist/paraglide/messages/settings_label.js +34 -0
  102. package/dist/paraglide/messages/settings_position_bottom.d.ts +4 -0
  103. package/dist/paraglide/messages/settings_position_bottom.js +34 -0
  104. package/dist/paraglide/messages/settings_position_floating.d.ts +4 -0
  105. package/dist/paraglide/messages/settings_position_floating.js +34 -0
  106. package/dist/paraglide/messages/settings_position_left.d.ts +4 -0
  107. package/dist/paraglide/messages/settings_position_left.js +34 -0
  108. package/dist/paraglide/messages/settings_position_right.d.ts +4 -0
  109. package/dist/paraglide/messages/settings_position_right.js +34 -0
  110. package/dist/paraglide/messages/settings_position_top.d.ts +4 -0
  111. package/dist/paraglide/messages/settings_position_top.js +34 -0
  112. package/dist/paraglide/messages/settings_select_dock_position.d.ts +4 -0
  113. package/dist/paraglide/messages/settings_select_dock_position.js +34 -0
  114. package/dist/paraglide/messages/settings_submenu_annotations.d.ts +4 -0
  115. package/dist/paraglide/messages/settings_submenu_annotations.js +34 -0
  116. package/dist/paraglide/messages/settings_submenu_gallery.d.ts +4 -0
  117. package/dist/paraglide/messages/settings_submenu_gallery.js +34 -0
  118. package/dist/paraglide/messages/settings_submenu_right_menu_items.d.ts +4 -0
  119. package/dist/paraglide/messages/settings_submenu_right_menu_items.js +34 -0
  120. package/dist/paraglide/messages/settings_submenu_search.d.ts +4 -0
  121. package/dist/paraglide/messages/settings_submenu_search.js +34 -0
  122. package/dist/paraglide/messages/settings_toggle_canvas_nav.d.ts +4 -0
  123. package/dist/paraglide/messages/settings_toggle_canvas_nav.js +34 -0
  124. package/dist/paraglide/messages/settings_toggle_close_button.d.ts +4 -0
  125. package/dist/paraglide/messages/settings_toggle_close_button.js +34 -0
  126. package/dist/paraglide/messages/settings_toggle_draggable.d.ts +4 -0
  127. package/dist/paraglide/messages/settings_toggle_draggable.js +34 -0
  128. package/dist/paraglide/messages/settings_toggle_left_menu.d.ts +4 -0
  129. package/dist/paraglide/messages/settings_toggle_left_menu.js +34 -0
  130. package/dist/paraglide/messages/settings_toggle_open.d.ts +4 -0
  131. package/dist/paraglide/messages/settings_toggle_open.js +34 -0
  132. package/dist/paraglide/messages/settings_toggle_panel_open.d.ts +4 -0
  133. package/dist/paraglide/messages/settings_toggle_panel_open.js +34 -0
  134. package/dist/paraglide/messages/settings_toggle_right_menu.d.ts +4 -0
  135. package/dist/paraglide/messages/settings_toggle_right_menu.js +34 -0
  136. package/dist/paraglide/messages/settings_toggle_show_annotations.d.ts +4 -0
  137. package/dist/paraglide/messages/settings_toggle_show_annotations.js +34 -0
  138. package/dist/paraglide/messages/settings_toggle_show_fullscreen.d.ts +4 -0
  139. package/dist/paraglide/messages/settings_toggle_show_fullscreen.js +34 -0
  140. package/dist/paraglide/messages/settings_toggle_show_gallery.d.ts +4 -0
  141. package/dist/paraglide/messages/settings_toggle_show_gallery.js +34 -0
  142. package/dist/paraglide/messages/settings_toggle_show_info.d.ts +4 -0
  143. package/dist/paraglide/messages/settings_toggle_show_info.js +34 -0
  144. package/dist/paraglide/messages/settings_toggle_show_search.d.ts +4 -0
  145. package/dist/paraglide/messages/settings_toggle_show_search.js +34 -0
  146. package/dist/paraglide/messages/settings_toggle_visible_by_default.d.ts +4 -0
  147. package/dist/paraglide/messages/settings_toggle_visible_by_default.js +34 -0
  148. package/dist/paraglide/messages/show_all_annotations.d.ts +4 -0
  149. package/dist/paraglide/messages/show_all_annotations.js +34 -0
  150. package/dist/paraglide/messages/show_annotations.d.ts +4 -0
  151. package/dist/paraglide/messages/show_annotations.js +34 -0
  152. package/dist/paraglide/messages/show_gallery.d.ts +4 -0
  153. package/dist/paraglide/messages/show_gallery.js +34 -0
  154. package/dist/paraglide/messages/theme_menu_title.d.ts +4 -0
  155. package/dist/paraglide/messages/theme_menu_title.js +34 -0
  156. package/dist/paraglide/messages/toggle_annotations.d.ts +4 -0
  157. package/dist/paraglide/messages/toggle_annotations.js +34 -0
  158. package/dist/paraglide/messages/toggle_metadata.d.ts +4 -0
  159. package/dist/paraglide/messages/toggle_metadata.js +34 -0
  160. package/dist/paraglide/messages/toggle_search.d.ts +4 -0
  161. package/dist/paraglide/messages/toggle_search.js +34 -0
  162. package/dist/paraglide/messages/try_your_own.d.ts +4 -0
  163. package/dist/paraglide/messages/try_your_own.js +34 -0
  164. package/dist/paraglide/messages/viewer_variant_core.d.ts +4 -0
  165. package/dist/paraglide/messages/viewer_variant_core.js +34 -0
  166. package/dist/paraglide/messages/viewer_variant_custom_theme.d.ts +4 -0
  167. package/dist/paraglide/messages/viewer_variant_custom_theme.js +34 -0
  168. package/dist/paraglide/messages/viewer_variant_full.d.ts +4 -0
  169. package/dist/paraglide/messages/viewer_variant_full.js +34 -0
  170. package/dist/paraglide/messages/viewer_variant_svelte.d.ts +4 -0
  171. package/dist/paraglide/messages/viewer_variant_svelte.js +34 -0
  172. package/dist/paraglide/messages/viewer_variant_svelte_component_tooltip.d.ts +4 -0
  173. package/dist/paraglide/messages/viewer_variant_svelte_component_tooltip.js +34 -0
  174. package/dist/paraglide/messages/viewer_variant_tooltip_core.d.ts +4 -0
  175. package/dist/paraglide/messages/viewer_variant_tooltip_core.js +34 -0
  176. package/dist/paraglide/messages/viewer_variant_tooltip_custom_theme.d.ts +4 -0
  177. package/dist/paraglide/messages/viewer_variant_tooltip_custom_theme.js +34 -0
  178. package/dist/paraglide/messages/viewer_variant_tooltip_full.d.ts +4 -0
  179. package/dist/paraglide/messages/viewer_variant_tooltip_full.js +34 -0
  180. package/dist/paraglide/messages/visible_count.d.ts +6 -0
  181. package/dist/paraglide/messages/visible_count.js +34 -0
  182. package/dist/paraglide/messages.d.ts +2 -0
  183. package/dist/paraglide/messages.js +4 -0
  184. package/dist/paraglide/registry.d.ts +21 -0
  185. package/dist/paraglide/registry.js +31 -0
  186. package/dist/paraglide/runtime.d.ts +597 -0
  187. package/dist/paraglide/runtime.js +1453 -0
  188. package/dist/paraglide/server.d.ts +67 -0
  189. package/dist/paraglide/server.js +175 -0
  190. package/dist/state/i18n.svelte.d.ts +2 -2
  191. package/dist/state/i18n.svelte.js +9 -7
  192. package/dist/triiiceratops-bundle.js +3273 -2283
  193. package/dist/triiiceratops-element-image.js +1 -1
  194. package/dist/triiiceratops-element.js +1 -1
  195. package/package.json +3 -4
@@ -0,0 +1,597 @@
1
+ /**
2
+ * Sets the server side async local storage.
3
+ *
4
+ * The function is needed because the `runtime.js` file
5
+ * must define the `serverAsyncLocalStorage` variable to
6
+ * avoid a circular import between `runtime.js` and
7
+ * `server.js` files.
8
+ *
9
+ * @param {ParaglideAsyncLocalStorage | undefined} value
10
+ */
11
+ export function overwriteServerAsyncLocalStorage(value: ParaglideAsyncLocalStorage | undefined): void;
12
+ /**
13
+ * Check if something is an available locale.
14
+ *
15
+ * @example
16
+ * if (isLocale(params.locale)) {
17
+ * setLocale(params.locale);
18
+ * } else {
19
+ * setLocale('en');
20
+ * }
21
+ *
22
+ * @param {any} locale
23
+ * @returns {locale is Locale}
24
+ */
25
+ export function isLocale(locale: any): locale is Locale;
26
+ /**
27
+ * Asserts that the input is a locale.
28
+ *
29
+ * @param {any} input - The input to check.
30
+ * @returns {Locale} The input if it is a locale.
31
+ * @throws {Error} If the input is not a locale.
32
+ */
33
+ export function assertIsLocale(input: any): Locale;
34
+ /**
35
+ * Extracts a cookie from the document.
36
+ *
37
+ * Will return undefined if the document is not available or if the cookie is not set.
38
+ * The `document` object is not available in server-side rendering, so this function should not be called in that context.
39
+ *
40
+ * @returns {string | undefined}
41
+ */
42
+ export function extractLocaleFromCookie(): string | undefined;
43
+ export function extractLocaleFromHeader(request: Request): Locale;
44
+ export function extractLocaleFromNavigator(): Locale | undefined;
45
+ /**
46
+ * Extracts the locale from a given URL using native URLPattern.
47
+ *
48
+ * @param {URL|string} url - The full URL from which to extract the locale.
49
+ * @returns {Locale|undefined} The extracted locale, or undefined if no locale is found.
50
+ */
51
+ export function extractLocaleFromUrl(url: URL | string): Locale | undefined;
52
+ /**
53
+ * Lower-level URL localization function, primarily used in server contexts.
54
+ *
55
+ * This function is designed for server-side usage where you need precise control
56
+ * over URL localization, such as in middleware or request handlers. It works with
57
+ * URL objects and always returns absolute URLs.
58
+ *
59
+ * For client-side UI components, use `localizeHref()` instead, which provides
60
+ * a more convenient API with relative paths and automatic locale detection.
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * // Server middleware example
65
+ * app.use((req, res, next) => {
66
+ * const url = new URL(req.url, `${req.protocol}://${req.headers.host}`);
67
+ * const localized = localizeUrl(url, { locale: "de" });
68
+ *
69
+ * if (localized.href !== url.href) {
70
+ * return res.redirect(localized.href);
71
+ * }
72
+ * next();
73
+ * });
74
+ * ```
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * // Using with URL patterns
79
+ * const url = new URL("https://example.com/about");
80
+ * localizeUrl(url, { locale: "de" });
81
+ * // => URL("https://example.com/de/about")
82
+ *
83
+ * // Using with domain-based localization
84
+ * const url = new URL("https://example.com/store");
85
+ * localizeUrl(url, { locale: "de" });
86
+ * // => URL("https://de.example.com/store")
87
+ * ```
88
+ *
89
+ * @param {string | URL} url - The URL to localize. If string, must be absolute.
90
+ * @param {Object} [options] - Options for localization
91
+ * @param {string} [options.locale] - Target locale. If not provided, uses getLocale()
92
+ * @returns {URL} The localized URL, always absolute
93
+ */
94
+ export function localizeUrl(url: string | URL, options?: {
95
+ locale?: string | undefined;
96
+ }): URL;
97
+ /**
98
+ * Low-level URL de-localization function, primarily used in server contexts.
99
+ *
100
+ * This function is designed for server-side usage where you need precise control
101
+ * over URL de-localization, such as in middleware or request handlers. It works with
102
+ * URL objects and always returns absolute URLs.
103
+ *
104
+ * For client-side UI components, use `deLocalizeHref()` instead, which provides
105
+ * a more convenient API with relative paths.
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * // Server middleware example
110
+ * app.use((req, res, next) => {
111
+ * const url = new URL(req.url, `${req.protocol}://${req.headers.host}`);
112
+ * const baseUrl = deLocalizeUrl(url);
113
+ *
114
+ * // Store the base URL for later use
115
+ * req.baseUrl = baseUrl;
116
+ * next();
117
+ * });
118
+ * ```
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * // Using with URL patterns
123
+ * const url = new URL("https://example.com/de/about");
124
+ * deLocalizeUrl(url); // => URL("https://example.com/about")
125
+ *
126
+ * // Using with domain-based localization
127
+ * const url = new URL("https://de.example.com/store");
128
+ * deLocalizeUrl(url); // => URL("https://example.com/store")
129
+ * ```
130
+ *
131
+ * @param {string | URL} url - The URL to de-localize. If string, must be absolute.
132
+ * @returns {URL} The de-localized URL, always absolute
133
+ */
134
+ export function deLocalizeUrl(url: string | URL): URL;
135
+ export function aggregateGroups(match: any): Record<string, string | null | undefined>;
136
+ /**
137
+ * @typedef {object} ShouldRedirectServerInput
138
+ * @property {Request} request
139
+ * @property {string | URL} [url]
140
+ * @property {ReturnType<typeof assertIsLocale>} [locale]
141
+ *
142
+ * @typedef {object} ShouldRedirectClientInput
143
+ * @property {undefined} [request]
144
+ * @property {string | URL} [url]
145
+ * @property {ReturnType<typeof assertIsLocale>} [locale]
146
+ *
147
+ * @typedef {ShouldRedirectServerInput | ShouldRedirectClientInput} ShouldRedirectInput
148
+ *
149
+ * @typedef {object} ShouldRedirectResult
150
+ * @property {boolean} shouldRedirect - Indicates whether the consumer should perform a redirect.
151
+ * @property {ReturnType<typeof assertIsLocale>} locale - Locale resolved using the configured strategies.
152
+ * @property {URL | undefined} redirectUrl - Destination URL when a redirect is required.
153
+ */
154
+ /**
155
+ * Determines whether a redirect is required to align the current URL with the active locale.
156
+ *
157
+ * This helper mirrors the logic that powers `paraglideMiddleware`, but works in both server
158
+ * and client environments. It evaluates the configured strategies in order, computes the
159
+ * canonical localized URL, and reports when the current URL does not match.
160
+ *
161
+ * When called in the browser without arguments, the current `window.location.href` is used.
162
+ *
163
+ * @example
164
+ * // Client side usage (e.g. TanStack Router beforeLoad hook)
165
+ * async function beforeLoad({ location }) {
166
+ * const decision = await shouldRedirect({ url: location.href });
167
+ *
168
+ * if (decision.shouldRedirect) {
169
+ * throw redirect({ to: decision.redirectUrl.href });
170
+ * }
171
+ * }
172
+ *
173
+ * @example
174
+ * // Server side usage with a Request
175
+ * export async function handle(request) {
176
+ * const decision = await shouldRedirect({ request });
177
+ *
178
+ * if (decision.shouldRedirect) {
179
+ * return Response.redirect(decision.redirectUrl, 307);
180
+ * }
181
+ *
182
+ * return render(request, decision.locale);
183
+ * }
184
+ *
185
+ * @param {ShouldRedirectInput} [input]
186
+ * @returns {Promise<ShouldRedirectResult>}
187
+ */
188
+ export function shouldRedirect(input?: ShouldRedirectInput): Promise<ShouldRedirectResult>;
189
+ /**
190
+ * High-level URL localization function optimized for client-side UI usage.
191
+ *
192
+ * This is a convenience wrapper around `localizeUrl()` that provides features
193
+ * needed in UI:
194
+ *
195
+ * - Accepts relative paths (e.g., "/about")
196
+ * - Returns relative paths when possible
197
+ * - Automatically detects current locale if not specified
198
+ * - Handles string input/output instead of URL objects
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * // In a React/Vue/Svelte component
203
+ * const NavLink = ({ href }) => {
204
+ * // Automatically uses current locale, keeps path relative
205
+ * return <a href={localizeHref(href)}>...</a>;
206
+ * };
207
+ *
208
+ * // Examples:
209
+ * localizeHref("/about")
210
+ * // => "/de/about" (if current locale is "de")
211
+ * localizeHref("/store", { locale: "fr" })
212
+ * // => "/fr/store" (explicit locale)
213
+ *
214
+ * // Cross-origin links remain absolute
215
+ * localizeHref("https://other-site.com/about")
216
+ * // => "https://other-site.com/de/about"
217
+ * ```
218
+ *
219
+ * For server-side URL localization (e.g., in middleware), use `localizeUrl()`
220
+ * which provides more precise control over URL handling.
221
+ *
222
+ * @param {string} href - The href to localize (can be relative or absolute)
223
+ * @param {Object} [options] - Options for localization
224
+ * @param {string} [options.locale] - Target locale. If not provided, uses `getLocale()`
225
+ * @returns {string} The localized href, relative if input was relative
226
+ */
227
+ export function localizeHref(href: string, options?: {
228
+ locale?: string | undefined;
229
+ }): string;
230
+ /**
231
+ * High-level URL de-localization function optimized for client-side UI usage.
232
+ *
233
+ * This is a convenience wrapper around `deLocalizeUrl()` that provides features
234
+ * needed in the UI:
235
+ *
236
+ * - Accepts relative paths (e.g., "/de/about")
237
+ * - Returns relative paths when possible
238
+ * - Handles string input/output instead of URL objects
239
+ *
240
+ * @example
241
+ * ```typescript
242
+ * // In a React/Vue/Svelte component
243
+ * const LocaleSwitcher = ({ href }) => {
244
+ * // Remove locale prefix before switching
245
+ * const baseHref = deLocalizeHref(href);
246
+ * return locales.map(locale =>
247
+ * <a href={localizeHref(baseHref, { locale })}>
248
+ * Switch to {locale}
249
+ * </a>
250
+ * );
251
+ * };
252
+ *
253
+ * // Examples:
254
+ * deLocalizeHref("/de/about") // => "/about"
255
+ * deLocalizeHref("/fr/store") // => "/store"
256
+ *
257
+ * // Cross-origin links remain absolute
258
+ * deLocalizeHref("https://example.com/de/about")
259
+ * // => "https://example.com/about"
260
+ * ```
261
+ *
262
+ * For server-side URL de-localization (e.g., in middleware), use `deLocalizeUrl()`
263
+ * which provides more precise control over URL handling.
264
+ *
265
+ * @param {string} href - The href to de-localize (can be relative or absolute)
266
+ * @returns {string} The de-localized href, relative if input was relative
267
+ * @see deLocalizeUrl - For low-level URL de-localization in server contexts
268
+ */
269
+ export function deLocalizeHref(href: string): string;
270
+ /**
271
+ * @param {string} safeModuleId
272
+ * @param {Locale} locale
273
+ */
274
+ export function trackMessageCall(safeModuleId: string, locale: Locale): void;
275
+ /**
276
+ * Generates a list of localized URLs for all provided URLs.
277
+ *
278
+ * This is useful for SSG (Static Site Generation) and sitemap generation.
279
+ * NextJS and other frameworks use this function for SSG.
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * const urls = generateStaticLocalizedUrls([
284
+ * "https://example.com/about",
285
+ * "https://example.com/blog",
286
+ * ]);
287
+ * urls[0].href // => "https://example.com/about"
288
+ * urls[1].href // => "https://example.com/blog"
289
+ * urls[2].href // => "https://example.com/de/about"
290
+ * urls[3].href // => "https://example.com/de/blog"
291
+ * ...
292
+ * ```
293
+ *
294
+ * @param {(string | URL)[]} urls - List of URLs to generate localized versions for. Can be absolute URLs or paths.
295
+ * @returns {URL[]} List of localized URLs as URL objects
296
+ */
297
+ export function generateStaticLocalizedUrls(urls: (string | URL)[]): URL[];
298
+ /**
299
+ * Checks if the given strategy is a custom strategy.
300
+ *
301
+ * @param {any} strategy The name of the custom strategy to validate.
302
+ * Must be a string that starts with "custom-" followed by alphanumeric characters, hyphens, or underscores.
303
+ * @returns {boolean} Returns true if it is a custom strategy, false otherwise.
304
+ */
305
+ export function isCustomStrategy(strategy: any): boolean;
306
+ /**
307
+ * Defines a custom strategy that is executed on the server.
308
+ *
309
+ * @param {any} strategy The name of the custom strategy to define. Must follow the pattern custom-name with alphanumeric characters, hyphens, or underscores.
310
+ * @param {CustomServerStrategyHandler} handler The handler for the custom strategy, which should implement
311
+ * the method getLocale.
312
+ * @returns {void}
313
+ */
314
+ export function defineCustomServerStrategy(strategy: any, handler: CustomServerStrategyHandler): void;
315
+ /**
316
+ * Defines a custom strategy that is executed on the client.
317
+ *
318
+ * @param {any} strategy The name of the custom strategy to define. Must follow the pattern custom-name with alphanumeric characters, hyphens, or underscores.
319
+ * @param {CustomClientStrategyHandler} handler The handler for the custom strategy, which should implement the
320
+ * methods getLocale and setLocale.
321
+ * @returns {void}
322
+ */
323
+ export function defineCustomClientStrategy(strategy: any, handler: CustomClientStrategyHandler): void;
324
+ /**
325
+ * The project's base locale.
326
+ *
327
+ * @example
328
+ * if (locale === baseLocale) {
329
+ * // do something
330
+ * }
331
+ */
332
+ export const baseLocale: "en";
333
+ /**
334
+ * The project's locales that have been specified in the settings.
335
+ *
336
+ * @example
337
+ * if (locales.includes(userSelectedLocale) === false) {
338
+ * throw new Error('Locale is not available');
339
+ * }
340
+ */
341
+ export const locales: readonly ["en", "de"];
342
+ /** @type {string} */
343
+ export const cookieName: string;
344
+ /** @type {number} */
345
+ export const cookieMaxAge: number;
346
+ /** @type {string} */
347
+ export const cookieDomain: string;
348
+ /** @type {string} */
349
+ export const localStorageKey: string;
350
+ /**
351
+ * @type {Array<"cookie" | "baseLocale" | "globalVariable" | "url" | "preferredLanguage" | "localStorage" | `custom-${string}`>}
352
+ */
353
+ export const strategy: Array<"cookie" | "baseLocale" | "globalVariable" | "url" | "preferredLanguage" | "localStorage" | `custom-${string}`>;
354
+ /**
355
+ * The used URL patterns.
356
+ *
357
+ * @type {Array<{ pattern: string, localized: Array<[Locale, string]> }> }
358
+ */
359
+ export const urlPatterns: Array<{
360
+ pattern: string;
361
+ localized: Array<[Locale, string]>;
362
+ }>;
363
+ /**
364
+ * @typedef {{
365
+ * getStore(): {
366
+ * locale?: Locale,
367
+ * origin?: string,
368
+ * messageCalls?: Set<string>
369
+ * } | undefined,
370
+ * run: (store: { locale?: Locale, origin?: string, messageCalls?: Set<string>},
371
+ * cb: any) => any
372
+ * }} ParaglideAsyncLocalStorage
373
+ */
374
+ /**
375
+ * Server side async local storage that is set by `serverMiddleware()`.
376
+ *
377
+ * The variable is used to retrieve the locale and origin in a server-side
378
+ * rendering context without effecting other requests.
379
+ *
380
+ * @type {ParaglideAsyncLocalStorage | undefined}
381
+ */
382
+ export let serverAsyncLocalStorage: ParaglideAsyncLocalStorage | undefined;
383
+ export const disableAsyncLocalStorage: false;
384
+ export const experimentalMiddlewareLocaleSplitting: false;
385
+ export const isServer: boolean;
386
+ /**
387
+ * Get the current locale.
388
+ *
389
+ * @example
390
+ * if (getLocale() === 'de') {
391
+ * console.log('Germany 🇩🇪');
392
+ * } else if (getLocale() === 'nl') {
393
+ * console.log('Netherlands 🇳🇱');
394
+ * }
395
+ *
396
+ * @type {() => Locale}
397
+ */
398
+ export let getLocale: () => Locale;
399
+ /**
400
+ * Overwrite the \`getLocale()\` function.
401
+ *
402
+ * Use this function to overwrite how the locale is resolved. For example,
403
+ * you can resolve the locale from the browser's preferred language,
404
+ * a cookie, env variable, or a user's preference.
405
+ *
406
+ * @example
407
+ * overwriteGetLocale(() => {
408
+ * // resolve the locale from a cookie. fallback to the base locale.
409
+ * return Cookies.get('locale') ?? baseLocale
410
+ * }
411
+ *
412
+ * @type {(fn: () => Locale) => void}
413
+ */
414
+ export const overwriteGetLocale: (fn: () => Locale) => void;
415
+ /**
416
+ * @typedef {(newLocale: Locale, options?: { reload?: boolean }) => void | Promise<void>} SetLocaleFn
417
+ */
418
+ /**
419
+ * Set the locale.
420
+ *
421
+ * Set locale reloads the site by default on the client. Reloading
422
+ * can be disabled by passing \`reload: false\` as an option. If
423
+ * reloading is disabled, you need to ensure that the UI is updated
424
+ * to reflect the new locale.
425
+ *
426
+ * If any custom strategy's \`setLocale\` function is async, then this
427
+ * function will become async as well.
428
+ *
429
+ * @example
430
+ * setLocale('en');
431
+ *
432
+ * @example
433
+ * setLocale('en', { reload: false });
434
+ *
435
+ * @type {SetLocaleFn}
436
+ */
437
+ export let setLocale: SetLocaleFn;
438
+ export function overwriteSetLocale(fn: SetLocaleFn): void;
439
+ /**
440
+ * The origin of the current URL.
441
+ *
442
+ * Defaults to "http://y.com" in non-browser environments. If this
443
+ * behavior is not desired, the implementation can be overwritten
444
+ * by `overwriteGetUrlOrigin()`.
445
+ *
446
+ * @type {() => string}
447
+ */
448
+ export let getUrlOrigin: () => string;
449
+ /**
450
+ * Overwrite the getUrlOrigin function.
451
+ *
452
+ * Use this function in server environments to
453
+ * define how the URL origin is resolved.
454
+ *
455
+ * @type {(fn: () => string) => void}
456
+ */
457
+ export let overwriteGetUrlOrigin: (fn: () => string) => void;
458
+ /**
459
+ * Extracts a locale from a request.
460
+ *
461
+ * Use the function on the server to extract the locale
462
+ * from a request.
463
+ *
464
+ * The function goes through the strategies in the order
465
+ * they are defined. If a strategy returns an invalid locale,
466
+ * it will fall back to the next strategy.
467
+ *
468
+ * Note: Custom server strategies are not supported in this synchronous version.
469
+ * Use `extractLocaleFromRequestAsync` if you need custom server strategies with async getLocale methods.
470
+ *
471
+ * @example
472
+ * const locale = extractLocaleFromRequest(request);
473
+ *
474
+ * @type {(request: Request) => Locale}
475
+ */
476
+ export const extractLocaleFromRequest: (request: Request) => Locale;
477
+ /**
478
+ * Asynchronously extracts a locale from a request.
479
+ *
480
+ * This function supports async custom server strategies, unlike the synchronous
481
+ * `extractLocaleFromRequest`. Use this function when you have custom server strategies
482
+ * that need to perform asynchronous operations (like database calls) in their getLocale method.
483
+ *
484
+ * The function first processes any custom server strategies asynchronously, then falls back
485
+ * to the synchronous `extractLocaleFromRequest` for all other strategies.
486
+ *
487
+ * @see {@link https://github.com/opral/inlang-paraglide-js/issues/527#issuecomment-2978151022}
488
+ *
489
+ * @example
490
+ * // Basic usage
491
+ * const locale = await extractLocaleFromRequestAsync(request);
492
+ *
493
+ * @example
494
+ * // With custom async server strategy
495
+ * defineCustomServerStrategy("custom-database", {
496
+ * getLocale: async (request) => {
497
+ * const userId = extractUserIdFromRequest(request);
498
+ * return await getUserLocaleFromDatabase(userId);
499
+ * }
500
+ * });
501
+ *
502
+ * const locale = await extractLocaleFromRequestAsync(request);
503
+ *
504
+ * @type {(request: Request) => Promise<Locale>}
505
+ */
506
+ export const extractLocaleFromRequestAsync: (request: Request) => Promise<Locale>;
507
+ /**
508
+ * @typedef {"cookie" | "baseLocale" | "globalVariable" | "url" | "preferredLanguage" | "localStorage"} BuiltInStrategy
509
+ */
510
+ /**
511
+ * @typedef {`custom_${string}`} CustomStrategy
512
+ */
513
+ /**
514
+ * @typedef {BuiltInStrategy | CustomStrategy} Strategy
515
+ */
516
+ /**
517
+ * @typedef {Array<Strategy>} Strategies
518
+ */
519
+ /**
520
+ * @typedef {{ getLocale: (request?: Request) => Promise<string | undefined> | (string | undefined) }} CustomServerStrategyHandler
521
+ */
522
+ /**
523
+ * @typedef {{ getLocale: () => Promise<string|undefined> | (string | undefined), setLocale: (locale: string) => Promise<void> | void }} CustomClientStrategyHandler
524
+ */
525
+ /** @type {Map<string, CustomServerStrategyHandler>} */
526
+ export const customServerStrategies: Map<string, CustomServerStrategyHandler>;
527
+ /** @type {Map<string, CustomClientStrategyHandler>} */
528
+ export const customClientStrategies: Map<string, CustomClientStrategyHandler>;
529
+ export type ShouldRedirectServerInput = {
530
+ request: Request;
531
+ url?: string | URL | undefined;
532
+ locale?: "en" | "de" | undefined;
533
+ };
534
+ export type ShouldRedirectClientInput = {
535
+ request?: undefined;
536
+ url?: string | URL | undefined;
537
+ locale?: "en" | "de" | undefined;
538
+ };
539
+ export type ShouldRedirectInput = ShouldRedirectServerInput | ShouldRedirectClientInput;
540
+ export type ShouldRedirectResult = {
541
+ /**
542
+ * - Indicates whether the consumer should perform a redirect.
543
+ */
544
+ shouldRedirect: boolean;
545
+ /**
546
+ * - Locale resolved using the configured strategies.
547
+ */
548
+ locale: ReturnType<typeof assertIsLocale>;
549
+ /**
550
+ * - Destination URL when a redirect is required.
551
+ */
552
+ redirectUrl: URL | undefined;
553
+ };
554
+ export type ParaglideAsyncLocalStorage = {
555
+ getStore(): {
556
+ locale?: Locale;
557
+ origin?: string;
558
+ messageCalls?: Set<string>;
559
+ } | undefined;
560
+ run: (store: {
561
+ locale?: Locale;
562
+ origin?: string;
563
+ messageCalls?: Set<string>;
564
+ }, cb: any) => any;
565
+ };
566
+ export type SetLocaleFn = (newLocale: Locale, options?: {
567
+ reload?: boolean;
568
+ }) => void | Promise<void>;
569
+ export type BuiltInStrategy = "cookie" | "baseLocale" | "globalVariable" | "url" | "preferredLanguage" | "localStorage";
570
+ export type CustomStrategy = `custom_${string}`;
571
+ export type Strategy = BuiltInStrategy | CustomStrategy;
572
+ export type Strategies = Array<Strategy>;
573
+ export type CustomServerStrategyHandler = {
574
+ getLocale: (request?: Request) => Promise<string | undefined> | (string | undefined);
575
+ };
576
+ export type CustomClientStrategyHandler = {
577
+ getLocale: () => Promise<string | undefined> | (string | undefined);
578
+ setLocale: (locale: string) => Promise<void> | void;
579
+ };
580
+ /**
581
+ * A locale that is available in the project.
582
+ */
583
+ export type Locale = (typeof locales)[number];
584
+ /**
585
+ * A branded type representing a localized string.
586
+ *
587
+ * Message functions return this type instead of `string`, enabling TypeScript
588
+ * to distinguish translated strings from regular strings at compile time.
589
+ * This allows you to enforce that only properly localized content is used
590
+ * in your UI components.
591
+ *
592
+ * Since `LocalizedString` is a branded subtype of `string`, it remains fully
593
+ * backward compatible—you can pass it anywhere a `string` is expected.
594
+ */
595
+ export type LocalizedString = string & {
596
+ readonly __brand: "LocalizedString";
597
+ };