@stephen-netu/design-system 0.2.2 → 0.5.1
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/dist/d0-data-viz/BarChart.test.js +53 -0
- package/dist/d0-data-viz/CheckpointBar.test.js +83 -0
- package/dist/d0-data-viz/CheckpointPill.svelte +1 -1
- package/dist/d0-data-viz/CheckpointPill.test.js +78 -0
- package/dist/d0-data-viz/ConnectionHealth.test.js +70 -0
- package/dist/d0-data-viz/MetricCard.test.js +57 -0
- package/dist/d0-data-viz/SparkLine.test.js +47 -0
- package/dist/d0-data-viz/StorageMap.test.js +63 -0
- package/dist/d0-data-viz/Timeline.test.js +62 -0
- package/dist/d0-data-viz/WorldLineTimeline.test.js +99 -0
- package/dist/d0-data-viz/checkpoint-types.js +1 -1
- package/dist/d0-data-viz/storage-map-types.d.ts.map +1 -1
- package/dist/d0-data-viz/storage-map-types.js +6 -3
- package/dist/d0-data-viz/theme-integration.js +1 -1
- package/dist/demos/AmbientPrimitivesDemo.svelte +103 -0
- package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts +5 -0
- package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts.map +1 -0
- package/dist/demos/NodepadBlocksShowcase.svelte +2 -1
- package/dist/demos/NodepadBlocksShowcase.svelte.d.ts.map +1 -1
- package/dist/demos/index.d.ts +1 -0
- package/dist/demos/index.d.ts.map +1 -1
- package/dist/demos/index.js +1 -0
- package/dist/editor/CodeEditor.svelte +83 -26
- package/dist/editor/CodeEditor.svelte.d.ts +0 -1
- package/dist/editor/CodeEditor.svelte.d.ts.map +1 -1
- package/dist/editor/ExternalChangeDialog.svelte +117 -0
- package/dist/editor/ExternalChangeDialog.svelte.d.ts +13 -0
- package/dist/editor/ExternalChangeDialog.svelte.d.ts.map +1 -0
- package/dist/editor/MarkdownEditor.svelte +104 -617
- package/dist/editor/MarkdownEditor.svelte.d.ts +1 -1
- package/dist/editor/MarkdownEditor.svelte.d.ts.map +1 -1
- package/dist/editor/codemirror-config.d.ts +36 -0
- package/dist/editor/codemirror-config.d.ts.map +1 -0
- package/dist/editor/codemirror-config.js +87 -0
- package/dist/editor/components/CorrectionTooltip.svelte +180 -159
- package/dist/editor/components/CorrectionTooltip.svelte.d.ts +7 -23
- package/dist/editor/components/CorrectionTooltip.svelte.d.ts.map +1 -1
- package/dist/editor/extensions/autocomplete.d.ts +2 -2
- package/dist/editor/extensions/autocomplete.d.ts.map +1 -1
- package/dist/editor/extensions/autocomplete.test.js +121 -0
- package/dist/editor/extensions/spellcheck.d.ts +21 -3
- package/dist/editor/extensions/spellcheck.d.ts.map +1 -1
- package/dist/editor/extensions/spellcheck.js +51 -9
- package/dist/editor/extensions/spellcheck.test.js +168 -0
- package/dist/editor/extensions/types.d.ts +2 -1
- package/dist/editor/extensions/types.d.ts.map +1 -1
- package/dist/editor/index.d.ts +2 -1
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/index.js +1 -0
- package/dist/editor/markdown-preview.d.ts +9 -0
- package/dist/editor/markdown-preview.d.ts.map +1 -0
- package/dist/editor/markdown-preview.js +19 -0
- package/dist/editor/markdown-preview.test.js +38 -0
- package/dist/editor/useCodeMirror.d.ts +23 -0
- package/dist/editor/useCodeMirror.d.ts.map +1 -0
- package/dist/editor/useCodeMirror.js +40 -0
- package/dist/editor/useFilePersistence.d.ts +32 -0
- package/dist/editor/useFilePersistence.d.ts.map +1 -0
- package/dist/editor/useFilePersistence.js +117 -0
- package/dist/fabric/ai/ChatPanel.svelte +61 -62
- package/dist/fabric/ai/ChatPanel.svelte.d.ts.map +1 -1
- package/dist/fabric/ai/ResearchPanel.svelte +31 -24
- package/dist/fabric/data/FileTree.svelte +195 -0
- package/dist/fabric/data/FileTree.svelte.d.ts +19 -0
- package/dist/fabric/data/FileTree.svelte.d.ts.map +1 -0
- package/dist/fabric/data/FileTree.test.js +127 -0
- package/dist/fabric/data/index.d.ts +5 -9
- package/dist/fabric/data/index.d.ts.map +1 -1
- package/dist/fabric/data/index.js +4 -1
- package/dist/fabric/index.d.ts +1 -0
- package/dist/fabric/index.d.ts.map +1 -1
- package/dist/fabric/index.js +2 -0
- package/dist/fabric/input/KeyboardShortcuts.svelte +23 -21
- package/dist/fabric/layout/CollapsiblePanel.svelte +8 -10
- package/dist/fabric/navigation/ActivityRail.svelte +3 -5
- package/dist/fabric/navigation/ActivityRail.svelte.d.ts.map +1 -1
- package/dist/g0-generative/components/Text.svelte +38 -0
- package/dist/g0-generative/components/Text.svelte.d.ts +9 -0
- package/dist/g0-generative/components/Text.svelte.d.ts.map +1 -0
- package/dist/g0-generative/index.d.ts +1 -0
- package/dist/g0-generative/index.d.ts.map +1 -1
- package/dist/g0-generative/index.js +1 -0
- package/dist/g0-generative/library/ComponentLibrary.d.ts +4 -0
- package/dist/g0-generative/library/ComponentLibrary.d.ts.map +1 -1
- package/dist/g0-generative/library/ComponentLibrary.js +10 -0
- package/dist/g0-generative/library/ComponentLibrary.test.js +135 -0
- package/dist/g0-generative/renderer/OpenUIRenderer.svelte +16 -56
- package/dist/g0-generative/renderer/OpenUIRenderer.svelte.d.ts.map +1 -1
- package/dist/g0-generative/renderer/OpenUIRenderer.test.js +143 -0
- package/dist/g0-geo/SovereignMap.svelte +13 -13
- package/dist/g0-geo/SovereignMap.svelte.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/l0-layout/block-writer/BlockContent.svelte +23 -22
- package/dist/l0-layout/block-writer/BlockContent.svelte.d.ts.map +1 -1
- package/dist/l0-layout/block-writer/BlockContent.test.js +47 -0
- package/dist/l0-layout/block-writer/markdown.js +11 -11
- package/dist/l0-layout/block-writer/markdown.test.js +81 -0
- package/dist/l0-layout/card/StackedCard.svelte +87 -0
- package/dist/l0-layout/card/StackedCard.svelte.d.ts +9 -0
- package/dist/l0-layout/card/StackedCard.svelte.d.ts.map +1 -0
- package/dist/l0-layout/card/StackedCard.test.js +29 -0
- package/dist/l0-layout/index.d.ts +1 -0
- package/dist/l0-layout/index.d.ts.map +1 -1
- package/dist/l0-layout/index.js +1 -0
- package/dist/l0-layout/kanban/KanbanBoard.svelte +1 -1
- package/dist/l0-layout/kanban/KanbanColumn.svelte +1 -1
- package/dist/n1-flow-canvas/FlowCanvas.svelte +50 -6
- package/dist/n1-flow-canvas/FlowCanvas.svelte.d.ts.map +1 -1
- package/dist/n1-flow-canvas/index.d.ts +2 -0
- package/dist/n1-flow-canvas/index.d.ts.map +1 -1
- package/dist/n1-flow-canvas/index.js +1 -0
- package/dist/n1-flow-canvas/pipeline-adapter.d.ts +37 -0
- package/dist/n1-flow-canvas/pipeline-adapter.d.ts.map +1 -0
- package/dist/n1-flow-canvas/pipeline-adapter.js +160 -0
- package/dist/n2-manifold-disk/ManifoldDisk.svelte +62 -35
- package/dist/n2-manifold-disk/ManifoldDisk.svelte.d.ts.map +1 -1
- package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte +23 -19
- package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte.d.ts.map +1 -1
- package/dist/n4-adaptive-manifold/types.d.ts +3 -0
- package/dist/n4-adaptive-manifold/types.d.ts.map +1 -1
- package/dist/p0-primitives/ThemeProvider.svelte +28 -7
- package/dist/p0-primitives/ThemeProvider.svelte.d.ts +5 -0
- package/dist/p0-primitives/ThemeProvider.svelte.d.ts.map +1 -1
- package/dist/p0-primitives/canvas-theme.d.ts +21 -1
- package/dist/p0-primitives/canvas-theme.d.ts.map +1 -1
- package/dist/p0-primitives/canvas-theme.js +78 -23
- package/dist/p0-primitives/debug.d.ts +6 -0
- package/dist/p0-primitives/debug.d.ts.map +1 -0
- package/dist/p0-primitives/debug.js +21 -0
- package/dist/p0-primitives/theme.d.ts.map +1 -1
- package/dist/p0-primitives/theme.js +11 -31
- package/dist/p0-primitives/tokens/ambient.css +76 -0
- package/dist/p0-primitives/tokens/tokens.css +124 -29
- package/dist/p0-primitives/utils/index.d.ts +2 -0
- package/dist/p0-primitives/utils/index.d.ts.map +1 -1
- package/dist/p0-primitives/utils/index.js +1 -0
- package/dist/p0-primitives/utils/reveal.d.ts +15 -0
- package/dist/p0-primitives/utils/reveal.d.ts.map +1 -0
- package/dist/p0-primitives/utils/reveal.js +29 -0
- package/dist/p0-primitives/utils/reveal.test.js +95 -0
- package/dist/s0-state/SyncStatus.svelte +1 -1
- package/dist/s0-state/index.d.ts +2 -1
- package/dist/s0-state/index.d.ts.map +1 -1
- package/dist/s0-state/index.js +2 -0
- package/dist/s0-state/modal-stack-store.svelte.d.ts +3 -3
- package/dist/s0-state/modal-stack-store.svelte.js +2 -2
- package/dist/spatial/ForceSimulation.svelte.js +1 -1
- package/dist/spatial/ParticleAssembleMark.svelte +285 -0
- package/dist/spatial/ParticleAssembleMark.svelte.d.ts +24 -0
- package/dist/spatial/ParticleAssembleMark.svelte.d.ts.map +1 -0
- package/dist/spatial/ZoneTiler.test.js +90 -0
- package/dist/spatial/index.js +1 -0
- package/dist/spatial/particle-assemble-math.d.ts +22 -0
- package/dist/spatial/particle-assemble-math.d.ts.map +1 -0
- package/dist/spatial/particle-assemble-math.js +26 -0
- package/dist/spatial/particle-assemble-math.test.js +56 -0
- package/dist/t0-transport/substrate.svelte.d.ts.map +1 -1
- package/dist/t0-transport/substrate.svelte.js +10 -4
- package/dist/u0-primitives/LockIndicator.svelte +16 -14
- package/dist/u0-primitives/VerticalToolbar.svelte +24 -21
- package/dist/u0-primitives/accordion/Accordion.svelte +8 -7
- package/dist/u0-primitives/animated-icon/AnimatedIcon.svelte +3 -3
- package/dist/u0-primitives/animated-icon/AnimatedIcon.test.js +82 -0
- package/dist/u0-primitives/avatar/Avatar.svelte +14 -14
- package/dist/u0-primitives/avatar/Avatar.test.js +81 -0
- package/dist/u0-primitives/badge/Badge.svelte +6 -4
- package/dist/u0-primitives/badge/ValidityBadge.svelte +4 -27
- package/dist/u0-primitives/button/Button.svelte +15 -12
- package/dist/u0-primitives/card/Card.svelte +37 -15
- package/dist/u0-primitives/card/Card.test.js +86 -0
- package/dist/u0-primitives/command-palette/CommandPalette.svelte +48 -43
- package/dist/u0-primitives/command-palette/CommandPalette.test.js +202 -0
- package/dist/u0-primitives/dropdown/Dropdown.svelte +20 -25
- package/dist/u0-primitives/grant-badge/GrantStatusBadge.svelte +2 -2
- package/dist/u0-primitives/index.d.ts +6 -0
- package/dist/u0-primitives/index.d.ts.map +1 -1
- package/dist/u0-primitives/index.js +8 -0
- package/dist/u0-primitives/input/Input.svelte +77 -24
- package/dist/u0-primitives/input/Input.svelte.d.ts +2 -10
- package/dist/u0-primitives/input/Input.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/input/Input.test.js +81 -1
- package/dist/u0-primitives/live-dot/LiveDot.svelte +56 -0
- package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts +11 -0
- package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts.map +1 -0
- package/dist/u0-primitives/live-dot/LiveDot.test.js +41 -0
- package/dist/u0-primitives/live-dot/index.d.ts +3 -0
- package/dist/u0-primitives/live-dot/index.d.ts.map +1 -0
- package/dist/u0-primitives/live-dot/index.js +1 -0
- package/dist/u0-primitives/modal/Modal.svelte +22 -19
- package/dist/u0-primitives/modal/Modal.test.js +1 -1
- package/dist/u0-primitives/spinner/Spinner.svelte +11 -79
- package/dist/u0-primitives/spinner/Spinner.svelte.d.ts.map +1 -1
- package/dist/u0-primitives/steps/Steps.svelte +18 -19
- package/dist/u0-primitives/surface-state/SurfaceState.svelte +7 -7
- package/dist/u0-primitives/tabs/Tabs.svelte +13 -11
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte +94 -0
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts +16 -0
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts.map +1 -0
- package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.test.js +48 -0
- package/dist/u0-primitives/theme-swatch-group/index.d.ts +3 -0
- package/dist/u0-primitives/theme-swatch-group/index.d.ts.map +1 -0
- package/dist/u0-primitives/theme-swatch-group/index.js +1 -0
- package/dist/u0-primitives/toggle/Toggle.svelte +10 -11
- package/dist/u0-primitives/tooltip/Tooltip.svelte +9 -9
- package/dist/u0-primitives/web-components/button-component.d.ts +5 -1
- package/dist/u0-primitives/web-components/button-component.d.ts.map +1 -1
- package/dist/u0-primitives/web-components/button-component.js +72 -33
- package/dist/u0-primitives/web-components/index.d.ts +3 -0
- package/dist/u0-primitives/web-components/index.d.ts.map +1 -0
- package/dist/u0-primitives/web-components/index.js +2 -0
- package/dist/u0-primitives/web-components/input-component.d.ts +5 -1
- package/dist/u0-primitives/web-components/input-component.d.ts.map +1 -1
- package/dist/u0-primitives/web-components/input-component.js +56 -39
- package/dist/u0-primitives/web-components/web-components.test.js +96 -0
- package/dist/u0-primitives/window-frame/WindowFrame.svelte +87 -0
- package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts +10 -0
- package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts.map +1 -0
- package/dist/u0-primitives/window-frame/WindowFrame.test.js +31 -0
- package/dist/u0-primitives/window-frame/index.d.ts +3 -0
- package/dist/u0-primitives/window-frame/index.d.ts.map +1 -0
- package/dist/u0-primitives/window-frame/index.js +1 -0
- package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte +11 -2
- package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte.d.ts.map +1 -1
- package/package.json +44 -28
- package/src/p0-primitives/tokens/ambient.css +76 -0
- package/src/p0-primitives/tokens/tokens.css +124 -29
- package/src/p0-primitives/tokens/tokens.json +42 -24
|
@@ -1,46 +1,101 @@
|
|
|
1
|
-
// Canvas Theme Helper — reads CSS custom properties at runtime for canvas rendering
|
|
1
|
+
// Canvas Theme Helper — reads CSS custom properties at runtime for canvas rendering.
|
|
2
2
|
// Allows canvas components (FlowCanvas, ForceGraph, etc.) to respect runtime theming
|
|
3
3
|
// without hardcoded hex values.
|
|
4
4
|
//
|
|
5
5
|
// Usage:
|
|
6
6
|
// const theme = getCanvasTheme();
|
|
7
7
|
// context.fillStyle = theme.node;
|
|
8
|
+
// context.strokeStyle = theme.accentRamp.solid; // e.g. "rgb(184 115 51)"
|
|
9
|
+
// context.fillStyle = theme.accentRamp.alpha(0.3); // e.g. "rgba(184,115,51,0.3)"
|
|
8
10
|
//
|
|
9
|
-
// The helper reads from the document root's computed styles
|
|
10
|
-
// whatever theme
|
|
11
|
+
// The helper reads from the document root's computed styles (or a provided element),
|
|
12
|
+
// so it picks up whatever theme and user accent the consumer has active.
|
|
11
13
|
/**
|
|
12
|
-
* Resolve a CSS custom property to its computed value.
|
|
13
|
-
* Falls back to the provided default if the property is undefined.
|
|
14
|
+
* Resolve a CSS custom property to its computed value from a target element.
|
|
15
|
+
* Falls back to the provided default if the property is undefined or SSR.
|
|
14
16
|
*/
|
|
15
|
-
function resolveCssVar(name, fallback) {
|
|
17
|
+
function resolveCssVar(name, fallback, el = document.documentElement) {
|
|
16
18
|
if (typeof document === 'undefined')
|
|
17
19
|
return fallback;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
return getComputedStyle(el).getPropertyValue(name).trim() || fallback;
|
|
21
|
+
}
|
|
22
|
+
// --- Accent ramp derivation -------------------------------------------------
|
|
23
|
+
// Canvas 2D cannot use CSS color-mix(). We derive the ramp in JS by parsing
|
|
24
|
+
// the accent seed and adjusting lightness. This mirrors what tokens.css does
|
|
25
|
+
// via color-mix, keeping canvas rendering in sync with CSS theming.
|
|
26
|
+
/** Parse a hex color string to [r, g, b] (0–255). Falls back to brass. */
|
|
27
|
+
function hexToRgb(hex) {
|
|
28
|
+
const h = hex.trim().replace('#', '');
|
|
29
|
+
if (h.length === 3) {
|
|
30
|
+
return [
|
|
31
|
+
parseInt(h[0] + h[0], 16),
|
|
32
|
+
parseInt(h[1] + h[1], 16),
|
|
33
|
+
parseInt(h[2] + h[2], 16),
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
if (h.length === 6) {
|
|
37
|
+
return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
|
|
38
|
+
}
|
|
39
|
+
return [184, 115, 51]; // brass fallback
|
|
40
|
+
}
|
|
41
|
+
/** Linear-interpolate a channel toward white (positive t) or black (negative t). */
|
|
42
|
+
function tint(c, t) {
|
|
43
|
+
return Math.round(t > 0 ? c + (255 - c) * t : c + c * t);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build an AccentRamp from an RGB triplet.
|
|
47
|
+
* hi ≈ color-mix(in oklab, seed, #fff 16%)
|
|
48
|
+
* lo ≈ color-mix(in oklab, seed, #000 22%)
|
|
49
|
+
*/
|
|
50
|
+
function buildRamp(r, g, b) {
|
|
51
|
+
const hiR = tint(r, 0.16), hiG = tint(g, 0.16), hiB = tint(b, 0.16);
|
|
52
|
+
const loR = tint(r, -0.22), loG = tint(g, -0.22), loB = tint(b, -0.22);
|
|
53
|
+
return {
|
|
54
|
+
solid: `rgb(${r} ${g} ${b})`,
|
|
55
|
+
hi: `rgb(${hiR} ${hiG} ${hiB})`,
|
|
56
|
+
lo: `rgb(${loR} ${loG} ${loB})`,
|
|
57
|
+
alpha: (a) => `rgba(${r},${g},${b},${a})`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolve the accent seed and return a canvas-ready AccentRamp.
|
|
62
|
+
* Reads --accent-primary from the target element's computed styles.
|
|
63
|
+
* Call once per frame (or on theme change) and cache the result.
|
|
64
|
+
*/
|
|
65
|
+
export function resolveAccentRamp(el = document.documentElement) {
|
|
66
|
+
if (typeof document === 'undefined')
|
|
67
|
+
return buildRamp(184, 115, 51);
|
|
68
|
+
const seed = getComputedStyle(el).getPropertyValue('--accent-primary').trim() || '#b87333';
|
|
69
|
+
const [r, g, b] = hexToRgb(seed);
|
|
70
|
+
return buildRamp(r, g, b);
|
|
20
71
|
}
|
|
21
72
|
/**
|
|
22
73
|
* Get the current canvas theme by reading CSS custom properties.
|
|
23
74
|
* This enables runtime theming for all canvas-based components.
|
|
75
|
+
* Pass a container element to resolve tokens scoped to a ThemeProvider.
|
|
24
76
|
*/
|
|
25
|
-
export function getCanvasTheme() {
|
|
77
|
+
export function getCanvasTheme(el = document.documentElement) {
|
|
78
|
+
const ramp = resolveAccentRamp(el);
|
|
79
|
+
const rv = (name, fb) => resolveCssVar(name, fb, el);
|
|
26
80
|
return {
|
|
27
|
-
bg:
|
|
28
|
-
node:
|
|
29
|
-
nodeBorder:
|
|
30
|
-
nodeHover:
|
|
31
|
-
nodeText:
|
|
32
|
-
edgeLine:
|
|
33
|
-
edgeFade:
|
|
34
|
-
focus:
|
|
81
|
+
bg: rv('--color-bg-canvas', '#121518'),
|
|
82
|
+
node: rv('--color-bg-panel', '#181c20'),
|
|
83
|
+
nodeBorder: ramp.solid,
|
|
84
|
+
nodeHover: rv('--color-bg-panel-elevated', '#20252a'),
|
|
85
|
+
nodeText: rv('--color-text-primary', '#e7e9eb'),
|
|
86
|
+
edgeLine: ramp.solid,
|
|
87
|
+
edgeFade: ramp.alpha(0.3),
|
|
88
|
+
focus: rv('--color-warning', '#d8a23c'),
|
|
35
89
|
severity: {
|
|
36
|
-
critical:
|
|
37
|
-
major:
|
|
38
|
-
minor:
|
|
90
|
+
critical: rv('--color-error', '#cf4e4e'),
|
|
91
|
+
major: rv('--color-warning', '#d8a23c'),
|
|
92
|
+
minor: rv('--color-text-tertiary', '#646b72'),
|
|
39
93
|
},
|
|
40
94
|
quaternion: {
|
|
41
|
-
i:
|
|
42
|
-
j:
|
|
43
|
-
k:
|
|
95
|
+
i: ramp.hi,
|
|
96
|
+
j: rv('--color-success', '#3fae9f'),
|
|
97
|
+
k: rv('--color-warning', '#d8a23c'),
|
|
44
98
|
},
|
|
99
|
+
accentRamp: ramp,
|
|
45
100
|
};
|
|
46
101
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/p0-primitives/debug.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,KAAK;mBACD,OAAO,EAAE;oBACR,OAAO,EAAE;qBACR,OAAO,EAAE;CAC3B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const DEBUG = (() => {
|
|
2
|
+
try {
|
|
3
|
+
if (typeof localStorage !== 'undefined' && localStorage.getItem('ds-debug') === 'true')
|
|
4
|
+
return true;
|
|
5
|
+
const g = globalThis;
|
|
6
|
+
if (typeof g.process === 'object' && g.process?.env?.DS_DEBUG === 'true')
|
|
7
|
+
return true;
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
})();
|
|
14
|
+
export const debug = {
|
|
15
|
+
log: (...args) => { if (DEBUG)
|
|
16
|
+
console.log('[ds]', ...args); },
|
|
17
|
+
warn: (...args) => { if (DEBUG)
|
|
18
|
+
console.warn('[ds]', ...args); },
|
|
19
|
+
error: (...args) => { if (DEBUG)
|
|
20
|
+
console.error('[ds]', ...args); },
|
|
21
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/p0-primitives/theme.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,GAC9B,WAAW,CAKb;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/p0-primitives/theme.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,GAC9B,WAAW,CAKb;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAiC9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WA+B/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,WA0B9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAE7B,CAAC;AAEH;;GAEG;AAIH,eAAO,MAAM,iBAAiB,EAAE,WAE9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAO9B,CAAC"}
|
|
@@ -30,14 +30,10 @@ export const defaultDarkTheme = {
|
|
|
30
30
|
colorFgSecondary: '#a8a08c',
|
|
31
31
|
colorFgTertiary: '#6b6558',
|
|
32
32
|
colorFgMuted: '#3a3630',
|
|
33
|
-
// Accent
|
|
33
|
+
// Accent — SEED ONLY. tokens.css derives hover/active/subtle/glow/muted/faint
|
|
34
|
+
// from --accent-primary via color-mix; emitting derived values here would
|
|
35
|
+
// override and de-sync the single-seed engine (re-introducing the brass leak).
|
|
34
36
|
colorAccent: '#b87333',
|
|
35
|
-
colorAccentHover: '#d4892f',
|
|
36
|
-
colorAccentActive: '#8a5526',
|
|
37
|
-
colorAccentSubtle: 'rgba(184, 115, 51, 0.08)',
|
|
38
|
-
colorAccentGlow: 'rgba(184, 115, 51, 0.28)',
|
|
39
|
-
colorAccentMuted: 'rgba(184, 115, 51, 0.16)',
|
|
40
|
-
colorAccentFaint: 'rgba(184, 115, 51, 0.04)',
|
|
41
37
|
// Telemetry
|
|
42
38
|
colorSuccess: '#4fa8a2',
|
|
43
39
|
colorWarning: '#d4a04c',
|
|
@@ -66,14 +62,8 @@ export const defaultLightTheme = {
|
|
|
66
62
|
colorFgSecondary: '#5a5a5a',
|
|
67
63
|
colorFgTertiary: '#8a8a8a',
|
|
68
64
|
colorFgMuted: '#a0a0a0',
|
|
69
|
-
// Accent (
|
|
65
|
+
// Accent — SEED ONLY (CSS engine derives the ramp).
|
|
70
66
|
colorAccent: '#b87333',
|
|
71
|
-
colorAccentHover: '#c9894f',
|
|
72
|
-
colorAccentActive: '#9a5f2a',
|
|
73
|
-
colorAccentSubtle: 'rgba(184, 115, 51, 0.12)',
|
|
74
|
-
colorAccentGlow: 'rgba(184, 115, 51, 0.2)',
|
|
75
|
-
colorAccentMuted: 'rgba(184, 115, 51, 0.15)',
|
|
76
|
-
colorAccentFaint: 'rgba(184, 115, 51, 0.06)',
|
|
77
67
|
// Feedback
|
|
78
68
|
colorSuccess: '#5a8a6e',
|
|
79
69
|
colorWarning: '#b8956b',
|
|
@@ -100,13 +90,8 @@ export const controlRoomTheme = {
|
|
|
100
90
|
colorFgSecondary: '#888888',
|
|
101
91
|
colorFgTertiary: '#555555',
|
|
102
92
|
colorFgMuted: '#333333',
|
|
93
|
+
// Accent — SEED ONLY (CSS engine derives the ramp).
|
|
103
94
|
colorAccent: '#00ff41',
|
|
104
|
-
colorAccentHover: '#33ff66',
|
|
105
|
-
colorAccentActive: '#00cc33',
|
|
106
|
-
colorAccentSubtle: 'rgba(0, 255, 65, 0.1)',
|
|
107
|
-
colorAccentGlow: 'rgba(0, 255, 65, 0.3)',
|
|
108
|
-
colorAccentMuted: 'rgba(0, 255, 65, 0.2)',
|
|
109
|
-
colorAccentFaint: 'rgba(0, 255, 65, 0.05)',
|
|
110
95
|
colorSuccess: '#00ff41',
|
|
111
96
|
colorWarning: '#ff8c00',
|
|
112
97
|
colorError: '#ff3131',
|
|
@@ -121,19 +106,16 @@ export const controlRoomTheme = {
|
|
|
121
106
|
* Brass accent theme variant — warm metallic (preserved for compatibility)
|
|
122
107
|
*/
|
|
123
108
|
export const brassAccentTheme = createTheme(defaultDarkTheme, {
|
|
124
|
-
colorAccent: '#b87333',
|
|
125
|
-
colorAccentHover: '#d4892f',
|
|
126
|
-
colorAccentActive: '#8a5526',
|
|
127
|
-
colorAccentSubtle: 'rgba(184, 115, 51, 0.08)',
|
|
109
|
+
colorAccent: '#b87333', // seed only — ramp derived by the CSS engine
|
|
128
110
|
});
|
|
129
111
|
/**
|
|
130
112
|
* Copper accent theme variant — reddish metallic (preserved for compatibility)
|
|
131
113
|
*/
|
|
114
|
+
// Copper = reddish metallic, distinct from brass (#b87333 is yellow-gold).
|
|
115
|
+
// The CSS engine derives the ramp from this seed, so hover/active/glow
|
|
116
|
+
// all shift toward the red-copper character automatically.
|
|
132
117
|
export const copperAccentTheme = createTheme(defaultDarkTheme, {
|
|
133
|
-
colorAccent: '#
|
|
134
|
-
colorAccentHover: '#c98444',
|
|
135
|
-
colorAccentActive: '#a05f2a',
|
|
136
|
-
colorAccentSubtle: 'rgba(184, 115, 51, 0.08)',
|
|
118
|
+
colorAccent: '#b85533', // seed only — reddish copper
|
|
137
119
|
});
|
|
138
120
|
/**
|
|
139
121
|
* High contrast accessibility theme
|
|
@@ -144,7 +126,5 @@ export const highContrastTheme = createTheme(defaultDarkTheme, {
|
|
|
144
126
|
colorFgPrimary: '#ffffff',
|
|
145
127
|
colorFgSecondary: '#eeeeee',
|
|
146
128
|
colorFgMuted: '#aaaaaa',
|
|
147
|
-
colorAccent: '#ffcc00',
|
|
148
|
-
colorAccentHover: '#ffdd33',
|
|
149
|
-
colorAccentActive: '#e6b800',
|
|
129
|
+
colorAccent: '#ffcc00', // seed only — ramp derived by the CSS engine
|
|
150
130
|
});
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/* @kos/design-system — Ambient Layer
|
|
2
|
+
Opt-in decorative tokens for marketing/docs/onboarding surfaces —
|
|
3
|
+
NOT auto-imported (see src/index.ts). Import explicitly:
|
|
4
|
+
import '@stephen-netu/design-system/tokens/ambient.css';
|
|
5
|
+
|
|
6
|
+
Everything here derives from the existing single-seed accent engine
|
|
7
|
+
(--accent-primary → color-mix()) already defined in tokens.css. No
|
|
8
|
+
hardcoded hues are introduced — swapping --accent-primary re-themes
|
|
9
|
+
every gradient/glow defined here for free. Do not add hardcoded
|
|
10
|
+
parallel palettes; that reintroduces the "brass leak" anti-pattern
|
|
11
|
+
tokens.css's own comments warn against. */
|
|
12
|
+
|
|
13
|
+
:root {
|
|
14
|
+
/* --- Gradient --- */
|
|
15
|
+
--gradient-accent: linear-gradient(135deg, var(--accent-primary) 0%, var(--color-accent-secondary) 100%);
|
|
16
|
+
|
|
17
|
+
/* --- Ambient glow layers — low-opacity radial fields for hero/empty-state backgrounds --- */
|
|
18
|
+
--glow-ambient-1: color-mix(in srgb, var(--accent-primary) 7%, transparent);
|
|
19
|
+
--glow-ambient-2: color-mix(in srgb, var(--color-accent-secondary) 5%, transparent);
|
|
20
|
+
--glow-ambient-3: color-mix(in srgb, var(--accent-primary) 3%, transparent);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* --- Gradient text --- */
|
|
24
|
+
.text-gradient-accent {
|
|
25
|
+
background: var(--gradient-accent);
|
|
26
|
+
-webkit-background-clip: text;
|
|
27
|
+
background-clip: text;
|
|
28
|
+
color: transparent;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* --- Ambient background glow ---
|
|
32
|
+
Apply to a positioned container; renders a fixed-feel radial glow trio
|
|
33
|
+
behind its content. Marketing/docs surfaces only — do not use on
|
|
34
|
+
console/product chrome. */
|
|
35
|
+
.bg-ambient-glow {
|
|
36
|
+
position: relative;
|
|
37
|
+
}
|
|
38
|
+
.bg-ambient-glow::before {
|
|
39
|
+
content: '';
|
|
40
|
+
position: absolute;
|
|
41
|
+
inset: 0;
|
|
42
|
+
z-index: 0;
|
|
43
|
+
pointer-events: none;
|
|
44
|
+
background:
|
|
45
|
+
radial-gradient(900px 600px at 10% -10%, var(--glow-ambient-1), transparent 65%),
|
|
46
|
+
radial-gradient(700px 500px at 92% 8%, var(--glow-ambient-2), transparent 60%),
|
|
47
|
+
radial-gradient(1000px 800px at 50% 140%, var(--glow-ambient-3), transparent 70%);
|
|
48
|
+
}
|
|
49
|
+
.bg-ambient-glow > * {
|
|
50
|
+
position: relative;
|
|
51
|
+
z-index: 1;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* --- Scroll reveal (see p0-primitives/utils/reveal.ts) ---
|
|
55
|
+
Marketing/docs surfaces only — never wire into console/product chrome. */
|
|
56
|
+
@keyframes ds-reveal-fade-up {
|
|
57
|
+
from { opacity: 0; transform: translateY(20px); }
|
|
58
|
+
to { opacity: 1; transform: translateY(0); }
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ds-reveal {
|
|
62
|
+
opacity: 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.ds-reveal.ds-reveal-in {
|
|
66
|
+
animation: ds-reveal-fade-up 0.7s cubic-bezier(0.16, 0.8, 0.3, 1) both;
|
|
67
|
+
animation-delay: var(--ds-reveal-delay, 0ms);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@media (prefers-reduced-motion: reduce) {
|
|
71
|
+
.ds-reveal,
|
|
72
|
+
.ds-reveal.ds-reveal-in {
|
|
73
|
+
opacity: 1;
|
|
74
|
+
animation: none;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -28,14 +28,25 @@
|
|
|
28
28
|
--color-card-text-secondary: #a8a08c;
|
|
29
29
|
--color-card-text-tertiary: #6b6558;
|
|
30
30
|
|
|
31
|
-
/* --- Accent
|
|
31
|
+
/* --- Accent — SINGLE-SEED ENGINE ----------------------------------------
|
|
32
|
+
A consumer sets ONE value, --accent-primary (the in-app accent dropdown),
|
|
33
|
+
and the whole accent system recomputes via color-mix. No value below is
|
|
34
|
+
pinned to a hue, so any user color stays coherent across light/dark.
|
|
35
|
+
(Was: 7 hand-picked brass values + brass rgba ramps that ignored the
|
|
36
|
+
user's choice — the "brass leak".) --accent-* remain consumer override
|
|
37
|
+
hooks (token-audit ACCENT_HOOKS); components consume --color-accent* only.
|
|
38
|
+
|
|
39
|
+
Browser support: color-mix() requires Chrome 111+, Safari 16.2+, Firefox
|
|
40
|
+
113+. Fallbacks below use var(--accent-primary) directly (no hue shift),
|
|
41
|
+
which is acceptable on legacy browsers — the seed itself is still
|
|
42
|
+
controllable. */
|
|
32
43
|
--accent-primary: #b87333;
|
|
33
|
-
--accent-hover:
|
|
34
|
-
--accent-active:
|
|
35
|
-
--accent-glow:
|
|
36
|
-
--accent-muted:
|
|
37
|
-
--accent-subtle:
|
|
38
|
-
--accent-faint:
|
|
44
|
+
--accent-hover: var(--accent-primary);
|
|
45
|
+
--accent-active: var(--accent-primary);
|
|
46
|
+
--accent-glow: var(--accent-primary);
|
|
47
|
+
--accent-muted: var(--accent-primary);
|
|
48
|
+
--accent-subtle: var(--accent-primary);
|
|
49
|
+
--accent-faint: var(--accent-primary);
|
|
39
50
|
--color-accent: var(--accent-primary);
|
|
40
51
|
--color-accent-hover: var(--accent-hover);
|
|
41
52
|
--color-accent-active: var(--accent-active);
|
|
@@ -43,9 +54,43 @@
|
|
|
43
54
|
--color-accent-muted: var(--accent-muted);
|
|
44
55
|
--color-accent-subtle: var(--accent-subtle);
|
|
45
56
|
--color-accent-faint: var(--accent-faint);
|
|
46
|
-
--color-accent-secondary:
|
|
57
|
+
--color-accent-secondary: var(--accent-primary);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@supports (color-mix(in srgb, red, transparent)) {
|
|
61
|
+
:root {
|
|
62
|
+
--accent-hover: color-mix(in oklab, var(--accent-primary), #fff 16%);
|
|
63
|
+
--accent-active: color-mix(in oklab, var(--accent-primary), #000 22%);
|
|
64
|
+
--accent-glow: color-mix(in srgb, var(--accent-primary) 28%, transparent);
|
|
65
|
+
--accent-muted: color-mix(in srgb, var(--accent-primary) 16%, transparent);
|
|
66
|
+
--accent-subtle: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
67
|
+
--accent-faint: color-mix(in srgb, var(--accent-primary) 4%, transparent);
|
|
68
|
+
--color-accent-hover: var(--accent-hover);
|
|
69
|
+
--color-accent-active: var(--accent-active);
|
|
70
|
+
--color-accent-glow: var(--accent-glow);
|
|
71
|
+
--color-accent-muted: var(--accent-muted);
|
|
72
|
+
--color-accent-subtle: var(--accent-subtle);
|
|
73
|
+
--color-accent-faint: var(--accent-faint);
|
|
74
|
+
--color-accent-secondary: color-mix(in oklab, var(--accent-primary), #fff 26%);
|
|
75
|
+
--overlay-accent-06: color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
76
|
+
--overlay-accent-08: color-mix(in srgb, var(--accent-primary) 8%, transparent);
|
|
77
|
+
--overlay-accent-12: color-mix(in srgb, var(--accent-primary) 12%, transparent);
|
|
78
|
+
--overlay-accent-18: color-mix(in srgb, var(--accent-primary) 18%, transparent);
|
|
79
|
+
--overlay-accent-30: color-mix(in srgb, var(--accent-primary) 30%, transparent);
|
|
80
|
+
--overlay-accent-45: color-mix(in srgb, var(--accent-primary) 45%, transparent);
|
|
81
|
+
--overlay-accent-50: color-mix(in srgb, var(--accent-primary) 50%, transparent);
|
|
82
|
+
--overlay-accent-55: color-mix(in srgb, var(--accent-primary) 55%, transparent);
|
|
83
|
+
--grid-line: color-mix(in srgb, var(--accent-primary) 3%, transparent);
|
|
84
|
+
--grid-dot: color-mix(in srgb, var(--accent-primary) 6%, transparent);
|
|
85
|
+
--grid-major: color-mix(in srgb, var(--accent-primary) 10%, transparent);
|
|
86
|
+
--shadow-glow: 0 0 12px color-mix(in srgb, var(--accent-primary) 15%, transparent);
|
|
87
|
+
--shadow-glow-lg: 0 0 24px color-mix(in srgb, var(--accent-primary) 25%, transparent);
|
|
88
|
+
--shadow-accent-glow: 0 0 16px color-mix(in srgb, var(--accent-primary) 15%, transparent), 0 0 32px color-mix(in srgb, var(--accent-primary) 5%, transparent);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
47
91
|
|
|
48
|
-
|
|
92
|
+
:root {
|
|
93
|
+
/* --- Overlay levels — white opacity ramps for borders, backgrounds, hover states */
|
|
49
94
|
--overlay-white-02: rgba(255, 255, 255, 0.02);
|
|
50
95
|
--overlay-white-03: rgba(255, 255, 255, 0.03);
|
|
51
96
|
--overlay-white-04: rgba(255, 255, 255, 0.04);
|
|
@@ -57,15 +102,16 @@
|
|
|
57
102
|
--overlay-white-22: rgba(255, 255, 255, 0.22);
|
|
58
103
|
--overlay-white-25: rgba(255, 255, 255, 0.25);
|
|
59
104
|
|
|
60
|
-
/* Overlay levels — accent color opacity ramps
|
|
61
|
-
|
|
62
|
-
--overlay-accent-
|
|
63
|
-
--overlay-accent-
|
|
64
|
-
--overlay-accent-
|
|
65
|
-
--overlay-accent-
|
|
66
|
-
--overlay-accent-
|
|
67
|
-
--overlay-accent-
|
|
68
|
-
--overlay-accent-
|
|
105
|
+
/* Overlay levels — accent color opacity ramps
|
|
106
|
+
(fallback: transparent for browsers without color-mix) */
|
|
107
|
+
--overlay-accent-06: transparent;
|
|
108
|
+
--overlay-accent-08: transparent;
|
|
109
|
+
--overlay-accent-12: transparent;
|
|
110
|
+
--overlay-accent-18: transparent;
|
|
111
|
+
--overlay-accent-30: transparent;
|
|
112
|
+
--overlay-accent-45: transparent;
|
|
113
|
+
--overlay-accent-50: transparent;
|
|
114
|
+
--overlay-accent-55: transparent;
|
|
69
115
|
|
|
70
116
|
/* Overlay levels — status color opacity ramps */
|
|
71
117
|
--overlay-success-06: rgba(79, 168, 162, 0.06);
|
|
@@ -128,7 +174,7 @@
|
|
|
128
174
|
--border-subtle: rgba(255, 255, 255, 0.06);
|
|
129
175
|
--border-default: #3a3630;
|
|
130
176
|
--border-hover: #6b6558;
|
|
131
|
-
--border-focus:
|
|
177
|
+
--border-focus: var(--accent-primary);
|
|
132
178
|
--border-alert: #c14a4a;
|
|
133
179
|
--border-warning: #d4a04c;
|
|
134
180
|
--divider-color: #181c20;
|
|
@@ -138,10 +184,10 @@
|
|
|
138
184
|
--color-border-subtle: var(--border-subtle);
|
|
139
185
|
--color-border-default: var(--border-default);
|
|
140
186
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
187
|
+
/* --- Grid (canvas patterns) --- */
|
|
188
|
+
--grid-line: transparent;
|
|
189
|
+
--grid-dot: transparent;
|
|
190
|
+
--grid-major: transparent;
|
|
145
191
|
|
|
146
192
|
/* --- Typography --- */
|
|
147
193
|
--font-sans: 'Outfit', system-ui, -apple-system, sans-serif;
|
|
@@ -158,6 +204,17 @@
|
|
|
158
204
|
--text-3xl: 1.875rem;
|
|
159
205
|
--text-4xl: 2.25rem;
|
|
160
206
|
|
|
207
|
+
/* --- Font weight (fixes phantom --font-weight-* referenced by g0 Text.svelte) --- */
|
|
208
|
+
--font-weight-normal: 400;
|
|
209
|
+
--font-weight-medium: 500;
|
|
210
|
+
--font-weight-semibold: 600;
|
|
211
|
+
--font-weight-bold: 700;
|
|
212
|
+
|
|
213
|
+
/* --- Line height (fixes phantom --line-height-* referenced by g0 Text.svelte) --- */
|
|
214
|
+
--line-height-tight: 1.2;
|
|
215
|
+
--line-height-normal: 1.5;
|
|
216
|
+
--line-height-relaxed: 1.7;
|
|
217
|
+
|
|
161
218
|
/* --- Spacing --- */
|
|
162
219
|
--space-05: 0.125rem;
|
|
163
220
|
--space-1: 0.25rem;
|
|
@@ -194,12 +251,12 @@
|
|
|
194
251
|
--shadow-md: none;
|
|
195
252
|
--shadow-lg: none;
|
|
196
253
|
--shadow-xl: none;
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
254
|
+
--shadow-glow: 0 0 12px rgba(0, 0, 0, 0.4);
|
|
255
|
+
--shadow-glow-lg: 0 0 24px rgba(0, 0, 0, 0.4);
|
|
256
|
+
--shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.4);
|
|
257
|
+
--shadow-card: none;
|
|
258
|
+
--shadow-card-hover: none;
|
|
259
|
+
--shadow-accent-glow: 0 0 16px rgba(0, 0, 0, 0.4), 0 0 32px rgba(0, 0, 0, 0.4);
|
|
203
260
|
|
|
204
261
|
/* --- Transitions --- */
|
|
205
262
|
--transition-fast: 120ms ease;
|
|
@@ -255,4 +312,42 @@
|
|
|
255
312
|
--z-tooltip: 1070;
|
|
256
313
|
--z-toast: 1080;
|
|
257
314
|
--z-glass-box: 9000;
|
|
315
|
+
|
|
316
|
+
/* --- Density (system default = COMPACT) ----------------------------------
|
|
317
|
+
A first-class density tier. Surfaces opt into a calibration with
|
|
318
|
+
[data-density]: comfortable (reading/writing — editor, prose, forms),
|
|
319
|
+
compact (default, general UI), cockpit (monitoring/data-dense — dashboards,
|
|
320
|
+
logs, registries, manifold panels). Same components, three calibrations.
|
|
321
|
+
Components consume these --ui-* tokens for sizing/type instead of raw px.
|
|
322
|
+
Cockpit sits at the legibility floors: data 10px, label 9px, row/target
|
|
323
|
+
20px, pad 3px, leading 1.22 (note: 20px trips WCAG 2.5.8's 24px pref, so
|
|
324
|
+
cockpit is opt-in, never the global default). */
|
|
325
|
+
--ui-control-h: 24px; /* button / input / select height */
|
|
326
|
+
--ui-row-h: 24px; /* table / list row height (pointer target) */
|
|
327
|
+
--ui-pad-x: 8px;
|
|
328
|
+
--ui-pad-y: 5px;
|
|
329
|
+
--ui-gap: 1px; /* hairline grid gap — the ruled spine */
|
|
330
|
+
--ui-font: 13px; /* body / control text */
|
|
331
|
+
--ui-font-sm: 12px;
|
|
332
|
+
--ui-data: 11px; /* monospace data / table cells */
|
|
333
|
+
--ui-label: 10px; /* uppercase micro-labels */
|
|
334
|
+
--ui-leading: 1.35;
|
|
335
|
+
--ui-icon: 14px;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/* Density calibrations — set [data-density] on any container or surface. */
|
|
339
|
+
[data-density="comfortable"] {
|
|
340
|
+
--ui-control-h: 30px; --ui-row-h: 30px; --ui-pad-x: 12px; --ui-pad-y: 8px;
|
|
341
|
+
--ui-gap: 1px; --ui-font: 14px; --ui-font-sm: 13px; --ui-data: 13px;
|
|
342
|
+
--ui-label: 11px; --ui-leading: 1.45; --ui-icon: 16px;
|
|
343
|
+
}
|
|
344
|
+
[data-density="compact"] {
|
|
345
|
+
--ui-control-h: 24px; --ui-row-h: 24px; --ui-pad-x: 8px; --ui-pad-y: 5px;
|
|
346
|
+
--ui-gap: 1px; --ui-font: 13px; --ui-font-sm: 12px; --ui-data: 11px;
|
|
347
|
+
--ui-label: 10px; --ui-leading: 1.35; --ui-icon: 14px;
|
|
348
|
+
}
|
|
349
|
+
[data-density="cockpit"] {
|
|
350
|
+
--ui-control-h: 20px; --ui-row-h: 20px; --ui-pad-x: 6px; --ui-pad-y: 3px;
|
|
351
|
+
--ui-gap: 1px; --ui-font: 12px; --ui-font-sm: 11px; --ui-data: 10px;
|
|
352
|
+
--ui-label: 9px; --ui-leading: 1.22; --ui-icon: 13px;
|
|
258
353
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/p0-primitives/utils/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAMlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CASlC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/p0-primitives/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAMlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAChE,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CASlC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Action } from 'svelte/action';
|
|
2
|
+
/**
|
|
3
|
+
* Scroll-reveal action for marketing/docs surfaces — never wire into
|
|
4
|
+
* console/product chrome (see ambient.css usage note). Adds `ds-reveal`
|
|
5
|
+
* on mount and `ds-reveal-in` once the node crosses `threshold`; pass
|
|
6
|
+
* `delayMs` to stagger a group of siblings. Respects
|
|
7
|
+
* prefers-reduced-motion by revealing immediately with no observer.
|
|
8
|
+
*/
|
|
9
|
+
export interface RevealOptions {
|
|
10
|
+
delayMs?: number;
|
|
11
|
+
threshold?: number;
|
|
12
|
+
once?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const reveal: Action<HTMLElement, RevealOptions | undefined>;
|
|
15
|
+
//# sourceMappingURL=reveal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reveal.d.ts","sourceRoot":"","sources":["../../../src/p0-primitives/utils/reveal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,aAAa,GAAG,SAAS,CAmCjE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const reveal = (node, options = {}) => {
|
|
2
|
+
const { delayMs = 0, threshold = 0.12, once = true } = options;
|
|
3
|
+
if (delayMs) {
|
|
4
|
+
node.style.setProperty('--ds-reveal-delay', `${delayMs}ms`);
|
|
5
|
+
}
|
|
6
|
+
if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
|
7
|
+
node.classList.add('ds-reveal-in');
|
|
8
|
+
return {};
|
|
9
|
+
}
|
|
10
|
+
node.classList.add('ds-reveal');
|
|
11
|
+
const observer = new IntersectionObserver((entries) => {
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
if (entry.isIntersecting) {
|
|
14
|
+
node.classList.add('ds-reveal-in');
|
|
15
|
+
if (once)
|
|
16
|
+
observer.unobserve(entry.target);
|
|
17
|
+
}
|
|
18
|
+
else if (!once) {
|
|
19
|
+
node.classList.remove('ds-reveal-in');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}, { threshold });
|
|
23
|
+
observer.observe(node);
|
|
24
|
+
return {
|
|
25
|
+
destroy() {
|
|
26
|
+
observer.disconnect();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|