sibujs 4.7.0 → 4.8.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 (81) hide show
  1. package/dist/browser.cjs +45 -4
  2. package/dist/browser.d.cts +23 -0
  3. package/dist/browser.d.ts +23 -0
  4. package/dist/browser.js +6 -5
  5. package/dist/build.cjs +513 -78
  6. package/dist/build.d.cts +22 -8
  7. package/dist/build.d.ts +22 -8
  8. package/dist/build.js +68 -21
  9. package/dist/cdn.dev.global.js +15 -13
  10. package/dist/cdn.full.dev.global.js +15 -13
  11. package/dist/cdn.full.global.js +14 -12
  12. package/dist/cdn.global.js +14 -12
  13. package/dist/chunk-3ACAAQIN.js +224 -0
  14. package/dist/{chunk-DKXRACVN.js → chunk-44MTL7ED.js} +6 -6
  15. package/dist/{chunk-3QWBSL5R.js → chunk-4WMSTZ7J.js} +8 -5
  16. package/dist/{chunk-H3SRKIYX.js → chunk-62BDYGAG.js} +8 -0
  17. package/dist/{chunk-BSY63EM6.js → chunk-C5PEWEGH.js} +20 -5
  18. package/dist/{chunk-BC2SECJD.js → chunk-C7AA2CZX.js} +1 -1
  19. package/dist/{chunk-SLM3IA34.js → chunk-CZPRSWSS.js} +1 -1
  20. package/dist/{chunk-FQRUXCEE.js → chunk-DSID757X.js} +1 -1
  21. package/dist/{chunk-ZVL7TY4K.js → chunk-EGUQLBHE.js} +22 -8
  22. package/dist/{chunk-2INLLLMZ.js → chunk-EXXSN3BW.js} +202 -26
  23. package/dist/{chunk-HURREPU2.js → chunk-FC6KCJSA.js} +87 -150
  24. package/dist/{chunk-Z3OHK6QT.js → chunk-GSGNX35Q.js} +5 -5
  25. package/dist/{chunk-XYV3EDB7.js → chunk-J3YQ457H.js} +37 -20
  26. package/dist/{chunk-VZSG24LS.js → chunk-JUTFX2RM.js} +18 -10
  27. package/dist/{chunk-RUSSKG6G.js → chunk-KJ3UKABJ.js} +1 -1
  28. package/dist/{chunk-UNWRJRKC.js → chunk-LI4W3U6C.js} +1 -1
  29. package/dist/{chunk-FNJXNGYZ.js → chunk-O6TRVMJI.js} +58 -6
  30. package/dist/{chunk-7LUJQAOJ.js → chunk-Q5J2LVKH.js} +1 -1
  31. package/dist/{chunk-4AWA2PVD.js → chunk-QGMSESDD.js} +10 -5
  32. package/dist/{chunk-XZR4PXRE.js → chunk-RGLPEBDE.js} +13 -10
  33. package/dist/{chunk-JWKYU5GV.js → chunk-TQQUN4WR.js} +1 -1
  34. package/dist/{chunk-WOLJZUFQ.js → chunk-UCNP3HVM.js} +12 -8
  35. package/dist/{chunk-WEQ3DMVL.js → chunk-V3LHZSU5.js} +1 -1
  36. package/dist/{chunk-UOL2ECCS.js → chunk-VWT3VXPL.js} +18 -12
  37. package/dist/{chunk-2BPG2XDA.js → chunk-ZVLHNEEL.js} +17 -35
  38. package/dist/{customElement-MmInOW1U.d.ts → customElement-pYDKUzWl.d.cts} +11 -3
  39. package/dist/{customElement-MmInOW1U.d.cts → customElement-pYDKUzWl.d.ts} +11 -3
  40. package/dist/data.cjs +9 -2
  41. package/dist/data.js +6 -6
  42. package/dist/devtools.cjs +1 -1
  43. package/dist/devtools.js +5 -5
  44. package/dist/ecosystem.cjs +400 -37
  45. package/dist/ecosystem.js +9 -8
  46. package/dist/extras.cjs +621 -252
  47. package/dist/extras.d.cts +2 -2
  48. package/dist/extras.d.ts +2 -2
  49. package/dist/extras.js +24 -23
  50. package/dist/index.cjs +464 -70
  51. package/dist/index.d.cts +28 -2
  52. package/dist/index.d.ts +28 -2
  53. package/dist/index.js +16 -12
  54. package/dist/motion.cjs +1 -1
  55. package/dist/motion.js +3 -3
  56. package/dist/patterns.cjs +10 -7
  57. package/dist/patterns.js +6 -6
  58. package/dist/performance.cjs +31 -2
  59. package/dist/performance.d.cts +12 -2
  60. package/dist/performance.d.ts +12 -2
  61. package/dist/performance.js +8 -6
  62. package/dist/plugins.cjs +558 -231
  63. package/dist/plugins.d.cts +8 -3
  64. package/dist/plugins.d.ts +8 -3
  65. package/dist/plugins.js +22 -28
  66. package/dist/{ssr-XOTUASDO.js → ssr-5OWAH3U2.js} +4 -2
  67. package/dist/{ssr-Bli9XRW5.d.ts → ssr-C8hgIAw7.d.cts} +6 -0
  68. package/dist/{ssr-Bli9XRW5.d.cts → ssr-C8hgIAw7.d.ts} +6 -0
  69. package/dist/ssr.cjs +457 -131
  70. package/dist/ssr.d.cts +55 -5
  71. package/dist/ssr.d.ts +55 -5
  72. package/dist/ssr.js +11 -9
  73. package/dist/testing.cjs +3 -3
  74. package/dist/testing.js +4 -4
  75. package/dist/ui.cjs +608 -240
  76. package/dist/ui.d.cts +1 -1
  77. package/dist/ui.d.ts +1 -1
  78. package/dist/ui.js +9 -8
  79. package/dist/widgets.cjs +1 -1
  80. package/dist/widgets.js +7 -7
  81. package/package.json +5 -4
@@ -1,15 +1,18 @@
1
1
  import {
2
2
  bindAttribute,
3
3
  setSafeAttribute
4
- } from "./chunk-FNJXNGYZ.js";
4
+ } from "./chunk-O6TRVMJI.js";
5
+ import {
6
+ isBlockedElement
7
+ } from "./chunk-3ACAAQIN.js";
5
8
  import {
6
9
  isEventHandlerAttr,
7
- sanitizeCSSValue,
10
+ sanitizeCSSDeclaration,
8
11
  sanitizeStyleAttribute
9
- } from "./chunk-2INLLLMZ.js";
12
+ } from "./chunk-EXXSN3BW.js";
10
13
  import {
11
14
  reactiveBinding
12
- } from "./chunk-JWKYU5GV.js";
15
+ } from "./chunk-TQQUN4WR.js";
13
16
  import {
14
17
  DEV,
15
18
  devWarn,
@@ -189,10 +192,6 @@ function bindChildNode(placeholder, getter) {
189
192
 
190
193
  // src/core/rendering/tagFactory.ts
191
194
  var SVG_NS = "http://www.w3.org/2000/svg";
192
- var BLOCKED_TAGS = /* @__PURE__ */ new Set(["script", "iframe", "object", "embed", "frame", "frameset"]);
193
- function isBlockedTag(tag) {
194
- return BLOCKED_TAGS.has(tag.toLowerCase());
195
- }
196
195
  var CLOBBER_RISKY_IDS = /* @__PURE__ */ new Set([
197
196
  "config",
198
197
  "location",
@@ -237,11 +236,12 @@ function applyStyle(el, style) {
237
236
  }
238
237
  const next = [];
239
238
  for (const prop in value) {
239
+ if (!Object.hasOwn(value, prop)) continue;
240
240
  const val = value[prop];
241
241
  if (val == null) continue;
242
242
  const name = toKebab(prop);
243
243
  next.push(name);
244
- decl.setProperty(name, sanitizeCSSValue(String(val), { property: name, element: el }));
244
+ decl.setProperty(name, sanitizeCSSDeclaration(name, String(val), { element: el }));
245
245
  }
246
246
  for (let i = 0; i < written.length; i++) {
247
247
  if (next.indexOf(written[i]) === -1) decl.removeProperty(written[i]);
@@ -257,16 +257,17 @@ function applyStyle(el, style) {
257
257
  }
258
258
  const htmlEl = el;
259
259
  for (const prop in style) {
260
+ if (!Object.hasOwn(style, prop)) continue;
260
261
  const val = style[prop];
261
262
  const name = toKebab(prop);
262
263
  if (typeof val === "function") {
263
264
  const getter = val;
264
265
  const teardown = reactiveBinding(() => {
265
- htmlEl.style.setProperty(name, sanitizeCSSValue(String(getter()), { property: name, element: el }));
266
+ htmlEl.style.setProperty(name, sanitizeCSSDeclaration(name, String(getter()), { element: el }));
266
267
  }, el);
267
268
  registerDisposer(el, teardown);
268
269
  } else {
269
- htmlEl.style.setProperty(name, sanitizeCSSValue(String(val), { property: name, element: el }));
270
+ htmlEl.style.setProperty(name, sanitizeCSSDeclaration(name, String(val), { element: el }));
270
271
  }
271
272
  }
272
273
  }
@@ -276,6 +277,7 @@ function resolveClassValue(cls) {
276
277
  if (!cls) return "";
277
278
  let out = "";
278
279
  for (const name in cls) {
280
+ if (!Object.hasOwn(cls, name)) continue;
279
281
  const val = cls[name];
280
282
  const active = typeof val === "function" ? val() : val;
281
283
  if (active) out = out ? `${out} ${name}` : name;
@@ -300,6 +302,7 @@ function applyClass(el, cls) {
300
302
  let hasReactive = false;
301
303
  let result = "";
302
304
  for (const name in obj) {
305
+ if (!Object.hasOwn(obj, name)) continue;
303
306
  const val = obj[name];
304
307
  if (typeof val === "function") {
305
308
  hasReactive = true;
@@ -311,6 +314,7 @@ function applyClass(el, cls) {
311
314
  const update = () => {
312
315
  let r = "";
313
316
  for (const name in obj) {
317
+ if (!Object.hasOwn(obj, name)) continue;
314
318
  const val = obj[name];
315
319
  const active = typeof val === "function" ? val() : val;
316
320
  if (active) r = r ? `${r} ${name}` : name;
@@ -374,7 +378,7 @@ function appendChildren(el, nodes) {
374
378
  }
375
379
  }
376
380
  function tagFactory(tag, ns) {
377
- const blocked = isBlockedTag(tag);
381
+ const blocked = isBlockedElement(tag);
378
382
  return (first, second) => {
379
383
  if (blocked) {
380
384
  throw new Error(`tagFactory: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
@@ -437,6 +441,7 @@ function tagFactory(tag, ns) {
437
441
  const pOn = props.on;
438
442
  if (pOn) {
439
443
  for (const ev in pOn) {
444
+ if (!Object.hasOwn(pOn, ev)) continue;
440
445
  const handler = pOn[ev];
441
446
  if (typeof handler === "function") {
442
447
  el.addEventListener(ev, handler);
@@ -463,6 +468,7 @@ function tagFactory(tag, ns) {
463
468
  continue;
464
469
  // already handled above / below
465
470
  default: {
471
+ if (!Object.hasOwn(props, key)) continue;
466
472
  const value = props[key];
467
473
  if (value == null) continue;
468
474
  if (isEventHandlerAttr(key)) continue;
@@ -1,29 +1,33 @@
1
1
  import {
2
2
  domBinding
3
- } from "./chunk-BC2SECJD.js";
3
+ } from "./chunk-C7AA2CZX.js";
4
4
  import {
5
5
  bindAttribute,
6
6
  setSafeAttribute
7
- } from "./chunk-FNJXNGYZ.js";
7
+ } from "./chunk-O6TRVMJI.js";
8
8
  import {
9
- derived
10
- } from "./chunk-RUSSKG6G.js";
9
+ isBlockedElement
10
+ } from "./chunk-3ACAAQIN.js";
11
11
  import {
12
- isEventHandlerAttr
13
- } from "./chunk-2INLLLMZ.js";
12
+ derived
13
+ } from "./chunk-KJ3UKABJ.js";
14
14
  import {
15
15
  globalSingleton
16
16
  } from "./chunk-7ZHH77QA.js";
17
+ import {
18
+ isEventHandlerAttr,
19
+ sanitizeStylesheetText
20
+ } from "./chunk-EXXSN3BW.js";
17
21
  import {
18
22
  adoptThenable
19
23
  } from "./chunk-5HZXGZ6T.js";
20
24
  import {
21
25
  signal
22
- } from "./chunk-FQRUXCEE.js";
26
+ } from "./chunk-DSID757X.js";
23
27
  import {
24
28
  reactiveBinding,
25
29
  track
26
- } from "./chunk-JWKYU5GV.js";
30
+ } from "./chunk-TQQUN4WR.js";
27
31
  import {
28
32
  dispose,
29
33
  disposeNodeOwn,
@@ -745,31 +749,6 @@ function announce(message, priority = "polite") {
745
749
 
746
750
  // src/ui/scopedStyle.ts
747
751
  var _scope = globalSingleton(/* @__PURE__ */ Symbol.for("sibujs.scopedStyle.v1"), () => ({ n: 0 }));
748
- function decodeCssEscapes(css) {
749
- return css.replace(/\\([0-9a-f]{1,6})[ \t\n\r\f]?|\\([^\n])/gi, (_match, hex, ch) => {
750
- if (hex) {
751
- const code = Number.parseInt(hex, 16);
752
- if (Number.isFinite(code) && code > 0 && code <= 1114111) {
753
- try {
754
- return String.fromCodePoint(code);
755
- } catch {
756
- return "";
757
- }
758
- }
759
- return "";
760
- }
761
- return ch || "";
762
- });
763
- }
764
- function sanitizeCSS(css) {
765
- let sanitized = decodeCssEscapes(css);
766
- sanitized = sanitized.replace(/@import\s+[^;]+;/gi, "/* @import removed */");
767
- sanitized = sanitized.replace(/url\s*\(\s*(?:"[^"]*"|'[^']*'|[^)]*)\s*\)/gi, "/* url() removed */");
768
- sanitized = sanitized.replace(/expression\s*\(\s*(?:"[^"]*"|'[^']*'|[^)]*)\s*\)/gi, "/* expression() removed */");
769
- sanitized = sanitized.replace(/-moz-binding\s*:[^;]+;/gi, "/* -moz-binding removed */");
770
- sanitized = sanitized.replace(/behavior\s*:[^;]+;/gi, "/* behavior removed */");
771
- return sanitized;
772
- }
773
752
  function firstCompoundEnd(selector) {
774
753
  let parens = 0;
775
754
  let brackets = 0;
@@ -931,7 +910,7 @@ function scopeStylesheet(css, attr) {
931
910
  function scopedStyle(css) {
932
911
  const id = `sibu-s${_scope.n++}`;
933
912
  const attr = `data-${id}`;
934
- const safeCss = sanitizeCSS(css);
913
+ const safeCss = sanitizeStylesheetText(css);
935
914
  const scopedCSS = scopeStylesheet(safeCss, attr);
936
915
  if (typeof document !== "undefined") {
937
916
  const styleEl = document.createElement("style");
@@ -989,7 +968,7 @@ function bindBoolAttr(el, attr, getter) {
989
968
  reportError(err, { phase: "binding", name: "bindBoolAttr", node: el });
990
969
  return;
991
970
  }
992
- setSafeAttribute(el, attr, Boolean(value), { label: "bindBoolAttr" });
971
+ setSafeAttribute(el, attr, Boolean(value), { label: "bindBoolAttr", reactive: true });
993
972
  }
994
973
  return reactiveBinding(commit, el);
995
974
  }
@@ -1472,6 +1451,9 @@ function defineElement(name, component, options = {}) {
1472
1451
  customElements.define(name, SibuElement);
1473
1452
  }
1474
1453
  function svgElement(tag, props = {}, ...nodes) {
1454
+ if (isBlockedElement(tag)) {
1455
+ throw new Error(`svgElement: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
1456
+ }
1475
1457
  const el = document.createElementNS(SVG_NS, tag);
1476
1458
  for (const [key, value] of Object.entries(props)) {
1477
1459
  if (key === "nodes") continue;
@@ -277,9 +277,11 @@ declare function announce(message: string, priority?: "polite" | "assertive"): v
277
277
  * and prefixing all selectors.
278
278
  * Returns the scope attribute name and injects the CSS into the document.
279
279
  *
280
- * CSS is sanitized to remove dangerous patterns (`url()`, `@import`,
281
- * `expression()`, `-moz-binding`, `behavior`). If you need `url()` for
282
- * background images, use inline styles via the `style` prop instead.
280
+ * CSS is sanitized by the framework's stylesheet-text policy
281
+ * (`sanitizeStylesheetText`): `url()`, `image-set()`, `image()`, `src()`,
282
+ * `expression()`, `@import`, `behavior`, `-moz-binding` and `progid:` filters
283
+ * are removed. For a content image use an `<img>`; for a decorative one, a
284
+ * stylesheet you ship.
283
285
  */
284
286
  declare function scopedStyle(css: string): {
285
287
  scope: string;
@@ -484,6 +486,7 @@ declare function eventBus<T extends object>(): {
484
486
  interface CustomElementOptions {
485
487
  shadow?: boolean;
486
488
  mode?: "open" | "closed";
489
+ /** Stylesheet source for the element's shadow root, applied unsanitized — developer CSS, not runtime data. */
487
490
  styles?: string;
488
491
  observedAttributes?: string[];
489
492
  }
@@ -504,6 +507,11 @@ declare function defineElement(name: string, component: (props: Record<string, u
504
507
  *
505
508
  * Function-valued `on*` props keep their existing meaning — `addEventListener`,
506
509
  * never an attribute.
510
+ *
511
+ * The TAG is policed like a tag factory's, through the shared element policy:
512
+ * `svgElement("script", { href })` is refused. SVG has its own `<script>`, which
513
+ * the browser fetches and runs when it is inserted, so an unrestricted tag name
514
+ * here was a way around the tag factories' block on script elements.
507
515
  */
508
516
  declare function svgElement(tag: string, props?: Record<string, unknown>, ...nodes: (SVGElement | string)[]): SVGElement;
509
517
 
@@ -277,9 +277,11 @@ declare function announce(message: string, priority?: "polite" | "assertive"): v
277
277
  * and prefixing all selectors.
278
278
  * Returns the scope attribute name and injects the CSS into the document.
279
279
  *
280
- * CSS is sanitized to remove dangerous patterns (`url()`, `@import`,
281
- * `expression()`, `-moz-binding`, `behavior`). If you need `url()` for
282
- * background images, use inline styles via the `style` prop instead.
280
+ * CSS is sanitized by the framework's stylesheet-text policy
281
+ * (`sanitizeStylesheetText`): `url()`, `image-set()`, `image()`, `src()`,
282
+ * `expression()`, `@import`, `behavior`, `-moz-binding` and `progid:` filters
283
+ * are removed. For a content image use an `<img>`; for a decorative one, a
284
+ * stylesheet you ship.
283
285
  */
284
286
  declare function scopedStyle(css: string): {
285
287
  scope: string;
@@ -484,6 +486,7 @@ declare function eventBus<T extends object>(): {
484
486
  interface CustomElementOptions {
485
487
  shadow?: boolean;
486
488
  mode?: "open" | "closed";
489
+ /** Stylesheet source for the element's shadow root, applied unsanitized — developer CSS, not runtime data. */
487
490
  styles?: string;
488
491
  observedAttributes?: string[];
489
492
  }
@@ -504,6 +507,11 @@ declare function defineElement(name: string, component: (props: Record<string, u
504
507
  *
505
508
  * Function-valued `on*` props keep their existing meaning — `addEventListener`,
506
509
  * never an attribute.
510
+ *
511
+ * The TAG is policed like a tag factory's, through the shared element policy:
512
+ * `svgElement("script", { href })` is refused. SVG has its own `<script>`, which
513
+ * the browser fetches and runs when it is inserted, so an unrestricted tag name
514
+ * here was a way around the tag factories' block on script elements.
507
515
  */
508
516
  declare function svgElement(tag: string, props?: Record<string, unknown>, ...nodes: (SVGElement | string)[]): SVGElement;
509
517
 
package/dist/data.cjs CHANGED
@@ -660,7 +660,7 @@ function forEachSubscriber(signal2, visit) {
660
660
  }
661
661
 
662
662
  // src/reactivity/track.ts
663
- var _runtimeVersion = true ? "4.7.0" : "dev";
663
+ var _runtimeVersion = true ? "4.8.0" : "dev";
664
664
  var REGISTRY_KEY = /* @__PURE__ */ Symbol.for("sibujs.reactive.v1");
665
665
  function resolveReactiveApi() {
666
666
  const g = globalThis;
@@ -1289,7 +1289,11 @@ function reconcile(prev, next, depth, walk, newRoot) {
1289
1289
  const nextChild = nextRecord[key];
1290
1290
  const hasPrev = Object.hasOwn(prevRecord, key);
1291
1291
  const shared = hasPrev ? reconcile(prevRecord[key], nextChild, depth + 1, walk, false) : nextChild;
1292
- copy[key] = shared;
1292
+ if (key === "__proto__") {
1293
+ Object.defineProperty(copy, key, { value: shared, writable: true, enumerable: true, configurable: true });
1294
+ } else {
1295
+ copy[key] = shared;
1296
+ }
1293
1297
  if (!hasPrev || !Object.is(shared, prevRecord[key])) allFromPrev = false;
1294
1298
  if (!Object.is(shared, nextChild)) allFromNext = false;
1295
1299
  }
@@ -2660,6 +2664,9 @@ function sanitizeUrl(url) {
2660
2664
  const probe = stripControlChars(url).trim();
2661
2665
  if (!probe) return "";
2662
2666
  const output = url.replace(OUTER_TRIM, "");
2667
+ if (probe.length >= 2 && (probe[0] === "\\" || probe[0] === "/") && (probe[1] === "\\" || probe[1] === "/") && (probe[0] === "\\" || probe[1] === "\\")) {
2668
+ return "";
2669
+ }
2663
2670
  const lower = probe.toLowerCase();
2664
2671
  let schemeEnd = -1;
2665
2672
  for (let i = 0; i < lower.length; i++) {
package/dist/data.js CHANGED
@@ -22,14 +22,14 @@ import {
22
22
  throttle,
23
23
  withLoader,
24
24
  withRetry
25
- } from "./chunk-WOLJZUFQ.js";
26
- import "./chunk-RUSSKG6G.js";
27
- import "./chunk-2INLLLMZ.js";
25
+ } from "./chunk-UCNP3HVM.js";
26
+ import "./chunk-KJ3UKABJ.js";
28
27
  import "./chunk-7ZHH77QA.js";
29
- import "./chunk-WEQ3DMVL.js";
28
+ import "./chunk-V3LHZSU5.js";
29
+ import "./chunk-EXXSN3BW.js";
30
30
  import "./chunk-7XHATCIH.js";
31
- import "./chunk-FQRUXCEE.js";
32
- import "./chunk-JWKYU5GV.js";
31
+ import "./chunk-DSID757X.js";
32
+ import "./chunk-TQQUN4WR.js";
33
33
  import "./chunk-NYNYSPK7.js";
34
34
  export {
35
35
  __resetQueryCache,
package/dist/devtools.cjs CHANGED
@@ -844,7 +844,7 @@ function forEachSubscriber(signal2, visit) {
844
844
  }
845
845
 
846
846
  // src/reactivity/track.ts
847
- var _runtimeVersion = true ? "4.7.0" : "dev";
847
+ var _runtimeVersion = true ? "4.8.0" : "dev";
848
848
  var REGISTRY_KEY = /* @__PURE__ */ Symbol.for("sibujs.reactive.v1");
849
849
  function resolveReactiveApi() {
850
850
  const g = globalThis;
package/dist/devtools.js CHANGED
@@ -35,13 +35,13 @@ import {
35
35
  trackCleanup,
36
36
  walkDependencyGraph,
37
37
  withErrorTracking
38
- } from "./chunk-DKXRACVN.js";
39
- import "./chunk-2INLLLMZ.js";
38
+ } from "./chunk-44MTL7ED.js";
40
39
  import "./chunk-7ZHH77QA.js";
41
- import "./chunk-WEQ3DMVL.js";
40
+ import "./chunk-V3LHZSU5.js";
41
+ import "./chunk-EXXSN3BW.js";
42
42
  import "./chunk-7XHATCIH.js";
43
- import "./chunk-FQRUXCEE.js";
44
- import "./chunk-JWKYU5GV.js";
43
+ import "./chunk-DSID757X.js";
44
+ import "./chunk-TQQUN4WR.js";
45
45
  import {
46
46
  isDev
47
47
  } from "./chunk-NYNYSPK7.js";