@edrlab/thorium-web 1.1.7 → 1.2.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 (72) hide show
  1. package/dist/{ThPreferencesAdapter-B8AYujCA.d.mts → ThPreferencesAdapter-DrZ5_6Dv.d.mts} +4 -139
  2. package/dist/{ThSettingsWrapper-BlmAxcWF.d.mts → ThSettingsWrapper-8Kx0SnH4.d.mts} +1 -1
  3. package/dist/{actions-BRtHsxpm.d.mts → actions-D2CHvCHu.d.mts} +2 -2
  4. package/dist/{actionsReducer-bT0pfxLJ.d.mts → actionsReducer-kc-S130w.d.mts} +3 -24
  5. package/dist/chunk-34MVY33F.mjs +913 -0
  6. package/dist/chunk-34MVY33F.mjs.map +1 -0
  7. package/dist/{chunk-KJXHAJYK.mjs → chunk-4VHEHMJN.mjs} +128 -11
  8. package/dist/chunk-4VHEHMJN.mjs.map +1 -0
  9. package/dist/{chunk-6V3O7FCS.mjs → chunk-72XCX5TD.mjs} +3 -3
  10. package/dist/{chunk-6V3O7FCS.mjs.map → chunk-72XCX5TD.mjs.map} +1 -1
  11. package/dist/{chunk-YIW2OOMW.mjs → chunk-7NEQAW7J.mjs} +2 -2
  12. package/dist/chunk-7NEQAW7J.mjs.map +1 -0
  13. package/dist/{chunk-4C3UOTX4.mjs → chunk-H4J2VY7Z.mjs} +172 -27
  14. package/dist/chunk-H4J2VY7Z.mjs.map +1 -0
  15. package/dist/{chunk-COQXDRKD.mjs → chunk-K3K7TUWM.mjs} +2 -2
  16. package/dist/chunk-K3K7TUWM.mjs.map +1 -0
  17. package/dist/chunk-RRDEPGBK.mjs +75 -0
  18. package/dist/chunk-RRDEPGBK.mjs.map +1 -0
  19. package/dist/chunk-S4M7ED5Q.mjs +407 -0
  20. package/dist/chunk-S4M7ED5Q.mjs.map +1 -0
  21. package/dist/components/Epub/index.d.mts +17 -11
  22. package/dist/components/Epub/index.mjs +9 -828
  23. package/dist/components/Epub/index.mjs.map +1 -1
  24. package/dist/components/Misc/index.css +23 -0
  25. package/dist/components/Misc/index.css.map +1 -1
  26. package/dist/components/Misc/index.d.mts +10 -1
  27. package/dist/components/Misc/index.mjs +31 -3
  28. package/dist/components/Misc/index.mjs.map +1 -1
  29. package/dist/components/Reader/index.css +1283 -0
  30. package/dist/components/Reader/index.css.map +1 -0
  31. package/dist/components/Reader/index.d.mts +30 -0
  32. package/dist/components/Reader/index.mjs +79 -0
  33. package/dist/components/Reader/index.mjs.map +1 -0
  34. package/dist/components/WebPub/index.d.mts +15 -31
  35. package/dist/components/WebPub/index.mjs +9 -372
  36. package/dist/components/WebPub/index.mjs.map +1 -1
  37. package/dist/core/Components/index.d.mts +7 -6
  38. package/dist/core/Helpers/index.d.mts +1 -1
  39. package/dist/core/Hooks/index.d.mts +54 -5
  40. package/dist/core/Hooks/index.mjs +1 -1
  41. package/dist/errorHandler-CL2YIfQY.d.mts +26 -0
  42. package/dist/i18n/index.mjs +2 -2
  43. package/dist/immer.d-CoRThNOF.d.mts +23 -0
  44. package/dist/lib/index.d.mts +12 -162
  45. package/dist/lib/index.mjs +1 -1
  46. package/dist/locales/el/thorium-web.json +31 -0
  47. package/dist/locales/en/thorium-web.json +10 -1
  48. package/dist/locales/et/thorium-web.json +6 -2
  49. package/dist/locales/fi/thorium-shared.json +14 -8
  50. package/dist/locales/fi/thorium-web.json +2 -1
  51. package/dist/locales/fr/thorium-shared.json +100 -0
  52. package/dist/locales/it/thorium-shared.json +9 -0
  53. package/dist/locales/lt/thorium-shared.json +22 -13
  54. package/dist/locales/lt/thorium-web.json +2 -1
  55. package/dist/locales/pt-PT/thorium-shared.json +64 -1
  56. package/dist/locales/pt-PT/thorium-web.json +4 -3
  57. package/dist/locales/sv/thorium-shared.json +61 -3
  58. package/dist/locales/sv/thorium-web.json +4 -3
  59. package/dist/preferences/index.d.mts +8 -7
  60. package/dist/preferences/index.mjs +1 -1
  61. package/dist/settingsReducer-C1wwCAMv.d.mts +159 -0
  62. package/dist/{ui-BVlJcPL_.d.mts → ui-CamWuqOo.d.mts} +1 -1
  63. package/dist/useContrast-D6sjPjxy.d.mts +152 -0
  64. package/dist/{useEpubNavigator-CsraD65e.d.mts → useEpubNavigator-CwHJfoiV.d.mts} +1 -1
  65. package/dist/{usePreferences-rfT368__.d.mts → usePreferences-BXFJbval.d.mts} +1 -1
  66. package/dist/{StatefulReader-CjgFzHoO.d.mts → useReaderTransitions-guT-eA-Q.d.mts} +50 -50
  67. package/package.json +5 -3
  68. package/dist/chunk-4C3UOTX4.mjs.map +0 -1
  69. package/dist/chunk-COQXDRKD.mjs.map +0 -1
  70. package/dist/chunk-KJXHAJYK.mjs.map +0 -1
  71. package/dist/chunk-YIW2OOMW.mjs.map +0 -1
  72. package/dist/useContrast-Cgsrl7GS.d.mts +0 -15
@@ -1,17 +1,18 @@
1
1
  import { makeBreakpointsMap, isInteractiveElement, isKeyboardTriggered, isActiveElement, getBestMatchingProgressionFormat } from './chunk-47AIIJFO.mjs';
2
- import { useFullscreen, useEpubNavigator } from './chunk-KJXHAJYK.mjs';
3
- import { useAppDispatch, setFullscreen, useAppSelector, setActionOpen, dockAction, setSettingsContainer, debounce, setColumnCount, setWebPubFontFamily, setFontFamily, setWebPubFontWeight, setFontWeight, setWebPubHyphens, setHyphens, setScroll, setWebPubLetterSpacing, setLetterSpacing, setWebPubLineHeight, setLineHeight, setWebPubParagraphIndent, setParagraphIndent, setWebPubParagraphSpacing, setParagraphSpacing, setWebPubWordSpacing, setWordSpacing, setWebPubSpacingPreset, setWebPubPublisherStyles, setSpacingPreset, setPublisherStyles, setWebPubTextAlign, setTextAlign, setWebPubTextNormalization, setTextNormalization, setTheme, setWebPubZoom, setFontSize, ThReduxPreferencesAdapter, setHovering, setImmersive, setOverflow, setUserNavigated, setTocEntry, collapseDockPanel, expandDockPanel, activateDockPanel, deactivateDockPanel, setDockPanelWidth } from './chunk-COQXDRKD.mjs';
4
- import { usePreferences, prefixString, ThDockingTypes, ThSheetTypes, defaultSpacingSettingsSubpanel, defaultSpacingSettingsMain, defaultTextSettingsSubpanel, defaultTextSettingsMain, usePreferenceKeys, ThTextSettingsKeys, ThSpacingSettingsKeys, buildThemeObject, defaultPreferences, ThPreferencesProvider } from './chunk-YIW2OOMW.mjs';
2
+ import { useFullscreen, useEpubNavigator, useLocalStorage } from './chunk-4VHEHMJN.mjs';
3
+ import { useAppDispatch, setFullscreen, useAppSelector, setActionOpen, dockAction, setSettingsContainer, debounce, setColumnCount, setWebPubFontFamily, setFontFamily, setWebPubFontWeight, setFontWeight, setWebPubHyphens, setHyphens, setScroll, setWebPubLetterSpacing, setLetterSpacing, setWebPubLineHeight, setLineHeight, setWebPubParagraphIndent, setParagraphIndent, setWebPubParagraphSpacing, setParagraphSpacing, setWebPubWordSpacing, setWordSpacing, setWebPubSpacingPreset, setWebPubPublisherStyles, setSpacingPreset, setPublisherStyles, setWebPubTextAlign, setTextAlign, setWebPubTextNormalization, setTextNormalization, setTheme, setWebPubZoom, setFontSize, ThReduxPreferencesAdapter, setReaderProfile, setPositionsList, setRTL, setFXL, setFontLanguage, setHasDisplayTransformability, setHovering, setImmersive, setOverflow, setUserNavigated, setTocEntry, collapseDockPanel, expandDockPanel, activateDockPanel, deactivateDockPanel, setDockPanelWidth } from './chunk-K3K7TUWM.mjs';
4
+ import { usePreferences, prefixString, ThDockingTypes, ThSheetTypes, defaultSpacingSettingsSubpanel, defaultSpacingSettingsMain, defaultTextSettingsSubpanel, defaultTextSettingsMain, usePreferenceKeys, ThTextSettingsKeys, ThSpacingSettingsKeys, buildThemeObject, defaultPreferences, ThPreferencesProvider } from './chunk-7NEQAW7J.mjs';
5
5
  import { ThRunningHeadFormat, ThProgressionFormat } from './chunk-XVSFXHYB.mjs';
6
6
  import { isIOSish, getPlatform, buildShortcut, metaKeys } from './chunk-5LUMM7FW.mjs';
7
- import { useI18n } from './chunk-IYAFKTPL.mjs';
7
+ import { ErrorHandler } from './chunk-RRDEPGBK.mjs';
8
8
  import { ThMenuItem, ThActionButton, ThMenu, ThCollapsibleActionsBar, ThPopover, ThContainerHeader, ThNavigationButton, ThContainerBody, ThBottomSheet, ThCloseButton, ThModal, ThDockedPanel, ThTypedComponentRenderer, useActions, ThForm, ThFormNumberField, ThSettingsWrapper, ThFormSearchField, ThRadioGroup, ThDropdown, ThSwitch, ThNumberField, ThSlider, ThInteractiveOverlay, ThHeader, ThFooter, ThLink, ThLibrary, ThHome, ThBackArrow, ThRunningHead, ThPagination, ThProgression } from './chunk-NYZBHYW2.mjs';
9
9
  import { usePrevious } from './chunk-YZ73DHRU.mjs';
10
+ import { useI18n } from './chunk-IYAFKTPL.mjs';
10
11
  import { Text, useFilter, Tree, TreeItem, TreeItemContent, Button, Collection, ListBox, ListBoxItem, Radio, Keyboard, Toolbar } from 'react-aria-components';
11
12
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
12
13
  import React18, { createContext, useRef, useCallback, useEffect, useMemo, useState, useContext } from 'react';
13
14
  import classNames3 from 'classnames';
14
- import { Link, HttpFetcher } from '@readium/shared';
15
+ import { Link, HttpFetcher, Manifest, Publication, ReadingProgression, Layout, Feature, Profile } from '@readium/shared';
15
16
  import { TextAlignment } from '@readium/navigator';
16
17
  import { useStore } from 'react-redux';
17
18
  import { PanelGroup, Panel, PanelResizeHandle } from 'react-resizable-panels';
@@ -3961,7 +3962,7 @@ var createDefaultPlugin = () => {
3961
3962
  id: "core",
3962
3963
  name: "Core Components",
3963
3964
  description: "Default components for Thorium Web Epub StatefulReader",
3964
- version: "1.1.7",
3965
+ version: "1.2.0",
3965
3966
  components: {
3966
3967
  actions: {
3967
3968
  ["fullscreen" /* fullscreen */]: {
@@ -4104,49 +4105,193 @@ var useReaderTransitions = () => {
4104
4105
  toUserNavigation
4105
4106
  };
4106
4107
  };
4108
+
4109
+ // src/helpers/deserializePositions.ts
4110
+ var deserializePositions = (positionsList) => {
4111
+ return positionsList?.map((locator) => ({
4112
+ href: locator.href,
4113
+ type: locator.type,
4114
+ locations: {
4115
+ position: locator.locations.position,
4116
+ progression: locator.locations.progression,
4117
+ totalProgression: locator.locations.totalProgression
4118
+ }
4119
+ }));
4120
+ };
4121
+
4122
+ // src/hooks/usePublication.ts
4123
+ var detectProfile = (manifest) => {
4124
+ const metadata = manifest.metadata;
4125
+ if (!metadata) return "webPub";
4126
+ const conformsTo = metadata.conformsTo;
4127
+ if (!conformsTo) return "webPub";
4128
+ const profiles = Array.isArray(conformsTo) ? conformsTo : [conformsTo];
4129
+ if (profiles.some(
4130
+ (profile) => profile === Profile.AUDIOBOOK
4131
+ )) {
4132
+ return "audio";
4133
+ }
4134
+ if (profiles.some(
4135
+ (profile) => profile === Profile.EPUB
4136
+ )) {
4137
+ return "epub";
4138
+ }
4139
+ return "webPub";
4140
+ };
4107
4141
  var usePublication = ({
4108
4142
  url,
4109
4143
  onError = () => {
4110
- }
4144
+ },
4145
+ fetcher: customFetcher
4111
4146
  }) => {
4112
- const [error, setError] = useState("");
4113
- const [manifest, setManifest] = useState(void 0);
4114
- const [selfLink, setSelfLink] = useState(void 0);
4147
+ const dispatch = useAppDispatch();
4148
+ const { resolveFontLanguage } = usePreferences();
4149
+ const [isLoading, setIsLoading] = useState(true);
4150
+ const [error, setError] = useState(null);
4151
+ const [manifest, setManifest] = useState(null);
4152
+ const [selfLink, setSelfLink] = useState(null);
4153
+ const [localDataKey, setLocalDataKey] = useState(null);
4154
+ const [publication, setPublication] = useState(null);
4155
+ const [profile, setProfile] = useState(null);
4156
+ const [isRTL, setIsRTL] = useState(false);
4157
+ const [isFXL, setIsFXL] = useState(false);
4158
+ const [fontLanguage, setFontLanguageState] = useState("");
4159
+ const [hasDisplayTransformability, setHasDisplayTransformabilityState] = useState(false);
4160
+ const handleManifestError = (error2, context) => {
4161
+ console.error(`${context}:`, error2);
4162
+ const processedError = ErrorHandler.process(error2, context);
4163
+ setError(processedError);
4164
+ setIsLoading(false);
4165
+ };
4115
4166
  useEffect(() => {
4116
4167
  if (!url) {
4117
- setError("Manifest URL is required");
4168
+ const validationError = ErrorHandler.process(new Error("Manifest URL is required"), "Validation");
4169
+ setError(validationError);
4170
+ setIsLoading(false);
4118
4171
  return;
4119
4172
  }
4173
+ setIsLoading(true);
4174
+ setError(null);
4120
4175
  const decodedUrl = decodeURIComponent(url);
4121
4176
  const manifestLink = new Link({ href: decodedUrl });
4122
- const fetcher = new HttpFetcher(void 0);
4177
+ const fetcher = customFetcher || new HttpFetcher(void 0);
4123
4178
  try {
4124
4179
  const fetched = fetcher.get(manifestLink);
4125
- fetched.link().then((link) => {
4126
- setSelfLink(link.toURL(decodedUrl));
4127
- });
4128
- fetched.readAsJSON().then((manifestData) => {
4129
- setManifest(manifestData);
4130
- }).catch((error2) => {
4131
- console.error("Error loading manifest:", error2);
4132
- setError(`Failed loading manifest ${decodedUrl}: ${error2 instanceof Error ? error2.message : "Unknown error"}`);
4180
+ fetched.link().then(async (link) => {
4181
+ try {
4182
+ const selfHref = link.toURL(decodedUrl);
4183
+ setSelfLink(selfHref || null);
4184
+ if (selfHref) {
4185
+ setLocalDataKey(`${selfHref}-current-location`);
4186
+ const manifestFetcher = customFetcher || new HttpFetcher(void 0, selfHref);
4187
+ const manifestFetched = manifestFetcher.get(manifestLink);
4188
+ const manifestData = await manifestFetched.readAsJSON();
4189
+ setManifest(manifestData);
4190
+ const manifestObj = Manifest.deserialize(manifestData);
4191
+ manifestObj.setSelfLink(selfHref);
4192
+ const detectedProfile = detectProfile(manifestObj);
4193
+ setProfile(detectedProfile);
4194
+ dispatch(setReaderProfile(detectedProfile));
4195
+ const pub = new Publication({
4196
+ manifest: manifestObj,
4197
+ fetcher: manifestFetcher
4198
+ });
4199
+ if (detectedProfile === "epub") {
4200
+ try {
4201
+ const rawPositions = await pub.positionsFromManifest();
4202
+ const positionsList = deserializePositions(rawPositions);
4203
+ dispatch(setPositionsList(positionsList));
4204
+ } catch (error2) {
4205
+ console.error("Failed to fetch positions:", error2);
4206
+ dispatch(setPositionsList([]));
4207
+ }
4208
+ }
4209
+ setPublication(pub);
4210
+ setIsLoading(false);
4211
+ }
4212
+ } catch (error2) {
4213
+ handleManifestError(error2, "Error loading manifest");
4214
+ }
4133
4215
  });
4134
4216
  } catch (error2) {
4135
- console.error("Error loading manifest:", error2);
4136
- setError(`Failed loading manifest ${decodedUrl}: ${error2 instanceof Error ? error2.message : "Unknown error"}`);
4217
+ handleManifestError(error2, "Error loading manifest");
4137
4218
  }
4138
- }, [url]);
4219
+ }, [url, customFetcher, dispatch]);
4220
+ useEffect(() => {
4221
+ if (!publication) return;
4222
+ const rtl = publication.metadata.effectiveReadingProgression === ReadingProgression.rtl;
4223
+ setIsRTL(rtl);
4224
+ dispatch(setRTL(rtl));
4225
+ if (profile === "epub") {
4226
+ const fxl = publication.metadata.effectiveLayout === Layout.fixed;
4227
+ setIsFXL(fxl);
4228
+ dispatch(setFXL(fxl));
4229
+ }
4230
+ const resolvedLang = resolveFontLanguage(
4231
+ publication.metadata.languages?.[0],
4232
+ publication.metadata.effectiveReadingProgression
4233
+ );
4234
+ setFontLanguageState(resolvedLang);
4235
+ dispatch(setFontLanguage(resolvedLang));
4236
+ const displayTransformability = publication.metadata.accessibility?.feature?.some(
4237
+ (feature) => feature && feature.value === Feature.DISPLAY_TRANSFORMABILITY.value
4238
+ ) || false;
4239
+ setHasDisplayTransformabilityState(displayTransformability);
4240
+ dispatch(setHasDisplayTransformability(displayTransformability));
4241
+ if (profile === "epub" && publication) {
4242
+ const fetchPositions = async () => {
4243
+ try {
4244
+ const positionsList = await publication.positionsFromManifest();
4245
+ const deserializedPositionsList = deserializePositions(positionsList);
4246
+ dispatch(setPositionsList(deserializedPositionsList));
4247
+ } catch (error2) {
4248
+ console.error("Failed to fetch positions:", error2);
4249
+ dispatch(setPositionsList([]));
4250
+ }
4251
+ };
4252
+ fetchPositions();
4253
+ }
4254
+ }, [publication, profile, resolveFontLanguage, dispatch]);
4139
4255
  useEffect(() => {
4140
4256
  if (error) {
4141
4257
  onError(error);
4142
4258
  }
4143
4259
  }, [error, onError]);
4144
4260
  return {
4261
+ isLoading,
4145
4262
  error,
4263
+ publication,
4146
4264
  manifest,
4147
- selfLink
4265
+ selfLink,
4266
+ localDataKey,
4267
+ profile,
4268
+ isRTL,
4269
+ isFXL,
4270
+ fontLanguage,
4271
+ hasDisplayTransformability
4148
4272
  };
4149
4273
  };
4274
+ var usePositionStorage = (key, customStorage) => {
4275
+ const localStorageData = useLocalStorage(key);
4276
+ const [customData, setCustomData] = useState(
4277
+ () => customStorage ? customStorage.get() || null : null
4278
+ );
4279
+ if (customStorage) {
4280
+ const set = (newValue) => {
4281
+ if (newValue) {
4282
+ customStorage.set(newValue);
4283
+ }
4284
+ setCustomData(newValue);
4285
+ };
4286
+ const get = () => customData;
4287
+ return {
4288
+ setLocalData: set,
4289
+ getLocalData: get,
4290
+ localData: customData
4291
+ };
4292
+ }
4293
+ return localStorageData;
4294
+ };
4150
4295
 
4151
4296
  // src/components/assets/styles/thorium-web.reader.app.module.css
4152
4297
  var thorium_web_reader_app_default = {
@@ -5384,6 +5529,6 @@ function getReaderClassNames(options) {
5384
5529
  );
5385
5530
  }
5386
5531
 
5387
- export { NavigatorProvider, Peripherals, StatefulActionIcon, StatefulBottomSheet, StatefulCollapsibleActionsBar, StatefulColumns, StatefulDockedSheet, StatefulDockingWrapper, StatefulDropdown, StatefulFontFamily, StatefulFullScreenSheet, StatefulFullscreenTrigger, StatefulGroupWrapper, StatefulHyphens, StatefulJumpToPositionContainer, StatefulJumpToPositionTrigger, StatefulLayout, StatefulLetterSpacing, StatefulLineHeight, StatefulNumberField, StatefulOverflowMenu, StatefulOverflowMenuItem, StatefulParagraphIndent, StatefulParagraphSpacing, StatefulPopoverSheet, StatefulPreferencesProvider, StatefulPublisherStyles, StatefulRadioGroup, StatefulReaderFooter, StatefulReaderHeader, StatefulSettingsContainer, StatefulSettingsTrigger, StatefulSheetWrapper, StatefulSlider, StatefulSpacingGroup, StatefulSpacingGroupContainer, StatefulSpacingPresets, StatefulSwitch, StatefulTextAlign, StatefulTextGroup, StatefulTextGroupContainer, StatefulTextNormalize, StatefulTheme, StatefulTocContainer, StatefulTocTrigger, StatefulWordSpacing, StatefulZoom, ThPluginProvider, ThPluginRegistry, UnstableStatefulFontWeight, createDefaultPlugin, getReaderClassNames, thorium_web_button_default, thorium_web_reader_app_default, useDocking, useFonts, useGridNavigation, useGridTemplate, useLineHeight, useNavigator, usePublication, useReaderTransitions, useSettingsComponentStatus, useSpacingPresets };
5388
- //# sourceMappingURL=chunk-4C3UOTX4.mjs.map
5389
- //# sourceMappingURL=chunk-4C3UOTX4.mjs.map
5532
+ export { NavigatorProvider, Peripherals, StatefulActionIcon, StatefulBottomSheet, StatefulCollapsibleActionsBar, StatefulColumns, StatefulDockedSheet, StatefulDockingWrapper, StatefulDropdown, StatefulFontFamily, StatefulFullScreenSheet, StatefulFullscreenTrigger, StatefulGroupWrapper, StatefulHyphens, StatefulJumpToPositionContainer, StatefulJumpToPositionTrigger, StatefulLayout, StatefulLetterSpacing, StatefulLineHeight, StatefulNumberField, StatefulOverflowMenu, StatefulOverflowMenuItem, StatefulParagraphIndent, StatefulParagraphSpacing, StatefulPopoverSheet, StatefulPreferencesProvider, StatefulPublisherStyles, StatefulRadioGroup, StatefulReaderFooter, StatefulReaderHeader, StatefulSettingsContainer, StatefulSettingsTrigger, StatefulSheetWrapper, StatefulSlider, StatefulSpacingGroup, StatefulSpacingGroupContainer, StatefulSpacingPresets, StatefulSwitch, StatefulTextAlign, StatefulTextGroup, StatefulTextGroupContainer, StatefulTextNormalize, StatefulTheme, StatefulTocContainer, StatefulTocTrigger, StatefulWordSpacing, StatefulZoom, ThPluginProvider, ThPluginRegistry, UnstableStatefulFontWeight, createDefaultPlugin, getReaderClassNames, thorium_web_button_default, thorium_web_reader_app_default, useDocking, useFonts, useGridNavigation, useGridTemplate, useLineHeight, useNavigator, usePositionStorage, usePublication, useReaderTransitions, useSettingsComponentStatus, useSpacingPresets };
5533
+ //# sourceMappingURL=chunk-H4J2VY7Z.mjs.map
5534
+ //# sourceMappingURL=chunk-H4J2VY7Z.mjs.map