@designcrowd/library.brand-page 6.0.25-json-prereq-2 → 6.0.25-json-prereq-3

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 (23) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-MkdpvvLq.js → CreatedOnBrandCrowd-de-de-CEuDKci2.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-0K8Va8jv.js → CreatedOnBrandCrowd-en-us-_e-17FIJ.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-BXBXK85u.js → CreatedOnBrandCrowd-es-es-BDBBH71W.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-wbrMlisb.js → CreatedOnBrandCrowd-fr-ca-BQQ4n0rM.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-wbrMlisb.js → CreatedOnBrandCrowd-fr-fr-BQQ4n0rM.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-BHBKnYHd.js → CreatedOnBrandCrowd-pt-br-CXEm8WP0.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-BHBKnYHd.js → CreatedOnBrandCrowd-pt-pt-CXEm8WP0.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-BeG5A3Bb.js → CreatedOnDcom-de-de-Cd-wd_qJ.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DVCNhdLS.js → CreatedOnDcom-en-us-CAX3HD_S.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-Ba8bq852.js → CreatedOnDcom-es-es-dw8fVEr5.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-DuNhf0PH.js → CreatedOnDcom-fr-ca-BdytTU6m.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-CfofYZSL.js → CreatedOnDcom-fr-fr-CXDKOnJq.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-BMCBFLhc.js → CreatedOnDcom-pt-br-35D-ZF8c.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-CQS6Ft_9.js → CreatedOnDcom-pt-pt-wCqTuj1V.js} +1 -1
  15. package/lib/src/brand-page/utils/migration/migration-20.js +20 -65
  16. package/lib/src/brand-page-maker/utils/rte-render.util.d.ts +33 -11
  17. package/lib/src/brand-page-maker/utils/rte-render.util.js +68 -6
  18. package/lib/src/index.mjs +1 -1
  19. package/lib/src/{lib-QPQAbiCG.js → lib-Ca6p-H2z.js} +7172 -7167
  20. package/package.json +1 -1
  21. package/src/brand-page/utils/migration/migration-20.server.test.ts +18 -14
  22. package/src/brand-page/utils/migration/migration-20.ts +28 -93
  23. package/src/brand-page-maker/utils/rte-render.util.ts +109 -12
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-QPQAbiCG.js";
2
+ import { _ as t } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-QPQAbiCG.js";
2
+ import { _ as t } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-QPQAbiCG.js";
2
+ import { _ as t } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-QPQAbiCG.js";
2
+ import { _ as t } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-QPQAbiCG.js";
2
+ import { _ as t } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-QPQAbiCG.js";
2
+ import { _ as t } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-QPQAbiCG.js";
2
+ import { _ as t } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-QPQAbiCG.js";
2
+ import { _ as e } from "./lib-Ca6p-H2z.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-QPQAbiCG.js";
2
+ import { _ as e } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-QPQAbiCG.js";
2
+ import { _ as e } from "./lib-Ca6p-H2z.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-QPQAbiCG.js";
2
+ import { _ as e } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-QPQAbiCG.js";
2
+ import { _ as e } from "./lib-Ca6p-H2z.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-QPQAbiCG.js";
2
+ import { _ as M } from "./lib-Ca6p-H2z.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-QPQAbiCG.js";
2
+ import { _ as M } from "./lib-Ca6p-H2z.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,4 +1,4 @@
1
- import { hasRTEContent, toRteJson } from '../../../brand-page-maker/utils';
1
+ import { hasRTEContent, toRteJson, resolveHtmlParser, } from '../../../brand-page-maker/utils';
2
2
  /**
3
3
  * BP-5787 — migrate existing inline-HTML RTE content to Tiptap JSON.
4
4
  *
@@ -6,9 +6,8 @@ import { hasRTEContent, toRteJson } from '../../../brand-page-maker/utils';
6
6
  * published/saved sites still hold RTE fields as HTML strings. This converts
7
7
  * them on load, in EVERY environment:
8
8
  * - maker (browser): the loaded model is JSON, so the next save persists JSON.
9
- * - web-renderer (SSR / server API routes): converted on read using a jsdom
10
- * window (see below), so old sites are normalised without a re-save and
11
- * downstream code can treat RTE as JSON.
9
+ * - web-renderer (SSR / server API routes): converted on read, so old sites
10
+ * are normalised without a re-save and downstream code can treat RTE as JSON.
12
11
  *
13
12
  * This is a one-time, versioned migration (runAlways is NOT set): legacy sites
14
13
  * are at model version < 20 and convert on first load in any environment; once
@@ -16,6 +15,12 @@ import { hasRTEContent, toRteJson } from '../../../brand-page-maker/utils';
16
15
  * AI section builders now emit Tiptap JSON directly (they no longer write HTML),
17
16
  * so there is no recurring post-load source of HTML to normalise.
18
17
  *
18
+ * HTML→JSON parsing needs a DOM parser. Rather than mutate a global `window`,
19
+ * the parser is resolved once (native `DOMParser` in the browser, a jsdom
20
+ * `DOMParser` instance on the server) and threaded explicitly through the
21
+ * conversion — see resolveHtmlParser / toRteJson. No global state is touched, so
22
+ * the pass is safe on any server runtime and under concurrent requests.
23
+ *
19
24
  * Scope: only HTML-RTE strings (hasRTEContent) are converted. Plain strings,
20
25
  * numbers, and already-JSON docs are left untouched, so the migration is
21
26
  * idempotent (re-running on JSON content is a no-op — non-string values are
@@ -23,9 +28,9 @@ import { hasRTEContent, toRteJson } from '../../../brand-page-maker/utils';
23
28
  * is handled by recursing into arrays; style objects are intentionally not
24
29
  * descended into (they never hold RTE content).
25
30
  */
26
- const convertRteStringsToJson = (value) => {
31
+ const convertRteStringsToJson = (value, parser) => {
27
32
  if (Array.isArray(value)) {
28
- value.forEach((item) => convertRteStringsToJson(item));
33
+ value.forEach((item) => convertRteStringsToJson(item, parser));
29
34
  return;
30
35
  }
31
36
  if (!value || typeof value !== 'object')
@@ -34,78 +39,28 @@ const convertRteStringsToJson = (value) => {
34
39
  Object.keys(record).forEach((key) => {
35
40
  const field = record[key];
36
41
  if (typeof field === 'string' && hasRTEContent(field)) {
37
- const json = toRteJson(field);
42
+ const json = toRteJson(field, parser);
38
43
  if (json)
39
44
  record[key] = json;
40
45
  }
41
46
  else if (Array.isArray(field)) {
42
- convertRteStringsToJson(field);
47
+ convertRteStringsToJson(field, parser);
43
48
  }
44
49
  });
45
50
  };
46
- const convertModel = (brandPageModel) => {
51
+ const convertModel = (brandPageModel, parser) => {
47
52
  for (const page of brandPageModel.pages) {
48
53
  for (const content of page.contents) {
49
- convertRteStringsToJson(content);
54
+ convertRteStringsToJson(content, parser);
50
55
  }
51
56
  }
52
57
  };
53
- let serverWindowPromise = null;
54
- const getServerWindow = () => {
55
- if (!serverWindowPromise) {
56
- // The specifier is assembled at runtime rather than written as the string
57
- // literal "jsdom", so no bundler (Rollup/Vite in the library build, and any
58
- // downstream browser consumer — BrandCrowd.Nuxt, web-renderer, …) can
59
- // statically follow it and try to bundle jsdom → cssstyle, whose generated
60
- // code breaks Rollup's CommonJS parser. The library stays self-contained
61
- // (it still loads its own jsdom at runtime on the server) while never
62
- // leaking jsdom into a browser bundle. `@vite-ignore` silences the
63
- // "cannot be analyzed" warning the non-literal specifier would otherwise
64
- // trigger. At Node runtime this resolves the real jsdom from node_modules.
65
- const jsdomModuleId = ['js', 'dom'].join('');
66
- serverWindowPromise = import(/* @vite-ignore */ jsdomModuleId)
67
- .then(({ JSDOM }) => new JSDOM('').window)
68
- .catch((error) => {
69
- // Don't cache the failure — let a later migration retry the import.
70
- serverWindowPromise = null;
71
- throw error;
72
- });
73
- }
74
- return serverWindowPromise;
75
- };
76
58
  export const migration20 = async (migrationResult) => {
77
59
  const { brandPageModel } = migrationResult;
78
- // Browser / jsdom test: a DOM is already present convert directly.
79
- if (typeof window !== 'undefined' && typeof document !== 'undefined') {
80
- convertModel(brandPageModel);
81
- return migrationResult;
82
- }
83
- // Pure-node SSR: install a memoised jsdom window as the global for the duration
84
- // of the conversion pass, then restore. The pass is fully synchronous (no await
85
- // between install and restore), so in Node's single thread no concurrent request
86
- // can observe the temporary globals.
87
- const serverWindow = await getServerWindow();
88
- const globals = globalThis;
89
- // Track whether the globals existed so we restore exactly — deleting keys we
90
- // added rather than leaving `window: undefined` own-properties behind.
91
- const hadWindow = 'window' in globals;
92
- const hadDocument = 'document' in globals;
93
- const prevWindow = globals.window;
94
- const prevDocument = globals.document;
95
- globals.window = serverWindow;
96
- globals.document = serverWindow.document;
97
- try {
98
- convertModel(brandPageModel);
99
- }
100
- finally {
101
- if (hadWindow)
102
- globals.window = prevWindow;
103
- else
104
- delete globals.window;
105
- if (hadDocument)
106
- globals.document = prevDocument;
107
- else
108
- delete globals.document;
109
- }
60
+ // Resolve a DOM parser for this environment (native in the browser, a jsdom
61
+ // instance on the server never touching globals), then convert every
62
+ // HTML-RTE field to Tiptap JSON with it.
63
+ const parser = await resolveHtmlParser();
64
+ convertModel(brandPageModel, parser);
110
65
  return migrationResult;
111
66
  };
@@ -12,20 +12,32 @@ export { isTiptapDocument, getRteJsonPlainText };
12
12
  * - renderRteToHtml — render either form to final HTML for display.
13
13
  * - toRteJson — normalise either form to JSON for storage.
14
14
  *
15
- * Both directions delegate to Tiptap's own schema-driven converters, fed by the
15
+ * The schema-driven core of both directions is Tiptap/ProseMirror, fed by the
16
16
  * single-source-of-truth extension set (getRteExtensions) — so the mapping lives
17
- * in the extensions' `renderHTML`, not a hand-maintained copy that drifts when
18
- * Tiptap changes:
17
+ * in the extensions' schema, not a hand-maintained copy that drifts:
19
18
  *
20
19
  * - renderRteToHtml uses @tiptap/static-renderer (renderToHTMLString). It is
21
20
  * DOM-less, so it runs on the server (SSR/publish/preview), not just the
22
21
  * browser, and needs no Editor instance.
23
- * - toRteJson uses generateJSON, which PARSES HTML and so needs a DOM
24
- * (window.DOMParser). In the browser and in jsdom tests that global exists;
25
- * on the server the only caller is migration-20, which installs a jsdom
26
- * window around its conversion pass (see migration/migration-20.ts).
22
+ * - toRteJson turns an HTML string into a DOM node with an INJECTED parser and
23
+ * feeds it to ProseMirror's schema-driven DOMParser. The HTML→DOM step needs
24
+ * a DOM parser; rather than read the global `window.DOMParser` (as Tiptap's
25
+ * `generateJSON` does unusable on a pure-node server and fragile across SSR
26
+ * execution contexts), the parser is supplied by the caller: the native
27
+ * `DOMParser` in the browser, a jsdom `DOMParser` *instance* on the server
28
+ * (see resolveHtmlParser). No global is ever mutated, so the conversion is
29
+ * fully isomorphic regardless of how the SSR host bundles/executes this code.
27
30
  */
28
31
  export type RichTextValue = string | JSONContent;
32
+ /**
33
+ * A `DOMParser`-compatible object: turns an HTML string into a Document whose
34
+ * `body` is a DOM node ProseMirror can parse. The browser's native `DOMParser`
35
+ * and jsdom's `DOMParser` both satisfy this, so the DOM dependency is injected
36
+ * rather than read from a global.
37
+ */
38
+ export interface HtmlParser {
39
+ parseFromString(html: string, type: 'text/html'): Document;
40
+ }
29
41
  /**
30
42
  * Render an RTE value to final HTML. Legacy HTML strings pass through untouched
31
43
  * (they are already HTML); Tiptap JSON is serialised by @tiptap/static-renderer
@@ -34,8 +46,18 @@ export type RichTextValue = string | JSONContent;
34
46
  */
35
47
  export declare const renderRteToHtml: (value: RichTextValue | null | undefined) => string;
36
48
  /**
37
- * Normalise an RTE value to a Tiptap JSON document. HTML strings are parsed via
38
- * generateJSON (needs a DOM browser/jsdom); documents pass through unchanged.
39
- * Returns undefined for empty/blank input so callers can omit empty fields.
49
+ * Resolve an HtmlParser for the current runtime: the native `DOMParser` in the
50
+ * browser (and jsdom-based test envs), or a jsdom `DOMParser` INSTANCE on a
51
+ * pure-node server created and returned directly, never assigned to a global,
52
+ * so it is immune to SSR execution-context differences. The jsdom specifier is
53
+ * assembled at runtime so no bundler follows it into a browser build. Memoised
54
+ * on the server (JSDOM construction is relatively expensive).
55
+ */
56
+ export declare const resolveHtmlParser: () => Promise<HtmlParser>;
57
+ /**
58
+ * Normalise an RTE value to a Tiptap JSON document. HTML strings are parsed with
59
+ * `parser` (defaults to the browser's native DOMParser); JSON documents pass
60
+ * through unchanged. Returns undefined for empty/blank input so callers can omit
61
+ * empty fields.
40
62
  */
41
- export declare const toRteJson: (value: RichTextValue | null | undefined) => JSONContent | undefined;
63
+ export declare const toRteJson: (value: RichTextValue | null | undefined, parser?: HtmlParser) => JSONContent | undefined;
@@ -1,4 +1,5 @@
1
- import { generateJSON } from '@tiptap/core';
1
+ import { getSchema } from '@tiptap/core';
2
+ import { DOMParser as ProseMirrorDOMParser } from '@tiptap/pm/model';
2
3
  import { renderToHTMLString } from '@tiptap/static-renderer/pm/html-string';
3
4
  import { getRteExtensions } from '../composables/rich-text-editor/getRteExtensions';
4
5
  import { isTiptapDocument, getRteJsonPlainText } from './rich-text-editor.util';
@@ -6,6 +7,9 @@ export { isTiptapDocument, getRteJsonPlainText };
6
7
  // One extension set shared by both directions (render + parse). Schema knowledge
7
8
  // lives here, once — Tiptap/extension upgrades propagate to both automatically.
8
9
  const RTE_EXTENSIONS = getRteExtensions({ includeLinkRel: true });
10
+ // ProseMirror schema derived once from the shared extension set. This is the
11
+ // schema-driven heart of HTML→JSON (no drift); only the HTML→DOM step is injected.
12
+ const RTE_SCHEMA = getSchema(RTE_EXTENSIONS);
9
13
  /**
10
14
  * Render an RTE value to final HTML. Legacy HTML strings pass through untouched
11
15
  * (they are already HTML); Tiptap JSON is serialised by @tiptap/static-renderer
@@ -19,15 +23,73 @@ export const renderRteToHtml = (value) => {
19
23
  return value;
20
24
  return renderToHTMLString({ content: value, extensions: RTE_EXTENSIONS });
21
25
  };
26
+ // Tiptap's elementFromString strips whitespace-only text nodes (pretty-print
27
+ // indentation between tags) before parsing; replicate it so injected-parser
28
+ // output stays identical to the previous generateJSON-based conversion.
29
+ const stripIndentationTextNodes = (node) => {
30
+ const children = node.childNodes;
31
+ for (let i = children.length - 1; i >= 0; i -= 1) {
32
+ const child = children[i];
33
+ if (child.nodeType === 3 &&
34
+ child.nodeValue &&
35
+ /^(\n\s\s|\n)$/.test(child.nodeValue)) {
36
+ node.removeChild(child);
37
+ }
38
+ else if (child.nodeType === 1) {
39
+ stripIndentationTextNodes(child);
40
+ }
41
+ }
42
+ return node;
43
+ };
44
+ const htmlToRteJson = (html, parser) => {
45
+ const body = parser.parseFromString(`<body>${html}</body>`, 'text/html').body;
46
+ const dom = stripIndentationTextNodes(body);
47
+ return ProseMirrorDOMParser.fromSchema(RTE_SCHEMA).parse(dom).toJSON();
48
+ };
49
+ let serverParserPromise = null;
50
+ /**
51
+ * Resolve an HtmlParser for the current runtime: the native `DOMParser` in the
52
+ * browser (and jsdom-based test envs), or a jsdom `DOMParser` INSTANCE on a
53
+ * pure-node server — created and returned directly, never assigned to a global,
54
+ * so it is immune to SSR execution-context differences. The jsdom specifier is
55
+ * assembled at runtime so no bundler follows it into a browser build. Memoised
56
+ * on the server (JSDOM construction is relatively expensive).
57
+ */
58
+ export const resolveHtmlParser = async () => {
59
+ if (typeof DOMParser !== 'undefined')
60
+ return new DOMParser();
61
+ if (!serverParserPromise) {
62
+ const jsdomModuleId = ['js', 'dom'].join('');
63
+ serverParserPromise = import(/* @vite-ignore */ jsdomModuleId)
64
+ .then((mod) => {
65
+ const { JSDOM } = mod;
66
+ const { DOMParser: JsdomDOMParser } = new JSDOM('').window;
67
+ return new JsdomDOMParser();
68
+ })
69
+ .catch((error) => {
70
+ // Don't cache the failure — let a later call retry the import.
71
+ serverParserPromise = null;
72
+ throw error;
73
+ });
74
+ }
75
+ return serverParserPromise;
76
+ };
77
+ const getDefaultParser = () => {
78
+ if (typeof DOMParser !== 'undefined')
79
+ return new DOMParser();
80
+ throw new Error('toRteJson: no global DOMParser in this environment. On the server, pass an ' +
81
+ 'explicit parser as the second argument (see resolveHtmlParser).');
82
+ };
22
83
  /**
23
- * Normalise an RTE value to a Tiptap JSON document. HTML strings are parsed via
24
- * generateJSON (needs a DOM browser/jsdom); documents pass through unchanged.
25
- * Returns undefined for empty/blank input so callers can omit empty fields.
84
+ * Normalise an RTE value to a Tiptap JSON document. HTML strings are parsed with
85
+ * `parser` (defaults to the browser's native DOMParser); JSON documents pass
86
+ * through unchanged. Returns undefined for empty/blank input so callers can omit
87
+ * empty fields.
26
88
  */
27
- export const toRteJson = (value) => {
89
+ export const toRteJson = (value, parser) => {
28
90
  if (value == null || value === '')
29
91
  return undefined;
30
92
  if (isTiptapDocument(value))
31
93
  return value;
32
- return generateJSON(value, RTE_EXTENSIONS);
94
+ return htmlToRteJson(value, parser ?? getDefaultParser());
33
95
  };
package/lib/src/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as _, a as E, b as s, c as I, d as S, e as N, f as e, B as A, g as O, h as t, i as C, j as G, k as D, l as P, m as R, n as o, o as L, p as M, q as r, r as n, s as b, t as l, u as i, v as F, w as c, x as g, y as B, z as Y, C as U, D as d, E as u, F as H, G as p, H as y, I as m, J as K, K as k, L as V, M as X, N as v, O as h, P as x, Q as f, R as W, S as z, T as w, U as J, V as Z, W as j, X as q, Y as Q, Z as $, $ as aa, a0 as Ta, a1 as _a, a2 as Ea, a3 as sa, a4 as Ia, a5 as Sa, a6 as Na, a7 as ea, a8 as Aa, a9 as Oa, aa as ta, ab as Ca, ac as Ga, ad as Da, ae as Pa, af as Ra, ag as oa, ah as La, ai as Ma, aj as ra, ak as na, al as ba, am as la, an as ia, ao as Fa, ap as ca, aq as ga, ar as Ba, as as Ya, at as Ua, au as da, av as ua, aw as Ha, ax as pa, ay as ya, az as ma, aA as Ka, aB as ka, aC as Va, aD as Xa, aE as va, aF as ha, aG as xa, aH as fa, aI as Wa, aJ as za, aK as wa, aL as Ja, aM as Za, aN as ja, aO as qa, aP as Qa, aQ as $a, aR as aT, aS as TT, aT as _T, aU as ET, aV as sT, aW as IT, aX as ST, aY as NT, aZ as eT, a_ as AT, a$ as OT, b0 as tT, b1 as CT, b2 as GT, b3 as DT, b4 as PT, b5 as RT, b6 as oT, b7 as LT, b8 as MT, b9 as rT, ba as nT, bb as bT, bc as lT, bd as iT, be as FT, bf as cT, bg as gT, bh as BT, bi as YT, bj as UT, bk as dT, bl as uT, bm as HT, bn as pT, bo as yT, bp as mT, bq as KT, br as kT, bs as VT, bt as XT, bu as vT, bv as hT, bw as xT, bx as fT, by as WT, bz as zT, bA as wT, bB as JT, bC as ZT, bD as jT, bE as qT, bF as QT, bG as $T, bH as a_, bI as T_, bJ as __, bK as E_, bL as s_, bM as I_, bN as S_, bO as N_, bP as e_, bQ as A_, bR as O_, bS as t_, bT as C_, bU as G_, bV as D_, bW as P_, bX as R_, bY as o_, bZ as L_, b_ as M_, b$ as r_, c0 as n_, c1 as b_, c2 as l_, c3 as i_, c4 as F_, c5 as c_, c6 as g_, c7 as B_, c8 as Y_, c9 as U_, ca as d_, cb as u_, cc as H_, cd as p_, ce as y_, cf as m_, cg as K_, ch as k_, ci as V_, cj as X_, ck as v_, cl as h_, cm as x_, cn as f_, co as W_, cp as z_, cq as w_, cr as J_, cs as Z_, ct as j_, cu as q_, cv as Q_, cw as $_, cx as aE } from "./lib-QPQAbiCG.js";
1
+ import { A as _, a as E, b as s, c as I, d as S, e as N, f as e, B as A, g as O, h as t, i as C, j as G, k as D, l as P, m as R, n as o, o as L, p as M, q as r, r as n, s as b, t as l, u as i, v as F, w as c, x as g, y as B, z as Y, C as U, D as d, E as u, F as H, G as p, H as y, I as m, J as K, K as k, L as V, M as X, N as v, O as h, P as x, Q as f, R as W, S as z, T as w, U as J, V as Z, W as j, X as q, Y as Q, Z as $, $ as aa, a0 as Ta, a1 as _a, a2 as Ea, a3 as sa, a4 as Ia, a5 as Sa, a6 as Na, a7 as ea, a8 as Aa, a9 as Oa, aa as ta, ab as Ca, ac as Ga, ad as Da, ae as Pa, af as Ra, ag as oa, ah as La, ai as Ma, aj as ra, ak as na, al as ba, am as la, an as ia, ao as Fa, ap as ca, aq as ga, ar as Ba, as as Ya, at as Ua, au as da, av as ua, aw as Ha, ax as pa, ay as ya, az as ma, aA as Ka, aB as ka, aC as Va, aD as Xa, aE as va, aF as ha, aG as xa, aH as fa, aI as Wa, aJ as za, aK as wa, aL as Ja, aM as Za, aN as ja, aO as qa, aP as Qa, aQ as $a, aR as aT, aS as TT, aT as _T, aU as ET, aV as sT, aW as IT, aX as ST, aY as NT, aZ as eT, a_ as AT, a$ as OT, b0 as tT, b1 as CT, b2 as GT, b3 as DT, b4 as PT, b5 as RT, b6 as oT, b7 as LT, b8 as MT, b9 as rT, ba as nT, bb as bT, bc as lT, bd as iT, be as FT, bf as cT, bg as gT, bh as BT, bi as YT, bj as UT, bk as dT, bl as uT, bm as HT, bn as pT, bo as yT, bp as mT, bq as KT, br as kT, bs as VT, bt as XT, bu as vT, bv as hT, bw as xT, bx as fT, by as WT, bz as zT, bA as wT, bB as JT, bC as ZT, bD as jT, bE as qT, bF as QT, bG as $T, bH as a_, bI as T_, bJ as __, bK as E_, bL as s_, bM as I_, bN as S_, bO as N_, bP as e_, bQ as A_, bR as O_, bS as t_, bT as C_, bU as G_, bV as D_, bW as P_, bX as R_, bY as o_, bZ as L_, b_ as M_, b$ as r_, c0 as n_, c1 as b_, c2 as l_, c3 as i_, c4 as F_, c5 as c_, c6 as g_, c7 as B_, c8 as Y_, c9 as U_, ca as d_, cb as u_, cc as H_, cd as p_, ce as y_, cf as m_, cg as K_, ch as k_, ci as V_, cj as X_, ck as v_, cl as h_, cm as x_, cn as f_, co as W_, cp as z_, cq as w_, cr as J_, cs as Z_, ct as j_, cu as q_, cv as Q_, cw as $_, cx as aE } from "./lib-Ca6p-H2z.js";
2
2
  import { U as _E, u as EE } from "./useEventTracker-DmQ6AkNn.js";
3
3
  import { createPinia as IE, setActivePinia as SE } from "pinia";
4
4
  export {