@takazudo/zdtp 0.1.0-next.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 (130) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1044 -0
  4. package/dist/apply/apply-token-overrides.d.ts +81 -0
  5. package/dist/apply/apply-token-overrides.d.ts.map +1 -0
  6. package/dist/apply/build-apply-overrides.d.ts +71 -0
  7. package/dist/apply/build-apply-overrides.d.ts.map +1 -0
  8. package/dist/apply/route-tokens-to-files.d.ts +65 -0
  9. package/dist/apply/route-tokens-to-files.d.ts.map +1 -0
  10. package/dist/apply/tier-resolver.d.ts +75 -0
  11. package/dist/apply/tier-resolver.d.ts.map +1 -0
  12. package/dist/apply-modal.d.ts +49 -0
  13. package/dist/apply-modal.d.ts.map +1 -0
  14. package/dist/astro/DesignTokenPanelHost.astro +76 -0
  15. package/dist/astro/host-adapter.d.ts +47 -0
  16. package/dist/astro/host-adapter.d.ts.map +1 -0
  17. package/dist/astro/host-adapter.js +81 -0
  18. package/dist/astro/index.d.ts +30 -0
  19. package/dist/astro/index.d.ts.map +1 -0
  20. package/dist/astro/index.js +54 -0
  21. package/dist/bin/cors.d.ts +24 -0
  22. package/dist/bin/cors.d.ts.map +1 -0
  23. package/dist/bin/parse-args.d.ts +38 -0
  24. package/dist/bin/parse-args.d.ts.map +1 -0
  25. package/dist/bin/server.d.ts +23 -0
  26. package/dist/bin/server.d.ts.map +1 -0
  27. package/dist/bin/server.js +283 -0
  28. package/dist/color-schemes-CgzOBqGO.js +85 -0
  29. package/dist/components/color-picker/color-picker.d.ts +64 -0
  30. package/dist/components/color-picker/color-picker.d.ts.map +1 -0
  31. package/dist/components/color-picker/custom-slider.d.ts +25 -0
  32. package/dist/components/color-picker/custom-slider.d.ts.map +1 -0
  33. package/dist/components/color-picker/index.d.ts +3 -0
  34. package/dist/components/color-picker/index.d.ts.map +1 -0
  35. package/dist/config/cluster-config.d.ts +135 -0
  36. package/dist/config/cluster-config.d.ts.map +1 -0
  37. package/dist/config/color-scheme-utils.d.ts +105 -0
  38. package/dist/config/color-scheme-utils.d.ts.map +1 -0
  39. package/dist/config/color-schemes.d.ts +83 -0
  40. package/dist/config/color-schemes.d.ts.map +1 -0
  41. package/dist/config/panel-config.d.ts +258 -0
  42. package/dist/config/panel-config.d.ts.map +1 -0
  43. package/dist/controls/pill-slider-row.d.ts +37 -0
  44. package/dist/controls/pill-slider-row.d.ts.map +1 -0
  45. package/dist/controls/role-button.d.ts +18 -0
  46. package/dist/controls/role-button.d.ts.map +1 -0
  47. package/dist/controls/sanitize-css-value.d.ts +22 -0
  48. package/dist/controls/sanitize-css-value.d.ts.map +1 -0
  49. package/dist/controls/select-row.d.ts +26 -0
  50. package/dist/controls/select-row.d.ts.map +1 -0
  51. package/dist/controls/slider-row.d.ts +34 -0
  52. package/dist/controls/slider-row.d.ts.map +1 -0
  53. package/dist/controls/text-row.d.ts +28 -0
  54. package/dist/controls/text-row.d.ts.map +1 -0
  55. package/dist/controls/tier-ref-selector.d.ts +33 -0
  56. package/dist/controls/tier-ref-selector.d.ts.map +1 -0
  57. package/dist/controls/tooltip.d.ts +44 -0
  58. package/dist/controls/tooltip.d.ts.map +1 -0
  59. package/dist/export-modal.d.ts +33 -0
  60. package/dist/export-modal.d.ts.map +1 -0
  61. package/dist/highlight/find-elements.d.ts +113 -0
  62. package/dist/highlight/find-elements.d.ts.map +1 -0
  63. package/dist/highlight/highlight-orchestrator.d.ts +24 -0
  64. package/dist/highlight/highlight-orchestrator.d.ts.map +1 -0
  65. package/dist/highlight/highlight-overlay.d.ts +43 -0
  66. package/dist/highlight/highlight-overlay.d.ts.map +1 -0
  67. package/dist/highlight/highlight-settings-popover.d.ts +25 -0
  68. package/dist/highlight/highlight-settings-popover.d.ts.map +1 -0
  69. package/dist/highlight/highlight-state.d.ts +87 -0
  70. package/dist/highlight/highlight-state.d.ts.map +1 -0
  71. package/dist/highlight/highlight-toggle-button.d.ts +34 -0
  72. package/dist/highlight/highlight-toggle-button.d.ts.map +1 -0
  73. package/dist/import-modal.d.ts +33 -0
  74. package/dist/import-modal.d.ts.map +1 -0
  75. package/dist/index.d.ts +105 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +5480 -0
  78. package/dist/load-routing-XyKgftpe.js +353 -0
  79. package/dist/manifest-DCReQE0k.js +24 -0
  80. package/dist/panel-config-DP2_P7dD.js +332 -0
  81. package/dist/panel.d.ts +3 -0
  82. package/dist/panel.d.ts.map +1 -0
  83. package/dist/route-tokens-to-files-1DvmWBdj.js +41 -0
  84. package/dist/server/create-apply-handler.d.ts +48 -0
  85. package/dist/server/create-apply-handler.d.ts.map +1 -0
  86. package/dist/server/index.d.ts +24 -0
  87. package/dist/server/index.d.ts.map +1 -0
  88. package/dist/server/index.js +10 -0
  89. package/dist/server/load-routing.d.ts +39 -0
  90. package/dist/server/load-routing.d.ts.map +1 -0
  91. package/dist/server/path-safety.d.ts +36 -0
  92. package/dist/server/path-safety.d.ts.map +1 -0
  93. package/dist/server/serialize-write.d.ts +7 -0
  94. package/dist/server/serialize-write.d.ts.map +1 -0
  95. package/dist/state/persist.d.ts +39 -0
  96. package/dist/state/persist.d.ts.map +1 -0
  97. package/dist/state/tweak-state.d.ts +344 -0
  98. package/dist/state/tweak-state.d.ts.map +1 -0
  99. package/dist/tabs/_generic-item-editor.d.ts +23 -0
  100. package/dist/tabs/_generic-item-editor.d.ts.map +1 -0
  101. package/dist/tabs/color-tab.d.ts +55 -0
  102. package/dist/tabs/color-tab.d.ts.map +1 -0
  103. package/dist/tabs/font-tab.d.ts +22 -0
  104. package/dist/tabs/font-tab.d.ts.map +1 -0
  105. package/dist/tabs/generic-tab.d.ts +43 -0
  106. package/dist/tabs/generic-tab.d.ts.map +1 -0
  107. package/dist/tabs/size-tab.d.ts +20 -0
  108. package/dist/tabs/size-tab.d.ts.map +1 -0
  109. package/dist/tabs/spacing-tab.d.ts +23 -0
  110. package/dist/tabs/spacing-tab.d.ts.map +1 -0
  111. package/dist/testing.d.ts +81 -0
  112. package/dist/testing.d.ts.map +1 -0
  113. package/dist/testing.js +23 -0
  114. package/dist/tokens/manifest.d.ts +148 -0
  115. package/dist/tokens/manifest.d.ts.map +1 -0
  116. package/dist/tokens/tier-model.d.ts +89 -0
  117. package/dist/tokens/tier-model.d.ts.map +1 -0
  118. package/dist/tweak-state-DSJa5csL.js +624 -0
  119. package/dist/utils/color-convert.d.ts +7 -0
  120. package/dist/utils/color-convert.d.ts.map +1 -0
  121. package/dist/utils/color-hsla.d.ts +9 -0
  122. package/dist/utils/color-hsla.d.ts.map +1 -0
  123. package/dist/utils/color-oklch.d.ts +51 -0
  124. package/dist/utils/color-oklch.d.ts.map +1 -0
  125. package/dist/utils/design-token-serde.d.ts +193 -0
  126. package/dist/utils/design-token-serde.d.ts.map +1 -0
  127. package/dist/utils/structural-equal.d.ts +22 -0
  128. package/dist/utils/structural-equal.d.ts.map +1 -0
  129. package/dist/zdtp.css +1 -0
  130. package/package.json +102 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_generic-item-editor.d.ts","sourceRoot":"","sources":["../../src/tabs/_generic-item-editor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAGpE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,iBAAS,sBAAsB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,sBAAsB,uCA4LhF;;AAED,wBAA4C"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Color tab — verbatim port of zudo-doc's
3
+ * `src/components/design-token-tweak/tabs/color-tab.tsx`, rewired to the
4
+ * design-token-panel module paths:
5
+ *
6
+ * @/config/color-schemes → ../config/color-schemes
7
+ * @/config/color-scheme-utils → ../config/color-scheme-utils
8
+ * @/utils/color-convert → ../utils/color-convert
9
+ * ../state/tweak-state → ../state/tweak-state (unchanged)
10
+ * ../state/persist → ../state/persist (unchanged)
11
+ *
12
+ * Acceptance criterion (rejection-fix): every Base / Semantic Tokens row is
13
+ * a `PaletteSelector` — the only way to edit those values is to pick a
14
+ * palette index (p0–p15) or one of the `bg`/`fg` extras. The 16 Palette
15
+ * swatches themselves are the only inputs that edit a hex via the HSL
16
+ * popover. No raw-color inputs (rgb / hex text field / lab) are
17
+ * exposed for Base or Semantic rows.
18
+ *
19
+ * Shiki integration is out of scope — the `shikiTheme` field stays on
20
+ * state + persist + serde for envelope round-tripping with upstream
21
+ * exports, and `applyShikiTheme` is a no-op stub. We hide the
22
+ * shikiTheme `<select>` JSX block here but leave every state/apply touch
23
+ * point intact. `SHIKI_THEMES` is therefore no longer imported in this file
24
+ * (would trip `noUnusedLocals`); re-add it if/when the JSX block lands.
25
+ *
26
+ * The optional secondary cluster ships alongside the primary cluster. The
27
+ * two clusters share the same `ColorSwatch` + `PaletteSelector` primitives —
28
+ * the secondary cluster renders its palette and semantic dropdowns below
29
+ * the primary sections. Whether it ships a Base subsection depends on the
30
+ * cluster's declared base roles. Section headings are prefixed
31
+ * `Primary — ` / `Secondary — ` so the two clusters are visually distinct
32
+ * in the panel.
33
+ */
34
+ import { type ColorTweakState } from '../state/tweak-state';
35
+ import type { TabConfig } from '../tokens/tier-model';
36
+ import type { PersistColor, PersistSecondary } from '../state/persist';
37
+ interface ColorTabProps {
38
+ /**
39
+ * The color tab's TabConfig. Provides palette + semantic tiers and
40
+ * colorExtras (schemes, base roles, panel settings).
41
+ */
42
+ tab: TabConfig;
43
+ state: ColorTweakState;
44
+ persistColor: PersistColor;
45
+ /**
46
+ * Secondary cluster tab, or `null` when the host has no secondary color tab.
47
+ * When non-null, its state + persist callbacks render the secondary sections.
48
+ */
49
+ secondaryTab: TabConfig | null;
50
+ secondaryState: ColorTweakState | null;
51
+ persistSecondary: PersistSecondary;
52
+ }
53
+ export default function ColorTab({ tab, state, persistColor, secondaryTab, secondaryState, persistSecondary, }: ColorTabProps): import("preact").JSX.Element;
54
+ export {};
55
+ //# sourceMappingURL=color-tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-tab.d.ts","sourceRoot":"","sources":["../../src/tabs/color-tab.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAKH,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAqVvE,UAAU,aAAa;IACrB;;;OAGG;IACH,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,eAAe,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B;;;OAGG;IACH,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,eAAe,GAAG,IAAI,CAAC;IACvC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,GAAG,EACH,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,EAAE,aAAa,gCAsVf"}
@@ -0,0 +1,22 @@
1
+ import type { TabConfig } from '../tokens/tier-model';
2
+ import type { TokenOverrides } from '../state/tweak-state';
3
+ import type { PersistFont } from '../state/persist';
4
+ interface FontTabProps {
5
+ tab: TabConfig;
6
+ state: TokenOverrides;
7
+ persistFont: PersistFont;
8
+ }
9
+ /**
10
+ * Font tab — TabConfig.tiers driven.
11
+ *
12
+ * Renders all tiers flat in declaration order. Each tier has one heading
13
+ * (div role=heading aria-level=3). No progressive disclosure (details/summary).
14
+ * When a tier has `referencesTier`, its items render `TierRefSelector`.
15
+ *
16
+ * The persist path: `state.typography` is a flat `TokenOverrides` map keyed
17
+ * by item id. Reference values store the target item id; apply emits
18
+ * `var(--targetCssVar)`.
19
+ */
20
+ export default function FontTab({ tab, state, persistFont }: FontTabProps): import("preact").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=font-tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font-tab.d.ts","sourceRoot":"","sources":["../../src/tabs/font-tab.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,UAAU,YAAY;IACpB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,gCAmDxE"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * GenericTab — renders any TabConfig whose id is not one of the reserved ids
3
+ * (color / font / spacing / size). Reserved ids continue to dispatch to their
4
+ * dedicated tab components until Wave 5 migrates them.
5
+ *
6
+ * Renders the tab's tiers in declaration order. Each tier shows a heading and
7
+ * its items via kind-appropriate controls:
8
+ *
9
+ * length / number → number input with unit suffix (numeric range)
10
+ * select → native <select>
11
+ * text → free-form text input
12
+ * color → <input type="color"> (native OS color picker)
13
+ *
14
+ * For items in a tier with `referencesTier`, TierRefSelector is rendered
15
+ * instead, so the user can either pick a tier-1 item id (emitted as
16
+ * `var(--target-cssvar)` at apply time) or flip the item back to literal mode.
17
+ */
18
+ import type { TabConfig } from '../tokens/tier-model';
19
+ import type { TabOverrides } from '../apply/tier-resolver';
20
+ export interface GenericTabProps {
21
+ /** The tab configuration to render. Must NOT be a reserved id. */
22
+ tab: TabConfig;
23
+ /**
24
+ * Current per-tier, per-item overrides for this tab.
25
+ *
26
+ * Shape: { [tierId]: { [itemId]: overrideValue } }
27
+ *
28
+ * When an item has no override, its `TierItem.default` is used.
29
+ */
30
+ overrides: TabOverrides;
31
+ /** Called when the user commits a change to any item. */
32
+ onChange: (tierId: string, itemId: string, next: string) => void;
33
+ }
34
+ /**
35
+ * Renders a non-reserved tab (any TabConfig whose id is not color/font/
36
+ * spacing/size). Dispatches each tier to TierSection, which in turn renders
37
+ * item editors by value kind.
38
+ *
39
+ * Reserved-id tabs (color/font/spacing/size) are handled by their dedicated
40
+ * components until Wave 5 migrates them to consume TabConfig.tiers.
41
+ */
42
+ export default function GenericTab({ tab, overrides, onChange }: GenericTabProps): import("preact").JSX.Element;
43
+ //# sourceMappingURL=generic-tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-tab.d.ts","sourceRoot":"","sources":["../../src/tabs/generic-tab.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAuC,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA+O3D,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,GAAG,EAAE,SAAS,CAAC;IACf;;;;;;OAMG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAMD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,eAAe,gCAwB/E"}
@@ -0,0 +1,20 @@
1
+ import type { TabConfig } from '../tokens/tier-model';
2
+ import type { TokenOverrides } from '../state/tweak-state';
3
+ import type { PersistSize } from '../state/persist';
4
+ interface SizeTabProps {
5
+ tab: TabConfig;
6
+ state: TokenOverrides;
7
+ persistSize: PersistSize;
8
+ }
9
+ /**
10
+ * Size tab — TabConfig.tiers driven.
11
+ *
12
+ * Renders all tiers flat in declaration order. Each tier has one heading
13
+ * (div role=heading aria-level=3). No progressive disclosure (details/summary).
14
+ * When a tier has `referencesTier`, items render TierRefSelector.
15
+ * Pill toggle is preserved: `item.pill` drives a checkbox + disabled slider
16
+ * exactly as the legacy PillSliderRow did.
17
+ */
18
+ export default function SizeTab({ tab, state, persistSize }: SizeTabProps): import("preact").JSX.Element;
19
+ export {};
20
+ //# sourceMappingURL=size-tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"size-tab.d.ts","sourceRoot":"","sources":["../../src/tabs/size-tab.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,UAAU,YAAY;IACpB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,YAAY,gCAmDxE"}
@@ -0,0 +1,23 @@
1
+ import type { TabConfig } from '../tokens/tier-model';
2
+ import type { TokenOverrides } from '../state/tweak-state';
3
+ import type { PersistSpacing } from '../state/persist';
4
+ interface SpacingTabProps {
5
+ tab: TabConfig;
6
+ state: TokenOverrides;
7
+ persistSpacing: PersistSpacing;
8
+ }
9
+ /**
10
+ * Spacing tab — TabConfig.tiers driven.
11
+ *
12
+ * Renders all tiers flat in declaration order. Each tier has one heading
13
+ * (div role=heading aria-level=3). No progressive disclosure (details/summary).
14
+ * When a tier has `referencesTier`, its items render `TierRefSelector`
15
+ * instead of the kind-specific control.
16
+ *
17
+ * The persist path remains the same: `state.spacing` is a flat `TokenOverrides`
18
+ * map keyed by item id. Reference values are stored as the target item id; the
19
+ * apply pipeline emits `var(--targetCssVar)`.
20
+ */
21
+ export default function SpacingTab({ tab, state, persistSpacing }: SpacingTabProps): import("preact").JSX.Element;
22
+ export {};
23
+ //# sourceMappingURL=spacing-tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spacing-tab.d.ts","sourceRoot":"","sources":["../../src/tabs/spacing-tab.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD,UAAU,eAAe;IACvB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,cAAc,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,eAAe,gCAqDjF"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * /testing sub-export — test-utility symbols for storage-key continuity tests
3
+ * and Playwright panel-interaction helpers.
4
+ *
5
+ * Re-exports symbols that consumers need to write storage-key continuity and
6
+ * manifest-ordering tests without reaching into the package's internal source
7
+ * paths. Also exports `setPanelInputValue` for Playwright-based e2e tests that
8
+ * need to drive the panel's numeric text inputs reliably.
9
+ *
10
+ * Intended for use in test files only — not for production code.
11
+ *
12
+ * Consumer usage:
13
+ * import { configurePanel, storageKey_open, ... } from '@takazudo/zdtp/testing';
14
+ * import { setPanelInputValue } from '@takazudo/zdtp/testing';
15
+ */
16
+ export { configurePanel, storageKey_open, storageKey_position, storageKey_stateV1, storageKey_stateV2, storageKey_visible, __resetPanelConfigForTests, } from './config/panel-config';
17
+ export type { PanelConfig } from './config/panel-config';
18
+ export { getStorageKeyV1, getStorageKeyV2, loadPersistedState } from './state/tweak-state';
19
+ export type { ColorTweakState, StorageLike } from './state/tweak-state';
20
+ export { GROUP_ORDER, FONT_GROUP_ORDER, SIZE_GROUP_ORDER, GROUP_TITLES } from './tokens/manifest';
21
+ /**
22
+ * Minimal duck-type for a Playwright `Locator` — only the methods this helper calls.
23
+ * Using an interface avoids a hard import of `@playwright/test` so the `./testing`
24
+ * sub-export does not add Playwright as a required dependency for non-Playwright consumers.
25
+ */
26
+ export interface PlaywrightLocatorLike {
27
+ fill(value: string): Promise<void>;
28
+ dispatchEvent(type: string): Promise<void>;
29
+ }
30
+ /**
31
+ * Set a value on a panel numeric text input (`type="text"`) and trigger the
32
+ * commit in Preact's event pipeline.
33
+ *
34
+ * ## Why this helper exists
35
+ *
36
+ * The panel's spacing/font/size tabs render their numeric editor via
37
+ * `_generic-item-editor.tsx`, which attaches a Preact `onChange` handler to the
38
+ * text input. Preact-compat re-maps `onChange` to the **native `input` event**
39
+ * (not `change`) for `<input type="text">`.
40
+ *
41
+ * `locator.fill(value)` dispatches a native `input` event, so it **does** fire
42
+ * Preact's `onChange` handler — including in headless Chromium. You do NOT need
43
+ * `dispatchEvent('change')` or the native-setter trick for text inputs.
44
+ *
45
+ * This helper calls `fill()` and then dispatches an additional `input` event as
46
+ * a defensive measure in case the Playwright version or the Chromium headless
47
+ * build does not synthesize an `input` event with the expected `isTrusted=false`
48
+ * flag that older Preact builds relied on. In practice both steps work; the
49
+ * double-dispatch is harmless.
50
+ *
51
+ * ## Range sliders (`type="range"`)
52
+ *
53
+ * Playwright's `fill()` does NOT reliably drive `type="range"` inputs in headless
54
+ * Chromium, because range inputs require mouse drag events to change value. To
55
+ * test the CSS cascade effect of a slider change without interacting with the
56
+ * slider widget, use `page.evaluate`:
57
+ *
58
+ * ```ts
59
+ * await page.evaluate((cssVar, value) => {
60
+ * document.documentElement.style.setProperty(cssVar, value);
61
+ * }, '--my-token', '1.5rem');
62
+ * ```
63
+ *
64
+ * ## Correct usage (text input)
65
+ *
66
+ * ```ts
67
+ * import { setPanelInputValue } from '@takazudo/zdtp/testing';
68
+ *
69
+ * const input = page.getByLabel('--my-token value');
70
+ * await setPanelInputValue(input, '1.5');
71
+ * // → commits '1.5rem' (or '1.5px' etc. depending on token unit) to the parent onChange
72
+ * ```
73
+ *
74
+ * @param locator - A Playwright `Locator` pointing at the panel's `type="text"` number input.
75
+ * Identify it by `page.getByLabel('--my-css-var value')` (the panel renders
76
+ * `aria-label="{cssVar} value"` on each numeric text input).
77
+ * @param value - The numeric string to type (e.g. `'1.5'`, `'40'`). Do NOT
78
+ * include the unit suffix — the panel appends the configured unit itself.
79
+ */
80
+ export declare function setPanelInputValue(locator: PlaywrightLocatorLike, value: string): Promise<void>;
81
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3F,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKxE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMlG;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,23 @@
1
+ import { _ as r, c as i, f as _, h as n, i as g, b as R, a as p } from "./panel-config-DP2_P7dD.js";
2
+ import { g as l, a as y, l as O } from "./tweak-state-DSJa5csL.js";
3
+ import { F as K, G as E, a as S, S as u } from "./manifest-DCReQE0k.js";
4
+ async function s(a, e) {
5
+ await a.fill(e), await a.dispatchEvent("input");
6
+ }
7
+ export {
8
+ K as FONT_GROUP_ORDER,
9
+ E as GROUP_ORDER,
10
+ S as GROUP_TITLES,
11
+ u as SIZE_GROUP_ORDER,
12
+ r as __resetPanelConfigForTests,
13
+ i as configurePanel,
14
+ l as getStorageKeyV1,
15
+ y as getStorageKeyV2,
16
+ O as loadPersistedState,
17
+ s as setPanelInputValue,
18
+ _ as storageKey_open,
19
+ n as storageKey_position,
20
+ g as storageKey_stateV1,
21
+ R as storageKey_stateV2,
22
+ p as storageKey_visible
23
+ };
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Token manifest — type definitions, helpers, and group ordering.
3
+ *
4
+ * This module ships ZERO baked-in manifest data. The four token arrays that
5
+ * used to live here (`SPACING_TOKENS`, `FONT_TOKENS`, `SIZE_TOKENS`,
6
+ * `COLOR_TOKENS`) live in the package-default manifest and are wired into
7
+ * `panelConfig.tokens` via the default-fallback config in
8
+ * `../config/panel-config.ts`.
9
+ *
10
+ * Consumers supply their own manifest by passing a `TokenManifest` to
11
+ * `configurePanel({...})` (see PORTABLE-CONTRACT.md §3). The package consumes
12
+ * whatever the host hands in; tab components, `applyTokenOverrides`, and
13
+ * `serialize`/`deserialize` all read from `getPanelConfig().tokens` at use
14
+ * time so a host that calls `configurePanel` before mount sees its own data
15
+ * everywhere.
16
+ *
17
+ * What stays here:
18
+ * - Public types: `TokenDef`, `TokenGroup`, `TokenControl`, `TokenManifest`.
19
+ * - Helpers: `parseNumericValue`, `formatValue`, `buildTokenIndex`.
20
+ * - Group ordering / titles consumed by the spacing / font / size tabs.
21
+ */
22
+ /**
23
+ * Manifest-group identifier.
24
+ *
25
+ * Open `string` (rather than a closed union of historical group ids) so
26
+ * consumers can coin their own group ids without forking the package
27
+ * types. Tab components key section headers off whatever string each
28
+ * `TokenDef.group` carries; the display order and human title for an
29
+ * unknown group come from `TokenManifest.spacingGroupOrder` /
30
+ * `fontGroupOrder` / `sizeGroupOrder` / `groupTitles` (the
31
+ * consumer-supplied overrides), falling back to the package-bundled
32
+ * `GROUP_ORDER` / `FONT_GROUP_ORDER` / `SIZE_GROUP_ORDER` / `GROUP_TITLES`
33
+ * defaults so existing default-shaped manifests keep working unchanged.
34
+ */
35
+ export type TokenGroup = string;
36
+ /**
37
+ * Control kind for a token row.
38
+ *
39
+ * - `"slider"` — default; numeric range input paired with a number field.
40
+ * - `"select"` — native `<select>` with `options` (e.g. font-weight 100..900).
41
+ * - `"text"` — free-form text input (e.g. font-family CSS string).
42
+ *
43
+ * `min`/`max`/`step`/`unit` are only meaningful for the slider control. They
44
+ * stay on the interface with zero defaults for non-slider rows so the manifest
45
+ * shape stays uniform.
46
+ */
47
+ export type TokenControl = 'slider' | 'select' | 'text';
48
+ export interface TokenDef {
49
+ /** Stable id used as the Record key in persisted state (e.g. `hsp-2xs`). */
50
+ id: string;
51
+ /** CSS custom property name written to `:root` (e.g. `--zd-spacing-hgap-2xs`). */
52
+ cssVar: string;
53
+ /** Display label shown in the panel row. */
54
+ label: string;
55
+ /** Manifest group — tab components use this for section headers. */
56
+ group: TokenGroup;
57
+ /** Default value as a CSS length string (e.g. `0.125rem`). */
58
+ default: string;
59
+ /** Slider min (numeric, in `unit`). Unused when `readonly`. */
60
+ min: number;
61
+ /** Slider max (numeric, in `unit`). Unused when `readonly`. */
62
+ max: number;
63
+ /** Slider step (numeric, in `unit`). Unused when `readonly`. */
64
+ step: number;
65
+ /** Unit suffix (e.g. `rem`, `px`). Read-only rows may use an empty string. */
66
+ unit: string;
67
+ /** Read-only tokens are displayed but not editable (e.g. `clamp()` expressions). */
68
+ readonly?: true;
69
+ /** Which control renders this token. Defaults to `"slider"` when absent. */
70
+ control?: TokenControl;
71
+ /** Select options — only used when `control === "select"`. */
72
+ options?: readonly string[];
73
+ /**
74
+ * Opt-in "Pill" toggle. When present the control shows a checkbox that flips
75
+ * between `value` (checked — e.g. `9999px` for full-radius pills) and a
76
+ * slider-editable custom value (unchecked). Currently used for
77
+ * `--radius-full`, where a slider alone can't meaningfully drive a 9999px
78
+ * sentinel.
79
+ */
80
+ pill?: {
81
+ /** CSS string applied when the pill checkbox is ON. */
82
+ value: string;
83
+ /** CSS string the slider falls back to when the pill is toggled OFF and
84
+ * there is no prior custom value yet. */
85
+ customDefault: string;
86
+ };
87
+ }
88
+ /**
89
+ * Consumer-supplied token manifest (PORTABLE-CONTRACT.md §3.1).
90
+ *
91
+ * Each field is the per-tab token list:
92
+ * - `spacing` → spacing tab rows
93
+ * - `typography` → font tab rows (NOTE: field name is `typography`, not
94
+ * `font`. This follows the persist envelope's slice name. The host
95
+ * project's source array MAY still use the historical `FONT_TOKENS` name
96
+ * — only the field on `TokenManifest` is what the contract pins.)
97
+ * - `size` → size tab rows
98
+ * - `color` → color-tab per-token rows (this package's default manifest
99
+ * ships an empty array because color is driven by the cluster;
100
+ * cluster-less hosts populate this).
101
+ *
102
+ * Optional ordering / titles fields: consumers may supply their own per-tab
103
+ * group ordering and section-heading text. When absent, the spacing /
104
+ * font / size tabs fall back to the package-bundled `GROUP_ORDER` /
105
+ * `FONT_GROUP_ORDER` / `SIZE_GROUP_ORDER` / `GROUP_TITLES` defaults so
106
+ * existing default-shaped manifests keep rendering exactly as before.
107
+ * Consumers that coin their own group ids MUST populate at least the tab
108
+ * they care about and SHOULD populate `groupTitles` so the section
109
+ * headers carry human-readable labels.
110
+ */
111
+ export interface TokenManifest {
112
+ spacing: readonly TokenDef[];
113
+ typography: readonly TokenDef[];
114
+ size: readonly TokenDef[];
115
+ color: readonly TokenDef[];
116
+ /** Optional spacing-tab group order. Defaults to `GROUP_ORDER`. */
117
+ spacingGroupOrder?: readonly string[];
118
+ /** Optional font-tab primary group order. Defaults to `FONT_GROUP_ORDER`. */
119
+ fontGroupOrder?: readonly string[];
120
+ /** Optional size-tab group order. Defaults to `SIZE_GROUP_ORDER`. */
121
+ sizeGroupOrder?: readonly string[];
122
+ /** Optional human-readable section titles keyed by group id. Defaults to `GROUP_TITLES`. */
123
+ groupTitles?: Readonly<Record<string, string>>;
124
+ }
125
+ /** Convenience: build a lookup map keyed by token id. */
126
+ export declare function buildTokenIndex(...groups: readonly (readonly TokenDef[])[]): Record<string, TokenDef>;
127
+ /** Human-readable section titles for grouped rendering. */
128
+ export declare const GROUP_TITLES: Record<TokenGroup, string>;
129
+ /** Stable display order of groups within the Spacing tab. */
130
+ export declare const GROUP_ORDER: readonly TokenGroup[];
131
+ /** Stable display order of primary groups within the Font tab.
132
+ * The `font-scale` group is rendered separately under an Advanced disclosure. */
133
+ export declare const FONT_GROUP_ORDER: readonly TokenGroup[];
134
+ /** Stable display order of size-tab groups. */
135
+ export declare const SIZE_GROUP_ORDER: readonly TokenGroup[];
136
+ /**
137
+ * Parse a CSS length string like `"1.5rem"` into its numeric part.
138
+ * Returns `null` for anything non-numeric (e.g. `clamp(...)`, `"0"` counts as 0).
139
+ *
140
+ * Intentionally permissive: strips any non-numeric suffix after the leading
141
+ * number, which is exactly what our slider rows need (user-typed `"1.5rem"` →
142
+ * 1.5, `"12px"` → 12). Falls back to `null` for unparseable input so the caller
143
+ * can decide the error UX.
144
+ */
145
+ export declare function parseNumericValue(value: string): number | null;
146
+ /** Format a numeric slider value back into the stored string form. */
147
+ export declare function formatValue(n: number, unit: string): string;
148
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/tokens/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IACX,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,KAAK,EAAE,UAAU,CAAC;IAClB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE;QACL,uDAAuD;QACvD,KAAK,EAAE,MAAM,CAAC;QACd;kDAC0C;QAC1C,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B,UAAU,EAAE,SAAS,QAAQ,EAAE,CAAC;IAChC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC1B,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,6EAA6E;IAC7E,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,qEAAqE;IACrE,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,4FAA4F;IAC5F,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAChD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAC7B,GAAG,MAAM,EAAE,SAAS,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,GAC1C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAQ1B;AAED,2DAA2D;AAC3D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAYnD,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,WAAW,EAAE,SAAS,UAAU,EAA8C,CAAC;AAE5F;kFACkF;AAClF,eAAO,MAAM,gBAAgB,EAAE,SAAS,UAAU,EAKxC,CAAC;AAEX,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,EAAE,SAAS,UAAU,EAAsC,CAAC;AAIzF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK9D;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK3D"}
@@ -0,0 +1,89 @@
1
+ import type { BaseRoleKey, ClusterPanelSettings } from '../config/cluster-config';
2
+ import type { ColorScheme } from '../config/color-schemes';
3
+ export type TierValueKind = {
4
+ kind: 'length';
5
+ min: number;
6
+ max: number;
7
+ step: number;
8
+ unit: string;
9
+ } | {
10
+ kind: 'number';
11
+ min: number;
12
+ max: number;
13
+ step: number;
14
+ } | {
15
+ kind: 'select';
16
+ options: readonly string[];
17
+ } | {
18
+ kind: 'text';
19
+ } | {
20
+ kind: 'cursor';
21
+ } | {
22
+ kind: 'content';
23
+ } | {
24
+ kind: 'mask-image';
25
+ } | {
26
+ kind: 'color';
27
+ };
28
+ export declare function isLengthKind(v: TierValueKind): v is Extract<TierValueKind, {
29
+ kind: 'length';
30
+ }>;
31
+ export declare function isNumberKind(v: TierValueKind): v is Extract<TierValueKind, {
32
+ kind: 'number';
33
+ }>;
34
+ export declare function isSelectKind(v: TierValueKind): v is Extract<TierValueKind, {
35
+ kind: 'select';
36
+ }>;
37
+ export declare function isTextKind(v: TierValueKind): v is Extract<TierValueKind, {
38
+ kind: 'text';
39
+ }>;
40
+ export declare function isCursorKind(v: TierValueKind): v is Extract<TierValueKind, {
41
+ kind: 'cursor';
42
+ }>;
43
+ export declare function isContentKind(v: TierValueKind): v is Extract<TierValueKind, {
44
+ kind: 'content';
45
+ }>;
46
+ export declare function isMaskImageKind(v: TierValueKind): v is Extract<TierValueKind, {
47
+ kind: 'mask-image';
48
+ }>;
49
+ export declare function isColorKind(v: TierValueKind): v is Extract<TierValueKind, {
50
+ kind: 'color';
51
+ }>;
52
+ export interface PillSpec {
53
+ value: string;
54
+ customDefault: string;
55
+ }
56
+ export interface TierItem {
57
+ id: string;
58
+ cssVar: string;
59
+ label: string;
60
+ default: string;
61
+ type: TierValueKind;
62
+ pill?: PillSpec;
63
+ readonly?: true;
64
+ }
65
+ export interface TierConfig {
66
+ id: string;
67
+ label: string;
68
+ items: readonly TierItem[];
69
+ /** When set, this tier's items hold references — each value is the id of
70
+ * an item in the tier whose id matches referencesTier. The apply pipeline
71
+ * emits var(--tier1-cssvar). */
72
+ referencesTier?: string;
73
+ }
74
+ export interface ColorClusterExtras {
75
+ id: string;
76
+ label?: string;
77
+ baseRoles: Partial<Record<BaseRoleKey, string>>;
78
+ baseDefaults: Partial<Record<BaseRoleKey, number>>;
79
+ defaultShikiTheme: string;
80
+ colorSchemes: Record<string, ColorScheme>;
81
+ panelSettings: ClusterPanelSettings;
82
+ }
83
+ export interface TabConfig {
84
+ id: string;
85
+ label: string;
86
+ tiers: readonly TierConfig[];
87
+ colorExtras?: ColorClusterExtras;
88
+ }
89
+ //# sourceMappingURL=tier-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier-model.d.ts","sourceRoot":"","sources":["../../src/tokens/tier-model.ts"],"names":[],"mappings":"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"}