@weasel-js/labkit 0.8.0 → 1.0.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/README.md +11 -3
- package/dist/_dts/{DrawCommand-DACv9lhe.d.ts → DrawCommand-CitWPxMY.d.ts} +80 -7
- package/dist/_dts/{useExperimentState-eSvpwV_P.d.ts → useExperimentState-CJn2hHzd.d.ts} +6 -4
- package/dist/{chunk-SSMHPMDV.js → chunk-53XSBIUK.js} +12 -11
- package/dist/chunk-53XSBIUK.js.map +1 -0
- package/dist/{chunk-OHGEOTCV.js → chunk-EXBV7A6X.js} +3 -3
- package/dist/{chunk-OHGEOTCV.js.map → chunk-EXBV7A6X.js.map} +1 -1
- package/dist/{chunk-6V7ROR7G.js → chunk-ISEK5LXT.js} +1931 -904
- package/dist/chunk-ISEK5LXT.js.map +1 -0
- package/dist/chunk-NRD3TDNQ.js +5946 -0
- package/dist/chunk-NRD3TDNQ.js.map +1 -0
- package/dist/index.d.ts +37 -13
- package/dist/index.js +776 -27
- package/dist/index.js.map +1 -1
- package/dist/passthrough/weasel-canvas.d.ts +29 -6
- package/dist/passthrough/weasel-canvas.js +1 -1
- package/dist/passthrough/weasel-ui.d.ts +169 -79
- package/dist/passthrough/weasel-ui.js +2 -2
- package/dist/state/index.d.ts +2 -2
- package/dist/state/index.js +2 -2
- package/dist/styles.css +228 -287
- package/dist/ui/layers/index.js +3 -3
- package/package.json +4 -6
- package/src/canvas/CanvasStack.less +1 -1
- package/src/controls/ControlPanel.less +12 -12
- package/src/dragdrop/DragGhost.less +2 -2
- package/src/dragdrop/Palette.less +6 -6
- package/src/index.ts +2 -0
- package/src/lab/Lab.test.tsx +20 -15
- package/src/lab/Lab.tsx +33 -32
- package/src/lab/LabContext.ts +3 -3
- package/src/lab/LabShell.less +14 -14
- package/src/lab/LabShell.test.tsx +7 -20
- package/src/lab/LabShell.tsx +22 -13
- package/src/lab/WorkspaceGrid.less +1 -1
- package/src/lab/WorkspaceGrid.stories.tsx +4 -4
- package/src/lab/index.ts +1 -1
- package/src/lab/useSystemMode.ts +30 -0
- package/src/layers/LayerList.less +9 -9
- package/src/passthrough/weasel-ui.ts +4 -0
- package/src/primitives/FpsMeter.less +5 -5
- package/src/primitives/ScaleIndicator.less +7 -7
- package/src/primitives/Sidebar.less +12 -12
- package/src/primitives/StatusBar.less +10 -10
- package/src/primitives/Toolbar.less +16 -16
- package/src/state/store.test.ts +17 -9
- package/src/state/store.ts +13 -10
- package/src/state/types.ts +5 -2
- package/src/theme/Interstellar.stories.less +20 -20
- package/src/theme/Interstellar.stories.tsx +44 -59
- package/src/theme/base.less +26 -26
- package/src/theme/interstellar.test.ts +30 -0
- package/src/theme/interstellar.tokens.json +57 -0
- package/src/theme/interstellar.ts +9 -0
- package/src/ui/layers/LayerStack.less +21 -21
- package/src/ui/properties/CurveField.less +5 -5
- package/src/ui/properties/EffectCard.tsx +2 -2
- package/src/ui/properties/PropertyGroup.less +6 -6
- package/src/ui/properties/PropertyPanel.less +70 -70
- package/src/ui/properties/PropertyPanel.stories.tsx +0 -1
- package/src/ui/properties/SpeechBalloonPanels.stories.tsx +1 -1
- package/src/ui/properties/storyLayouts.tsx +1 -1
- package/src/workspace/Workspace.less +14 -14
- package/src/workspace/Workspace.stories.tsx +2 -2
- package/src/workspace/Workspace.test.tsx +2 -2
- package/dist/chunk-6V7ROR7G.js.map +0 -1
- package/dist/chunk-FBZCQXI2.js +0 -6037
- package/dist/chunk-FBZCQXI2.js.map +0 -1
- package/dist/chunk-SSMHPMDV.js.map +0 -1
- package/dist/theme-interstellar.css +0 -25
- package/dist/theme-light.css +0 -13
- package/src/theme/interstellar.less +0 -34
- package/src/theme/light.less +0 -14
- package/src/theme/tokens.less +0 -85
|
@@ -2,30 +2,30 @@
|
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: column;
|
|
4
4
|
gap: 2px;
|
|
5
|
-
padding: var(--
|
|
5
|
+
padding: var(--wzl-space-sm);
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
.lk-layer-list__empty {
|
|
9
|
-
color: var(--
|
|
10
|
-
font-size: var(--
|
|
9
|
+
color: var(--wzl-fg-muted);
|
|
10
|
+
font-size: var(--wzl-font-size-sm);
|
|
11
11
|
font-style: italic;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
.lk-layer-list__row {
|
|
15
15
|
display: flex;
|
|
16
16
|
align-items: center;
|
|
17
|
-
gap: var(--
|
|
17
|
+
gap: var(--wzl-space-sm);
|
|
18
18
|
padding: 4px 6px;
|
|
19
19
|
border-radius: 3px;
|
|
20
20
|
user-select: none;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
.lk-layer-list__row:hover {
|
|
24
|
-
background: var(--
|
|
24
|
+
background: var(--wzl-surface-hover);
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
.lk-layer-list__row--dragging {
|
|
28
|
-
background: var(--
|
|
28
|
+
background: var(--wzl-surface-pressed);
|
|
29
29
|
opacity: 0.7;
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
|
|
36
36
|
.lk-layer-list__handle {
|
|
37
37
|
cursor: grab;
|
|
38
|
-
color: var(--
|
|
38
|
+
color: var(--wzl-fg-muted);
|
|
39
39
|
font-family: monospace;
|
|
40
40
|
}
|
|
41
41
|
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
.lk-layer-list__lock {
|
|
47
|
-
color: var(--
|
|
47
|
+
color: var(--wzl-fg-muted);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
.lk-layer-list__label {
|
|
51
51
|
flex: 1;
|
|
52
|
-
font-size: var(--
|
|
52
|
+
font-size: var(--wzl-font-size-sm);
|
|
53
53
|
}
|
|
@@ -109,6 +109,8 @@ export {
|
|
|
109
109
|
type RangeSliderProps,
|
|
110
110
|
type ReorderDragHandlers,
|
|
111
111
|
type ReorderDragState,
|
|
112
|
+
type RovingItem,
|
|
113
|
+
type RovingTabIndex,
|
|
112
114
|
Select,
|
|
113
115
|
SelectItem,
|
|
114
116
|
type SelectItemProps,
|
|
@@ -146,5 +148,7 @@ export {
|
|
|
146
148
|
type ToolPaletteProps,
|
|
147
149
|
type TrackCtx,
|
|
148
150
|
type UseReorderDragListOptions,
|
|
151
|
+
type UseRovingTabIndexOptions,
|
|
149
152
|
useReorderDragList,
|
|
153
|
+
useRovingTabIndex,
|
|
150
154
|
} from '@weasel-js/ui';
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
.lk-fps-meter {
|
|
2
2
|
display: inline-flex;
|
|
3
3
|
align-items: center;
|
|
4
|
-
gap: var(--
|
|
5
|
-
font-family: var(--
|
|
6
|
-
font-size: var(--
|
|
7
|
-
color: var(--
|
|
4
|
+
gap: var(--wzl-space-xs);
|
|
5
|
+
font-family: var(--wzl-font-mono);
|
|
6
|
+
font-size: var(--wzl-font-size-sm);
|
|
7
|
+
color: var(--wzl-fg-muted);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
.lk-fps-meter-value {
|
|
11
|
-
color: var(--
|
|
11
|
+
color: var(--wzl-fg);
|
|
12
12
|
min-width: 2.5ch;
|
|
13
13
|
text-align: right;
|
|
14
14
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
.lk-scale-indicator {
|
|
2
2
|
display: inline-flex;
|
|
3
3
|
align-items: center;
|
|
4
|
-
gap: var(--
|
|
5
|
-
font-family: var(--
|
|
6
|
-
font-size: var(--
|
|
7
|
-
color: var(--
|
|
4
|
+
gap: var(--wzl-space-xs);
|
|
5
|
+
font-family: var(--wzl-font-mono);
|
|
6
|
+
font-size: var(--wzl-font-size-sm);
|
|
7
|
+
color: var(--wzl-fg-muted);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
.lk-scale-indicator-bar {
|
|
11
11
|
height: 6px;
|
|
12
|
-
border: 1px solid var(--
|
|
12
|
+
border: 1px solid var(--wzl-fg-muted);
|
|
13
13
|
border-top: none;
|
|
14
14
|
background: linear-gradient(
|
|
15
15
|
to right,
|
|
16
|
-
var(--
|
|
16
|
+
var(--wzl-fg-muted) 1px,
|
|
17
17
|
transparent 1px,
|
|
18
18
|
transparent calc(100% - 1px),
|
|
19
|
-
var(--
|
|
19
|
+
var(--wzl-fg-muted) calc(100% - 1px)
|
|
20
20
|
);
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: column;
|
|
4
4
|
width: 280px;
|
|
5
|
-
background: var(--
|
|
6
|
-
border-left: 1px solid var(--
|
|
5
|
+
background: var(--wzl-surface-raised);
|
|
6
|
+
border-left: 1px solid var(--wzl-border);
|
|
7
7
|
transition: width 150ms ease;
|
|
8
8
|
|
|
9
9
|
&--collapsed {
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
.lk-sidebar-header {
|
|
15
15
|
display: flex;
|
|
16
16
|
align-items: center;
|
|
17
|
-
padding: var(--
|
|
18
|
-
border-bottom: 1px solid var(--
|
|
19
|
-
min-height: var(--
|
|
17
|
+
padding: var(--wzl-space-xs) var(--wzl-space-sm);
|
|
18
|
+
border-bottom: 1px solid var(--wzl-line-subtle);
|
|
19
|
+
min-height: var(--wzl-control-h);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
.lk-sidebar-title {
|
|
23
23
|
flex: 1;
|
|
24
24
|
font-weight: 600;
|
|
25
|
-
color: var(--
|
|
26
|
-
font-size: var(--
|
|
25
|
+
color: var(--wzl-fg);
|
|
26
|
+
font-size: var(--wzl-font-size);
|
|
27
27
|
|
|
28
28
|
.lk-sidebar--collapsed & {
|
|
29
29
|
display: none;
|
|
@@ -36,20 +36,20 @@
|
|
|
36
36
|
padding: 0;
|
|
37
37
|
background: transparent;
|
|
38
38
|
border: 1px solid transparent;
|
|
39
|
-
border-radius: var(--
|
|
40
|
-
color: var(--
|
|
39
|
+
border-radius: var(--wzl-radius-sm);
|
|
40
|
+
color: var(--wzl-fg-muted);
|
|
41
41
|
cursor: pointer;
|
|
42
42
|
|
|
43
43
|
&:hover {
|
|
44
|
-
background: var(--
|
|
45
|
-
color: var(--
|
|
44
|
+
background: var(--wzl-surface);
|
|
45
|
+
color: var(--wzl-fg);
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
.lk-sidebar-body {
|
|
50
50
|
flex: 1;
|
|
51
51
|
overflow: auto;
|
|
52
|
-
padding: var(--
|
|
52
|
+
padding: var(--wzl-space-sm);
|
|
53
53
|
|
|
54
54
|
.lk-sidebar--collapsed & {
|
|
55
55
|
display: none;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
.lk-status-bar {
|
|
2
2
|
display: flex;
|
|
3
3
|
align-items: center;
|
|
4
|
-
gap: var(--
|
|
5
|
-
padding: var(--
|
|
6
|
-
background: var(--
|
|
7
|
-
border-top: 1px solid var(--
|
|
8
|
-
font-size: var(--
|
|
9
|
-
color: var(--
|
|
10
|
-
font-family: var(--
|
|
4
|
+
gap: var(--wzl-space-md);
|
|
5
|
+
padding: var(--wzl-space-xs) var(--wzl-space-sm);
|
|
6
|
+
background: var(--wzl-surface-raised);
|
|
7
|
+
border-top: 1px solid var(--wzl-border);
|
|
8
|
+
font-size: var(--wzl-font-size-sm);
|
|
9
|
+
color: var(--wzl-fg-muted);
|
|
10
|
+
font-family: var(--wzl-font-mono);
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
.lk-status-bar-section {
|
|
14
14
|
display: inline-flex;
|
|
15
15
|
align-items: center;
|
|
16
|
-
gap: var(--
|
|
17
|
-
padding: 0 var(--
|
|
18
|
-
border-right: 1px solid var(--
|
|
16
|
+
gap: var(--wzl-space-xs);
|
|
17
|
+
padding: 0 var(--wzl-space-xs);
|
|
18
|
+
border-right: 1px solid var(--wzl-line-subtle);
|
|
19
19
|
|
|
20
20
|
&:last-child { border-right: none; }
|
|
21
21
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
.lk-toolbar {
|
|
2
2
|
display: flex;
|
|
3
3
|
align-items: center;
|
|
4
|
-
gap: var(--
|
|
5
|
-
padding: var(--
|
|
6
|
-
background: var(--
|
|
7
|
-
border-bottom: 1px solid var(--
|
|
8
|
-
min-height: calc(var(--
|
|
4
|
+
gap: var(--wzl-space-sm);
|
|
5
|
+
padding: var(--wzl-space-xs) var(--wzl-space-sm);
|
|
6
|
+
background: var(--wzl-surface-raised);
|
|
7
|
+
border-bottom: 1px solid var(--wzl-border);
|
|
8
|
+
min-height: calc(var(--wzl-control-h) + 2 * var(--wzl-space-xs));
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
.lk-toolbar-title {
|
|
12
12
|
font-weight: 600;
|
|
13
|
-
color: var(--
|
|
14
|
-
margin-right: var(--
|
|
13
|
+
color: var(--wzl-fg);
|
|
14
|
+
margin-right: var(--wzl-space-sm);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
.lk-toolbar-spacer {
|
|
@@ -19,25 +19,25 @@
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
.lk-toolbar-button {
|
|
22
|
-
height: var(--
|
|
23
|
-
padding: 0 var(--
|
|
24
|
-
font-size: var(--
|
|
25
|
-
color: var(--
|
|
22
|
+
height: var(--wzl-control-h);
|
|
23
|
+
padding: 0 var(--wzl-space-sm);
|
|
24
|
+
font-size: var(--wzl-font-size);
|
|
25
|
+
color: var(--wzl-fg);
|
|
26
26
|
background: transparent;
|
|
27
27
|
border: 1px solid transparent;
|
|
28
|
-
border-radius: var(--
|
|
28
|
+
border-radius: var(--wzl-radius-md);
|
|
29
29
|
cursor: pointer;
|
|
30
30
|
|
|
31
31
|
&:hover:not(:disabled) {
|
|
32
|
-
background: var(--
|
|
33
|
-
border-color: var(--
|
|
32
|
+
background: var(--wzl-surface);
|
|
33
|
+
border-color: var(--wzl-border);
|
|
34
34
|
}
|
|
35
35
|
&:focus-visible {
|
|
36
|
-
outline: 2px solid var(--
|
|
36
|
+
outline: 2px solid var(--wzl-focus-ring);
|
|
37
37
|
outline-offset: 1px;
|
|
38
38
|
}
|
|
39
39
|
&:disabled {
|
|
40
|
-
color: var(--
|
|
40
|
+
color: var(--wzl-fg-subtle);
|
|
41
41
|
cursor: not-allowed;
|
|
42
42
|
}
|
|
43
43
|
}
|
package/src/state/store.test.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from 'vitest';
|
|
2
2
|
import { createMemoryAdapter } from './adapters';
|
|
3
|
+
import { labStorageKey } from './helpers';
|
|
3
4
|
import { createLabStore } from './store';
|
|
4
5
|
|
|
5
6
|
function makeStore(overrides?: Partial<Parameters<typeof createLabStore>[0]>) {
|
|
@@ -17,14 +18,14 @@ describe('createLabStore — initial state', () => {
|
|
|
17
18
|
expect(s.getState().savedSnapshots).toEqual([]);
|
|
18
19
|
});
|
|
19
20
|
|
|
20
|
-
it('uses
|
|
21
|
-
const s = makeStore({
|
|
22
|
-
expect(s.getState().
|
|
21
|
+
it('uses initialMode when provided', () => {
|
|
22
|
+
const s = makeStore({ initialMode: 'light' });
|
|
23
|
+
expect(s.getState().mode).toBe('light');
|
|
23
24
|
});
|
|
24
25
|
|
|
25
|
-
it('defaults
|
|
26
|
+
it('defaults mode to auto', () => {
|
|
26
27
|
const s = makeStore();
|
|
27
|
-
expect(s.getState().
|
|
28
|
+
expect(s.getState().mode).toBe('auto');
|
|
28
29
|
});
|
|
29
30
|
});
|
|
30
31
|
|
|
@@ -104,11 +105,18 @@ describe('updateWorkspaceConfig', () => {
|
|
|
104
105
|
});
|
|
105
106
|
});
|
|
106
107
|
|
|
107
|
-
describe('
|
|
108
|
-
it('updates
|
|
108
|
+
describe('setMode', () => {
|
|
109
|
+
it('updates mode', () => {
|
|
109
110
|
const s = makeStore();
|
|
110
|
-
s.getState().
|
|
111
|
-
expect(s.getState().
|
|
111
|
+
s.getState().setMode('dark');
|
|
112
|
+
expect(s.getState().mode).toBe('dark');
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('hydrates a stored interstellar preference as dark', () => {
|
|
116
|
+
const storage = createMemoryAdapter();
|
|
117
|
+
storage.write(labStorageKey('test', 'theme'), 'interstellar');
|
|
118
|
+
const s = createLabStore({ storageKey: 'test', storage });
|
|
119
|
+
expect(s.getState().mode).toBe('dark');
|
|
112
120
|
});
|
|
113
121
|
});
|
|
114
122
|
|
package/src/state/store.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import type {
|
|
9
9
|
CreateLabStoreOptions,
|
|
10
10
|
InstrumentSerializers,
|
|
11
|
+
LabMode,
|
|
11
12
|
LabStoreState,
|
|
12
13
|
SavedSnapshot,
|
|
13
14
|
WorkspaceRecord,
|
|
@@ -30,7 +31,7 @@ export interface LabStoreActions {
|
|
|
30
31
|
loadSnapshot: (snapshotId: string, workspaceId: string) => void;
|
|
31
32
|
deleteSnapshot: (snapshotId: string) => void;
|
|
32
33
|
listSnapshots: (workspaceId?: string) => SavedSnapshot[];
|
|
33
|
-
|
|
34
|
+
setMode: (mode: LabMode) => void;
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
export type LabStore = StoreApi<LabStoreState & LabStoreActions> & {
|
|
@@ -58,18 +59,20 @@ export function createLabStore(options: CreateLabStoreOptions): LabStore {
|
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
const modeRaw = options.storage.read(labStorageKey(options.storageKey, 'theme'));
|
|
63
|
+
// `interstellar` was the dark mode's name back when it was a theme.
|
|
64
|
+
const stored = modeRaw === 'interstellar' ? 'dark' : modeRaw;
|
|
65
|
+
let hydratedMode: LabMode;
|
|
66
|
+
if (stored === 'light' || stored === 'dark' || stored === 'auto') {
|
|
67
|
+
hydratedMode = stored;
|
|
65
68
|
} else {
|
|
66
|
-
|
|
69
|
+
hydratedMode = options.initialMode ?? 'auto';
|
|
67
70
|
}
|
|
68
71
|
|
|
69
72
|
const store = createStore<LabStoreState & LabStoreActions>()((set, get) => ({
|
|
70
73
|
workspaces: hydratedWorkspaces,
|
|
71
74
|
savedSnapshots: hydratedSnapshots,
|
|
72
|
-
|
|
75
|
+
mode: hydratedMode,
|
|
73
76
|
|
|
74
77
|
addWorkspace: (record) => {
|
|
75
78
|
set((s) => ({
|
|
@@ -194,8 +197,8 @@ export function createLabStore(options: CreateLabStoreOptions): LabStore {
|
|
|
194
197
|
return [...filtered].sort((a, b) => b.savedAt - a.savedAt);
|
|
195
198
|
},
|
|
196
199
|
|
|
197
|
-
|
|
198
|
-
set({
|
|
200
|
+
setMode: (mode) => {
|
|
201
|
+
set({ mode });
|
|
199
202
|
scheduleFlush();
|
|
200
203
|
},
|
|
201
204
|
}));
|
|
@@ -212,7 +215,7 @@ export function createLabStore(options: CreateLabStoreOptions): LabStore {
|
|
|
212
215
|
labStorageKey(options.storageKey, 'saves'),
|
|
213
216
|
JSON.stringify(s.savedSnapshots),
|
|
214
217
|
);
|
|
215
|
-
options.storage.write(labStorageKey(options.storageKey, 'theme'), s.
|
|
218
|
+
options.storage.write(labStorageKey(options.storageKey, 'theme'), s.mode);
|
|
216
219
|
flushTimer = null;
|
|
217
220
|
}, 300);
|
|
218
221
|
}
|
package/src/state/types.ts
CHANGED
|
@@ -22,10 +22,13 @@ export interface SavedSnapshot {
|
|
|
22
22
|
savedAt: number;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/** `auto` follows the OS; the other two are an explicit choice. */
|
|
26
|
+
export type LabMode = 'auto' | 'light' | 'dark';
|
|
27
|
+
|
|
25
28
|
export interface LabStoreState {
|
|
26
29
|
workspaces: WorkspaceRecord[];
|
|
27
30
|
savedSnapshots: SavedSnapshot[];
|
|
28
|
-
|
|
31
|
+
mode: LabMode;
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
export interface StorageAdapter {
|
|
@@ -44,7 +47,7 @@ export interface ExperimentStateHandle<TS, TC> {
|
|
|
44
47
|
export interface CreateLabStoreOptions {
|
|
45
48
|
storageKey: string;
|
|
46
49
|
storage: StorageAdapter;
|
|
47
|
-
|
|
50
|
+
initialMode?: LabMode;
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
export type InstrumentSerializers = Record<
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// into the library — imported by Interstellar.stories.tsx for vite/storybook.
|
|
3
3
|
|
|
4
4
|
.lk-theme-doc {
|
|
5
|
-
font-family: var(--
|
|
6
|
-
color: var(--
|
|
5
|
+
font-family: var(--wzl-font-ui);
|
|
6
|
+
color: var(--wzl-fg);
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
.lk-theme-doc__grid {
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
.lk-theme-doc__heading {
|
|
16
|
-
font: 300 0.72rem/1 var(--
|
|
17
|
-
color: var(--
|
|
16
|
+
font: 300 0.72rem/1 var(--wzl-font-display);
|
|
17
|
+
color: var(--wzl-fg-muted);
|
|
18
18
|
text-transform: uppercase;
|
|
19
19
|
letter-spacing: 0.08em;
|
|
20
20
|
margin: 0 0 12px;
|
|
@@ -30,19 +30,19 @@
|
|
|
30
30
|
display: flex;
|
|
31
31
|
align-items: center;
|
|
32
32
|
gap: 12px;
|
|
33
|
-
background: var(--
|
|
34
|
-
border: 1px solid var(--
|
|
35
|
-
border-radius: var(--
|
|
33
|
+
background: var(--wzl-surface-raised);
|
|
34
|
+
border: 1px solid var(--wzl-border);
|
|
35
|
+
border-radius: var(--wzl-radius-lg);
|
|
36
36
|
padding: 10px 12px;
|
|
37
|
-
backdrop-filter: blur(var(--
|
|
38
|
-
-webkit-backdrop-filter: blur(var(--
|
|
37
|
+
backdrop-filter: blur(var(--wzl-glass-blur));
|
|
38
|
+
-webkit-backdrop-filter: blur(var(--wzl-glass-blur));
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.lk-theme-doc__swatch-fill {
|
|
42
42
|
width: 48px;
|
|
43
43
|
height: 48px;
|
|
44
|
-
border-radius: var(--
|
|
45
|
-
border: 1px solid var(--
|
|
44
|
+
border-radius: var(--wzl-radius-sm);
|
|
45
|
+
border: 1px solid var(--wzl-border);
|
|
46
46
|
flex-shrink: 0;
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -55,31 +55,31 @@
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
.lk-theme-doc__swatch-name {
|
|
58
|
-
font: 300 0.95rem/1 var(--
|
|
59
|
-
color: var(--
|
|
58
|
+
font: 300 0.95rem/1 var(--wzl-font-display);
|
|
59
|
+
color: var(--wzl-fg);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
.lk-theme-doc__swatch-var,
|
|
63
63
|
.lk-theme-doc__swatch-value {
|
|
64
|
-
font: 400 0.7rem/1.2 var(--
|
|
65
|
-
color: var(--
|
|
64
|
+
font: 400 0.7rem/1.2 var(--wzl-font-mono);
|
|
65
|
+
color: var(--wzl-fg-muted);
|
|
66
66
|
word-break: break-all;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
.lk-theme-doc__swatch-value {
|
|
70
|
-
color: var(--
|
|
70
|
+
color: var(--wzl-fg);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
.lk-theme-doc__nebula {
|
|
74
74
|
width: 100%;
|
|
75
75
|
height: 200px;
|
|
76
|
-
border-radius: var(--
|
|
77
|
-
border: 1px solid var(--
|
|
76
|
+
border-radius: var(--wzl-radius-lg);
|
|
77
|
+
border: 1px solid var(--wzl-border);
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
.lk-theme-doc__note {
|
|
81
|
-
font: 400 0.85rem/1.5 var(--
|
|
82
|
-
color: var(--
|
|
81
|
+
font: 400 0.85rem/1.5 var(--wzl-font-ui);
|
|
82
|
+
color: var(--wzl-fg-muted);
|
|
83
83
|
margin-top: 12px;
|
|
84
84
|
max-width: 640px;
|
|
85
85
|
}
|