@weasel-js/labkit 1.5.1 → 1.6.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/README.md +3 -7
- package/dist/_dts/{CanvasStackContext-CJNMS6mz.d.ts → CanvasStackContext-DQgcH1ny.d.ts} +1 -1
- package/dist/_dts/LayerList.d-2c9yup5Y.d.ts +83 -0
- package/dist/_dts/{PrefsForm.d-DPy9I8It.d.ts → PrefsRow.d-DFpPIeIC.d.ts} +16 -1
- package/dist/_dts/{Select.d-Gwr8fLpK.d.ts → Select.d-BchGMC2Y.d.ts} +129 -12
- package/dist/_dts/{frac-B4okC2lX.d.ts → frac-DTRq7Xpb.d.ts} +31 -13
- package/dist/_dts/inDialog-D5ZKGjiD.d.ts +23 -0
- package/dist/_dts/{index-CSJoj4LC.d.ts → index-B0--8PEM.d.ts} +5 -4
- package/dist/_dts/index-DINmCuLA.d.ts +453 -0
- package/dist/_dts/number.d-OeQYQoUO.d.ts +28 -0
- package/dist/_dts/{types-DzoNY1pO.d.ts → types-B7y8hX1D.d.ts} +6 -6
- package/dist/_dts/{usePanZoom-Pzf9f2jh.d.ts → usePanZoom-Bq73pwFe.d.ts} +4 -47
- package/dist/_dts/{useTrialState-uLlmaccn.d.ts → useTrialState-CP4jfuKl.d.ts} +1 -1
- package/dist/canvas/index.d.ts +6 -5
- package/dist/canvas/index.js +1 -1
- package/dist/chrome/index.d.ts +5 -4
- package/dist/chrome/index.js +7 -7
- package/dist/chunk-2RVCB2PT.js +3 -0
- package/dist/chunk-2RVCB2PT.js.map +1 -0
- package/dist/{chunk-UN4U4P63.js → chunk-3FI7Y4R4.js} +9 -9
- package/dist/chunk-3FI7Y4R4.js.map +1 -0
- package/dist/{chunk-7PFH3CNM.js → chunk-AWH3SRPW.js} +31 -5
- package/dist/chunk-AWH3SRPW.js.map +1 -0
- package/dist/{chunk-ZDHY47EV.js → chunk-BVL7Y574.js} +25 -9
- package/dist/chunk-BVL7Y574.js.map +1 -0
- package/dist/{chunk-IHUVQ3TX.js → chunk-H5VIV7MQ.js} +31 -27
- package/dist/chunk-H5VIV7MQ.js.map +1 -0
- package/dist/chunk-HFRE4QQV.js +400 -0
- package/dist/chunk-HFRE4QQV.js.map +1 -0
- package/dist/{chunk-IXTQI7JX.js → chunk-MOLIUNVH.js} +4 -4
- package/dist/{chunk-IXTQI7JX.js.map → chunk-MOLIUNVH.js.map} +1 -1
- package/dist/{chunk-CEIUBPPW.js → chunk-TT5C5S6R.js} +3 -86
- package/dist/chunk-TT5C5S6R.js.map +1 -0
- package/dist/chunk-USO6TERP.js +90 -0
- package/dist/chunk-USO6TERP.js.map +1 -0
- package/dist/{chunk-PHK4W562.js → chunk-VQ47KWD5.js} +3 -3
- package/dist/{chunk-PHK4W562.js.map → chunk-VQ47KWD5.js.map} +1 -1
- package/dist/chunk-WUJXJC5O.js +14568 -0
- package/dist/chunk-WUJXJC5O.js.map +1 -0
- package/dist/{chunk-EHGVROVV.js → chunk-ZORVNOKX.js} +6 -25
- package/dist/chunk-ZORVNOKX.js.map +1 -0
- package/dist/config/index.d.ts +53 -11
- package/dist/config/index.js +5 -5
- package/dist/controls/index.d.ts +6 -3
- package/dist/controls/index.js +4 -4
- package/dist/dragdrop/index.d.ts +4 -3
- package/dist/index.d.ts +139 -114
- package/dist/index.js +470 -479
- package/dist/index.js.map +1 -1
- package/dist/layers/index.d.ts +6 -35
- package/dist/layers/index.js +2 -3
- package/dist/loupe/index.d.ts +6 -5
- package/dist/passthrough/weasel-ui.d.ts +421 -215
- package/dist/passthrough/weasel-ui.js +1 -1
- package/dist/primitives/index.d.ts +2 -13
- package/dist/primitives/index.js +4 -4
- package/dist/state/index.d.ts +6 -5
- package/dist/state/index.js +5 -5
- package/dist/styles.css +410 -190
- package/dist/undo/index.d.ts +4 -3
- package/package.json +9 -13
- package/src/annotations/frac.test.ts +7 -0
- package/src/annotations/paint.test.ts +21 -0
- package/src/annotations/paint.ts +12 -0
- package/src/annotations/store.test.ts +31 -0
- package/src/annotations/types.ts +3 -2
- package/src/canvas/Stage.test.tsx +18 -0
- package/src/canvas/index.ts +0 -9
- package/src/chrome/labTypes.ts +1 -1
- package/src/chrome/regions/PaletteRegion.test.tsx +18 -0
- package/src/chrome/regions/PaletteRegion.tsx +5 -4
- package/src/chrome/regions/SidebarRegion.less +197 -0
- package/src/chrome/regions/SidebarRegion.test.tsx +20 -0
- package/src/chrome/regions/SidebarRegion.tsx +7 -2
- package/src/chrome/regions/TitleBarRegion.tsx +1 -1
- package/src/chrome/types.ts +13 -4
- package/src/config/autoConfig.ts +2 -2
- package/src/config/builder.ts +23 -5
- package/src/config/entry.test.ts +8 -0
- package/src/config/index.ts +2 -0
- package/src/config/rules.ts +2 -0
- package/src/config/sectionTree.test.ts +146 -0
- package/src/config/sectionTree.ts +124 -0
- package/src/config/types.ts +4 -4
- package/src/controls/AutoControls.stories.tsx +6 -6
- package/src/controls/ControlPanel.less +27 -0
- package/src/controls/ControlPanel.stories.tsx +95 -1
- package/src/controls/ControlPanel.test.tsx +82 -112
- package/src/controls/ControlPanel.tsx +159 -396
- package/src/controls/inDialog.test.tsx +82 -0
- package/src/controls/inDialog.tsx +46 -0
- package/src/controls/index.ts +1 -0
- package/src/index.test.ts +0 -2
- package/src/index.ts +14 -35
- package/src/instrument/types.ts +5 -2
- package/src/lab/Lab.nebula.test.tsx +31 -0
- package/src/lab/Lab.tsx +57 -18
- package/src/lab/LabBoundary.test.tsx +66 -0
- package/src/lab/LabBoundary.tsx +56 -0
- package/src/lab/LabHeader.tsx +4 -23
- package/src/lab/LabRoot.tsx +2 -3
- package/src/lab/LabShell.less +0 -1
- package/src/lab/LabShell.stories.tsx +15 -0
- package/src/lab/LabShell.test.tsx +18 -0
- package/src/lab/LabShell.tsx +14 -1
- package/src/lab/LabSwitcher.less +1 -1
- package/src/lab/LabSwitcher.test.tsx +41 -0
- package/src/lab/LabSwitcher.tsx +30 -8
- package/src/lab/index.ts +1 -0
- package/src/layers/AGENTS.md +18 -74
- package/src/layers/index.ts +4 -2
- package/src/passthrough/weasel-ui.ts +25 -10
- package/src/primitives/FpsMeter.less +6 -1
- package/src/primitives/FpsMeter.test.tsx +12 -4
- package/src/primitives/FpsMeter.tsx +6 -1
- package/src/primitives/JobProgress.stories.tsx +1 -1
- package/src/primitives/StatusBar.less +6 -0
- package/src/primitives/index.ts +0 -2
- package/src/specimen/Specimen.tsx +42 -56
- package/src/state/types.ts +8 -2
- package/src/state/view.test.ts +4 -4
- package/src/styles.less +4 -2
- package/src/theme/Interstellar.stories.tsx +8 -9
- package/src/theme/base.less +3 -20
- package/src/theme/interstellar.test.ts +6 -3
- package/src/theme/interstellar.theme.json +0 -56
- package/src/theme/interstellar.ts +2 -2
- package/src/trial/Trial.canvas.test.tsx +9 -5
- package/src/trial/Trial.config.test.tsx +1 -1
- package/src/trial/Trial.tsx +30 -8
- package/dist/_dts/index-BNdz-tNd.d.ts +0 -423
- package/dist/chunk-7PFH3CNM.js.map +0 -1
- package/dist/chunk-CEIUBPPW.js.map +0 -1
- package/dist/chunk-EH7UEQV7.js +0 -590
- package/dist/chunk-EH7UEQV7.js.map +0 -1
- package/dist/chunk-EHGVROVV.js.map +0 -1
- package/dist/chunk-IHUVQ3TX.js.map +0 -1
- package/dist/chunk-MDVTK5U3.js +0 -170
- package/dist/chunk-MDVTK5U3.js.map +0 -1
- package/dist/chunk-PJ7WEQBJ.js +0 -18
- package/dist/chunk-PJ7WEQBJ.js.map +0 -1
- package/dist/chunk-T3EC2DXD.js +0 -12628
- package/dist/chunk-T3EC2DXD.js.map +0 -1
- package/dist/chunk-UN4U4P63.js.map +0 -1
- package/dist/chunk-ZDHY47EV.js.map +0 -1
- package/dist/ui/layers/index.d.ts +0 -66
- package/dist/ui/layers/index.js +0 -3
- package/dist/ui/layers/index.js.map +0 -1
- package/src/canvas/useOrbit.test.ts +0 -167
- package/src/canvas/useOrbit.ts +0 -156
- package/src/lab/useSystemMode.ts +0 -30
- package/src/layers/LayerList.less +0 -93
- package/src/layers/LayerList.stories.tsx +0 -66
- package/src/layers/LayerList.test.tsx +0 -232
- package/src/layers/LayerList.tsx +0 -268
- package/src/primitives/Sidebar.less +0 -112
- package/src/primitives/Sidebar.stories.tsx +0 -38
- package/src/primitives/Sidebar.test.tsx +0 -74
- package/src/primitives/Sidebar.tsx +0 -35
- package/src/ui/layers/index.ts +0 -5
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@weasel-js/forge';
|
|
2
|
-
import { useState } from 'react';
|
|
3
|
-
import { Sidebar } from './Sidebar';
|
|
4
|
-
|
|
5
|
-
const meta: Meta<typeof Sidebar> = {
|
|
6
|
-
title: 'labkit/Primitives/Sidebar',
|
|
7
|
-
component: Sidebar,
|
|
8
|
-
};
|
|
9
|
-
export default meta;
|
|
10
|
-
|
|
11
|
-
type Story = StoryObj<typeof Sidebar>;
|
|
12
|
-
|
|
13
|
-
export const Default: Story = {
|
|
14
|
-
render: () => (
|
|
15
|
-
<div style={{ display: 'flex', height: 400 }}>
|
|
16
|
-
<div style={{ flex: 1 }}>main content area</div>
|
|
17
|
-
<Sidebar title="Controls">
|
|
18
|
-
<p>One slider here</p>
|
|
19
|
-
<p>Another slider</p>
|
|
20
|
-
</Sidebar>
|
|
21
|
-
</div>
|
|
22
|
-
),
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export const Collapsible: Story = {
|
|
26
|
-
render: function Render() {
|
|
27
|
-
const [collapsed, setCollapsed] = useState(false);
|
|
28
|
-
return (
|
|
29
|
-
<div style={{ display: 'flex', height: 400 }}>
|
|
30
|
-
<div style={{ flex: 1, padding: 16 }}>main content area</div>
|
|
31
|
-
<Sidebar title="Controls" collapsed={collapsed} onToggle={() => setCollapsed((c) => !c)}>
|
|
32
|
-
<p>One slider here</p>
|
|
33
|
-
<p>Another slider</p>
|
|
34
|
-
</Sidebar>
|
|
35
|
-
</div>
|
|
36
|
-
);
|
|
37
|
-
},
|
|
38
|
-
};
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { render, screen } from '@testing-library/react';
|
|
2
|
-
import { describe, expect, test } from 'vitest';
|
|
3
|
-
import { Sidebar } from './Sidebar';
|
|
4
|
-
|
|
5
|
-
describe('Sidebar', () => {
|
|
6
|
-
test('renders children when expanded (default)', () => {
|
|
7
|
-
render(
|
|
8
|
-
<Sidebar>
|
|
9
|
-
<p>content</p>
|
|
10
|
-
</Sidebar>,
|
|
11
|
-
);
|
|
12
|
-
expect(screen.getByText('content')).toBeInTheDocument();
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
test('renders title when provided', () => {
|
|
16
|
-
render(
|
|
17
|
-
<Sidebar title="Controls">
|
|
18
|
-
<p>x</p>
|
|
19
|
-
</Sidebar>,
|
|
20
|
-
);
|
|
21
|
-
expect(screen.getByText('Controls')).toBeInTheDocument();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
test('marks the sidebar collapsed and nests body inside the collapsed root', () => {
|
|
25
|
-
const { container } = render(
|
|
26
|
-
<Sidebar collapsed>
|
|
27
|
-
<p>content</p>
|
|
28
|
-
</Sidebar>,
|
|
29
|
-
);
|
|
30
|
-
const root = container.querySelector('.lk-sidebar');
|
|
31
|
-
const body = container.querySelector('.lk-sidebar-body');
|
|
32
|
-
expect(root).not.toBeNull();
|
|
33
|
-
expect(body).not.toBeNull();
|
|
34
|
-
expect(root?.classList.contains('lk-sidebar--collapsed')).toBe(true);
|
|
35
|
-
// Body is still rendered (children stay in DOM), but lives inside the collapsed
|
|
36
|
-
// root so the CSS rule `.lk-sidebar--collapsed .lk-sidebar-body { display:none }` applies.
|
|
37
|
-
expect(body?.parentElement).toBe(root);
|
|
38
|
-
expect(body?.textContent).toBe('content');
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
test('toggle button calls onToggle when clicked', () => {
|
|
42
|
-
let toggled = false;
|
|
43
|
-
render(
|
|
44
|
-
<Sidebar
|
|
45
|
-
title="C"
|
|
46
|
-
onToggle={() => {
|
|
47
|
-
toggled = true;
|
|
48
|
-
}}
|
|
49
|
-
>
|
|
50
|
-
<p>x</p>
|
|
51
|
-
</Sidebar>,
|
|
52
|
-
);
|
|
53
|
-
screen.getByRole('button', { name: /collapse|expand/i }).click();
|
|
54
|
-
expect(toggled).toBe(true);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test('shows expand label when collapsed', () => {
|
|
58
|
-
render(
|
|
59
|
-
<Sidebar title="C" collapsed onToggle={() => {}}>
|
|
60
|
-
<p>x</p>
|
|
61
|
-
</Sidebar>,
|
|
62
|
-
);
|
|
63
|
-
expect(screen.getByRole('button', { name: /expand/i })).toBeInTheDocument();
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
test('shows collapse label when expanded', () => {
|
|
67
|
-
render(
|
|
68
|
-
<Sidebar title="C" onToggle={() => {}}>
|
|
69
|
-
<p>x</p>
|
|
70
|
-
</Sidebar>,
|
|
71
|
-
);
|
|
72
|
-
expect(screen.getByRole('button', { name: /collapse/i })).toBeInTheDocument();
|
|
73
|
-
});
|
|
74
|
-
});
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
/** Props for `<Sidebar>`. */
|
|
4
|
-
export interface SidebarProps {
|
|
5
|
-
children: ReactNode;
|
|
6
|
-
title?: string;
|
|
7
|
-
collapsed?: boolean;
|
|
8
|
-
onToggle?: () => void;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** A collapsible side panel with an optional title. Collapse state is the
|
|
12
|
-
* caller's to hold. */
|
|
13
|
-
export function Sidebar({ children, title, collapsed = false, onToggle }: SidebarProps) {
|
|
14
|
-
const className = `lk-sidebar${collapsed ? ' lk-sidebar--collapsed' : ''}`;
|
|
15
|
-
return (
|
|
16
|
-
<aside className={className}>
|
|
17
|
-
{(title || onToggle) && (
|
|
18
|
-
<div className="lk-sidebar-header">
|
|
19
|
-
{title && <span className="lk-sidebar-title">{title}</span>}
|
|
20
|
-
{onToggle && (
|
|
21
|
-
<button
|
|
22
|
-
type="button"
|
|
23
|
-
className="lk-sidebar-toggle"
|
|
24
|
-
onClick={onToggle}
|
|
25
|
-
aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}
|
|
26
|
-
>
|
|
27
|
-
{collapsed ? '›' : '‹'}
|
|
28
|
-
</button>
|
|
29
|
-
)}
|
|
30
|
-
</div>
|
|
31
|
-
)}
|
|
32
|
-
<div className="lk-sidebar-body">{children}</div>
|
|
33
|
-
</aside>
|
|
34
|
-
);
|
|
35
|
-
}
|
package/src/ui/layers/index.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// LayerStack lives in `@weasel-js/ui` now; labkit re-exports it so existing
|
|
2
|
-
// `@weasel-js/labkit/ui/layers` imports keep resolving. Named, not `export *`
|
|
3
|
-
// — a star re-export of an external package emits no binding in the bundle.
|
|
4
|
-
export type { LayerStackItem, LayerStackProps } from '@weasel-js/ui';
|
|
5
|
-
export { LayerStack } from '@weasel-js/ui';
|