@designcrowd/library.brand-page 5.17.25-undo-8 → 5.17.25-undo-9
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.
- package/lib/src/{CreatedOnBrandCrowd-de-de-AfnY8zoN.js → CreatedOnBrandCrowd-de-de-DmDSspcZ.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-D8X7A_M5.js → CreatedOnBrandCrowd-en-us-B5Lh1tFl.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-DjKTziiy.js → CreatedOnBrandCrowd-es-es-BOiOyh5Y.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-dSR3lZfa.js → CreatedOnBrandCrowd-fr-ca-BbC8s_pY.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-dSR3lZfa.js → CreatedOnBrandCrowd-fr-fr-BbC8s_pY.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-BTD44ERQ.js → CreatedOnBrandCrowd-pt-br-B9PQ72m4.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-BTD44ERQ.js → CreatedOnBrandCrowd-pt-pt-B9PQ72m4.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-QP4_OShH.js → CreatedOnDcom-de-de-C7NzbKIg.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-CWyO9t7x.js → CreatedOnDcom-en-us-DbVi6Q9C.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-B3sZqeKP.js → CreatedOnDcom-es-es-C4TPAk-c.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-BR3-inLX.js → CreatedOnDcom-fr-ca-xqzYFaKy.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-DdrT0HCa.js → CreatedOnDcom-fr-fr-Bh-7lY7W.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-3Oz8RFHK.js → CreatedOnDcom-pt-br-D3J8peaF.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-DwrZkI_f.js → CreatedOnDcom-pt-pt-101mCRJX.js} +1 -1
- package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +1 -0
- package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.js +6 -0
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +14 -0
- package/lib/src/brand-page-maker/stores/history/history-store.js +193 -19
- package/lib/src/css/library.brand-page-brandCrowd.min.css +1 -1
- package/lib/src/css/library.brand-page-brandPage.min.css +1 -1
- package/lib/src/css/library.brand-page-designCom.min.css +1 -1
- package/lib/src/css/library.brand-page-preview.min.css +1 -1
- package/lib/src/index.mjs +1 -1
- package/lib/src/{lib-Y0xSZnR9.js → lib-MGJszuw2.js} +5864 -5791
- package/package.json +1 -1
- package/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.ts +7 -0
- package/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.vue +1 -1
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +121 -0
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +14 -0
- package/src/brand-page-maker/stores/history/history-store.test.ts +172 -3
- package/src/brand-page-maker/stores/history/history-store.ts +217 -22
|
@@ -30,6 +30,12 @@ export default defineComponent({
|
|
|
30
30
|
isPublished() {
|
|
31
31
|
return this.brandPageContainerStore.isPublished;
|
|
32
32
|
},
|
|
33
|
+
// Only render the bar when at least one inner cluster has something to
|
|
34
|
+
// show. Otherwise we'd render an empty white strip — e.g. on an
|
|
35
|
+
// unpublished page with the undo flag off.
|
|
36
|
+
shouldShowBar() {
|
|
37
|
+
return Boolean(this.undoRedoEnabled) || this.isPublished;
|
|
38
|
+
},
|
|
33
39
|
brandPageUrl() {
|
|
34
40
|
if (this.brandPageContainerStore.isCustomDomainEnabled &&
|
|
35
41
|
this.brandPageContainerStore.customDomain &&
|
|
@@ -610,9 +610,23 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
610
610
|
});
|
|
611
611
|
if (existingContentIds.has(selectedItemId))
|
|
612
612
|
return;
|
|
613
|
+
// The previously-selected content was undone away. Restore the
|
|
614
|
+
// Content tab's natural landing state — the same shape produced
|
|
615
|
+
// when the user clicks the Content tab fresh — instead of leaving
|
|
616
|
+
// the sidebar stuck rendering `<FocusedContentItemSettings>` for
|
|
617
|
+
// a missing item, which paints a blank panel.
|
|
618
|
+
//
|
|
619
|
+
// `resetMode()` pops the modeStack back to the base `edit` entry
|
|
620
|
+
// (the default landing mode); clearing `selectedItemId` releases
|
|
621
|
+
// the pointer to the now-deleted item.
|
|
613
622
|
sideBarStore.setSelectedTabName({
|
|
614
623
|
tabName: SIDE_BAR_TAB_NAMES.CONTENT_SETTINGS,
|
|
615
624
|
});
|
|
625
|
+
contentSettingsStore.resetMode();
|
|
626
|
+
contentSettingsStore.selectedItemId = null;
|
|
627
|
+
contentSettingsStore.selectedItemFieldName = null;
|
|
628
|
+
contentSettingsStore.selectedItemIndex = null;
|
|
629
|
+
contentSettingsStore.selectedItemValue = null;
|
|
616
630
|
},
|
|
617
631
|
export() {
|
|
618
632
|
const data = this.brandPageData;
|
|
@@ -91,6 +91,10 @@ export const useHistoryStore = defineStore('history', () => {
|
|
|
91
91
|
* (e.g. `""` → `<p style="text-align: center;"></p>`).
|
|
92
92
|
* - TipTap RTE writing back its default-style hydration on first mount
|
|
93
93
|
* (e.g. plain `"Hello"` → `<p style="..."><span style="..."><mark ...>Hello</mark></span></p>`).
|
|
94
|
+
* - TipTap re-emitting whole-content `<strong>`/`<em>`/`<u>`/`<s>` tags
|
|
95
|
+
* to mirror the resolved `textStyle.fontWeight / fontStyle /
|
|
96
|
+
* textDecoration` (e.g. plain `"text"` →
|
|
97
|
+
* `<p>...<span>...<strong>text</strong></span></p>`).
|
|
94
98
|
* - Lazy hydration of `*Style` objects when a content settings panel —
|
|
95
99
|
* or section selection on the canvas — resolves `textStyleType` and
|
|
96
100
|
* writes the full resolved style (fontFamily, fontSize, color,
|
|
@@ -98,38 +102,197 @@ export const useHistoryStore = defineStore('history', () => {
|
|
|
98
102
|
* onto the model. The `textStyleType` itself is the authoring
|
|
99
103
|
* intent; the resolved keys are just cached values.
|
|
100
104
|
* - `isModifiedAfterTemplateApplied` flipping on first edit gesture.
|
|
105
|
+
* - `logoImageBase64Url` — the rendered logo PNG. Per-property logo
|
|
106
|
+
* edits author through `editableLogoStore.logoEdits` (not in
|
|
107
|
+
* `brandPageData`), so an undo would revert the canvas image but
|
|
108
|
+
* leave the sidebar fields showing the user's typed value. Logo
|
|
109
|
+
* property edits are excluded from V1 undo scope; BYO-upload undo
|
|
110
|
+
* still works because that diff lives in `logoImage.logoDraftToken`.
|
|
111
|
+
*
|
|
112
|
+
* RTE strings are canonicalized by parsing the HTML with DOMParser and
|
|
113
|
+
* walking the tree; only attributeless format wrappers (and a tightly
|
|
114
|
+
* scoped set of hydration styles on `<p>` / `<span>` / `<mark>`) are
|
|
115
|
+
* collapsed. Real authoring intent (links, custom colors, partial-text
|
|
116
|
+
* formatting like `Hello <strong>world</strong>`) survives the walk
|
|
117
|
+
* because at least one node falls outside the hydration whitelist,
|
|
118
|
+
* and the walker bails to "preserve original" the moment that happens.
|
|
101
119
|
*
|
|
102
120
|
* Used ONLY for dedup comparison. Stored snapshots remain unchanged so
|
|
103
121
|
* `applyHistorySnapshot` always sees the real state.
|
|
104
122
|
*/
|
|
123
|
+
// Tags TipTap re-emits purely to mirror the resolved textStyle on first
|
|
124
|
+
// hydration. None carry user authoring intent on their own when they are
|
|
125
|
+
// the sole element-child wrapping the entire content:
|
|
126
|
+
// - <p>: only its `text-align` style is meaningful, and that's already
|
|
127
|
+
// captured in `textStyle.textAlign`.
|
|
128
|
+
// - <span>: TipTap wraps content in a span with `font-family`, `font-size`,
|
|
129
|
+
// `color`, `letter-spacing`, `line-height` resolved from the
|
|
130
|
+
// textStyle. The textStyle object on the same content is the
|
|
131
|
+
// authoritative source.
|
|
132
|
+
// - <mark>: TipTap's highlight extension default — collapses regardless
|
|
133
|
+
// of `data-color` / `style` attrs, mirroring the original
|
|
134
|
+
// regex's behavior on a hydrated highlight.
|
|
135
|
+
// - <strong>/<em>/<u>/<s>: attributeless tags that mirror
|
|
136
|
+
// `fontWeight: bold` / `fontStyle: italic` / `textDecoration:
|
|
137
|
+
// underline / line-through`. ONLY recognized as hydration when
|
|
138
|
+
// they are the sole child of their parent — partial-content
|
|
139
|
+
// usage like `Hello <strong>world</strong>` is a real edit.
|
|
140
|
+
// Anything else (`<a>`, `<br>`, `<span style="color: red">`, attributes on
|
|
141
|
+
// <strong>/<em>, etc.) is preserved as a real diff.
|
|
142
|
+
const STRUCTURAL_HYDRATION_TAGS = new Set(['P', 'SPAN', 'MARK']);
|
|
143
|
+
const FORMAT_HYDRATION_TAGS = new Set(['STRONG', 'EM', 'U', 'S']);
|
|
144
|
+
// Default style properties TipTap emits on a hydration <span> /
|
|
145
|
+
// <mark>. The textStyle resolver writes all of these onto the live
|
|
146
|
+
// model, so when TipTap re-emits them as inline style on its
|
|
147
|
+
// hydration span/mark there is no user-visible delta.
|
|
148
|
+
// Anything outside this whitelist (e.g. `text-decoration` mid-content,
|
|
149
|
+
// `text-shadow`, `text-transform`) is treated as a real edit.
|
|
150
|
+
const HYDRATION_INLINE_STYLE_PROPS = new Set([
|
|
151
|
+
'font-family',
|
|
152
|
+
'font-size',
|
|
153
|
+
'letter-spacing',
|
|
154
|
+
'line-height',
|
|
155
|
+
'color',
|
|
156
|
+
'background-color',
|
|
157
|
+
]);
|
|
105
158
|
// Empty paragraph forms TipTap emits when an editor mounts on an empty
|
|
106
159
|
// string. Treated as equivalent to `""` for dedup.
|
|
107
|
-
const EMPTY_RTE_HTML = /^<p(\s[^>]*)?>(<br\s*\/?>)?<\/p>$/;
|
|
108
|
-
// TipTap's default-hydration shape: a single <p> (with optional align
|
|
109
|
-
// attr) containing the original plain text, optionally wrapped in
|
|
110
|
-
// default-styled <span> (font-family / font-size / color) and/or
|
|
111
|
-
// <mark> (highlight) tags. The inner capture intentionally rejects any
|
|
112
|
-
// string that itself contains `<` or `>` so that real formatting tags
|
|
113
|
-
// — `<strong>`, `<em>`, `<a>`, nested spans with non-default styles —
|
|
114
|
-
// are preserved as a real diff rather than collapsed.
|
|
115
|
-
const RTE_DEFAULT_HYDRATION = /^<p(\s[^>]*)?>(<span(\s[^>]*)?>)?(<mark(\s[^>]*)?>)?([^<>]*)(<\/mark>)?(<\/span>)?<\/p>$/;
|
|
116
160
|
function isEmptyRteHtml(value) {
|
|
117
|
-
|
|
161
|
+
if (typeof value !== 'string')
|
|
162
|
+
return false;
|
|
163
|
+
return /^<p(\s[^>]*)?>(<br\s*\/?>)?<\/p>$/.test(value);
|
|
164
|
+
}
|
|
165
|
+
function isHydrationOnlyAttributes(el) {
|
|
166
|
+
// Format tags (<strong>/<em>/<u>/<s>) must be attributeless. Anything
|
|
167
|
+
// with class/style/data-*/etc. is a real edit.
|
|
168
|
+
if (FORMAT_HYDRATION_TAGS.has(el.tagName))
|
|
169
|
+
return el.attributes.length === 0;
|
|
170
|
+
for (const attr of Array.from(el.attributes)) {
|
|
171
|
+
// <mark> may carry a `data-color` attr (TipTap highlight extension's
|
|
172
|
+
// default-and-resolved value). The accompanying `style` is checked
|
|
173
|
+
// against the same hydration-prop whitelist as <span>.
|
|
174
|
+
if (el.tagName === 'MARK' &&
|
|
175
|
+
(attr.name === 'data-color' || attr.name === 'style')) {
|
|
176
|
+
if (attr.name === 'data-color')
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
else if (attr.name !== 'style') {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
const decls = attr.value
|
|
183
|
+
.split(';')
|
|
184
|
+
.map((d) => d.trim())
|
|
185
|
+
.filter(Boolean);
|
|
186
|
+
if (el.tagName === 'P') {
|
|
187
|
+
for (const decl of decls) {
|
|
188
|
+
const [prop] = decl.split(':').map((s) => s.trim());
|
|
189
|
+
if (prop !== 'text-align')
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (el.tagName === 'SPAN' || el.tagName === 'MARK') {
|
|
194
|
+
for (const decl of decls) {
|
|
195
|
+
const [prop, value] = decl.split(':').map((s) => s.trim());
|
|
196
|
+
// Allow `color: inherit` on <mark> (TipTap stamps it on the
|
|
197
|
+
// default highlight to inherit the span's color). Otherwise
|
|
198
|
+
// require the prop to be in the hydration whitelist.
|
|
199
|
+
if (el.tagName === 'MARK' &&
|
|
200
|
+
prop === 'color' &&
|
|
201
|
+
value === 'inherit') {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
if (!HYDRATION_INLINE_STYLE_PROPS.has(prop))
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return true;
|
|
118
213
|
}
|
|
119
214
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
215
|
+
* Walk a parsed HTML node tree. Return the joined text content if every
|
|
216
|
+
* descendant is hydration noise; return null if any node carries real
|
|
217
|
+
* authoring intent (links, partial formatting, custom styles, etc.).
|
|
218
|
+
*
|
|
219
|
+
* `isFormatTag` differs in how it's allowed to appear: a structural tag
|
|
220
|
+
* (P/SPAN/MARK) can have siblings; a format tag (STRONG/EM/U/S) is only
|
|
221
|
+
* allowed when it's the SOLE child of its parent. The caller enforces
|
|
222
|
+
* that at the iteration site.
|
|
223
|
+
*/
|
|
224
|
+
function extractCanonicalText(node) {
|
|
225
|
+
if (node.nodeType === 3 /* TEXT_NODE */)
|
|
226
|
+
return node.textContent ?? '';
|
|
227
|
+
if (node.nodeType !== 1 /* ELEMENT_NODE */) {
|
|
228
|
+
// Comments, CDATA, etc. — treat as opaque (preserve original).
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
const el = node;
|
|
232
|
+
const isStructural = STRUCTURAL_HYDRATION_TAGS.has(el.tagName);
|
|
233
|
+
const isFormat = FORMAT_HYDRATION_TAGS.has(el.tagName);
|
|
234
|
+
if (!isStructural && !isFormat)
|
|
235
|
+
return null;
|
|
236
|
+
if (!isHydrationOnlyAttributes(el))
|
|
237
|
+
return null;
|
|
238
|
+
const children = Array.from(el.childNodes);
|
|
239
|
+
let out = '';
|
|
240
|
+
for (const child of children) {
|
|
241
|
+
// Format tags only count as hydration when they wrap the ENTIRE
|
|
242
|
+
// content of their parent. If a <strong>/<em>/<u>/<s> appears
|
|
243
|
+
// alongside any sibling (text or element), it's partial-content
|
|
244
|
+
// formatting — a real edit that can't be expressed via textStyle —
|
|
245
|
+
// so bail.
|
|
246
|
+
if (child.nodeType === 1 &&
|
|
247
|
+
FORMAT_HYDRATION_TAGS.has(child.tagName) &&
|
|
248
|
+
children.length > 1) {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
const part = extractCanonicalText(child);
|
|
252
|
+
if (part === null)
|
|
253
|
+
return null;
|
|
254
|
+
out += part;
|
|
255
|
+
}
|
|
256
|
+
return out;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* If `value` is TipTap's default-hydration wrapper around plain text
|
|
260
|
+
* (only hydration-noise elements wrapping bare text), return that bare
|
|
261
|
+
* text. Otherwise return the original string unchanged.
|
|
262
|
+
*
|
|
263
|
+
* This collapses the BP-5506 phantom where opening a content sidebar —
|
|
264
|
+
* or selecting a section on the canvas — mounts every RTE editor at
|
|
265
|
+
* once and writes back wrapped HTML with no user-visible delta.
|
|
125
266
|
*/
|
|
126
267
|
function canonicalizeRteString(value) {
|
|
127
|
-
|
|
268
|
+
// Cheap exit: no tags at all.
|
|
269
|
+
if (!value.includes('<'))
|
|
270
|
+
return value;
|
|
271
|
+
if (isEmptyRteHtml(value))
|
|
128
272
|
return '';
|
|
129
|
-
|
|
130
|
-
|
|
273
|
+
// DOMParser is unavailable in some non-browser test environments;
|
|
274
|
+
// fall back to leaving the value as-is so the caller produces a
|
|
275
|
+
// real diff (i.e. fail open — never falsely collapse).
|
|
276
|
+
if (typeof DOMParser === 'undefined')
|
|
277
|
+
return value;
|
|
278
|
+
let doc;
|
|
279
|
+
try {
|
|
280
|
+
doc = new DOMParser().parseFromString(`<div id="__rte_root__">${value}</div>`, 'text/html');
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
return value;
|
|
284
|
+
}
|
|
285
|
+
const root = doc.getElementById('__rte_root__');
|
|
286
|
+
if (!root)
|
|
131
287
|
return value;
|
|
132
|
-
|
|
288
|
+
let out = '';
|
|
289
|
+
for (const child of Array.from(root.childNodes)) {
|
|
290
|
+
const part = extractCanonicalText(child);
|
|
291
|
+
if (part === null)
|
|
292
|
+
return value;
|
|
293
|
+
out += part;
|
|
294
|
+
}
|
|
295
|
+
return out;
|
|
133
296
|
}
|
|
134
297
|
function normalizeNode(node) {
|
|
135
298
|
if (Array.isArray(node))
|
|
@@ -144,6 +307,17 @@ export const useHistoryStore = defineStore('history', () => {
|
|
|
144
307
|
// represent a user-visible change.
|
|
145
308
|
if (key === 'isModifiedAfterTemplateApplied')
|
|
146
309
|
continue;
|
|
310
|
+
// Strip the rendered logo PNG. Logo property edits (text, color,
|
|
311
|
+
// font, outline, shadow) authored via the Logo sidebar live in
|
|
312
|
+
// `editableLogoStore.logoEdits` — which is NOT in `brandPageData`,
|
|
313
|
+
// so an undo would revert this base64 image on the canvas without
|
|
314
|
+
// touching the sidebar fields. Per V1 scope, logo property edits
|
|
315
|
+
// are non-undoable (parallels the PRD's admin-logo exclusion);
|
|
316
|
+
// BYO-upload undo still works because that change shows up in
|
|
317
|
+
// `logoImage.logoDraftToken`, not here. Stripping the field keeps
|
|
318
|
+
// those isolated render-output diffs out of the stack entirely.
|
|
319
|
+
if (key === 'logoImageBase64Url')
|
|
320
|
+
continue;
|
|
147
321
|
// Collapse RTE default-hydration wrappers down to the plain text
|
|
148
322
|
// they wrap. Plain "X" and `<p style="..."><span ...><mark ...>X
|
|
149
323
|
// </mark></span></p>` share the same canonical "X" so a sidebar
|
package/lib/src/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as E, a as T, b as s, c as I, d as S, e as N, f as e, B as A, g as O, h as C, i as G, j as D, k as P, l as t, m as R, n as L, o as M, p as o, q as r, r as b, s as n, t as F, u as i, v as l, w as g, x as B, y as c, z as Y, C as U, D as d, E as u, F as H, G as p, H as y, I as K, J as k, K as m, L as V, M as X, N as h, O as v, P as W, Q as f, R as x, S as z, T as w, U as Z, V as j, W as Q, X as q, Y as J, Z as $, $ as aa, a0 as _a, a1 as Ea, a2 as Ta, a3 as sa, a4 as Ia, a5 as Sa, a6 as Na, a7 as ea, a8 as Aa, a9 as Oa, aa as Ca, ab as Ga, ac as Da, ad as Pa, ae as ta, af as Ra, ag as La, ah as Ma, ai as oa, aj as ra, ak as ba, al as na, am as Fa, an as ia, ao as la, ap as ga, aq as Ba, ar as ca, as as Ya, at as Ua, au as da, av as ua, aw as Ha, ax as pa, ay as ya, az as Ka, aA as ka, aB as ma, aC as Va, aD as Xa, aE as ha, aF as va, aG as Wa, aH as fa, aI as xa, aJ as za, aK as wa, aL as Za, aM as ja, aN as Qa, aO as qa, aP as Ja, aQ as $a, aR as a_, aS as __, aT as E_, aU as T_, aV as s_, aW as I_, aX as S_, aY as N_, aZ as e_, a_ as A_, a$ as O_, b0 as C_, b1 as G_, b2 as D_, b3 as P_, b4 as t_, b5 as R_, b6 as L_, b7 as M_, b8 as o_, b9 as r_, ba as b_, bb as n_, bc as F_, bd as i_, be as l_, bf as g_, bg as B_, bh as c_, bi as Y_, bj as U_, bk as d_, bl as u_, bm as H_, bn as p_, bo as y_, bp as K_, bq as k_, br as m_, bs as V_, bt as X_, bu as h_, bv as v_, bw as W_, bx as f_, by as x_, bz as z_, bA as w_, bB as Z_, bC as j_, bD as Q_, bE as q_, bF as J_, bG as $_, bH as aE, bI as _E, bJ as EE, bK as TE, bL as sE, bM as IE, bN as SE, bO as NE, bP as eE, bQ as AE, bR as OE, bS as CE, bT as GE, bU as DE, bV as PE, bW as tE, bX as RE, bY as LE, bZ as ME, b_ as oE, b$ as rE, c0 as bE, c1 as nE, c2 as FE, c3 as iE, c4 as lE, c5 as gE, c6 as BE, c7 as cE, c8 as YE, c9 as UE, ca as dE, cb as uE, cc as HE, cd as pE, ce as yE, cf as KE, cg as kE, ch as mE, ci as VE, cj as XE, ck as hE, cl as vE, cm as WE, cn as fE, co as xE } from "./lib-
|
|
1
|
+
import { A as E, a as T, b as s, c as I, d as S, e as N, f as e, B as A, g as O, h as C, i as G, j as D, k as P, l as t, m as R, n as L, o as M, p as o, q as r, r as b, s as n, t as F, u as i, v as l, w as g, x as B, y as c, z as Y, C as U, D as d, E as u, F as H, G as p, H as y, I as K, J as k, K as m, L as V, M as X, N as h, O as v, P as W, Q as f, R as x, S as z, T as w, U as Z, V as j, W as Q, X as q, Y as J, Z as $, $ as aa, a0 as _a, a1 as Ea, a2 as Ta, a3 as sa, a4 as Ia, a5 as Sa, a6 as Na, a7 as ea, a8 as Aa, a9 as Oa, aa as Ca, ab as Ga, ac as Da, ad as Pa, ae as ta, af as Ra, ag as La, ah as Ma, ai as oa, aj as ra, ak as ba, al as na, am as Fa, an as ia, ao as la, ap as ga, aq as Ba, ar as ca, as as Ya, at as Ua, au as da, av as ua, aw as Ha, ax as pa, ay as ya, az as Ka, aA as ka, aB as ma, aC as Va, aD as Xa, aE as ha, aF as va, aG as Wa, aH as fa, aI as xa, aJ as za, aK as wa, aL as Za, aM as ja, aN as Qa, aO as qa, aP as Ja, aQ as $a, aR as a_, aS as __, aT as E_, aU as T_, aV as s_, aW as I_, aX as S_, aY as N_, aZ as e_, a_ as A_, a$ as O_, b0 as C_, b1 as G_, b2 as D_, b3 as P_, b4 as t_, b5 as R_, b6 as L_, b7 as M_, b8 as o_, b9 as r_, ba as b_, bb as n_, bc as F_, bd as i_, be as l_, bf as g_, bg as B_, bh as c_, bi as Y_, bj as U_, bk as d_, bl as u_, bm as H_, bn as p_, bo as y_, bp as K_, bq as k_, br as m_, bs as V_, bt as X_, bu as h_, bv as v_, bw as W_, bx as f_, by as x_, bz as z_, bA as w_, bB as Z_, bC as j_, bD as Q_, bE as q_, bF as J_, bG as $_, bH as aE, bI as _E, bJ as EE, bK as TE, bL as sE, bM as IE, bN as SE, bO as NE, bP as eE, bQ as AE, bR as OE, bS as CE, bT as GE, bU as DE, bV as PE, bW as tE, bX as RE, bY as LE, bZ as ME, b_ as oE, b$ as rE, c0 as bE, c1 as nE, c2 as FE, c3 as iE, c4 as lE, c5 as gE, c6 as BE, c7 as cE, c8 as YE, c9 as UE, ca as dE, cb as uE, cc as HE, cd as pE, ce as yE, cf as KE, cg as kE, ch as mE, ci as VE, cj as XE, ck as hE, cl as vE, cm as WE, cn as fE, co as xE } from "./lib-MGJszuw2.js";
|
|
2
2
|
import { createPinia as wE, setActivePinia as ZE } from "pinia";
|
|
3
3
|
export {
|
|
4
4
|
E as ABOUT_SECTION_SETTINGS_CONFIG,
|