@takazudo/zdtp 0.4.14 → 0.5.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 (115) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/PORTABLE-CONTRACT.md +386 -91
  3. package/README.md +268 -95
  4. package/dist/apply/build-apply-overrides.d.ts +2 -2
  5. package/dist/apply/compute-hunks.d.ts +23 -0
  6. package/dist/apply/last-applied.d.ts +5 -0
  7. package/dist/apply/reconcile-applied.d.ts +19 -0
  8. package/dist/apply-modal.d.ts +2 -48
  9. package/dist/astro/host-adapter.js +3 -3
  10. package/dist/astro/index.js +2 -2
  11. package/dist/{autoload-state-IlkEci88.js → autoload-state-DmTY6tRy.js} +1 -1
  12. package/dist/bin/server.js +52 -50
  13. package/dist/bulk/bulk-actions.d.ts +45 -0
  14. package/dist/bulk/index.d.ts +2 -0
  15. package/dist/chain/index.d.ts +2 -0
  16. package/dist/chain/token-chain-context.d.ts +19 -0
  17. package/dist/chain/token-chain-popover.d.ts +22 -0
  18. package/dist/changed/contribution.d.ts +32 -0
  19. package/dist/changed/footer-content.d.ts +16 -0
  20. package/dist/changed/index.d.ts +4 -0
  21. package/dist/changed/tab-badge.d.ts +8 -0
  22. package/dist/changed/tab-filter.d.ts +8 -0
  23. package/dist/config/panel-config.d.ts +23 -7
  24. package/dist/constants.d.ts +66 -0
  25. package/dist/constants.js +30 -0
  26. package/dist/controls/actions-menu-popover.d.ts +2 -0
  27. package/dist/controls/role-button.d.ts +5 -2
  28. package/dist/controls/tooltip.d.ts +8 -4
  29. package/dist/element-inspect/element-inspect-context.d.ts +22 -0
  30. package/dist/element-inspect/element-inspect-orchestrator.d.ts +17 -0
  31. package/dist/element-inspect/element-inspect-overlay.d.ts +16 -0
  32. package/dist/element-inspect/element-inspect-toggle-button.d.ts +3 -0
  33. package/dist/element-inspect/element-inspect-view.d.ts +6 -0
  34. package/dist/element-inspect/find-tokens-for-element.d.ts +23 -0
  35. package/dist/element-inspect/index.d.ts +8 -0
  36. package/dist/highlight/find-elements.d.ts +14 -3
  37. package/dist/highlight/highlight-orchestrator.d.ts +7 -3
  38. package/dist/highlight/highlight-state.d.ts +3 -2
  39. package/dist/highlight/highlight-toggle-button.d.ts +3 -0
  40. package/dist/highlight/walk-css-rules.d.ts +2 -0
  41. package/dist/history/buttons.d.ts +28 -0
  42. package/dist/history/index.d.ts +3 -0
  43. package/dist/history/rail.d.ts +13 -0
  44. package/dist/history/snapshots.d.ts +57 -0
  45. package/dist/host/host-mutations.d.ts +23 -0
  46. package/dist/{index-EdhZv8Ru.js → index-By6zFdp4.js} +2 -2
  47. package/dist/index-CHzTi0y5.js +12184 -0
  48. package/dist/index.js +35 -34
  49. package/dist/load-routing-BtCE1hGI.js +547 -0
  50. package/dist/{manifest-DCReQE0k.js → manifest-DvuKi7I4.js} +11 -7
  51. package/dist/{panel-config-SgA84Uqe.js → panel-config-BSu6TUht.js} +391 -317
  52. package/dist/picker/alt-click-picker.d.ts +10 -2
  53. package/dist/picker/arming-coordinator.d.ts +2 -0
  54. package/dist/picker/index.d.ts +2 -2
  55. package/dist/search/command-palette.d.ts +21 -0
  56. package/dist/search/contribution.d.ts +7 -0
  57. package/dist/search/fuzzy.d.ts +10 -0
  58. package/dist/search/index.d.ts +4 -0
  59. package/dist/search/match-bar.d.ts +14 -0
  60. package/dist/search/search-header.d.ts +7 -0
  61. package/dist/search/token-search.d.ts +36 -0
  62. package/dist/server/create-apply-handler.d.ts +33 -0
  63. package/dist/server/index.d.ts +2 -1
  64. package/dist/server/index.js +1 -1
  65. package/dist/shell/dock-mode-switch.d.ts +6 -0
  66. package/dist/shell/footer.d.ts +1 -0
  67. package/dist/shell/ghost-idle.d.ts +24 -0
  68. package/dist/shell/header.d.ts +4 -0
  69. package/dist/shell/layer-activity.d.ts +6 -0
  70. package/dist/shell/mini-pill.d.ts +21 -0
  71. package/dist/shell/regions.d.ts +26 -0
  72. package/dist/shell/shortcut-dispatcher.d.ts +17 -0
  73. package/dist/shell/tab-bar.d.ts +17 -0
  74. package/dist/shell/tab-overflow-popover.d.ts +13 -0
  75. package/dist/specimen/on-page-specimen.d.ts +19 -0
  76. package/dist/specimen/preview-glyphs.d.ts +2 -0
  77. package/dist/specimen/specimen-state.d.ts +12 -0
  78. package/dist/specimen/specimen-tab-body.d.ts +18 -0
  79. package/dist/specimen/specimen-toolbar.d.ts +10 -0
  80. package/dist/specimen/specimen-values.d.ts +9 -0
  81. package/dist/state/history.d.ts +64 -0
  82. package/dist/state/persist.d.ts +10 -14
  83. package/dist/state/transaction.d.ts +24 -0
  84. package/dist/state/tweak-state.d.ts +16 -0
  85. package/dist/styles/z-index-tokens.d.ts +2 -0
  86. package/dist/tabs/color-tab.d.ts +10 -1
  87. package/dist/tabs/flat/flat-tab.d.ts +27 -0
  88. package/dist/tabs/flat/index.d.ts +8 -0
  89. package/dist/tabs/flat/scroll-to-token-row.d.ts +3 -0
  90. package/dist/tabs/flat/tier-section.d.ts +17 -0
  91. package/dist/tabs/flat/token-controller.d.ts +23 -0
  92. package/dist/tabs/flat/token-row.d.ts +12 -0
  93. package/dist/tabs/flat/types.d.ts +25 -0
  94. package/dist/tabs/font-tab.d.ts +13 -12
  95. package/dist/tabs/generic-tab.d.ts +8 -38
  96. package/dist/tabs/palette/palette-check-view.d.ts +5 -1
  97. package/dist/tabs/palette/palette-edit-view.d.ts +9 -1
  98. package/dist/tabs/palette/palette-tab.d.ts +12 -1
  99. package/dist/tabs/size-tab.d.ts +7 -10
  100. package/dist/tabs/spacing-tab.d.ts +7 -13
  101. package/dist/testing.js +3 -3
  102. package/dist/tokens/tier-model.d.ts +6 -0
  103. package/dist/{tweak-state-DGLrzIwq.js → tweak-state-B7ok3Ob3.js} +473 -423
  104. package/dist/utils/numeric-transform.d.ts +32 -0
  105. package/dist/utils/token-diff.d.ts +25 -0
  106. package/dist/utils/token-graph.d.ts +23 -0
  107. package/dist/utils/token-index.d.ts +30 -0
  108. package/dist/zdtp.css +1 -1
  109. package/package.json +8 -1
  110. package/dist/controls/pill-slider-row.d.ts +0 -36
  111. package/dist/controls/select-row.d.ts +0 -25
  112. package/dist/controls/slider-row.d.ts +0 -29
  113. package/dist/controls/text-row.d.ts +0 -27
  114. package/dist/index-Ds4bCeiC.js +0 -7591
  115. package/dist/load-routing-D4H2VOl5.js +0 -426
@@ -1,70 +1,71 @@
1
- class b extends Error {
1
+ import { DEFAULT_STORAGE_PREFIX as K, resolveToggleEventName as N } from "./constants.js";
2
+ class k extends Error {
2
3
  constructor(t) {
3
- super(t), this.name = "TierResolverError", Object.setPrototypeOf(this, b.prototype);
4
+ super(t), this.name = "TierResolverError", Object.setPrototypeOf(this, k.prototype);
4
5
  }
5
6
  }
6
- function v(e, t) {
7
+ function A(e, t) {
7
8
  return e.tiers.find((n) => n.id === t);
8
9
  }
9
10
  function $(e, t) {
10
11
  return e.items.find((n) => n.id === t);
11
12
  }
12
- function Q(e, t, n, i) {
13
- const g = v(e, t);
14
- if (!g)
15
- throw new b(
16
- `Tier "${t}" not found in tab "${e.id}". Available tiers: ${e.tiers.map((l) => l.id).join(", ")}.`
13
+ function ee(e, t, n, i) {
14
+ const u = A(e, t);
15
+ if (!u)
16
+ throw new k(
17
+ `Tier "${t}" not found in tab "${e.id}". Available tiers: ${e.tiers.map((f) => f.id).join(", ")}.`
17
18
  );
18
- const c = $(g, n);
19
- if (!c)
20
- throw new b(
19
+ const d = $(u, n);
20
+ if (!d)
21
+ throw new k(
21
22
  `Item "${n}" not found in tier "${t}" of tab "${e.id}".`
22
23
  );
23
- const a = i[t]?.[n];
24
- if (g.referencesTier !== void 0) {
25
- const l = g.referencesTier, f = v(e, l);
26
- if (!f)
27
- throw new b(
28
- `Tier "${t}" declares referencesTier "${l}" but that tier does not exist in tab "${e.id}".`
24
+ const r = i[t]?.[n];
25
+ if (u.referencesTier !== void 0) {
26
+ const f = u.referencesTier, l = A(e, f);
27
+ if (!l)
28
+ throw new k(
29
+ `Tier "${t}" declares referencesTier "${f}" but that tier does not exist in tab "${e.id}".`
29
30
  );
30
- const o = $(f, a ?? n);
31
- if (!o) {
32
- const d = $(f, c.default) ?? $(f, n) ?? f.items[0];
33
- if (!d)
34
- throw new b(
35
- `Referenced tier "${l}" has no items; cannot resolve fallback for item "${n}" in tier "${t}" of tab "${e.id}".`
31
+ const a = $(l, r ?? n);
32
+ if (!a) {
33
+ const g = $(l, d.default) ?? $(l, n) ?? l.items[0];
34
+ if (!g)
35
+ throw new k(
36
+ `Referenced tier "${f}" has no items; cannot resolve fallback for item "${n}" in tier "${t}" of tab "${e.id}".`
36
37
  );
37
- return { kind: "ref", targetCssVar: d.cssVar };
38
+ return { kind: "ref", targetCssVar: g.cssVar };
38
39
  }
39
- return { kind: "ref", targetCssVar: o.cssVar };
40
+ return { kind: "ref", targetCssVar: a.cssVar };
40
41
  }
41
- return a !== void 0 ? c.pill && a === c.pill.value ? { kind: "literal", value: c.pill.value } : { kind: "literal", value: a } : c.pill ? { kind: "literal", value: c.pill.customDefault } : { kind: "literal", value: c.default };
42
+ return r !== void 0 ? d.pill && r === d.pill.value ? { kind: "literal", value: d.pill.value } : { kind: "literal", value: r } : d.pill ? { kind: "literal", value: d.pill.customDefault } : { kind: "literal", value: d.default };
42
43
  }
43
- function I(e) {
44
+ function te(e) {
44
45
  return e.kind === "literal" ? e.value : `var(${e.targetCssVar})`;
45
46
  }
46
- function N(e, t, n = [t]) {
47
+ function M(e, t, n = [t]) {
47
48
  const i = e.tab === void 0 || e.tab === t.id ? t : n.find((s) => s.id === e.tab);
48
49
  if (!i)
49
- throw new b(
50
+ throw new k(
50
51
  `Cross-tab ref target tab "${e.tab}" not found. Available tabs: ${n.map((s) => s.id).join(", ")}.`
51
52
  );
52
- const g = v(i, e.tier);
53
- if (!g)
54
- throw new b(
53
+ const u = A(i, e.tier);
54
+ if (!u)
55
+ throw new k(
55
56
  `Cross-tab ref target tier "${e.tier}" not found in tab "${i.id}". Available tiers: ${i.tiers.map((s) => s.id).join(", ")}.`
56
57
  );
57
- const c = $(g, e.item);
58
- if (!c)
59
- throw new b(
60
- `Cross-tab ref target item "${e.item}" not found in tier "${e.tier}" of tab "${i.id}". Available items: ${g.items.map((s) => s.id).join(", ")}.`
58
+ const d = $(u, e.item);
59
+ if (!d)
60
+ throw new k(
61
+ `Cross-tab ref target item "${e.item}" not found in tier "${e.tier}" of tab "${i.id}". Available items: ${u.items.map((s) => s.id).join(", ")}.`
61
62
  );
62
- return c.cssVar;
63
+ return d.cssVar;
63
64
  }
64
- function ee(e, t) {
65
+ function ne(e, t) {
65
66
  return e.paletteCssVarTemplate.replace("{n}", String(t));
66
67
  }
67
- const z = /* @__PURE__ */ new Set([
68
+ const D = /* @__PURE__ */ new Set([
68
69
  "aliceblue",
69
70
  "antiquewhite",
70
71
  "aqua",
@@ -222,38 +223,38 @@ const z = /* @__PURE__ */ new Set([
222
223
  "revert-layer"
223
224
  ]);
224
225
  function H(e) {
225
- return e.startsWith("#") || e.includes("(") || z.has(e.toLowerCase());
226
+ return e.startsWith("#") || e.includes("(") || D.has(e.toLowerCase());
226
227
  }
227
- function K(e, t, n, i) {
228
- const g = [], c = e.indexOf(":");
229
- if (c !== -1) {
230
- const a = e.slice(0, c), l = e.slice(c + 1), f = t.find((r) => r.tier === a);
231
- f && g.push({ tab: f.tab, tier: f.tier, item: l });
228
+ function B(e, t, n, i) {
229
+ const u = [], d = e.indexOf(":");
230
+ if (d !== -1) {
231
+ const r = e.slice(0, d), f = e.slice(d + 1), l = t.find((o) => o.tier === r);
232
+ l && u.push({ tab: l.tab, tier: l.tier, item: f });
232
233
  }
233
234
  const [s] = t;
234
- g.push({ tab: s.tab, tier: s.tier, item: e });
235
- for (const a of g)
235
+ u.push({ tab: s.tab, tier: s.tier, item: e });
236
+ for (const r of u)
236
237
  try {
237
- return N(a, n, i), { ref: a };
238
+ return M(r, n, i), { ref: r };
238
239
  } catch {
239
240
  }
240
- return { ref: g[0] };
241
+ return { ref: u[0] };
241
242
  }
242
- function L(e, t, n, i, g, c) {
243
+ function L(e, t, n, i, u, d) {
243
244
  const s = t.get(e.default);
244
- return s !== void 0 ? s : e.default === "bg" || e.default === "fg" ? e.default : n && n.length > 0 && !H(e.default) ? K(e.default, n, i, g) : c ? (console.warn(
245
+ return s !== void 0 ? s : e.default === "bg" || e.default === "fg" ? e.default : n && n.length > 0 && !H(e.default) ? B(e.default, n, i, u) : d ? (console.warn(
245
246
  `[design-token-panel] semantic item "${e.id}" default "${e.default}" names no palette item; falling back to palette index 0`
246
247
  ), 0) : { literal: e.default };
247
248
  }
248
- function O(e, t = [e]) {
249
+ function V(e, t = [e]) {
249
250
  const n = e.colorExtras;
250
251
  if (!n) return;
251
252
  const i = e.tiers.find(
252
- (o) => !o.referencesTier && !o.semantic && o.items.length > 0 && o.items[0].type.kind === "color"
253
- ), g = e.tiers.find(
254
- (o) => i && o.referencesTier === i.id || o.semantic === !0
253
+ (a) => !a.referencesTier && !a.semantic && a.items.length > 0 && a.items[0].type.kind === "color"
254
+ ), u = e.tiers.find(
255
+ (a) => i && a.referencesTier === i.id || a.semantic === !0
255
256
  );
256
- if (!i && !g)
257
+ if (!i && !u)
257
258
  return {
258
259
  id: n.id,
259
260
  label: n.label,
@@ -267,20 +268,20 @@ function O(e, t = [e]) {
267
268
  colorSchemes: n.colorSchemes,
268
269
  panelSettings: n.panelSettings
269
270
  };
270
- const c = i?.items ?? [], s = c.length, a = c[0] ? c[0].cssVar.replace(/\d+$/, "{n}") : "--zudo-stub-p{n}", l = /* @__PURE__ */ new Map();
271
- for (let o = 0; o < c.length; o++)
272
- l.set(c[o].id, o);
273
- const f = {}, r = {};
274
- if (g) {
275
- const o = !g.semantic, d = n.semanticDefaults;
276
- for (const u of g.items)
277
- r[u.id] = u.cssVar, f[u.id] = d && u.id in d ? d[u.id] : L(
278
- u,
279
- l,
280
- g.referencesRamps,
271
+ const d = i?.items ?? [], s = d.length, r = d[0] ? d[0].cssVar.replace(/\d+$/, "{n}") : "--zudo-stub-p{n}", f = /* @__PURE__ */ new Map();
272
+ for (let a = 0; a < d.length; a++)
273
+ f.set(d[a].id, a);
274
+ const l = {}, o = {};
275
+ if (u) {
276
+ const a = !u.semantic, g = n.semanticDefaults;
277
+ for (const c of u.items)
278
+ o[c.id] = c.cssVar, l[c.id] = g && c.id in g ? g[c.id] : L(
279
+ c,
280
+ f,
281
+ u.referencesRamps,
281
282
  e,
282
283
  t,
283
- o
284
+ a
284
285
  );
285
286
  }
286
287
  return {
@@ -288,44 +289,44 @@ function O(e, t = [e]) {
288
289
  label: n.label,
289
290
  paletteSize: s,
290
291
  baseRoles: n.baseRoles,
291
- paletteCssVarTemplate: a,
292
- semanticDefaults: f,
293
- semanticCssNames: r,
292
+ paletteCssVarTemplate: r,
293
+ semanticDefaults: l,
294
+ semanticCssNames: o,
294
295
  baseDefaults: n.baseDefaults,
295
296
  defaultShikiTheme: n.defaultShikiTheme,
296
297
  colorSchemes: n.colorSchemes,
297
298
  panelSettings: n.panelSettings
298
299
  };
299
300
  }
300
- function te(e) {
301
+ function re(e) {
301
302
  const t = e.find((n) => n.id === "color");
302
303
  if (t)
303
- return O(t, e);
304
+ return V(t, e);
304
305
  }
305
- function F(e) {
306
+ function J(e) {
306
307
  const t = e.find((n) => n.id === "color-secondary");
307
- return t ? O(t, e) ?? null : null;
308
+ return t ? V(t, e) ?? null : null;
308
309
  }
309
310
  function S(e, t) {
310
311
  if (Object.is(e, t)) return !0;
311
312
  if (e === null || t === null || typeof e != typeof t || typeof e != "object") return !1;
312
313
  if (Array.isArray(e)) {
313
314
  if (!Array.isArray(t) || e.length !== t.length) return !1;
314
- for (let c = 0; c < e.length; c++)
315
- if (!S(e[c], t[c])) return !1;
315
+ for (let d = 0; d < e.length; d++)
316
+ if (!S(e[d], t[d])) return !1;
316
317
  return !0;
317
318
  }
318
319
  if (Array.isArray(t)) return !1;
319
320
  const n = Object.keys(e), i = Object.keys(t);
320
321
  if (n.length !== i.length) return !1;
321
- const g = new Set(i);
322
- for (const c of n)
323
- if (!g.has(c) || !S(e[c], t[c]))
322
+ const u = new Set(i);
323
+ for (const d of n)
324
+ if (!u.has(d) || !S(e[d], t[d]))
324
325
  return !1;
325
326
  return !0;
326
327
  }
327
- const V = {
328
- storagePrefix: "zudo-design-token-panel",
328
+ const q = {
329
+ storagePrefix: K,
329
330
  consoleNamespace: "zudo",
330
331
  modalClassPrefix: "zudo-design-token-panel-modal",
331
332
  schemaId: "zudo-design-tokens/v1",
@@ -349,7 +350,7 @@ function m() {
349
350
  colorSchemeOwners: /* @__PURE__ */ new Set()
350
351
  }, e[R] = t), t;
351
352
  }
352
- function J(e) {
353
+ function F(e) {
353
354
  return {
354
355
  instanceId: e,
355
356
  open() {
@@ -371,7 +372,7 @@ function J(e) {
371
372
  }
372
373
  };
373
374
  }
374
- function ne(e) {
375
+ function oe(e) {
375
376
  m().lifecycleHooks = {
376
377
  configured: e.configured,
377
378
  open: e.open,
@@ -380,40 +381,40 @@ function ne(e) {
380
381
  destroy: e.destroy
381
382
  };
382
383
  }
383
- function re(e) {
384
+ function ie(e) {
384
385
  const t = m(), n = e.storagePrefix, i = t.instances.get(n);
385
386
  if (i) {
386
- const f = (r) => ({ ...r, applySink: void 0 });
387
- if (S(f(i.suppliedConfig), f(e)))
387
+ const l = (o) => ({ ...o, applySink: void 0 });
388
+ if (S(l(i.suppliedConfig), l(e)))
388
389
  return t.defaultPrefix = n, i.handle;
389
390
  throw new Error(
390
391
  `[design-token-panel] configurePanel() was already called with different values for storagePrefix "${n}". Configuration is one-shot per prefix per page lifecycle. To re-configure this prefix, call handle.destroy() first, then configurePanel() again. (Use a distinct storagePrefix for a second panel instance.)`
391
392
  );
392
393
  }
393
- const g = t.pendingColorPresets, c = g ? { ...e, colorPresets: g } : { ...e };
394
+ const u = t.pendingColorPresets, d = u ? { ...e, colorPresets: u } : { ...e };
394
395
  t.pendingColorPresets = null;
395
- const s = t.instances.size === 0, a = s ? [...t.pendingPostConfigureHooks] : [];
396
+ const s = t.instances.size === 0, r = s ? [...t.pendingPostConfigureHooks] : [];
396
397
  s && (t.pendingPostConfigureHooks.length = 0);
397
- const l = {
398
- config: c,
398
+ const f = {
399
+ config: d,
399
400
  // Snapshot the as-supplied config before any runtime merges. Used by the
400
401
  // idempotency guard so view-transition re-calls with the original inline
401
402
  // config keep passing even after setPanelColorPresets mutates `config`.
402
403
  suppliedConfig: { ...e },
403
404
  pendingColorPresets: null,
404
- postConfigureHooks: a,
405
- handle: J(n)
405
+ postConfigureHooks: r,
406
+ handle: F(n)
406
407
  };
407
- t.instances.set(n, l), t.defaultPrefix = n;
408
- for (const f of l.postConfigureHooks)
409
- f();
410
- return t.lifecycleHooks.configured?.(n), l.handle;
408
+ t.instances.set(n, f), t.defaultPrefix = n;
409
+ for (const l of f.postConfigureHooks)
410
+ l();
411
+ return t.lifecycleHooks.configured?.(n), f.handle;
411
412
  }
412
413
  function x() {
413
414
  const e = m();
414
415
  return e.defaultPrefix === null ? null : e.instances.get(e.defaultPrefix) ?? null;
415
416
  }
416
- function oe(e) {
417
+ function se(e) {
417
418
  const t = x();
418
419
  if (t === null) {
419
420
  const n = m();
@@ -423,96 +424,110 @@ function oe(e) {
423
424
  }
424
425
  t.postConfigureHooks.includes(e) || (t.postConfigureHooks.push(e), e());
425
426
  }
426
- function _() {
427
- return x()?.config ?? V;
427
+ function j() {
428
+ return x()?.config ?? q;
428
429
  }
429
- function ie() {
430
+ function ae() {
430
431
  return [...m().instances.values()].map((e) => e.config);
431
432
  }
432
- function se(e) {
433
+ function le(e) {
433
434
  return m().instances.get(e)?.config ?? null;
434
435
  }
435
- function ae() {
436
+ function fe() {
436
437
  const e = m();
437
- e.instances.clear(), e.defaultPrefix = null, e.pendingColorPresets = null, e.pendingPostConfigureHooks.length = 0, A().clear();
438
+ e.instances.clear(), e.defaultPrefix = null, e.pendingColorPresets = null, e.pendingPostConfigureHooks.length = 0, E().clear();
438
439
  }
439
- function A() {
440
+ function E() {
440
441
  const e = m();
441
442
  return e.colorSchemeOwners || (e.colorSchemeOwners = /* @__PURE__ */ new Set()), e.colorSchemeOwners;
442
443
  }
443
- function le(e) {
444
- A().add(e);
445
- }
446
- function fe(e) {
447
- A().delete(e);
448
- }
449
444
  function ce(e) {
450
- return A().has(e);
445
+ E().add(e);
451
446
  }
452
- function ge(e = _()) {
453
- return F(e.tabs);
447
+ function ge(e) {
448
+ E().delete(e);
454
449
  }
455
450
  function de(e) {
451
+ return E().has(e);
452
+ }
453
+ function ue(e = j()) {
454
+ return J(e.tabs);
455
+ }
456
+ function pe(e) {
456
457
  return `${e.storagePrefix}-state-v2`;
457
458
  }
458
- function ue(e) {
459
+ function ye(e) {
459
460
  return `${e.storagePrefix}-state-v3`;
460
461
  }
461
- function pe(e) {
462
+ function me(e) {
462
463
  return `${e.storagePrefix}-state-v4`;
463
464
  }
464
- function ye(e) {
465
+ function he(e) {
465
466
  return `${e.storagePrefix}-state`;
466
467
  }
467
- function me(e) {
468
+ function we(e) {
468
469
  return `${e.storagePrefix}-open`;
469
470
  }
470
- function he(e) {
471
+ function be(e) {
471
472
  return `${e.storagePrefix}-position`;
472
473
  }
473
- function we(e) {
474
+ function ke(e) {
474
475
  return `${e.storagePrefix}-size`;
475
476
  }
476
- function be(e) {
477
+ function $e(e) {
478
+ return `${e.storagePrefix}-dock`;
479
+ }
480
+ function Ce(e) {
481
+ return `${e.storagePrefix}-dock-size`;
482
+ }
483
+ function Pe(e) {
477
484
  return `${e.storagePrefix}-density`;
478
485
  }
479
- function ke(e) {
486
+ function ve(e) {
487
+ return `${e.storagePrefix}-specimen`;
488
+ }
489
+ function Ee(e, t) {
490
+ return `${e.storagePrefix}-snapshot-${t}`;
491
+ }
492
+ function Ae(e) {
493
+ return `${e.storagePrefix}-last-applied`;
494
+ }
495
+ function Se(e) {
480
496
  return `${e.storagePrefix}:visible`;
481
497
  }
482
- function $e(e) {
498
+ function xe(e) {
483
499
  return `${e.storagePrefix}:autoload`;
484
500
  }
485
- function Ce(e) {
501
+ function je(e) {
486
502
  return `${e.storagePrefix}-root`;
487
503
  }
488
- const q = V.storagePrefix, G = "toggle-design-token-panel";
489
- function Pe(e) {
490
- return e.storagePrefix === q ? G : e.toggleEvent ?? `toggle-${e.storagePrefix}`;
504
+ function Te(e) {
505
+ return N(e);
491
506
  }
492
- const B = "__zdtp:open-state-changed";
493
- function Ee(e) {
494
- return `${B}:${e.storagePrefix}`;
507
+ const G = "__zdtp:open-state-changed";
508
+ function Oe(e) {
509
+ return `${G}:${e.storagePrefix}`;
495
510
  }
496
- function Ae(e, t) {
511
+ function Re(e, t) {
497
512
  return `${e.modalClassPrefix}${t}`;
498
513
  }
499
- function ve(e) {
514
+ function Ve(e) {
500
515
  return `${e.exportFilenameBase}.json`;
501
516
  }
502
- const D = /* @__PURE__ */ Symbol.for("@takazudo/zdtp:global-alias-marker");
503
- function M(e) {
517
+ const _ = /* @__PURE__ */ Symbol.for("@takazudo/zdtp:global-alias-marker");
518
+ function z(e) {
504
519
  return typeof e == "object" && e !== null || typeof e == "function";
505
520
  }
506
521
  function U(e) {
507
- if (!M(e)) return !1;
522
+ if (!z(e)) return !1;
508
523
  try {
509
- return e[D] === !0;
524
+ return e[_] === !0;
510
525
  } catch {
511
526
  return !1;
512
527
  }
513
528
  }
514
529
  function W(e) {
515
- if (!M(e)) return !1;
530
+ if (!z(e)) return !1;
516
531
  try {
517
532
  const t = e;
518
533
  return typeof t.show == "function" && typeof t.hide == "function" && typeof t.toggle == "function";
@@ -520,7 +535,7 @@ function W(e) {
520
535
  return !1;
521
536
  }
522
537
  }
523
- function Se(e) {
538
+ function _e(e) {
524
539
  if (typeof window > "u") return;
525
540
  const t = window, n = t.zdtp;
526
541
  if (n !== void 0) {
@@ -532,9 +547,9 @@ function Se(e) {
532
547
  return;
533
548
  }
534
549
  const i = { ...e };
535
- i[D] = !0, t.zdtp = i;
550
+ i[_] = !0, t.zdtp = i;
536
551
  }
537
- function xe(e) {
552
+ function ze(e) {
538
553
  if (e === null || typeof e != "object" || Array.isArray(e))
539
554
  throw new Error("[design-token-panel] PanelConfig must be a non-null object");
540
555
  const t = e;
@@ -586,6 +601,18 @@ function xe(e) {
586
601
  );
587
602
  }
588
603
  }
604
+ if (t.dock !== void 0) {
605
+ if (t.dock === null || typeof t.dock != "object" || Array.isArray(t.dock))
606
+ throw new Error("[design-token-panel] PanelConfig.dock must be a plain object");
607
+ const n = t.dock;
608
+ for (const i of Object.keys(n))
609
+ if (i !== "reflow")
610
+ throw new Error(`[design-token-panel] PanelConfig.dock.${i} is not a supported field`);
611
+ if (n.reflow !== void 0 && n.reflow !== "body-margin" && n.reflow !== "none")
612
+ throw new Error(
613
+ '[design-token-panel] PanelConfig.dock.reflow must be "body-margin" or "none" when set'
614
+ );
615
+ }
589
616
  if (t.autoRememberOnOpen !== void 0 && typeof t.autoRememberOnOpen != "boolean")
590
617
  throw new Error(
591
618
  `[design-token-panel] PanelConfig.autoRememberOnOpen must be a boolean when set (got ${typeof t.autoRememberOnOpen})`
@@ -641,186 +668,225 @@ function X(e, t, n) {
641
668
  throw new Error(
642
669
  `[design-token-panel] PanelConfig.tabs["${e}"].tiers must be an array`
643
670
  );
644
- const i = /* @__PURE__ */ new Set(), g = /* @__PURE__ */ new Map();
671
+ const i = /* @__PURE__ */ new Set(), u = /* @__PURE__ */ new Map();
645
672
  for (const s of t.tiers) {
646
673
  if (s === null || typeof s != "object" || Array.isArray(s))
647
674
  throw new Error(
648
675
  `[design-token-panel] PanelConfig.tabs["${e}"].tiers: each tier must be a non-null object`
649
676
  );
650
- const a = s;
651
- if (typeof a.id != "string" || a.id.length === 0)
677
+ const r = s;
678
+ if (typeof r.id != "string" || r.id.length === 0)
652
679
  throw new Error(
653
680
  `[design-token-panel] PanelConfig.tabs["${e}"].tiers: each tier must have a non-empty string id`
654
681
  );
655
- if (i.has(a.id))
682
+ if (i.has(r.id))
683
+ throw new Error(
684
+ `[design-token-panel] PanelConfig.tabs["${e}"]: duplicate tier id "${r.id}"`
685
+ );
686
+ if (i.add(r.id), r.semantic !== void 0 && r.semantic !== !0)
687
+ throw new Error(
688
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].semantic must be exactly \`true\` when present (got ${JSON.stringify(r.semantic)})`
689
+ );
690
+ const f = /* @__PURE__ */ new Set([
691
+ "size",
692
+ "line-height",
693
+ "family",
694
+ "weight",
695
+ "bar",
696
+ "radius",
697
+ "duration"
698
+ ]);
699
+ if (r.preview !== void 0 && !f.has(r.preview))
656
700
  throw new Error(
657
- `[design-token-panel] PanelConfig.tabs["${e}"]: duplicate tier id "${a.id}"`
701
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].preview has unsupported value ${JSON.stringify(r.preview)}`
658
702
  );
659
- if (i.add(a.id), a.semantic !== void 0 && a.semantic !== !0)
703
+ if (r.previewBase !== void 0 && (typeof r.previewBase != "string" || !r.previewBase.startsWith("--") || r.previewBase.length <= 2))
660
704
  throw new Error(
661
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${a.id}"].semantic must be exactly \`true\` when present (got ${JSON.stringify(a.semantic)})`
705
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].previewBase must be a CSS custom property name`
662
706
  );
663
- if (!Array.isArray(a.items))
707
+ if (r.previewBase !== void 0 && r.preview !== "line-height")
664
708
  throw new Error(
665
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${a.id}"].items must be an array`
709
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].previewBase is only valid with preview "line-height"`
710
+ );
711
+ if (!Array.isArray(r.items))
712
+ throw new Error(
713
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].items must be an array`
666
714
  );
667
715
  let l;
668
- for (const f of a.items) {
669
- if (f === null || typeof f != "object" || Array.isArray(f)) continue;
670
- const o = f.type;
716
+ for (const o of r.items) {
671
717
  if (o === null || typeof o != "object" || Array.isArray(o)) continue;
672
- const d = o.kind;
673
- if (typeof d == "string") {
718
+ const g = o.type;
719
+ if (g === null || typeof g != "object" || Array.isArray(g)) continue;
720
+ const c = g.kind;
721
+ if (typeof c == "string") {
674
722
  if (l === void 0)
675
- l = d;
676
- else if (l !== d)
723
+ l = c;
724
+ else if (l !== c)
677
725
  throw new Error(
678
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${a.id}"]: mixed item kinds — found "${l}" and "${d}" in the same tier (all items must share the same kind)`
726
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"]: mixed item kinds — found "${l}" and "${c}" in the same tier (all items must share the same kind)`
679
727
  );
680
728
  }
681
729
  }
682
- l !== void 0 && g.set(a.id, l);
730
+ l !== void 0 && u.set(r.id, l);
683
731
  }
684
- const c = /* @__PURE__ */ new Set();
732
+ const d = /* @__PURE__ */ new Set();
685
733
  for (const s of t.tiers) {
686
- const a = s, l = a.id;
687
- for (const f of a.items) {
688
- if (f === null || typeof f != "object" || Array.isArray(f))
734
+ const r = s, f = r.id;
735
+ for (const l of r.items) {
736
+ if (l === null || typeof l != "object" || Array.isArray(l))
689
737
  throw new Error(
690
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].items: each item must be a non-null object`
738
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].items: each item must be a non-null object`
691
739
  );
692
- const r = f;
693
- if (typeof r.id != "string" || r.id.length === 0)
740
+ const o = l;
741
+ if (typeof o.id != "string" || o.id.length === 0)
694
742
  throw new Error(
695
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].items: each item must have a non-empty string id`
743
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].items: each item must have a non-empty string id`
696
744
  );
697
- if (c.has(r.id))
745
+ if (d.has(o.id))
698
746
  throw new Error(
699
- `[design-token-panel] PanelConfig.tabs["${e}"]: duplicate item id "${r.id}" (item ids must be unique across all tiers within a tab)`
747
+ `[design-token-panel] PanelConfig.tabs["${e}"]: duplicate item id "${o.id}" (item ids must be unique across all tiers within a tab)`
700
748
  );
701
- if (c.add(r.id), typeof r.cssVar != "string" || !r.cssVar.startsWith("--"))
749
+ if (d.add(o.id), typeof o.cssVar != "string" || !o.cssVar.startsWith("--"))
702
750
  throw new Error(
703
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].items["${r.id}"].cssVar must start with "--" (got ${JSON.stringify(r.cssVar)})`
751
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].items["${o.id}"].cssVar must start with "--" (got ${JSON.stringify(o.cssVar)})`
704
752
  );
705
- if (r.cssVar.length <= 2)
753
+ if (o.cssVar.length <= 2)
706
754
  throw new Error(
707
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].items["${r.id}"].cssVar must be non-empty after "--"`
755
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].items["${o.id}"].cssVar must be non-empty after "--"`
708
756
  );
709
- const o = r.type;
710
- if (o !== null && typeof o == "object" && !Array.isArray(o) && o.kind === "length" && o.units !== void 0) {
711
- const d = o.units;
712
- if (!Array.isArray(d))
757
+ const a = o.type;
758
+ if (a !== null && typeof a == "object" && !Array.isArray(a) && a.kind === "length" && a.units !== void 0) {
759
+ const g = a.units;
760
+ if (!Array.isArray(g))
713
761
  throw new Error(
714
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].items["${r.id}"].type.units must be an array`
762
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].items["${o.id}"].type.units must be an array`
715
763
  );
716
- const u = /* @__PURE__ */ new Set();
717
- for (const p of d) {
764
+ const c = /* @__PURE__ */ new Set();
765
+ for (const p of g) {
718
766
  if (typeof p != "string" || p.length === 0)
719
767
  throw new Error(
720
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].items["${r.id}"].type.units entries must be non-empty strings (got ${JSON.stringify(p)})`
768
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].items["${o.id}"].type.units entries must be non-empty strings (got ${JSON.stringify(p)})`
721
769
  );
722
- if (u.has(p))
770
+ if (c.has(p))
723
771
  throw new Error(
724
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].items["${r.id}"].type.units: duplicate unit ${JSON.stringify(p)}`
772
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].items["${o.id}"].type.units: duplicate unit ${JSON.stringify(p)}`
725
773
  );
726
- u.add(p);
774
+ c.add(p);
727
775
  }
728
776
  }
729
777
  }
730
778
  }
731
779
  for (const s of t.tiers) {
732
- const a = s, l = a.id;
733
- if (a.referencesTier !== void 0) {
734
- if (typeof a.referencesTier != "string")
780
+ const r = s, f = r.id;
781
+ if (r.referencesTier !== void 0) {
782
+ if (typeof r.referencesTier != "string")
735
783
  throw new Error(
736
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesTier must be a string`
784
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesTier must be a string`
737
785
  );
738
- const f = a.referencesTier;
739
- if (!i.has(f))
786
+ const l = r.referencesTier;
787
+ if (!i.has(l))
740
788
  throw new Error(
741
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesTier: tier "${f}" does not exist in this tab`
789
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesTier: tier "${l}" does not exist in this tab`
742
790
  );
743
- const r = g.get(l), o = g.get(f);
744
- if (r !== void 0 && o !== void 0 && r !== "text" && r !== o)
791
+ const o = u.get(f), a = u.get(l);
792
+ if (o !== void 0 && a !== void 0 && o !== "text" && o !== a)
745
793
  throw new Error(
746
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesTier: referencing tier has kind "${r}" but referenced tier "${f}" has kind "${o}" (cross-kind reference is only allowed when the referencing tier has kind "text")`
794
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesTier: referencing tier has kind "${o}" but referenced tier "${l}" has kind "${a}" (cross-kind reference is only allowed when the referencing tier has kind "text")`
747
795
  );
748
796
  }
749
797
  }
750
798
  for (const s of t.tiers) {
751
- const a = s, l = a.id;
752
- if (a.referencesRamps === void 0) continue;
753
- if (a.semantic !== !0)
799
+ const r = s, f = r.id, l = r.preview;
800
+ if (l === void 0) continue;
801
+ const o = u.get(f), a = typeof r.referencesTier == "string" ? u.get(r.referencesTier) : void 0, g = (c) => {
802
+ throw new Error(
803
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].preview "${l}" requires ${c}`
804
+ );
805
+ };
806
+ if (l === "size" && (r.referencesTier === void 0 ? o !== "length" : a !== "length") && g("a length tier or a reference tier resolving to length"), l === "line-height" && o !== "number" && g("a number tier"), l === "family" && o !== "text" && g("a text tier"), l === "weight" && o !== "select" && o !== "number" && g("a select or number tier"), (l === "bar" || l === "radius") && o !== "length" && g("a length tier"), l === "duration") {
807
+ o !== "length" && o !== "number" && g('a length or number tier with unit "ms" or "s"');
808
+ for (const c of r.items) {
809
+ if (c === null || typeof c != "object" || Array.isArray(c))
810
+ continue;
811
+ const p = c.type, h = p !== null && typeof p == "object" && !Array.isArray(p) ? p.unit : void 0;
812
+ h !== "ms" && h !== "s" && g('a length or number tier with unit "ms" or "s"');
813
+ }
814
+ }
815
+ }
816
+ for (const s of t.tiers) {
817
+ const r = s, f = r.id;
818
+ if (r.referencesRamps === void 0) continue;
819
+ if (r.semantic !== !0)
754
820
  throw new Error(
755
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps is only valid on a tier with semantic: true`
821
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps is only valid on a tier with semantic: true`
756
822
  );
757
- if (!Array.isArray(a.referencesRamps))
823
+ if (!Array.isArray(r.referencesRamps))
758
824
  throw new Error(
759
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps must be an array`
825
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps must be an array`
760
826
  );
761
827
  if (e !== "color" && e !== "color-secondary")
762
828
  throw new Error(
763
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps is only supported on tabs with id "color" or "color-secondary" (got "${e}")`
829
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps is only supported on tabs with id "color" or "color-secondary" (got "${e}")`
764
830
  );
765
- const f = g.get(l), r = a.referencesRamps;
766
- for (let o = 0; o < r.length; o++) {
767
- const d = r[o];
768
- if (d === null || typeof d != "object" || Array.isArray(d))
831
+ const l = u.get(f), o = r.referencesRamps;
832
+ for (let a = 0; a < o.length; a++) {
833
+ const g = o[a];
834
+ if (g === null || typeof g != "object" || Array.isArray(g))
769
835
  throw new Error(
770
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps[${o}] must be a non-null object`
836
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps[${a}] must be a non-null object`
771
837
  );
772
- const u = d;
773
- if (typeof u.tier != "string" || u.tier.length === 0)
838
+ const c = g;
839
+ if (typeof c.tier != "string" || c.tier.length === 0)
774
840
  throw new Error(
775
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps[${o}].tier must be a non-empty string`
841
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps[${a}].tier must be a non-empty string`
776
842
  );
777
- if (u.tab !== void 0 && (typeof u.tab != "string" || u.tab.length === 0))
843
+ if (c.tab !== void 0 && (typeof c.tab != "string" || c.tab.length === 0))
778
844
  throw new Error(
779
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps[${o}].tab must be a non-empty string when set`
845
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps[${a}].tab must be a non-empty string when set`
780
846
  );
781
- const p = u.tab === void 0 ? e : u.tab;
782
- let k;
847
+ const p = c.tab === void 0 ? e : c.tab;
848
+ let h;
783
849
  if (p === e)
784
- k = t;
850
+ h = t;
785
851
  else {
786
- const w = n.find(
852
+ const b = n.find(
787
853
  (y) => y !== null && typeof y == "object" && !Array.isArray(y) && y.id === p
788
854
  );
789
- if (!w) {
790
- const y = n.filter((h) => h !== null && typeof h == "object" && !Array.isArray(h)).map((h) => h.id).join(", ");
855
+ if (!b) {
856
+ const y = n.filter((w) => w !== null && typeof w == "object" && !Array.isArray(w)).map((w) => w.id).join(", ");
791
857
  throw new Error(
792
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps[${o}]: tab "${p}" does not exist. Available tabs: ${y}.`
858
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps[${a}]: tab "${p}" does not exist. Available tabs: ${y}.`
793
859
  );
794
860
  }
795
- k = w;
861
+ h = b;
796
862
  }
797
- const C = Array.isArray(k.tiers) ? k.tiers : [], T = [];
863
+ const C = Array.isArray(h.tiers) ? h.tiers : [], T = [];
798
864
  let P;
799
- for (const w of C) {
800
- if (w === null || typeof w != "object" || Array.isArray(w)) continue;
801
- const y = w;
802
- typeof y.id == "string" && (T.push(y.id), y.id === u.tier && (P = y));
865
+ for (const b of C) {
866
+ if (b === null || typeof b != "object" || Array.isArray(b)) continue;
867
+ const y = b;
868
+ typeof y.id == "string" && (T.push(y.id), y.id === c.tier && (P = y));
803
869
  }
804
870
  if (!P)
805
871
  throw new Error(
806
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps[${o}]: tier "${u.tier}" does not exist in tab "${p}". Available tiers: ${T.join(", ")}.`
872
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps[${a}]: tier "${c.tier}" does not exist in tab "${p}". Available tiers: ${T.join(", ")}.`
807
873
  );
808
- if (f !== void 0) {
809
- const w = Array.isArray(P.items) ? P.items : [];
874
+ if (l !== void 0) {
875
+ const b = Array.isArray(P.items) ? P.items : [];
810
876
  let y;
811
- for (const h of w) {
812
- if (h === null || typeof h != "object" || Array.isArray(h)) continue;
813
- const E = h.type;
814
- if (E === null || typeof E != "object" || Array.isArray(E)) continue;
815
- const j = E.kind;
816
- if (typeof j == "string") {
817
- y = j;
877
+ for (const w of b) {
878
+ if (w === null || typeof w != "object" || Array.isArray(w)) continue;
879
+ const v = w.type;
880
+ if (v === null || typeof v != "object" || Array.isArray(v)) continue;
881
+ const O = v.kind;
882
+ if (typeof O == "string") {
883
+ y = O;
818
884
  break;
819
885
  }
820
886
  }
821
- if (y !== void 0 && f !== y)
887
+ if (y !== void 0 && l !== y)
822
888
  throw new Error(
823
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${l}"].referencesRamps[${o}]: referencing semantic tier has kind "${f}" but target tier "${u.tier}" in tab "${p}" has kind "${y}" (cross-tab ramp sources must share the semantic tier's kind)`
889
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${f}"].referencesRamps[${a}]: referencing semantic tier has kind "${l}" but target tier "${c.tier}" in tab "${p}" has kind "${y}" (cross-tab ramp sources must share the semantic tier's kind)`
824
890
  );
825
891
  }
826
892
  }
@@ -831,39 +897,39 @@ function X(e, t, n) {
831
897
  throw new Error(
832
898
  `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras must be a plain object`
833
899
  );
834
- for (const r of ["id", "defaultShikiTheme"])
835
- if (typeof s[r] != "string" || s[r].length === 0)
900
+ for (const o of ["id", "defaultShikiTheme"])
901
+ if (typeof s[o] != "string" || s[o].length === 0)
836
902
  throw new Error(
837
- `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.${r} must be a non-empty string (got ${typeof s[r]})`
903
+ `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.${o} must be a non-empty string (got ${typeof s[o]})`
838
904
  );
839
- for (const r of ["colorSchemes", "baseRoles", "baseDefaults"])
840
- if (s[r] === void 0 || s[r] === null || typeof s[r] != "object" || Array.isArray(s[r]))
905
+ for (const o of ["colorSchemes", "baseRoles", "baseDefaults"])
906
+ if (s[o] === void 0 || s[o] === null || typeof s[o] != "object" || Array.isArray(s[o]))
841
907
  throw new Error(
842
- `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.${r} must be a plain object`
908
+ `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.${o} must be a plain object`
843
909
  );
844
910
  if (s.panelSettings === void 0 || s.panelSettings === null || typeof s.panelSettings != "object" || Array.isArray(s.panelSettings))
845
911
  throw new Error(
846
912
  `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.panelSettings must be a plain object`
847
913
  );
848
- const a = s.panelSettings;
849
- if (typeof a.colorScheme != "string" || a.colorScheme.length === 0)
914
+ const r = s.panelSettings;
915
+ if (typeof r.colorScheme != "string" || r.colorScheme.length === 0)
850
916
  throw new Error(
851
917
  `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.panelSettings.colorScheme must be a non-empty string`
852
918
  );
853
- if (a.colorMode !== !1) {
854
- if (a.colorMode === null || typeof a.colorMode != "object" || Array.isArray(a.colorMode))
919
+ if (r.colorMode !== !1) {
920
+ if (r.colorMode === null || typeof r.colorMode != "object" || Array.isArray(r.colorMode))
855
921
  throw new Error(
856
922
  `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.panelSettings.colorMode must be false or a plain object`
857
923
  );
858
- const r = a.colorMode;
859
- for (const o of ["lightScheme", "darkScheme"])
860
- if (typeof r[o] != "string" || r[o].length === 0)
924
+ const o = r.colorMode;
925
+ for (const a of ["lightScheme", "darkScheme"])
926
+ if (typeof o[a] != "string" || o[a].length === 0)
861
927
  throw new Error(
862
- `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.panelSettings.colorMode.${o} must be a non-empty string`
928
+ `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.panelSettings.colorMode.${a} must be a non-empty string`
863
929
  );
864
- if (r.defaultMode !== "light" && r.defaultMode !== "dark")
930
+ if (o.defaultMode !== "light" && o.defaultMode !== "dark")
865
931
  throw new Error(
866
- `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.panelSettings.colorMode.defaultMode must be "light" or "dark" (got ${JSON.stringify(r.defaultMode)})`
932
+ `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.panelSettings.colorMode.defaultMode must be "light" or "dark" (got ${JSON.stringify(o.defaultMode)})`
867
933
  );
868
934
  }
869
935
  if (s.semanticDefaults !== void 0) {
@@ -871,37 +937,37 @@ function X(e, t, n) {
871
937
  throw new Error(
872
938
  `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.semanticDefaults must be a plain object`
873
939
  );
874
- const r = s.semanticDefaults;
875
- for (const [o, d] of Object.entries(r))
876
- if (!Y(d))
940
+ const o = s.semanticDefaults;
941
+ for (const [a, g] of Object.entries(o))
942
+ if (!Y(g))
877
943
  throw new Error(
878
- `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.semanticDefaults["${o}"] must be a valid SemanticValue (number | 'bg' | 'fg' | { literal: string } | { literal: { light, dark } } | { ref: { tier, item, tab? } }), got ${JSON.stringify(d)}`
944
+ `[design-token-panel] PanelConfig.tabs["${e}"].colorExtras.semanticDefaults["${a}"] must be a valid SemanticValue (number | 'bg' | 'fg' | { literal: string } | { literal: { light, dark } } | { ref: { tier, item, tab? } }), got ${JSON.stringify(g)}`
879
945
  );
880
946
  }
881
- const f = t.tiers.find((r) => {
882
- if (r.referencesTier !== void 0 || r.semantic === !0) return !1;
883
- const o = r.items;
884
- if (!Array.isArray(o) || o.length === 0) return !1;
885
- const d = o[0];
886
- if (d === null || typeof d != "object" || Array.isArray(d)) return !1;
887
- const u = d.type;
888
- return u === null || typeof u != "object" || Array.isArray(u) ? !1 : u.kind === "color";
947
+ const l = t.tiers.find((o) => {
948
+ if (o.referencesTier !== void 0 || o.semantic === !0) return !1;
949
+ const a = o.items;
950
+ if (!Array.isArray(a) || a.length === 0) return !1;
951
+ const g = a[0];
952
+ if (g === null || typeof g != "object" || Array.isArray(g)) return !1;
953
+ const c = g.type;
954
+ return c === null || typeof c != "object" || Array.isArray(c) ? !1 : c.kind === "color";
889
955
  });
890
- if (f) {
891
- const r = f.id, o = f.items, d = o[0]?.cssVar;
892
- if (d !== void 0) {
893
- const u = d.replace(/\d+$/, "{n}");
894
- if (u.includes("{n}"))
895
- for (let p = 0; p < o.length; p++) {
896
- const k = o[p], C = u.replace("{n}", String(p));
897
- if (k.cssVar !== C)
956
+ if (l) {
957
+ const o = l.id, a = l.items, g = a[0]?.cssVar;
958
+ if (g !== void 0) {
959
+ const c = g.replace(/\d+$/, "{n}");
960
+ if (c.includes("{n}"))
961
+ for (let p = 0; p < a.length; p++) {
962
+ const h = a[p], C = c.replace("{n}", String(p));
963
+ if (h.cssVar !== C)
898
964
  throw new Error(
899
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r}"].items[${p}].cssVar is ${JSON.stringify(k.cssVar)} but expected ${JSON.stringify(C)} — palette item cssVars must share one prefix and be numbered 0..n-1 in tier order (template derived from first item: ${JSON.stringify(u)})`
965
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${o}"].items[${p}].cssVar is ${JSON.stringify(h.cssVar)} but expected ${JSON.stringify(C)} — palette item cssVars must share one prefix and be numbered 0..n-1 in tier order (template derived from first item: ${JSON.stringify(c)})`
900
966
  );
901
967
  }
902
- else if (o.length > 1)
968
+ else if (a.length > 1)
903
969
  throw new Error(
904
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r}"].items[0].cssVar ${JSON.stringify(d)} has no trailing digit — palette item cssVars must share one prefix and be numbered 0..n-1 in tier order (e.g. "--pal-0" … "--pal-15")`
970
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${o}"].items[0].cssVar ${JSON.stringify(g)} has no trailing digit — palette item cssVars must share one prefix and be numbered 0..n-1 in tier order (e.g. "--pal-0" … "--pal-15")`
905
971
  );
906
972
  }
907
973
  }
@@ -920,20 +986,23 @@ function X(e, t, n) {
920
986
  '[design-token-panel] PanelConfig.tabs["notes"].notesExtras must be a plain object with { title, html }'
921
987
  );
922
988
  const s = t.notesExtras;
923
- for (const a of ["title", "html"])
924
- if (typeof s[a] != "string" || s[a].length === 0)
989
+ for (const r of ["title", "html"])
990
+ if (typeof s[r] != "string" || s[r].length === 0)
925
991
  throw new Error(
926
- `[design-token-panel] PanelConfig.tabs["notes"].notesExtras.${a} must be a non-empty string (got ${typeof s[a]})`
992
+ `[design-token-panel] PanelConfig.tabs["notes"].notesExtras.${r} must be a non-empty string (got ${typeof s[r]})`
927
993
  );
928
994
  } else if (t.notesExtras !== void 0)
929
995
  throw new Error(
930
996
  `[design-token-panel] PanelConfig.tabs["${e}"].notesExtras must only be set on a tab with id "notes"`
931
997
  );
932
998
  }
933
- function Te(e = _()) {
999
+ function Q(e = j()) {
934
1000
  return e.applyRouting ?? {};
935
1001
  }
936
- function je(e) {
1002
+ function Ke(e = j()) {
1003
+ return !!e.applyEndpoint && Object.keys(Q(e)).length > 0;
1004
+ }
1005
+ function Ne(e) {
937
1006
  const t = x();
938
1007
  if (t === null) {
939
1008
  m().pendingColorPresets = e;
@@ -942,42 +1011,47 @@ function je(e) {
942
1011
  t.config = { ...t.config, colorPresets: e };
943
1012
  }
944
1013
  export {
945
- ve as A,
946
- Te as B,
947
- O as C,
948
- Ee as D,
949
- ne as E,
950
- oe as F,
951
- Pe as G,
952
- G as H,
953
- ie as I,
954
- se as J,
955
- Ce as K,
956
- ae as _,
957
- ke as a,
958
- xe as b,
959
- re as c,
960
- me as d,
961
- he as e,
962
- ye as f,
963
- _ as g,
964
- de as h,
965
- Se as i,
966
- $e as j,
967
- pe as k,
968
- ue as l,
969
- Ae as m,
970
- fe as n,
971
- ge as o,
972
- Q as p,
973
- I as q,
974
- te as r,
975
- je as s,
976
- we as t,
977
- be as u,
978
- ee as v,
979
- le as w,
980
- ce as x,
981
- N as y,
982
- S as z
1014
+ M as A,
1015
+ V as B,
1016
+ S as C,
1017
+ Ve as D,
1018
+ Q as E,
1019
+ Ke as F,
1020
+ Ae as G,
1021
+ Ee as H,
1022
+ ve as I,
1023
+ Oe as J,
1024
+ oe as K,
1025
+ se as L,
1026
+ Te as M,
1027
+ ae as N,
1028
+ le as O,
1029
+ je as P,
1030
+ fe as _,
1031
+ Se as a,
1032
+ ze as b,
1033
+ ie as c,
1034
+ we as d,
1035
+ be as e,
1036
+ he as f,
1037
+ j as g,
1038
+ pe as h,
1039
+ _e as i,
1040
+ xe as j,
1041
+ me as k,
1042
+ ye as l,
1043
+ Re as m,
1044
+ ge as n,
1045
+ ue as o,
1046
+ ee as p,
1047
+ te as q,
1048
+ re as r,
1049
+ Ne as s,
1050
+ ke as t,
1051
+ Pe as u,
1052
+ Ce as v,
1053
+ $e as w,
1054
+ ne as x,
1055
+ ce as y,
1056
+ de as z
983
1057
  };