@takazudo/zdtp 0.4.14 → 0.4.15

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 (113) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/PORTABLE-CONTRACT.md +360 -89
  3. package/README.md +217 -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-7BQYXI7Y.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 +22 -0
  24. package/dist/controls/actions-menu-popover.d.ts +2 -0
  25. package/dist/controls/role-button.d.ts +5 -2
  26. package/dist/controls/tooltip.d.ts +8 -4
  27. package/dist/element-inspect/element-inspect-context.d.ts +22 -0
  28. package/dist/element-inspect/element-inspect-orchestrator.d.ts +17 -0
  29. package/dist/element-inspect/element-inspect-overlay.d.ts +16 -0
  30. package/dist/element-inspect/element-inspect-toggle-button.d.ts +3 -0
  31. package/dist/element-inspect/element-inspect-view.d.ts +6 -0
  32. package/dist/element-inspect/find-tokens-for-element.d.ts +23 -0
  33. package/dist/element-inspect/index.d.ts +8 -0
  34. package/dist/highlight/find-elements.d.ts +14 -3
  35. package/dist/highlight/highlight-orchestrator.d.ts +7 -3
  36. package/dist/highlight/highlight-state.d.ts +3 -2
  37. package/dist/highlight/highlight-toggle-button.d.ts +3 -0
  38. package/dist/highlight/walk-css-rules.d.ts +2 -0
  39. package/dist/history/buttons.d.ts +28 -0
  40. package/dist/history/index.d.ts +3 -0
  41. package/dist/history/rail.d.ts +13 -0
  42. package/dist/history/snapshots.d.ts +57 -0
  43. package/dist/host/host-mutations.d.ts +23 -0
  44. package/dist/index-BOOmFtJh.js +12165 -0
  45. package/dist/{index-EdhZv8Ru.js → index-C2DIYD0d.js} +2 -2
  46. package/dist/index.js +14 -14
  47. package/dist/load-routing-BtCE1hGI.js +547 -0
  48. package/dist/{manifest-DCReQE0k.js → manifest-DvuKi7I4.js} +11 -7
  49. package/dist/{panel-config-SgA84Uqe.js → panel-config-CRf-ONSV.js} +396 -321
  50. package/dist/picker/alt-click-picker.d.ts +10 -2
  51. package/dist/picker/arming-coordinator.d.ts +2 -0
  52. package/dist/picker/index.d.ts +2 -2
  53. package/dist/search/command-palette.d.ts +21 -0
  54. package/dist/search/contribution.d.ts +7 -0
  55. package/dist/search/fuzzy.d.ts +10 -0
  56. package/dist/search/index.d.ts +4 -0
  57. package/dist/search/match-bar.d.ts +14 -0
  58. package/dist/search/search-header.d.ts +7 -0
  59. package/dist/search/token-search.d.ts +36 -0
  60. package/dist/server/create-apply-handler.d.ts +33 -0
  61. package/dist/server/index.d.ts +2 -1
  62. package/dist/server/index.js +1 -1
  63. package/dist/shell/dock-mode-switch.d.ts +6 -0
  64. package/dist/shell/footer.d.ts +1 -0
  65. package/dist/shell/ghost-idle.d.ts +24 -0
  66. package/dist/shell/header.d.ts +5 -0
  67. package/dist/shell/layer-activity.d.ts +6 -0
  68. package/dist/shell/mini-pill.d.ts +21 -0
  69. package/dist/shell/regions.d.ts +26 -0
  70. package/dist/shell/shortcut-dispatcher.d.ts +17 -0
  71. package/dist/shell/tab-bar.d.ts +17 -0
  72. package/dist/shell/tab-overflow-popover.d.ts +13 -0
  73. package/dist/specimen/on-page-specimen.d.ts +19 -0
  74. package/dist/specimen/preview-glyphs.d.ts +2 -0
  75. package/dist/specimen/specimen-state.d.ts +12 -0
  76. package/dist/specimen/specimen-tab-body.d.ts +18 -0
  77. package/dist/specimen/specimen-toolbar.d.ts +10 -0
  78. package/dist/specimen/specimen-values.d.ts +9 -0
  79. package/dist/state/history.d.ts +64 -0
  80. package/dist/state/persist.d.ts +10 -14
  81. package/dist/state/transaction.d.ts +24 -0
  82. package/dist/state/tweak-state.d.ts +16 -0
  83. package/dist/styles/z-index-tokens.d.ts +2 -0
  84. package/dist/tabs/color-tab.d.ts +10 -1
  85. package/dist/tabs/flat/flat-tab.d.ts +27 -0
  86. package/dist/tabs/flat/index.d.ts +8 -0
  87. package/dist/tabs/flat/scroll-to-token-row.d.ts +3 -0
  88. package/dist/tabs/flat/tier-section.d.ts +17 -0
  89. package/dist/tabs/flat/token-controller.d.ts +23 -0
  90. package/dist/tabs/flat/token-row.d.ts +12 -0
  91. package/dist/tabs/flat/types.d.ts +25 -0
  92. package/dist/tabs/font-tab.d.ts +13 -12
  93. package/dist/tabs/generic-tab.d.ts +8 -38
  94. package/dist/tabs/palette/palette-check-view.d.ts +5 -1
  95. package/dist/tabs/palette/palette-edit-view.d.ts +9 -1
  96. package/dist/tabs/palette/palette-tab.d.ts +12 -1
  97. package/dist/tabs/size-tab.d.ts +7 -10
  98. package/dist/tabs/spacing-tab.d.ts +7 -13
  99. package/dist/testing.js +3 -3
  100. package/dist/tokens/tier-model.d.ts +6 -0
  101. package/dist/{tweak-state-DGLrzIwq.js → tweak-state-BGp_7Tfh.js} +473 -423
  102. package/dist/utils/numeric-transform.d.ts +32 -0
  103. package/dist/utils/token-diff.d.ts +25 -0
  104. package/dist/utils/token-graph.d.ts +23 -0
  105. package/dist/utils/token-index.d.ts +30 -0
  106. package/dist/zdtp.css +1 -1
  107. package/package.json +3 -1
  108. package/dist/controls/pill-slider-row.d.ts +0 -36
  109. package/dist/controls/select-row.d.ts +0 -25
  110. package/dist/controls/slider-row.d.ts +0 -29
  111. package/dist/controls/text-row.d.ts +0 -27
  112. package/dist/index-Ds4bCeiC.js +0 -7591
  113. package/dist/load-routing-D4H2VOl5.js +0 -426
@@ -1,70 +1,70 @@
1
- class b extends Error {
1
+ class k extends Error {
2
2
  constructor(t) {
3
- super(t), this.name = "TierResolverError", Object.setPrototypeOf(this, b.prototype);
3
+ super(t), this.name = "TierResolverError", Object.setPrototypeOf(this, k.prototype);
4
4
  }
5
5
  }
6
- function v(e, t) {
6
+ function A(e, t) {
7
7
  return e.tiers.find((n) => n.id === t);
8
8
  }
9
9
  function $(e, t) {
10
10
  return e.items.find((n) => n.id === t);
11
11
  }
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(", ")}.`
12
+ function I(e, t, n, i) {
13
+ const u = A(e, t);
14
+ if (!u)
15
+ throw new k(
16
+ `Tier "${t}" not found in tab "${e.id}". Available tiers: ${e.tiers.map((f) => f.id).join(", ")}.`
17
17
  );
18
- const c = $(g, n);
19
- if (!c)
20
- throw new b(
18
+ const d = $(u, n);
19
+ if (!d)
20
+ throw new k(
21
21
  `Item "${n}" not found in tier "${t}" of tab "${e.id}".`
22
22
  );
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}".`
23
+ const r = i[t]?.[n];
24
+ if (u.referencesTier !== void 0) {
25
+ const f = u.referencesTier, l = A(e, f);
26
+ if (!l)
27
+ throw new k(
28
+ `Tier "${t}" declares referencesTier "${f}" but that tier does not exist in tab "${e.id}".`
29
29
  );
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}".`
30
+ const a = $(l, r ?? n);
31
+ if (!a) {
32
+ const g = $(l, d.default) ?? $(l, n) ?? l.items[0];
33
+ if (!g)
34
+ throw new k(
35
+ `Referenced tier "${f}" has no items; cannot resolve fallback for item "${n}" in tier "${t}" of tab "${e.id}".`
36
36
  );
37
- return { kind: "ref", targetCssVar: d.cssVar };
37
+ return { kind: "ref", targetCssVar: g.cssVar };
38
38
  }
39
- return { kind: "ref", targetCssVar: o.cssVar };
39
+ return { kind: "ref", targetCssVar: a.cssVar };
40
40
  }
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 };
41
+ 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
42
  }
43
- function I(e) {
43
+ function ee(e) {
44
44
  return e.kind === "literal" ? e.value : `var(${e.targetCssVar})`;
45
45
  }
46
46
  function N(e, t, n = [t]) {
47
47
  const i = e.tab === void 0 || e.tab === t.id ? t : n.find((s) => s.id === e.tab);
48
48
  if (!i)
49
- throw new b(
49
+ throw new k(
50
50
  `Cross-tab ref target tab "${e.tab}" not found. Available tabs: ${n.map((s) => s.id).join(", ")}.`
51
51
  );
52
- const g = v(i, e.tier);
53
- if (!g)
54
- throw new b(
52
+ const u = A(i, e.tier);
53
+ if (!u)
54
+ throw new k(
55
55
  `Cross-tab ref target tier "${e.tier}" not found in tab "${i.id}". Available tiers: ${i.tiers.map((s) => s.id).join(", ")}.`
56
56
  );
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(", ")}.`
57
+ const d = $(u, e.item);
58
+ if (!d)
59
+ throw new k(
60
+ `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
61
  );
62
- return c.cssVar;
62
+ return d.cssVar;
63
63
  }
64
- function ee(e, t) {
64
+ function te(e, t) {
65
65
  return e.paletteCssVarTemplate.replace("{n}", String(t));
66
66
  }
67
- const z = /* @__PURE__ */ new Set([
67
+ const M = /* @__PURE__ */ new Set([
68
68
  "aliceblue",
69
69
  "antiquewhite",
70
70
  "aqua",
@@ -221,39 +221,39 @@ const z = /* @__PURE__ */ new Set([
221
221
  "revert",
222
222
  "revert-layer"
223
223
  ]);
224
- function H(e) {
225
- return e.startsWith("#") || e.includes("(") || z.has(e.toLowerCase());
226
- }
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 });
224
+ function D(e) {
225
+ return e.startsWith("#") || e.includes("(") || M.has(e.toLowerCase());
226
+ }
227
+ function H(e, t, n, i) {
228
+ const u = [], d = e.indexOf(":");
229
+ if (d !== -1) {
230
+ const r = e.slice(0, d), f = e.slice(d + 1), l = t.find((o) => o.tier === r);
231
+ l && u.push({ tab: l.tab, tier: l.tier, item: f });
232
232
  }
233
233
  const [s] = t;
234
- g.push({ tab: s.tab, tier: s.tier, item: e });
235
- for (const a of g)
234
+ u.push({ tab: s.tab, tier: s.tier, item: e });
235
+ for (const r of u)
236
236
  try {
237
- return N(a, n, i), { ref: a };
237
+ return N(r, n, i), { ref: r };
238
238
  } catch {
239
239
  }
240
- return { ref: g[0] };
240
+ return { ref: u[0] };
241
241
  }
242
- function L(e, t, n, i, g, c) {
242
+ function L(e, t, n, i, u, d) {
243
243
  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(
244
+ return s !== void 0 ? s : e.default === "bg" || e.default === "fg" ? e.default : n && n.length > 0 && !D(e.default) ? H(e.default, n, i, u) : d ? (console.warn(
245
245
  `[design-token-panel] semantic item "${e.id}" default "${e.default}" names no palette item; falling back to palette index 0`
246
246
  ), 0) : { literal: e.default };
247
247
  }
248
- function O(e, t = [e]) {
248
+ function V(e, t = [e]) {
249
249
  const n = e.colorExtras;
250
250
  if (!n) return;
251
251
  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
252
+ (a) => !a.referencesTier && !a.semantic && a.items.length > 0 && a.items[0].type.kind === "color"
253
+ ), u = e.tiers.find(
254
+ (a) => i && a.referencesTier === i.id || a.semantic === !0
255
255
  );
256
- if (!i && !g)
256
+ if (!i && !u)
257
257
  return {
258
258
  id: n.id,
259
259
  label: n.label,
@@ -267,20 +267,20 @@ function O(e, t = [e]) {
267
267
  colorSchemes: n.colorSchemes,
268
268
  panelSettings: n.panelSettings
269
269
  };
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,
270
+ const d = i?.items ?? [], s = d.length, r = d[0] ? d[0].cssVar.replace(/\d+$/, "{n}") : "--zudo-stub-p{n}", f = /* @__PURE__ */ new Map();
271
+ for (let a = 0; a < d.length; a++)
272
+ f.set(d[a].id, a);
273
+ const l = {}, o = {};
274
+ if (u) {
275
+ const a = !u.semantic, g = n.semanticDefaults;
276
+ for (const c of u.items)
277
+ o[c.id] = c.cssVar, l[c.id] = g && c.id in g ? g[c.id] : L(
278
+ c,
279
+ f,
280
+ u.referencesRamps,
281
281
  e,
282
282
  t,
283
- o
283
+ a
284
284
  );
285
285
  }
286
286
  return {
@@ -288,43 +288,43 @@ function O(e, t = [e]) {
288
288
  label: n.label,
289
289
  paletteSize: s,
290
290
  baseRoles: n.baseRoles,
291
- paletteCssVarTemplate: a,
292
- semanticDefaults: f,
293
- semanticCssNames: r,
291
+ paletteCssVarTemplate: r,
292
+ semanticDefaults: l,
293
+ semanticCssNames: o,
294
294
  baseDefaults: n.baseDefaults,
295
295
  defaultShikiTheme: n.defaultShikiTheme,
296
296
  colorSchemes: n.colorSchemes,
297
297
  panelSettings: n.panelSettings
298
298
  };
299
299
  }
300
- function te(e) {
300
+ function ne(e) {
301
301
  const t = e.find((n) => n.id === "color");
302
302
  if (t)
303
- return O(t, e);
303
+ return V(t, e);
304
304
  }
305
- function F(e) {
305
+ function B(e) {
306
306
  const t = e.find((n) => n.id === "color-secondary");
307
- return t ? O(t, e) ?? null : null;
307
+ return t ? V(t, e) ?? null : null;
308
308
  }
309
- function S(e, t) {
309
+ function x(e, t) {
310
310
  if (Object.is(e, t)) return !0;
311
311
  if (e === null || t === null || typeof e != typeof t || typeof e != "object") return !1;
312
312
  if (Array.isArray(e)) {
313
313
  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;
314
+ for (let d = 0; d < e.length; d++)
315
+ if (!x(e[d], t[d])) return !1;
316
316
  return !0;
317
317
  }
318
318
  if (Array.isArray(t)) return !1;
319
319
  const n = Object.keys(e), i = Object.keys(t);
320
320
  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]))
321
+ const u = new Set(i);
322
+ for (const d of n)
323
+ if (!u.has(d) || !x(e[d], t[d]))
324
324
  return !1;
325
325
  return !0;
326
326
  }
327
- const V = {
327
+ const _ = {
328
328
  storagePrefix: "zudo-design-token-panel",
329
329
  consoleNamespace: "zudo",
330
330
  modalClassPrefix: "zudo-design-token-panel-modal",
@@ -349,7 +349,7 @@ function m() {
349
349
  colorSchemeOwners: /* @__PURE__ */ new Set()
350
350
  }, e[R] = t), t;
351
351
  }
352
- function J(e) {
352
+ function F(e) {
353
353
  return {
354
354
  instanceId: e,
355
355
  open() {
@@ -371,7 +371,7 @@ function J(e) {
371
371
  }
372
372
  };
373
373
  }
374
- function ne(e) {
374
+ function re(e) {
375
375
  m().lifecycleHooks = {
376
376
  configured: e.configured,
377
377
  open: e.open,
@@ -380,41 +380,41 @@ function ne(e) {
380
380
  destroy: e.destroy
381
381
  };
382
382
  }
383
- function re(e) {
383
+ function oe(e) {
384
384
  const t = m(), n = e.storagePrefix, i = t.instances.get(n);
385
385
  if (i) {
386
- const f = (r) => ({ ...r, applySink: void 0 });
387
- if (S(f(i.suppliedConfig), f(e)))
386
+ const l = (o) => ({ ...o, applySink: void 0 });
387
+ if (x(l(i.suppliedConfig), l(e)))
388
388
  return t.defaultPrefix = n, i.handle;
389
389
  throw new Error(
390
390
  `[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
391
  );
392
392
  }
393
- const g = t.pendingColorPresets, c = g ? { ...e, colorPresets: g } : { ...e };
393
+ const u = t.pendingColorPresets, d = u ? { ...e, colorPresets: u } : { ...e };
394
394
  t.pendingColorPresets = null;
395
- const s = t.instances.size === 0, a = s ? [...t.pendingPostConfigureHooks] : [];
395
+ const s = t.instances.size === 0, r = s ? [...t.pendingPostConfigureHooks] : [];
396
396
  s && (t.pendingPostConfigureHooks.length = 0);
397
- const l = {
398
- config: c,
397
+ const f = {
398
+ config: d,
399
399
  // Snapshot the as-supplied config before any runtime merges. Used by the
400
400
  // idempotency guard so view-transition re-calls with the original inline
401
401
  // config keep passing even after setPanelColorPresets mutates `config`.
402
402
  suppliedConfig: { ...e },
403
403
  pendingColorPresets: null,
404
- postConfigureHooks: a,
405
- handle: J(n)
404
+ postConfigureHooks: r,
405
+ handle: F(n)
406
406
  };
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;
407
+ t.instances.set(n, f), t.defaultPrefix = n;
408
+ for (const l of f.postConfigureHooks)
409
+ l();
410
+ return t.lifecycleHooks.configured?.(n), f.handle;
411
411
  }
412
- function x() {
412
+ function S() {
413
413
  const e = m();
414
414
  return e.defaultPrefix === null ? null : e.instances.get(e.defaultPrefix) ?? null;
415
415
  }
416
- function oe(e) {
417
- const t = x();
416
+ function ie(e) {
417
+ const t = S();
418
418
  if (t === null) {
419
419
  const n = m();
420
420
  if (n.pendingPostConfigureHooks.includes(e)) return;
@@ -423,96 +423,111 @@ function oe(e) {
423
423
  }
424
424
  t.postConfigureHooks.includes(e) || (t.postConfigureHooks.push(e), e());
425
425
  }
426
- function _() {
427
- return x()?.config ?? V;
426
+ function j() {
427
+ return S()?.config ?? _;
428
428
  }
429
- function ie() {
429
+ function se() {
430
430
  return [...m().instances.values()].map((e) => e.config);
431
431
  }
432
- function se(e) {
432
+ function ae(e) {
433
433
  return m().instances.get(e)?.config ?? null;
434
434
  }
435
- function ae() {
435
+ function le() {
436
436
  const e = m();
437
- e.instances.clear(), e.defaultPrefix = null, e.pendingColorPresets = null, e.pendingPostConfigureHooks.length = 0, A().clear();
437
+ e.instances.clear(), e.defaultPrefix = null, e.pendingColorPresets = null, e.pendingPostConfigureHooks.length = 0, v().clear();
438
438
  }
439
- function A() {
439
+ function v() {
440
440
  const e = m();
441
441
  return e.colorSchemeOwners || (e.colorSchemeOwners = /* @__PURE__ */ new Set()), e.colorSchemeOwners;
442
442
  }
443
- function le(e) {
444
- A().add(e);
445
- }
446
443
  function fe(e) {
447
- A().delete(e);
444
+ v().add(e);
448
445
  }
449
446
  function ce(e) {
450
- return A().has(e);
447
+ v().delete(e);
451
448
  }
452
- function ge(e = _()) {
453
- return F(e.tabs);
449
+ function ge(e) {
450
+ return v().has(e);
454
451
  }
455
- function de(e) {
456
- return `${e.storagePrefix}-state-v2`;
452
+ function de(e = j()) {
453
+ return B(e.tabs);
457
454
  }
458
455
  function ue(e) {
459
- return `${e.storagePrefix}-state-v3`;
456
+ return `${e.storagePrefix}-state-v2`;
460
457
  }
461
458
  function pe(e) {
462
- return `${e.storagePrefix}-state-v4`;
459
+ return `${e.storagePrefix}-state-v3`;
463
460
  }
464
461
  function ye(e) {
465
- return `${e.storagePrefix}-state`;
462
+ return `${e.storagePrefix}-state-v4`;
466
463
  }
467
464
  function me(e) {
468
- return `${e.storagePrefix}-open`;
465
+ return `${e.storagePrefix}-state`;
469
466
  }
470
467
  function he(e) {
471
- return `${e.storagePrefix}-position`;
468
+ return `${e.storagePrefix}-open`;
472
469
  }
473
470
  function we(e) {
474
- return `${e.storagePrefix}-size`;
471
+ return `${e.storagePrefix}-position`;
475
472
  }
476
473
  function be(e) {
477
- return `${e.storagePrefix}-density`;
474
+ return `${e.storagePrefix}-size`;
478
475
  }
479
476
  function ke(e) {
480
- return `${e.storagePrefix}:visible`;
477
+ return `${e.storagePrefix}-dock`;
481
478
  }
482
479
  function $e(e) {
483
- return `${e.storagePrefix}:autoload`;
480
+ return `${e.storagePrefix}-dock-size`;
484
481
  }
485
482
  function Ce(e) {
486
- return `${e.storagePrefix}-root`;
483
+ return `${e.storagePrefix}-density`;
487
484
  }
488
- const q = V.storagePrefix, G = "toggle-design-token-panel";
489
485
  function Pe(e) {
490
- return e.storagePrefix === q ? G : e.toggleEvent ?? `toggle-${e.storagePrefix}`;
486
+ return `${e.storagePrefix}-specimen`;
487
+ }
488
+ function Ee(e, t) {
489
+ return `${e.storagePrefix}-snapshot-${t}`;
490
+ }
491
+ function ve(e) {
492
+ return `${e.storagePrefix}-last-applied`;
493
+ }
494
+ function Ae(e) {
495
+ return `${e.storagePrefix}:visible`;
496
+ }
497
+ function xe(e) {
498
+ return `${e.storagePrefix}:autoload`;
499
+ }
500
+ function Se(e) {
501
+ return `${e.storagePrefix}-root`;
502
+ }
503
+ const J = _.storagePrefix, q = "toggle-design-token-panel";
504
+ function je(e) {
505
+ return e.storagePrefix === J ? q : e.toggleEvent ?? `toggle-${e.storagePrefix}`;
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 Te(e) {
509
+ return `${G}:${e.storagePrefix}`;
495
510
  }
496
- function Ae(e, t) {
511
+ function Oe(e, t) {
497
512
  return `${e.modalClassPrefix}${t}`;
498
513
  }
499
- function ve(e) {
514
+ function Re(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 z = /* @__PURE__ */ Symbol.for("@takazudo/zdtp:global-alias-marker");
518
+ function K(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 (!K(e)) return !1;
508
523
  try {
509
- return e[D] === !0;
524
+ return e[z] === !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 (!K(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 Ve(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[z] = !0, t.zdtp = i;
536
551
  }
537
- function xe(e) {
552
+ function _e(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})`
@@ -614,7 +641,7 @@ function Z(e) {
614
641
  throw new Error(
615
642
  `[design-token-panel] PanelConfig.tabs: duplicate tab id "${i.id}"`
616
643
  );
617
- t.add(i.id), X(i.id, i, e);
644
+ t.add(i.id), Q(i.id, i, e);
618
645
  }
619
646
  }
620
647
  function Y(e) {
@@ -636,191 +663,230 @@ function Y(e) {
636
663
  }
637
664
  return !1;
638
665
  }
639
- function X(e, t, n) {
666
+ function Q(e, t, n) {
640
667
  if (!Array.isArray(t.tiers))
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))
656
683
  throw new Error(
657
- `[design-token-panel] PanelConfig.tabs["${e}"]: duplicate tier id "${a.id}"`
684
+ `[design-token-panel] PanelConfig.tabs["${e}"]: duplicate tier id "${r.id}"`
658
685
  );
659
- if (i.add(a.id), a.semantic !== void 0 && a.semantic !== !0)
686
+ if (i.add(r.id), r.semantic !== void 0 && r.semantic !== !0)
660
687
  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)})`
688
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].semantic must be exactly \`true\` when present (got ${JSON.stringify(r.semantic)})`
662
689
  );
663
- if (!Array.isArray(a.items))
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))
664
700
  throw new Error(
665
- `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${a.id}"].items must be an array`
701
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].preview has unsupported value ${JSON.stringify(r.preview)}`
702
+ );
703
+ if (r.previewBase !== void 0 && (typeof r.previewBase != "string" || !r.previewBase.startsWith("--") || r.previewBase.length <= 2))
704
+ throw new Error(
705
+ `[design-token-panel] PanelConfig.tabs["${e}"].tiers["${r.id}"].previewBase must be a CSS custom property name`
706
+ );
707
+ if (r.previewBase !== void 0 && r.preview !== "line-height")
708
+ throw new Error(
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;
877
+ for (const w of b) {
878
+ if (w === null || typeof w != "object" || Array.isArray(w)) continue;
879
+ const E = w.type;
814
880
  if (E === null || typeof E != "object" || Array.isArray(E)) continue;
815
- const j = E.kind;
816
- if (typeof j == "string") {
817
- y = j;
881
+ const O = E.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,21 +986,24 @@ 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 X(e = j()) {
934
1000
  return e.applyRouting ?? {};
935
1001
  }
936
- function je(e) {
937
- const t = x();
1002
+ function ze(e = j()) {
1003
+ return !!e.applyEndpoint && Object.keys(X(e)).length > 0;
1004
+ }
1005
+ function Ke(e) {
1006
+ const t = S();
938
1007
  if (t === null) {
939
1008
  m().pendingColorPresets = e;
940
1009
  return;
@@ -942,42 +1011,48 @@ 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
+ N as A,
1015
+ V as B,
1016
+ x as C,
1017
+ Re as D,
1018
+ X as E,
1019
+ ze as F,
1020
+ ve as G,
1021
+ Ee as H,
1022
+ Pe as I,
1023
+ Te as J,
1024
+ re as K,
1025
+ ie as L,
1026
+ je as M,
1027
+ q as N,
1028
+ se as O,
1029
+ ae as P,
1030
+ Se as Q,
1031
+ le as _,
1032
+ Ae as a,
1033
+ _e as b,
1034
+ oe as c,
1035
+ he as d,
1036
+ we as e,
1037
+ me as f,
1038
+ j as g,
1039
+ ue as h,
1040
+ Ve as i,
1041
+ xe as j,
1042
+ ye as k,
1043
+ pe as l,
1044
+ Oe as m,
1045
+ ce as n,
1046
+ de as o,
1047
+ I as p,
1048
+ ee as q,
1049
+ ne as r,
1050
+ Ke as s,
1051
+ be as t,
1052
+ Ce as u,
1053
+ $e as v,
1054
+ ke as w,
1055
+ te as x,
1056
+ fe as y,
1057
+ ge as z
983
1058
  };