sibujs 3.2.1 → 3.3.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 (60) hide show
  1. package/dist/browser.cjs +7 -1
  2. package/dist/browser.js +5 -5
  3. package/dist/build.cjs +49 -22
  4. package/dist/build.js +14 -14
  5. package/dist/cdn.global.js +7 -7
  6. package/dist/{chunk-5N74TKLD.js → chunk-24DBWDTK.js} +1 -1
  7. package/dist/{chunk-2C4E3HBM.js → chunk-4WXWJ4SW.js} +5 -5
  8. package/dist/{chunk-C427DVQF.js → chunk-5K72I3UQ.js} +2 -2
  9. package/dist/{chunk-2UPRY23K.js → chunk-5VGSK6D2.js} +1 -1
  10. package/dist/{chunk-NPIEEKPT.js → chunk-6G6UNHZI.js} +6 -6
  11. package/dist/{chunk-FDY42FIU.js → chunk-7JHWAGRQ.js} +2 -2
  12. package/dist/{chunk-V2MTG5FT.js → chunk-BEIKESVL.js} +33 -16
  13. package/dist/{chunk-LMLD24FC.js → chunk-COY6PUD2.js} +7 -1
  14. package/dist/{chunk-JYXOEYI4.js → chunk-CVMMULHO.js} +2 -2
  15. package/dist/{chunk-H6PCHJZQ.js → chunk-F4UM7QBJ.js} +11 -3
  16. package/dist/{chunk-BGNLPNGV.js → chunk-IHBVTURX.js} +4 -4
  17. package/dist/{chunk-YFDGQWDA.js → chunk-JBXNCZSC.js} +1 -1
  18. package/dist/{chunk-HMJFCBRR.js → chunk-L3GAGWCC.js} +10 -1
  19. package/dist/{chunk-GOUM4JCT.js → chunk-M6WSIGYW.js} +2 -2
  20. package/dist/{chunk-VOCE4NNK.js → chunk-MWZFOIBG.js} +5 -5
  21. package/dist/{chunk-X67UYC74.js → chunk-NUWKIEHE.js} +14 -24
  22. package/dist/{chunk-RLUJL2MV.js → chunk-Q2ERM6NT.js} +6 -7
  23. package/dist/{chunk-HXMS4SNP.js → chunk-R3QEDXFS.js} +2 -2
  24. package/dist/{chunk-NFYWLRUO.js → chunk-S4FHR5ZZ.js} +3 -3
  25. package/dist/{chunk-7XDYVJLE.js → chunk-SLCUP2EK.js} +6 -6
  26. package/dist/{chunk-OYLPZO4N.js → chunk-USDR2GFV.js} +4 -4
  27. package/dist/{chunk-4JCAUOLN.js → chunk-WVJJUFPC.js} +22 -12
  28. package/dist/{chunk-Z2FWAE4B.js → chunk-X3NHE2DK.js} +3 -1
  29. package/dist/{chunk-FOI23UJL.js → chunk-XQ7XSGYP.js} +1 -1
  30. package/dist/{chunk-RDRSWYNP.js → chunk-ZUVLC7TM.js} +1 -1
  31. package/dist/data.cjs +7 -1
  32. package/dist/data.js +8 -8
  33. package/dist/devtools.cjs +7 -1
  34. package/dist/devtools.js +7 -7
  35. package/dist/ecosystem.cjs +22 -19
  36. package/dist/ecosystem.js +10 -10
  37. package/dist/extras.cjs +62 -28
  38. package/dist/extras.js +24 -24
  39. package/dist/index.cjs +49 -22
  40. package/dist/index.d.cts +13 -0
  41. package/dist/index.d.ts +13 -0
  42. package/dist/index.js +14 -14
  43. package/dist/motion.cjs +7 -1
  44. package/dist/motion.js +4 -4
  45. package/dist/patterns.cjs +7 -1
  46. package/dist/patterns.js +6 -6
  47. package/dist/performance.cjs +47 -9
  48. package/dist/performance.js +8 -8
  49. package/dist/plugins.cjs +24 -18
  50. package/dist/plugins.js +12 -12
  51. package/dist/{ssr-2QDQ27EV.js → ssr-6D67RAVB.js} +3 -3
  52. package/dist/ssr.cjs +22 -19
  53. package/dist/ssr.js +11 -11
  54. package/dist/testing.cjs +19 -7
  55. package/dist/testing.js +16 -10
  56. package/dist/ui.cjs +27 -4
  57. package/dist/ui.js +9 -9
  58. package/dist/widgets.cjs +32 -2
  59. package/dist/widgets.js +8 -8
  60. package/package.json +1 -1
package/dist/data.cjs CHANGED
@@ -46,7 +46,13 @@ module.exports = __toCommonJS(data_exports);
46
46
 
47
47
  // src/core/dev.ts
48
48
  function isDev() {
49
- return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production";
49
+ return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : (
50
+ // The bare `__SIBU_DEV__` is a bundler define that only exists in
51
+ // production builds; under the test runner it is always undefined, so
52
+ // this branch is unreachable here.
53
+ /* v8 ignore next 2 */
54
+ typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production"
55
+ );
50
56
  }
51
57
  var _isDev = isDev();
52
58
  function devAssert(condition, message) {
package/dist/data.js CHANGED
@@ -20,15 +20,15 @@ import {
20
20
  syncAdapter,
21
21
  throttle,
22
22
  withRetry
23
- } from "./chunk-VOCE4NNK.js";
24
- import "./chunk-YFDGQWDA.js";
25
- import "./chunk-JYXOEYI4.js";
26
- import "./chunk-HMJFCBRR.js";
27
- import "./chunk-FDY42FIU.js";
23
+ } from "./chunk-MWZFOIBG.js";
24
+ import "./chunk-JBXNCZSC.js";
25
+ import "./chunk-CVMMULHO.js";
26
+ import "./chunk-L3GAGWCC.js";
27
+ import "./chunk-7JHWAGRQ.js";
28
28
  import "./chunk-GOJMFRBL.js";
29
- import "./chunk-C427DVQF.js";
30
- import "./chunk-Z2FWAE4B.js";
31
- import "./chunk-LMLD24FC.js";
29
+ import "./chunk-5K72I3UQ.js";
30
+ import "./chunk-X3NHE2DK.js";
31
+ import "./chunk-COY6PUD2.js";
32
32
  export {
33
33
  __resetQueryCache,
34
34
  calculateDelay,
package/dist/devtools.cjs CHANGED
@@ -173,7 +173,13 @@ function checkLeaks() {
173
173
 
174
174
  // src/core/dev.ts
175
175
  function isDev() {
176
- return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production";
176
+ return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : (
177
+ // The bare `__SIBU_DEV__` is a bundler define that only exists in
178
+ // production builds; under the test runner it is always undefined, so
179
+ // this branch is unreachable here.
180
+ /* v8 ignore next 2 */
181
+ typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production"
182
+ );
177
183
  }
178
184
  var _isDev = isDev();
179
185
  function devAssert(condition, message) {
package/dist/devtools.js CHANGED
@@ -35,16 +35,16 @@ import {
35
35
  trackCleanup,
36
36
  walkDependencyGraph,
37
37
  withErrorTracking
38
- } from "./chunk-7XDYVJLE.js";
39
- import "./chunk-2UPRY23K.js";
40
- import "./chunk-HMJFCBRR.js";
41
- import "./chunk-FDY42FIU.js";
38
+ } from "./chunk-SLCUP2EK.js";
39
+ import "./chunk-5VGSK6D2.js";
40
+ import "./chunk-L3GAGWCC.js";
41
+ import "./chunk-7JHWAGRQ.js";
42
42
  import "./chunk-GOJMFRBL.js";
43
- import "./chunk-C427DVQF.js";
44
- import "./chunk-Z2FWAE4B.js";
43
+ import "./chunk-5K72I3UQ.js";
44
+ import "./chunk-X3NHE2DK.js";
45
45
  import {
46
46
  isDev
47
- } from "./chunk-LMLD24FC.js";
47
+ } from "./chunk-COY6PUD2.js";
48
48
 
49
49
  // src/devtools/signalGraph.ts
50
50
  function getHook() {
@@ -33,7 +33,13 @@ module.exports = __toCommonJS(ecosystem_exports);
33
33
 
34
34
  // src/core/dev.ts
35
35
  function isDev() {
36
- return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production";
36
+ return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : (
37
+ // The bare `__SIBU_DEV__` is a bundler define that only exists in
38
+ // production builds; under the test runner it is always undefined, so
39
+ // this branch is unreachable here.
40
+ /* v8 ignore next 2 */
41
+ typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production"
42
+ );
37
43
  }
38
44
  var _isDev = isDev();
39
45
  function devAssert(condition, message) {
@@ -952,7 +958,9 @@ function sanitizeSrcset(value) {
952
958
  }
953
959
  return out.join(", ");
954
960
  }
961
+ var CSS_DANGER_GATE = /[(:@\\]/;
955
962
  function sanitizeCSSValue(value) {
963
+ if (!CSS_DANGER_GATE.test(value)) return value;
956
964
  const decoded = value.replace(/\\([0-9a-fA-F]{1,6})\s?/g, (_m, hex) => {
957
965
  const code = Number.parseInt(hex, 16);
958
966
  if (!Number.isFinite(code) || code < 0 || code > 1114111) return "";
@@ -982,8 +990,11 @@ var URL_ATTRIBUTES = /* @__PURE__ */ new Set([
982
990
  "ping",
983
991
  "data"
984
992
  ]);
985
- function isUrlAttribute(attr) {
986
- return URL_ATTRIBUTES.has(attr.toLowerCase());
993
+ function sanitizeAttributeString(attr, value) {
994
+ const lower = attr.toLowerCase();
995
+ if (lower === "srcset") return sanitizeSrcset(value);
996
+ if (URL_ATTRIBUTES.has(lower)) return sanitizeUrl(value);
997
+ return value;
987
998
  }
988
999
 
989
1000
  // src/reactivity/bindAttribute.ts
@@ -1023,7 +1034,7 @@ function bindAttribute(el, attr, getter) {
1023
1034
  if ((attr === "value" || attr === "checked") && attr in el) {
1024
1035
  setProp(el, attr, attr === "checked" ? Boolean(value) : str);
1025
1036
  } else {
1026
- el.setAttribute(attr, isUrlAttribute(attr) ? sanitizeUrl(str) : str);
1037
+ el.setAttribute(attr, sanitizeAttributeString(attr, str));
1027
1038
  }
1028
1039
  }
1029
1040
  return reactiveBinding(commit);
@@ -1166,11 +1177,8 @@ function bindChildNode(placeholder, getter) {
1166
1177
  // src/core/rendering/tagFactory.ts
1167
1178
  var _isDev7 = isDev();
1168
1179
  var BLOCKED_TAGS = /* @__PURE__ */ new Set(["script", "iframe", "object", "embed", "frame", "frameset"]);
1169
- function validateTagName(tag) {
1170
- const lower = tag.toLowerCase();
1171
- if (BLOCKED_TAGS.has(lower)) {
1172
- throw new Error(`tagFactory: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
1173
- }
1180
+ function isBlockedTag(tag) {
1181
+ return BLOCKED_TAGS.has(tag.toLowerCase());
1174
1182
  }
1175
1183
  var CLOBBER_RISKY_IDS = /* @__PURE__ */ new Set([
1176
1184
  "config",
@@ -1325,8 +1333,11 @@ function appendChildren(el, nodes) {
1325
1333
  }
1326
1334
  }
1327
1335
  var tagFactory = (tag, ns) => {
1336
+ const blocked = isBlockedTag(tag);
1328
1337
  return (first, second) => {
1329
- validateTagName(tag);
1338
+ if (blocked) {
1339
+ throw new Error(`tagFactory: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
1340
+ }
1330
1341
  const el = ns ? document.createElementNS(ns, tag) : document.createElement(tag);
1331
1342
  if (first === void 0) return el;
1332
1343
  if (typeof first === "string") {
@@ -1396,7 +1407,6 @@ var tagFactory = (tag, ns) => {
1396
1407
  default: {
1397
1408
  const value = props[key];
1398
1409
  if (value == null) continue;
1399
- const lkey = key.toLowerCase();
1400
1410
  if (isEventHandlerAttr(key)) continue;
1401
1411
  if (typeof value === "function") {
1402
1412
  registerDisposer(el, bindAttribute(el, key, value));
@@ -1409,14 +1419,7 @@ var tagFactory = (tag, ns) => {
1409
1419
  el.removeAttribute(key);
1410
1420
  }
1411
1421
  } else {
1412
- const str = String(value);
1413
- if (lkey === "srcset") {
1414
- el.setAttribute(key, sanitizeSrcset(str));
1415
- } else if (isUrlAttribute(lkey)) {
1416
- el.setAttribute(key, sanitizeUrl(str));
1417
- } else {
1418
- el.setAttribute(key, str);
1419
- }
1422
+ el.setAttribute(key, sanitizeAttributeString(key, String(value)));
1420
1423
  }
1421
1424
  }
1422
1425
  }
package/dist/ecosystem.js CHANGED
@@ -7,18 +7,18 @@ import {
7
7
  mobXAdapter,
8
8
  reduxAdapter,
9
9
  zustandAdapter
10
- } from "./chunk-BGNLPNGV.js";
10
+ } from "./chunk-IHBVTURX.js";
11
11
  import "./chunk-3JHCYHWN.js";
12
- import "./chunk-X67UYC74.js";
13
- import "./chunk-RLUJL2MV.js";
14
- import "./chunk-JYXOEYI4.js";
15
- import "./chunk-2UPRY23K.js";
16
- import "./chunk-HMJFCBRR.js";
17
- import "./chunk-FDY42FIU.js";
12
+ import "./chunk-NUWKIEHE.js";
13
+ import "./chunk-Q2ERM6NT.js";
14
+ import "./chunk-CVMMULHO.js";
15
+ import "./chunk-5VGSK6D2.js";
16
+ import "./chunk-L3GAGWCC.js";
17
+ import "./chunk-7JHWAGRQ.js";
18
18
  import "./chunk-GOJMFRBL.js";
19
- import "./chunk-C427DVQF.js";
20
- import "./chunk-Z2FWAE4B.js";
21
- import "./chunk-LMLD24FC.js";
19
+ import "./chunk-5K72I3UQ.js";
20
+ import "./chunk-X3NHE2DK.js";
21
+ import "./chunk-COY6PUD2.js";
22
22
  export {
23
23
  antdAdapter,
24
24
  chakraAdapter,
package/dist/extras.cjs CHANGED
@@ -317,7 +317,13 @@ module.exports = __toCommonJS(extras_exports);
317
317
 
318
318
  // src/core/dev.ts
319
319
  function isDev() {
320
- return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production";
320
+ return typeof globalThis.__SIBU_DEV__ !== "undefined" ? !!globalThis.__SIBU_DEV__ : (
321
+ // The bare `__SIBU_DEV__` is a bundler define that only exists in
322
+ // production builds; under the test runner it is always undefined, so
323
+ // this branch is unreachable here.
324
+ /* v8 ignore next 2 */
325
+ typeof __SIBU_DEV__ !== "undefined" ? __SIBU_DEV__ : typeof process !== "undefined" && process.env?.NODE_ENV !== "production"
326
+ );
321
327
  }
322
328
  var _isDev = isDev();
323
329
  function devAssert(condition, message) {
@@ -415,6 +421,7 @@ function unlinkSub(node) {
415
421
  else sub2.depsTail = prev;
416
422
  }
417
423
  var currentSubscriber = null;
424
+ var suspendSavedSub = null;
418
425
  var notifyDepth = 0;
419
426
  var pendingQueue = [];
420
427
  var pendingSet = /* @__PURE__ */ new Set();
@@ -426,7 +433,24 @@ function safeInvoke(sub2) {
426
433
  if (_isDev2) devWarn(`Subscriber threw during notification: ${err instanceof Error ? err.message : String(err)}`);
427
434
  }
428
435
  }
436
+ var suspendDepth = 0;
429
437
  var trackingSuspended = false;
438
+ function suspendTracking() {
439
+ if (suspendDepth === 0) {
440
+ suspendSavedSub = currentSubscriber;
441
+ currentSubscriber = null;
442
+ trackingSuspended = true;
443
+ }
444
+ suspendDepth++;
445
+ }
446
+ function resumeTracking() {
447
+ suspendDepth--;
448
+ if (suspendDepth === 0) {
449
+ currentSubscriber = suspendSavedSub;
450
+ suspendSavedSub = null;
451
+ trackingSuspended = false;
452
+ }
453
+ }
430
454
  var subscriberEpochCounter = 0;
431
455
  function retrack(effectFn, subscriber) {
432
456
  const prev = currentSubscriber;
@@ -2247,7 +2271,9 @@ function sanitizeSrcset(value) {
2247
2271
  }
2248
2272
  return out.join(", ");
2249
2273
  }
2274
+ var CSS_DANGER_GATE = /[(:@\\]/;
2250
2275
  function sanitizeCSSValue(value) {
2276
+ if (!CSS_DANGER_GATE.test(value)) return value;
2251
2277
  const decoded = value.replace(/\\([0-9a-fA-F]{1,6})\s?/g, (_m, hex) => {
2252
2278
  const code2 = Number.parseInt(hex, 16);
2253
2279
  if (!Number.isFinite(code2) || code2 < 0 || code2 > 1114111) return "";
@@ -2293,8 +2319,11 @@ var URL_ATTRIBUTES = /* @__PURE__ */ new Set([
2293
2319
  "ping",
2294
2320
  "data"
2295
2321
  ]);
2296
- function isUrlAttribute(attr) {
2297
- return URL_ATTRIBUTES.has(attr.toLowerCase());
2322
+ function sanitizeAttributeString(attr, value) {
2323
+ const lower = attr.toLowerCase();
2324
+ if (lower === "srcset") return sanitizeSrcset(value);
2325
+ if (URL_ATTRIBUTES.has(lower)) return sanitizeUrl(value);
2326
+ return value;
2298
2327
  }
2299
2328
 
2300
2329
  // src/ui/stream.ts
@@ -5448,7 +5477,7 @@ function bindAttribute(el, attr, getter) {
5448
5477
  if ((attr === "value" || attr === "checked") && attr in el) {
5449
5478
  setProp(el, attr, attr === "checked" ? Boolean(value) : str);
5450
5479
  } else {
5451
- el.setAttribute(attr, isUrlAttribute(attr) ? sanitizeUrl(str) : str);
5480
+ el.setAttribute(attr, sanitizeAttributeString(attr, str));
5452
5481
  }
5453
5482
  }
5454
5483
  return reactiveBinding(commit);
@@ -6036,11 +6065,13 @@ function getDOMPool() {
6036
6065
  }
6037
6066
  var preloadedResources = /* @__PURE__ */ new Set();
6038
6067
  function preloadResource(url, type = "fetch") {
6039
- if (preloadedResources.has(url)) return;
6040
- preloadedResources.add(url);
6068
+ const safe = sanitizeUrl(url);
6069
+ if (!safe) return;
6070
+ if (preloadedResources.has(safe)) return;
6071
+ preloadedResources.add(safe);
6041
6072
  const link2 = document.createElement("link");
6042
6073
  link2.rel = "preload";
6043
- link2.href = url;
6074
+ link2.href = safe;
6044
6075
  switch (type) {
6045
6076
  case "script":
6046
6077
  link2.setAttribute("as", "script");
@@ -6058,11 +6089,13 @@ function preloadResource(url, type = "fetch") {
6058
6089
  document.head.appendChild(link2);
6059
6090
  }
6060
6091
  function prefetch(url) {
6061
- if (preloadedResources.has(url)) return;
6062
- preloadedResources.add(url);
6092
+ const safe = sanitizeUrl(url);
6093
+ if (!safe) return;
6094
+ if (preloadedResources.has(safe)) return;
6095
+ preloadedResources.add(safe);
6063
6096
  const link2 = document.createElement("link");
6064
6097
  link2.rel = "prefetch";
6065
- link2.href = url;
6098
+ link2.href = safe;
6066
6099
  document.head.appendChild(link2);
6067
6100
  }
6068
6101
  function preloadImage(src) {
@@ -6941,11 +6974,14 @@ function lazyChunk(id, loader, registry, fallback) {
6941
6974
  }
6942
6975
  function preloadModule(url) {
6943
6976
  if (typeof document === "undefined") return;
6944
- const existing = document.querySelector(`link[href="${url}"][rel="modulepreload"]`);
6977
+ const safe = sanitizeUrl(url);
6978
+ if (!safe) return;
6979
+ const safeHref = typeof CSS !== "undefined" && typeof CSS.escape === "function" ? CSS.escape(safe) : safe.replace(/["\\]/g, "\\$&");
6980
+ const existing = document.querySelector(`link[rel="modulepreload"][href="${safeHref}"]`);
6945
6981
  if (existing) return;
6946
6982
  const link2 = document.createElement("link");
6947
6983
  link2.rel = "modulepreload";
6948
- link2.href = url;
6984
+ link2.href = safe;
6949
6985
  document.head.appendChild(link2);
6950
6986
  }
6951
6987
  function preloadModules(urls) {
@@ -7628,11 +7664,8 @@ function bindChildNode(placeholder, getter) {
7628
7664
  var SVG_NS = "http://www.w3.org/2000/svg";
7629
7665
  var _isDev9 = isDev();
7630
7666
  var BLOCKED_TAGS = /* @__PURE__ */ new Set(["script", "iframe", "object", "embed", "frame", "frameset"]);
7631
- function validateTagName(tag) {
7632
- const lower = tag.toLowerCase();
7633
- if (BLOCKED_TAGS.has(lower)) {
7634
- throw new Error(`tagFactory: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
7635
- }
7667
+ function isBlockedTag(tag) {
7668
+ return BLOCKED_TAGS.has(tag.toLowerCase());
7636
7669
  }
7637
7670
  var CLOBBER_RISKY_IDS = /* @__PURE__ */ new Set([
7638
7671
  "config",
@@ -7787,8 +7820,11 @@ function appendChildren(el, nodes) {
7787
7820
  }
7788
7821
  }
7789
7822
  var tagFactory = (tag, ns) => {
7823
+ const blocked = isBlockedTag(tag);
7790
7824
  return (first, second) => {
7791
- validateTagName(tag);
7825
+ if (blocked) {
7826
+ throw new Error(`tagFactory: refusing to create <${tag}> \u2014 tag is blocked for security reasons.`);
7827
+ }
7792
7828
  const el = ns ? document.createElementNS(ns, tag) : document.createElement(tag);
7793
7829
  if (first === void 0) return el;
7794
7830
  if (typeof first === "string") {
@@ -7858,7 +7894,6 @@ var tagFactory = (tag, ns) => {
7858
7894
  default: {
7859
7895
  const value = props[key];
7860
7896
  if (value == null) continue;
7861
- const lkey = key.toLowerCase();
7862
7897
  if (isEventHandlerAttr(key)) continue;
7863
7898
  if (typeof value === "function") {
7864
7899
  registerDisposer(el, bindAttribute(el, key, value));
@@ -7871,14 +7906,7 @@ var tagFactory = (tag, ns) => {
7871
7906
  el.removeAttribute(key);
7872
7907
  }
7873
7908
  } else {
7874
- const str = String(value);
7875
- if (lkey === "srcset") {
7876
- el.setAttribute(key, sanitizeSrcset(str));
7877
- } else if (isUrlAttribute(lkey)) {
7878
- el.setAttribute(key, sanitizeUrl(str));
7879
- } else {
7880
- el.setAttribute(key, str);
7881
- }
7909
+ el.setAttribute(key, sanitizeAttributeString(key, String(value)));
7882
7910
  }
7883
7911
  }
7884
7912
  }
@@ -10396,8 +10424,14 @@ function watch(getter, callback) {
10396
10424
  return;
10397
10425
  }
10398
10426
  if (!Object.is(newValue, oldValue)) {
10399
- callback(newValue, oldValue);
10427
+ const prev = oldValue;
10400
10428
  oldValue = newValue;
10429
+ suspendTracking();
10430
+ try {
10431
+ callback(newValue, prev);
10432
+ } finally {
10433
+ resumeTracking();
10434
+ }
10401
10435
  }
10402
10436
  };
10403
10437
  const teardown = track(subscriber);
package/dist/extras.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  optimisticList,
6
6
  persisted,
7
7
  timeline
8
- } from "./chunk-NFYWLRUO.js";
8
+ } from "./chunk-S4FHR5ZZ.js";
9
9
  import {
10
10
  DOMPool,
11
11
  Features,
@@ -41,7 +41,7 @@ import {
41
41
  transitionState,
42
42
  uniqueId,
43
43
  yieldToMain
44
- } from "./chunk-4JCAUOLN.js";
44
+ } from "./chunk-WVJJUFPC.js";
45
45
  import {
46
46
  VERSION,
47
47
  bundlerMetadata,
@@ -62,7 +62,7 @@ import {
62
62
  preloadCritical,
63
63
  prerenderRoutes,
64
64
  satisfies
65
- } from "./chunk-RDRSWYNP.js";
65
+ } from "./chunk-ZUVLC7TM.js";
66
66
  import {
67
67
  Head,
68
68
  clearWasmCache,
@@ -87,7 +87,7 @@ import {
87
87
  wasm,
88
88
  worker,
89
89
  workerFn
90
- } from "./chunk-OYLPZO4N.js";
90
+ } from "./chunk-USDR2GFV.js";
91
91
  import {
92
92
  FocusTrap,
93
93
  VirtualList,
@@ -128,7 +128,7 @@ import {
128
128
  toast,
129
129
  withScopedStyle,
130
130
  zipMask
131
- } from "./chunk-NPIEEKPT.js";
131
+ } from "./chunk-6G6UNHZI.js";
132
132
  import {
133
133
  RenderProp,
134
134
  assertType,
@@ -155,7 +155,7 @@ import {
155
155
  select,
156
156
  tabs,
157
157
  tooltip
158
- } from "./chunk-2C4E3HBM.js";
158
+ } from "./chunk-4WXWJ4SW.js";
159
159
  import {
160
160
  animationFrame,
161
161
  battery,
@@ -193,7 +193,7 @@ import {
193
193
  visibility,
194
194
  wakeLock,
195
195
  windowSize
196
- } from "./chunk-GOUM4JCT.js";
196
+ } from "./chunk-M6WSIGYW.js";
197
197
  import "./chunk-H3SRKIYX.js";
198
198
  import {
199
199
  __resetQueryCache,
@@ -217,7 +217,7 @@ import {
217
217
  syncAdapter,
218
218
  throttle,
219
219
  withRetry
220
- } from "./chunk-VOCE4NNK.js";
220
+ } from "./chunk-MWZFOIBG.js";
221
221
  import {
222
222
  SibuError,
223
223
  checkLeaks,
@@ -255,7 +255,7 @@ import {
255
255
  trackCleanup,
256
256
  walkDependencyGraph,
257
257
  withErrorTracking
258
- } from "./chunk-7XDYVJLE.js";
258
+ } from "./chunk-SLCUP2EK.js";
259
259
  import {
260
260
  antdAdapter,
261
261
  chakraAdapter,
@@ -265,7 +265,7 @@ import {
265
265
  mobXAdapter,
266
266
  reduxAdapter,
267
267
  zustandAdapter
268
- } from "./chunk-BGNLPNGV.js";
268
+ } from "./chunk-IHBVTURX.js";
269
269
  import {
270
270
  createPlugin,
271
271
  createPluginRegistry,
@@ -277,8 +277,8 @@ import {
277
277
  triggerPluginMount,
278
278
  triggerPluginUnmount
279
279
  } from "./chunk-3JHCYHWN.js";
280
- import "./chunk-5N74TKLD.js";
281
- import "./chunk-H6PCHJZQ.js";
280
+ import "./chunk-24DBWDTK.js";
281
+ import "./chunk-F4UM7QBJ.js";
282
282
  import {
283
283
  collectStream,
284
284
  deserializeState,
@@ -298,14 +298,14 @@ import {
298
298
  ssrSuspense,
299
299
  suspenseSwapScript,
300
300
  trustHTML
301
- } from "./chunk-HXMS4SNP.js";
302
- import "./chunk-YFDGQWDA.js";
303
- import "./chunk-X67UYC74.js";
304
- import "./chunk-RLUJL2MV.js";
305
- import "./chunk-JYXOEYI4.js";
306
- import "./chunk-2UPRY23K.js";
307
- import "./chunk-HMJFCBRR.js";
308
- import "./chunk-FDY42FIU.js";
301
+ } from "./chunk-R3QEDXFS.js";
302
+ import "./chunk-JBXNCZSC.js";
303
+ import "./chunk-NUWKIEHE.js";
304
+ import "./chunk-Q2ERM6NT.js";
305
+ import "./chunk-CVMMULHO.js";
306
+ import "./chunk-5VGSK6D2.js";
307
+ import "./chunk-L3GAGWCC.js";
308
+ import "./chunk-7JHWAGRQ.js";
309
309
  import "./chunk-GOJMFRBL.js";
310
310
  import {
311
311
  TransitionGroup,
@@ -328,10 +328,10 @@ import {
328
328
  stagger,
329
329
  transition,
330
330
  viewTransition
331
- } from "./chunk-FOI23UJL.js";
332
- import "./chunk-C427DVQF.js";
333
- import "./chunk-Z2FWAE4B.js";
334
- import "./chunk-LMLD24FC.js";
331
+ } from "./chunk-XQ7XSGYP.js";
332
+ import "./chunk-5K72I3UQ.js";
333
+ import "./chunk-X3NHE2DK.js";
334
+ import "./chunk-COY6PUD2.js";
335
335
  export {
336
336
  DOMPool,
337
337
  Features,