@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.
- package/CHANGELOG.md +107 -0
- package/LICENSE +21 -0
- package/README.md +1044 -0
- package/dist/apply/apply-token-overrides.d.ts +81 -0
- package/dist/apply/apply-token-overrides.d.ts.map +1 -0
- package/dist/apply/build-apply-overrides.d.ts +71 -0
- package/dist/apply/build-apply-overrides.d.ts.map +1 -0
- package/dist/apply/route-tokens-to-files.d.ts +65 -0
- package/dist/apply/route-tokens-to-files.d.ts.map +1 -0
- package/dist/apply/tier-resolver.d.ts +75 -0
- package/dist/apply/tier-resolver.d.ts.map +1 -0
- package/dist/apply-modal.d.ts +49 -0
- package/dist/apply-modal.d.ts.map +1 -0
- package/dist/astro/DesignTokenPanelHost.astro +76 -0
- package/dist/astro/host-adapter.d.ts +47 -0
- package/dist/astro/host-adapter.d.ts.map +1 -0
- package/dist/astro/host-adapter.js +81 -0
- package/dist/astro/index.d.ts +30 -0
- package/dist/astro/index.d.ts.map +1 -0
- package/dist/astro/index.js +54 -0
- package/dist/bin/cors.d.ts +24 -0
- package/dist/bin/cors.d.ts.map +1 -0
- package/dist/bin/parse-args.d.ts +38 -0
- package/dist/bin/parse-args.d.ts.map +1 -0
- package/dist/bin/server.d.ts +23 -0
- package/dist/bin/server.d.ts.map +1 -0
- package/dist/bin/server.js +283 -0
- package/dist/color-schemes-CgzOBqGO.js +85 -0
- package/dist/components/color-picker/color-picker.d.ts +64 -0
- package/dist/components/color-picker/color-picker.d.ts.map +1 -0
- package/dist/components/color-picker/custom-slider.d.ts +25 -0
- package/dist/components/color-picker/custom-slider.d.ts.map +1 -0
- package/dist/components/color-picker/index.d.ts +3 -0
- package/dist/components/color-picker/index.d.ts.map +1 -0
- package/dist/config/cluster-config.d.ts +135 -0
- package/dist/config/cluster-config.d.ts.map +1 -0
- package/dist/config/color-scheme-utils.d.ts +105 -0
- package/dist/config/color-scheme-utils.d.ts.map +1 -0
- package/dist/config/color-schemes.d.ts +83 -0
- package/dist/config/color-schemes.d.ts.map +1 -0
- package/dist/config/panel-config.d.ts +258 -0
- package/dist/config/panel-config.d.ts.map +1 -0
- package/dist/controls/pill-slider-row.d.ts +37 -0
- package/dist/controls/pill-slider-row.d.ts.map +1 -0
- package/dist/controls/role-button.d.ts +18 -0
- package/dist/controls/role-button.d.ts.map +1 -0
- package/dist/controls/sanitize-css-value.d.ts +22 -0
- package/dist/controls/sanitize-css-value.d.ts.map +1 -0
- package/dist/controls/select-row.d.ts +26 -0
- package/dist/controls/select-row.d.ts.map +1 -0
- package/dist/controls/slider-row.d.ts +34 -0
- package/dist/controls/slider-row.d.ts.map +1 -0
- package/dist/controls/text-row.d.ts +28 -0
- package/dist/controls/text-row.d.ts.map +1 -0
- package/dist/controls/tier-ref-selector.d.ts +33 -0
- package/dist/controls/tier-ref-selector.d.ts.map +1 -0
- package/dist/controls/tooltip.d.ts +44 -0
- package/dist/controls/tooltip.d.ts.map +1 -0
- package/dist/export-modal.d.ts +33 -0
- package/dist/export-modal.d.ts.map +1 -0
- package/dist/highlight/find-elements.d.ts +113 -0
- package/dist/highlight/find-elements.d.ts.map +1 -0
- package/dist/highlight/highlight-orchestrator.d.ts +24 -0
- package/dist/highlight/highlight-orchestrator.d.ts.map +1 -0
- package/dist/highlight/highlight-overlay.d.ts +43 -0
- package/dist/highlight/highlight-overlay.d.ts.map +1 -0
- package/dist/highlight/highlight-settings-popover.d.ts +25 -0
- package/dist/highlight/highlight-settings-popover.d.ts.map +1 -0
- package/dist/highlight/highlight-state.d.ts +87 -0
- package/dist/highlight/highlight-state.d.ts.map +1 -0
- package/dist/highlight/highlight-toggle-button.d.ts +34 -0
- package/dist/highlight/highlight-toggle-button.d.ts.map +1 -0
- package/dist/import-modal.d.ts +33 -0
- package/dist/import-modal.d.ts.map +1 -0
- package/dist/index.d.ts +105 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5480 -0
- package/dist/load-routing-XyKgftpe.js +353 -0
- package/dist/manifest-DCReQE0k.js +24 -0
- package/dist/panel-config-DP2_P7dD.js +332 -0
- package/dist/panel.d.ts +3 -0
- package/dist/panel.d.ts.map +1 -0
- package/dist/route-tokens-to-files-1DvmWBdj.js +41 -0
- package/dist/server/create-apply-handler.d.ts +48 -0
- package/dist/server/create-apply-handler.d.ts.map +1 -0
- package/dist/server/index.d.ts +24 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/load-routing.d.ts +39 -0
- package/dist/server/load-routing.d.ts.map +1 -0
- package/dist/server/path-safety.d.ts +36 -0
- package/dist/server/path-safety.d.ts.map +1 -0
- package/dist/server/serialize-write.d.ts +7 -0
- package/dist/server/serialize-write.d.ts.map +1 -0
- package/dist/state/persist.d.ts +39 -0
- package/dist/state/persist.d.ts.map +1 -0
- package/dist/state/tweak-state.d.ts +344 -0
- package/dist/state/tweak-state.d.ts.map +1 -0
- package/dist/tabs/_generic-item-editor.d.ts +23 -0
- package/dist/tabs/_generic-item-editor.d.ts.map +1 -0
- package/dist/tabs/color-tab.d.ts +55 -0
- package/dist/tabs/color-tab.d.ts.map +1 -0
- package/dist/tabs/font-tab.d.ts +22 -0
- package/dist/tabs/font-tab.d.ts.map +1 -0
- package/dist/tabs/generic-tab.d.ts +43 -0
- package/dist/tabs/generic-tab.d.ts.map +1 -0
- package/dist/tabs/size-tab.d.ts +20 -0
- package/dist/tabs/size-tab.d.ts.map +1 -0
- package/dist/tabs/spacing-tab.d.ts +23 -0
- package/dist/tabs/spacing-tab.d.ts.map +1 -0
- package/dist/testing.d.ts +81 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +23 -0
- package/dist/tokens/manifest.d.ts +148 -0
- package/dist/tokens/manifest.d.ts.map +1 -0
- package/dist/tokens/tier-model.d.ts +89 -0
- package/dist/tokens/tier-model.d.ts.map +1 -0
- package/dist/tweak-state-DSJa5csL.js +624 -0
- package/dist/utils/color-convert.d.ts +7 -0
- package/dist/utils/color-convert.d.ts.map +1 -0
- package/dist/utils/color-hsla.d.ts +9 -0
- package/dist/utils/color-hsla.d.ts.map +1 -0
- package/dist/utils/color-oklch.d.ts +51 -0
- package/dist/utils/color-oklch.d.ts.map +1 -0
- package/dist/utils/design-token-serde.d.ts +193 -0
- package/dist/utils/design-token-serde.d.ts.map +1 -0
- package/dist/utils/structural-equal.d.ts +22 -0
- package/dist/utils/structural-equal.d.ts.map +1 -0
- package/dist/zdtp.css +1 -0
- 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"}
|
package/dist/testing.js
ADDED
|
@@ -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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"}
|