@smoove/studio 0.1.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/LICENSE +21 -0
- package/README.md +60 -0
- package/dist/components/brand/brand.d.ts +9 -0
- package/dist/components/brand/brand.d.ts.map +1 -0
- package/dist/components/brand/brand.js +11 -0
- package/dist/components/brand/brand.js.map +1 -0
- package/dist/components/button/button.d.ts +21 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/button.js +20 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/icon-button.d.ts +27 -0
- package/dist/components/button/icon-button.d.ts.map +1 -0
- package/dist/components/button/icon-button.js +19 -0
- package/dist/components/button/icon-button.js.map +1 -0
- package/dist/components/header/header-title.d.ts +8 -0
- package/dist/components/header/header-title.d.ts.map +1 -0
- package/dist/components/header/header-title.js +7 -0
- package/dist/components/header/header-title.js.map +1 -0
- package/dist/components/header/header.d.ts +7 -0
- package/dist/components/header/header.d.ts.map +1 -0
- package/dist/components/header/header.js +7 -0
- package/dist/components/header/header.js.map +1 -0
- package/dist/components/header/zoom.d.ts +3 -0
- package/dist/components/header/zoom.d.ts.map +1 -0
- package/dist/components/header/zoom.js +16 -0
- package/dist/components/header/zoom.js.map +1 -0
- package/dist/components/icon/icon.d.ts +11 -0
- package/dist/components/icon/icon.d.ts.map +1 -0
- package/dist/components/icon/icon.js +7 -0
- package/dist/components/icon/icon.js.map +1 -0
- package/dist/components/icon/paths.d.ts +47 -0
- package/dist/components/icon/paths.d.ts.map +1 -0
- package/dist/components/icon/paths.js +54 -0
- package/dist/components/icon/paths.js.map +1 -0
- package/dist/components/left-panel/library.d.ts +8 -0
- package/dist/components/left-panel/library.d.ts.map +1 -0
- package/dist/components/left-panel/library.js +49 -0
- package/dist/components/left-panel/library.js.map +1 -0
- package/dist/components/left-panel/sidebar-group.d.ts +12 -0
- package/dist/components/left-panel/sidebar-group.d.ts.map +1 -0
- package/dist/components/left-panel/sidebar-group.js +11 -0
- package/dist/components/left-panel/sidebar-group.js.map +1 -0
- package/dist/components/left-panel/sidebar-item.d.ts +17 -0
- package/dist/components/left-panel/sidebar-item.d.ts.map +1 -0
- package/dist/components/left-panel/sidebar-item.js +12 -0
- package/dist/components/left-panel/sidebar-item.js.map +1 -0
- package/dist/components/left-panel/sidebar.d.ts +8 -0
- package/dist/components/left-panel/sidebar.d.ts.map +1 -0
- package/dist/components/left-panel/sidebar.js +8 -0
- package/dist/components/left-panel/sidebar.js.map +1 -0
- package/dist/components/primitives/dialog.d.ts +33 -0
- package/dist/components/primitives/dialog.d.ts.map +1 -0
- package/dist/components/primitives/dialog.js +30 -0
- package/dist/components/primitives/dialog.js.map +1 -0
- package/dist/components/primitives/menu.d.ts +25 -0
- package/dist/components/primitives/menu.d.ts.map +1 -0
- package/dist/components/primitives/menu.js +31 -0
- package/dist/components/primitives/menu.js.map +1 -0
- package/dist/components/primitives/number-field.d.ts +12 -0
- package/dist/components/primitives/number-field.d.ts.map +1 -0
- package/dist/components/primitives/number-field.js +7 -0
- package/dist/components/primitives/number-field.js.map +1 -0
- package/dist/components/primitives/portal-context.d.ts +9 -0
- package/dist/components/primitives/portal-context.d.ts.map +1 -0
- package/dist/components/primitives/portal-context.js +10 -0
- package/dist/components/primitives/portal-context.js.map +1 -0
- package/dist/components/primitives/select.d.ts +14 -0
- package/dist/components/primitives/select.d.ts.map +1 -0
- package/dist/components/primitives/select.js +11 -0
- package/dist/components/primitives/select.js.map +1 -0
- package/dist/components/primitives/slider.d.ts +10 -0
- package/dist/components/primitives/slider.d.ts.map +1 -0
- package/dist/components/primitives/slider.js +7 -0
- package/dist/components/primitives/slider.js.map +1 -0
- package/dist/components/primitives/switch.d.ts +5 -0
- package/dist/components/primitives/switch.d.ts.map +1 -0
- package/dist/components/primitives/switch.js +6 -0
- package/dist/components/primitives/switch.js.map +1 -0
- package/dist/components/primitives/tabs.d.ts +23 -0
- package/dist/components/primitives/tabs.d.ts.map +1 -0
- package/dist/components/primitives/tabs.js +17 -0
- package/dist/components/primitives/tabs.js.map +1 -0
- package/dist/components/primitives/tooltip.d.ts +9 -0
- package/dist/components/primitives/tooltip.d.ts.map +1 -0
- package/dist/components/primitives/tooltip.js +11 -0
- package/dist/components/primitives/tooltip.js.map +1 -0
- package/dist/components/render/export-frame-dialog.d.ts +8 -0
- package/dist/components/render/export-frame-dialog.d.ts.map +1 -0
- package/dist/components/render/export-frame-dialog.js +60 -0
- package/dist/components/render/export-frame-dialog.js.map +1 -0
- package/dist/components/render/render-dialog.d.ts +8 -0
- package/dist/components/render/render-dialog.d.ts.map +1 -0
- package/dist/components/render/render-dialog.js +95 -0
- package/dist/components/render/render-dialog.js.map +1 -0
- package/dist/components/render/render-queue.d.ts +5 -0
- package/dist/components/render/render-queue.d.ts.map +1 -0
- package/dist/components/render/render-queue.js +40 -0
- package/dist/components/render/render-queue.js.map +1 -0
- package/dist/components/right-panel/panel-handle.d.ts +3 -0
- package/dist/components/right-panel/panel-handle.d.ts.map +1 -0
- package/dist/components/right-panel/panel-handle.js +9 -0
- package/dist/components/right-panel/panel-handle.js.map +1 -0
- package/dist/components/right-panel/panel-tabs.d.ts +3 -0
- package/dist/components/right-panel/panel-tabs.d.ts.map +1 -0
- package/dist/components/right-panel/panel-tabs.js +26 -0
- package/dist/components/right-panel/panel-tabs.js.map +1 -0
- package/dist/components/right-panel/panel.d.ts +8 -0
- package/dist/components/right-panel/panel.d.ts.map +1 -0
- package/dist/components/right-panel/panel.js +16 -0
- package/dist/components/right-panel/panel.js.map +1 -0
- package/dist/components/schema-form/field.d.ts +9 -0
- package/dist/components/schema-form/field.d.ts.map +1 -0
- package/dist/components/schema-form/field.js +102 -0
- package/dist/components/schema-form/field.js.map +1 -0
- package/dist/components/schema-form/schema-form.d.ts +3 -0
- package/dist/components/schema-form/schema-form.d.ts.map +1 -0
- package/dist/components/schema-form/schema-form.js +18 -0
- package/dist/components/schema-form/schema-form.js.map +1 -0
- package/dist/components/stage/stage.d.ts +12 -0
- package/dist/components/stage/stage.d.ts.map +1 -0
- package/dist/components/stage/stage.js +103 -0
- package/dist/components/stage/stage.js.map +1 -0
- package/dist/components/studio/features.d.ts +4 -0
- package/dist/components/studio/features.d.ts.map +1 -0
- package/dist/components/studio/features.js +18 -0
- package/dist/components/studio/features.js.map +1 -0
- package/dist/components/studio/layout.d.ts +19 -0
- package/dist/components/studio/layout.d.ts.map +1 -0
- package/dist/components/studio/layout.js +17 -0
- package/dist/components/studio/layout.js.map +1 -0
- package/dist/components/studio/studio-context.d.ts +53 -0
- package/dist/components/studio/studio-context.d.ts.map +1 -0
- package/dist/components/studio/studio-context.js +3 -0
- package/dist/components/studio/studio-context.js.map +1 -0
- package/dist/components/studio/studio.d.ts +21 -0
- package/dist/components/studio/studio.d.ts.map +1 -0
- package/dist/components/studio/studio.js +38 -0
- package/dist/components/studio/studio.js.map +1 -0
- package/dist/components/timeline/layered-body.d.ts +8 -0
- package/dist/components/timeline/layered-body.d.ts.map +1 -0
- package/dist/components/timeline/layered-body.js +75 -0
- package/dist/components/timeline/layered-body.js.map +1 -0
- package/dist/components/timeline/region-handles.d.ts +8 -0
- package/dist/components/timeline/region-handles.d.ts.map +1 -0
- package/dist/components/timeline/region-handles.js +13 -0
- package/dist/components/timeline/region-handles.js.map +1 -0
- package/dist/components/timeline/ruler.d.ts +7 -0
- package/dist/components/timeline/ruler.d.ts.map +1 -0
- package/dist/components/timeline/ruler.js +19 -0
- package/dist/components/timeline/ruler.js.map +1 -0
- package/dist/components/timeline/scrubber.d.ts +6 -0
- package/dist/components/timeline/scrubber.d.ts.map +1 -0
- package/dist/components/timeline/scrubber.js +25 -0
- package/dist/components/timeline/scrubber.js.map +1 -0
- package/dist/components/timeline/timeline-header.d.ts +3 -0
- package/dist/components/timeline/timeline-header.d.ts.map +1 -0
- package/dist/components/timeline/timeline-header.js +36 -0
- package/dist/components/timeline/timeline-header.js.map +1 -0
- package/dist/components/timeline/timeline.d.ts +5 -0
- package/dist/components/timeline/timeline.d.ts.map +1 -0
- package/dist/components/timeline/timeline.js +16 -0
- package/dist/components/timeline/timeline.js.map +1 -0
- package/dist/components/timeline/transport.d.ts +5 -0
- package/dist/components/timeline/transport.d.ts.map +1 -0
- package/dist/components/timeline/transport.js +21 -0
- package/dist/components/timeline/transport.js.map +1 -0
- package/dist/components/timeline/use-scrub-surface.d.ts +20 -0
- package/dist/components/timeline/use-scrub-surface.d.ts.map +1 -0
- package/dist/components/timeline/use-scrub-surface.js +56 -0
- package/dist/components/timeline/use-scrub-surface.js.map +1 -0
- package/dist/components/toasts/toasts.d.ts +4 -0
- package/dist/components/toasts/toasts.d.ts.map +1 -0
- package/dist/components/toasts/toasts.js +22 -0
- package/dist/components/toasts/toasts.js.map +1 -0
- package/dist/hooks/use-composition.d.ts +10 -0
- package/dist/hooks/use-composition.d.ts.map +1 -0
- package/dist/hooks/use-composition.js +13 -0
- package/dist/hooks/use-composition.js.map +1 -0
- package/dist/hooks/use-layers.d.ts +9 -0
- package/dist/hooks/use-layers.d.ts.map +1 -0
- package/dist/hooks/use-layers.js +34 -0
- package/dist/hooks/use-layers.js.map +1 -0
- package/dist/hooks/use-playback.d.ts +15 -0
- package/dist/hooks/use-playback.d.ts.map +1 -0
- package/dist/hooks/use-playback.js +38 -0
- package/dist/hooks/use-playback.js.map +1 -0
- package/dist/hooks/use-props-form.d.ts +15 -0
- package/dist/hooks/use-props-form.d.ts.map +1 -0
- package/dist/hooks/use-props-form.js +22 -0
- package/dist/hooks/use-props-form.js.map +1 -0
- package/dist/hooks/use-real-fps.d.ts +3 -0
- package/dist/hooks/use-real-fps.d.ts.map +1 -0
- package/dist/hooks/use-real-fps.js +27 -0
- package/dist/hooks/use-real-fps.js.map +1 -0
- package/dist/hooks/use-shortcuts.d.ts +7 -0
- package/dist/hooks/use-shortcuts.d.ts.map +1 -0
- package/dist/hooks/use-shortcuts.js +53 -0
- package/dist/hooks/use-shortcuts.js.map +1 -0
- package/dist/hooks/use-studio.d.ts +4 -0
- package/dist/hooks/use-studio.d.ts.map +1 -0
- package/dist/hooks/use-studio.js +10 -0
- package/dist/hooks/use-studio.js.map +1 -0
- package/dist/index.d.ts +145 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +3 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +8 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/constants.d.ts +28 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +38 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/cva.d.ts +25 -0
- package/dist/lib/cva.d.ts.map +1 -0
- package/dist/lib/cva.js +23 -0
- package/dist/lib/cva.js.map +1 -0
- package/dist/lib/format.d.ts +13 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +25 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/ids.d.ts +3 -0
- package/dist/lib/ids.d.ts.map +1 -0
- package/dist/lib/ids.js +6 -0
- package/dist/lib/ids.js.map +1 -0
- package/dist/registry/define-registry.d.ts +8 -0
- package/dist/registry/define-registry.d.ts.map +1 -0
- package/dist/registry/define-registry.js +71 -0
- package/dist/registry/define-registry.js.map +1 -0
- package/dist/registry/props-signal.d.ts +9 -0
- package/dist/registry/props-signal.d.ts.map +1 -0
- package/dist/registry/props-signal.js +25 -0
- package/dist/registry/props-signal.js.map +1 -0
- package/dist/schema/kf.d.ts +28 -0
- package/dist/schema/kf.d.ts.map +1 -0
- package/dist/schema/kf.js +82 -0
- package/dist/schema/kf.js.map +1 -0
- package/dist/schema/types.d.ts +69 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +4 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +7 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/map.d.ts +19 -0
- package/dist/server/map.d.ts.map +1 -0
- package/dist/server/map.js +63 -0
- package/dist/server/map.js.map +1 -0
- package/dist/server/render-queue.d.ts +46 -0
- package/dist/server/render-queue.d.ts.map +1 -0
- package/dist/server/render-queue.js +147 -0
- package/dist/server/render-queue.js.map +1 -0
- package/dist/server/temp-storage.d.ts +13 -0
- package/dist/server/temp-storage.d.ts.map +1 -0
- package/dist/server/temp-storage.js +55 -0
- package/dist/server/temp-storage.js.map +1 -0
- package/dist/server/types.d.ts +57 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/signals/signal-bridge.d.ts +18 -0
- package/dist/signals/signal-bridge.d.ts.map +1 -0
- package/dist/signals/signal-bridge.js +39 -0
- package/dist/signals/signal-bridge.js.map +1 -0
- package/dist/store/store.d.ts +74 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +276 -0
- package/dist/store/store.js.map +1 -0
- package/dist/styles/studio.css +2 -0
- package/dist/types.d.ts +112 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +66 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 shemi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# @smoove/studio
|
|
2
|
+
|
|
3
|
+
A composable React studio UI for [smoove](https://smoove.dev)
|
|
4
|
+
compositions — catalog sidebar, stage, timeline, props panel, and render
|
|
5
|
+
dialogs, assembled from a `<Studio>` compound component.
|
|
6
|
+
|
|
7
|
+
Declare your composition catalog with `defineRegistry()`, wrap `<Studio>`
|
|
8
|
+
around it, and compose the panels you want. The demo app in the smoove repo
|
|
9
|
+
is exactly this: a registry plus routing around `@smoove/studio`.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
pnpm add konva react react-dom @smoove/core @smoove/player @smoove/studio
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`konva`, `react`, `react-dom`, `@smoove/core`, and `@smoove/player` are
|
|
18
|
+
peer dependencies. `@smoove/renderer` is an optional peer — add it to
|
|
19
|
+
enable the render dialogs and queue.
|
|
20
|
+
|
|
21
|
+
## Quick example
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { defineRegistry, Studio } from "@smoove/studio";
|
|
25
|
+
import "@smoove/studio/styles.css";
|
|
26
|
+
import orbit from "./compositions/orbit";
|
|
27
|
+
import pulse from "./compositions/pulse";
|
|
28
|
+
|
|
29
|
+
const registry = defineRegistry([pulse, orbit]);
|
|
30
|
+
|
|
31
|
+
export function App() {
|
|
32
|
+
return (
|
|
33
|
+
<Studio registry={registry} onNavigate={(id) => console.log(id)}>
|
|
34
|
+
<Studio.Sidebar>
|
|
35
|
+
<Studio.Brand />
|
|
36
|
+
<Studio.Library />
|
|
37
|
+
</Studio.Sidebar>
|
|
38
|
+
<Studio.Body>
|
|
39
|
+
<Studio.Stage />
|
|
40
|
+
<Studio.Timeline />
|
|
41
|
+
</Studio.Body>
|
|
42
|
+
<Studio.Toasts />
|
|
43
|
+
</Studio>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Hooks (`useStudio`, `useComposition`, `usePlayback`, `usePropsForm`, ...)
|
|
49
|
+
are exported for building your own panels on the same state.
|
|
50
|
+
|
|
51
|
+
Pair with [`@smoove/vite`](https://www.npmjs.com/package/@smoove/vite) for
|
|
52
|
+
invisible hot-reload of registry compositions.
|
|
53
|
+
|
|
54
|
+
## Docs
|
|
55
|
+
|
|
56
|
+
Full documentation lives at [smoove.dev](https://smoove.dev).
|
|
57
|
+
|
|
58
|
+
## License
|
|
59
|
+
|
|
60
|
+
MIT
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/** Sidebar header: logo + wordmark + version tag. */
|
|
3
|
+
export declare function Brand({ name, tag, icon, onClick, }: {
|
|
4
|
+
name?: ReactNode;
|
|
5
|
+
tag?: ReactNode;
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
onClick?: () => void;
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=brand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../../src/components/brand/brand.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAS,MAAM,OAAO,CAAC;AA+B9C,qDAAqD;AACrD,wBAAgB,KAAK,CAAC,EACpB,IAKC,EACD,GAAY,EACZ,IAA8B,EAC9B,OAAO,GACR,EAAE;IACD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,2CAcA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
3
|
+
function BrandMark({ size = 24 }) {
|
|
4
|
+
const gradId = useId();
|
|
5
|
+
return (_jsxs("svg", { width: size, height: size, viewBox: "35.5 31.5 57 57", fill: "none", "aria-hidden": "true", style: { display: "block" }, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: gradId, x1: "40", y1: "60", x2: "84", y2: "60", gradientUnits: "userSpaceOnUse", children: [_jsx("stop", { stopColor: "#FF5640" }), _jsx("stop", { offset: "1", stopColor: "#15CDA8" })] }) }), _jsxs("g", { stroke: `url(#${gradId})`, strokeWidth: "9", strokeLinecap: "round", children: [_jsx("line", { x1: "40", y1: "38", x2: "40", y2: "82" }), _jsx("line", { x1: "52", y1: "44", x2: "52", y2: "76" }), _jsx("line", { x1: "64", y1: "50", x2: "64", y2: "70" }), _jsx("line", { x1: "76", y1: "56", x2: "76", y2: "64" })] }), _jsx("circle", { cx: "89", cy: "60", r: "3.5", fill: "#FFC23C" })] }));
|
|
6
|
+
}
|
|
7
|
+
/** Sidebar header: logo + wordmark + version tag. */
|
|
8
|
+
export function Brand({ name = (_jsxs(_Fragment, { children: [_jsx("b", { className: "text-ink-1", children: "Smoove" }), _jsx("span", { className: "text-ink-3 font-semibold", children: "Studio" })] })), tag = "v1.0", icon = _jsx(BrandMark, { size: 16 }), onClick, }) {
|
|
9
|
+
return (_jsxs("div", { className: "flex items-center gap-2.5 h-14 flex-none px-4.5 border-b border-line", children: [_jsxs("button", { className: "flex items-center gap-2.5 h-14 outline-0", type: "button", onClick: onClick, children: [icon, _jsx("div", { className: "font-display text-[15px] font-bold tracking-tight", children: name })] }), tag && (_jsx("div", { className: "ml-auto text-[10px] font-semibold tracking-[.08em] text-ink-3 uppercase border border-line-2 rounded-[5px] px-1.5 py-0.5", children: tag }))] }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=brand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../../../src/components/brand/brand.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9C,SAAS,SAAS,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB;IACjD,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IAEvB,OAAO,CACL,eACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,iBAAiB,EACzB,IAAI,EAAC,MAAM,iBACC,MAAM,EAClB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,aAE3B,yBACE,0BAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,aAAa,EAAC,gBAAgB,aACxF,eAAM,SAAS,EAAC,SAAS,GAAG,EAC5B,eAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAC,SAAS,GAAG,IACxB,GACZ,EACP,aAAG,MAAM,EAAE,QAAQ,MAAM,GAAG,EAAE,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,aACjE,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,EACxC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACtC,EACJ,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,KAAK,EAAC,IAAI,EAAC,SAAS,GAAG,IAC7C,CACP,CAAC;AACJ,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,KAAK,CAAC,EACpB,IAAI,GAAG,CACL,8BACE,YAAG,SAAS,EAAC,YAAY,uBAAW,EACpC,eAAM,SAAS,EAAC,0BAA0B,uBAAc,IACvD,CACJ,EACD,GAAG,GAAG,MAAM,EACZ,IAAI,GAAG,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,EAC9B,OAAO,GAMR;IACC,OAAO,CACL,eAAK,SAAS,EAAC,sEAAsE,aACnF,kBAAQ,SAAS,EAAC,0CAA0C,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,aACxF,IAAI,EACL,cAAK,SAAS,EAAC,mDAAmD,YAAE,IAAI,GAAO,IACxE,EACR,GAAG,IAAI,CACN,cAAK,SAAS,EAAC,0HAA0H,YACtI,GAAG,GACA,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ButtonHTMLAttributes } from "react";
|
|
2
|
+
import type { IconName } from "../icon/paths.js";
|
|
3
|
+
export type ButtonTone = "primary" | "default" | "ghost" | "danger";
|
|
4
|
+
export type ButtonSize = "sm" | "md";
|
|
5
|
+
export declare const buttonCls: (props?: {
|
|
6
|
+
tone?: "default" | "primary" | "ghost" | "danger" | undefined;
|
|
7
|
+
size?: "sm" | "md" | undefined;
|
|
8
|
+
} & {
|
|
9
|
+
className?: string;
|
|
10
|
+
}) => string;
|
|
11
|
+
export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
12
|
+
tone?: ButtonTone;
|
|
13
|
+
size?: ButtonSize;
|
|
14
|
+
icon?: IconName;
|
|
15
|
+
};
|
|
16
|
+
export declare const Button: import("react").ForwardRefExoticComponent<ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
17
|
+
tone?: ButtonTone;
|
|
18
|
+
size?: ButtonSize;
|
|
19
|
+
icon?: IconName;
|
|
20
|
+
} & import("react").RefAttributes<HTMLButtonElement>>;
|
|
21
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAc,MAAM,OAAO,CAAC;AAG9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;AAErC,eAAO,MAAM,SAAS;;;;;YAerB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAClE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,MAAM;WALV,UAAU;WACV,UAAU;WACV,QAAQ;qDAaf,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { cva } from "../../lib/cva.js";
|
|
4
|
+
import { Icon } from "../icon/icon.js";
|
|
5
|
+
export const buttonCls = cva("inline-flex items-center justify-center gap-2 font-semibold whitespace-nowrap rounded-ui transition-colors disabled:opacity-45 disabled:cursor-not-allowed outline-none focus-visible:ring-2 focus-visible:ring-accent/50", {
|
|
6
|
+
variants: {
|
|
7
|
+
tone: {
|
|
8
|
+
primary: "text-white border border-transparent bg-gradient-to-b from-accent-2 to-accent shadow-[0_2px_14px_-3px_var(--color-accent-soft)] hover:brightness-110",
|
|
9
|
+
default: "text-ink-1 bg-bg-2 border border-line-2 hover:bg-bg-3",
|
|
10
|
+
ghost: "text-ink-2 bg-transparent border border-transparent hover:bg-bg-2 hover:text-ink-1",
|
|
11
|
+
danger: "text-danger bg-transparent border border-transparent hover:bg-danger/12",
|
|
12
|
+
},
|
|
13
|
+
size: { sm: "text-xs px-2.5 py-1.5", md: "text-[13px] px-3.5 py-2" },
|
|
14
|
+
},
|
|
15
|
+
defaultVariants: { tone: "default", size: "md" },
|
|
16
|
+
});
|
|
17
|
+
export const Button = forwardRef(function Button({ tone, size, className, icon, children, type = "button", ...rest }, ref) {
|
|
18
|
+
return (_jsxs("button", { ref: ref, type: type, className: buttonCls({ tone, size, className }), ...rest, children: [icon && _jsx(Icon, { name: icon, size: 15 }), children] }));
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAA6B,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAMvC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAC1B,2NAA2N,EAC3N;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,OAAO,EACL,sJAAsJ;YACxJ,OAAO,EAAE,uDAAuD;YAChE,KAAK,EAAE,oFAAoF;YAC3F,MAAM,EAAE,yEAAyE;SAClF;QACD,IAAI,EAAE,EAAE,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,yBAAyB,EAAE;KACrE;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;CACjD,CACF,CAAC;AAQF,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAiC,SAAS,MAAM,CAC9E,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,EACnE,GAAG;IAEH,OAAO,CACL,kBAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,KAAM,IAAI,aACpF,IAAI,IAAI,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,EACtC,QAAQ,IACF,CACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ButtonHTMLAttributes, type ReactNode } from "react";
|
|
2
|
+
import type { IconName } from "../icon/paths.js";
|
|
3
|
+
export type IconButtonTone = "default" | "bordered" | "danger";
|
|
4
|
+
export type IconButtonSize = "sm" | "md";
|
|
5
|
+
export declare const iconBtnCls: (props?: {
|
|
6
|
+
size?: "sm" | "md" | undefined;
|
|
7
|
+
tone?: "default" | "danger" | "bordered" | undefined;
|
|
8
|
+
} & {
|
|
9
|
+
className?: string;
|
|
10
|
+
}) => string;
|
|
11
|
+
export type IconButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
12
|
+
icon?: IconName;
|
|
13
|
+
size?: IconButtonSize;
|
|
14
|
+
tone?: IconButtonTone;
|
|
15
|
+
active?: boolean;
|
|
16
|
+
iconSize?: number;
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
};
|
|
19
|
+
export declare const IconButton: import("react").ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
20
|
+
icon?: IconName;
|
|
21
|
+
size?: IconButtonSize;
|
|
22
|
+
tone?: IconButtonTone;
|
|
23
|
+
active?: boolean;
|
|
24
|
+
iconSize?: number;
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
} & import("react").RefAttributes<HTMLButtonElement>>;
|
|
27
|
+
//# sourceMappingURL=icon-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/button/icon-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzC,eAAO,MAAM,UAAU;;;;;YAatB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,GAAG;IACxF,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,UAAU;WARd,QAAQ;WACR,cAAc;WACd,cAAc;aACZ,OAAO;eACL,MAAM;eACN,SAAS;qDAmBpB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { cva } from "../../lib/cva.js";
|
|
4
|
+
import { Icon } from "../icon/icon.js";
|
|
5
|
+
export const iconBtnCls = cva("grid place-items-center rounded-ui text-ink-2 transition-colors outline-none focus-visible:ring-2 focus-visible:ring-accent/50 disabled:opacity-40 disabled:cursor-not-allowed", {
|
|
6
|
+
variants: {
|
|
7
|
+
size: { sm: "size-[34px]", md: "size-[38px]" },
|
|
8
|
+
tone: {
|
|
9
|
+
default: "hover:bg-bg-3 hover:text-ink-1 data-[active]:text-accent-2",
|
|
10
|
+
bordered: "bg-bg-2 border border-line hover:bg-bg-3 hover:text-ink-1 hover:border-line-2",
|
|
11
|
+
danger: "hover:bg-danger/14 hover:text-danger",
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
defaultVariants: { size: "md", tone: "default" },
|
|
15
|
+
});
|
|
16
|
+
export const IconButton = forwardRef(function IconButton({ icon, size, tone, active, iconSize, className, children, type = "button", ...rest }, ref) {
|
|
17
|
+
return (_jsxs("button", { ref: ref, type: type, "data-active": active ? "" : undefined, className: iconBtnCls({ size, tone, className }), ...rest, children: [icon && _jsx(Icon, { name: icon, size: iconSize ?? (size === "sm" ? 16 : 18) }), children] }));
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=icon-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-button.js","sourceRoot":"","sources":["../../../src/components/button/icon-button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAA6B,UAAU,EAAkB,MAAM,OAAO,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAMvC,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAC3B,gLAAgL,EAChL;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE;QAC9C,IAAI,EAAE;YACJ,OAAO,EAAE,4DAA4D;YACrE,QAAQ,EAAE,+EAA+E;YACzF,MAAM,EAAE,sCAAsC;SAC/C;KACF;IACD,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;CACjD,CACF,CAAC;AAWF,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAqC,SAAS,UAAU,CAC1F,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,EACrF,GAAG;IAEH,OAAO,CACL,kBACE,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,iBACG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACpC,SAAS,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,KAC5C,IAAI,aAEP,IAAI,IAAI,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,EACzE,QAAQ,IACF,CACV,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IconName } from "../icon/paths.js";
|
|
2
|
+
/** Composition title block: icon + title + mono subtitle. */
|
|
3
|
+
export declare function HeaderTitle({ icon, title, sub }: {
|
|
4
|
+
icon: IconName;
|
|
5
|
+
title: string;
|
|
6
|
+
sub?: string;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=header-title.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-title.d.ts","sourceRoot":"","sources":["../../../src/components/header/header-title.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,2CAchG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Icon } from "../icon/icon.js";
|
|
3
|
+
/** Composition title block: icon + title + mono subtitle. */
|
|
4
|
+
export function HeaderTitle({ icon, title, sub }) {
|
|
5
|
+
return (_jsxs("div", { className: "flex items-center gap-2.5 min-w-0", children: [_jsx("span", { className: "size-8 flex-none rounded-ui grid place-items-center bg-bg-2 border border-line text-accent-2", children: _jsx(Icon, { name: icon, size: 16 }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-[14px] font-bold tracking-tight text-ink-1 truncate leading-tight", children: title }), sub && _jsx("div", { className: "text-[11px] text-ink-3 font-mono truncate mt-0.5", children: sub })] })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=header-title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-title.js","sourceRoot":"","sources":["../../../src/components/header/header-title.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,6DAA6D;AAC7D,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAmD;IAC/F,OAAO,CACL,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAM,SAAS,EAAC,8FAA8F,YAC5G,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,GACzB,EACP,eAAK,SAAS,EAAC,SAAS,aACtB,cAAK,SAAS,EAAC,wEAAwE,YACpF,KAAK,GACF,EACL,GAAG,IAAI,cAAK,SAAS,EAAC,kDAAkD,YAAE,GAAG,GAAO,IACjF,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/components/header/header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,yBAAyB;AACzB,wBAAgB,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAW1F"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../lib/cn.js";
|
|
3
|
+
/** Top bar container. */
|
|
4
|
+
export function Header({ children, className }) {
|
|
5
|
+
return (_jsx("header", { className: cn("flex items-center gap-3 px-4 h-14 flex-none bg-bg-1 border-b border-line", className), children: children }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/components/header/header.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,yBAAyB;AACzB,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IACzF,OAAO,CACL,iBACE,SAAS,EAAE,EAAE,CACX,0EAA0E,EAC1E,SAAS,CACV,YAEA,QAAQ,GACF,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/components/header/zoom.tsx"],"names":[],"mappings":"AAMA,wDAAwD;AACxD,wBAAgB,IAAI,4CA+BnB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useStudio } from "../../hooks/use-studio.js";
|
|
3
|
+
import { ZOOM_STEPS } from "../../lib/constants.js";
|
|
4
|
+
import { useSignalValue } from "../../signals/signal-bridge.js";
|
|
5
|
+
import { Icon } from "../icon/icon.js";
|
|
6
|
+
import { MenuItem, MenuSeparator, StMenu } from "../primitives/menu.js";
|
|
7
|
+
/** Zoom control: Fit + 25–200% steps (Base UI Menu). */
|
|
8
|
+
export function Zoom() {
|
|
9
|
+
const store = useStudio();
|
|
10
|
+
const zoom = useSignalValue(store.zoom);
|
|
11
|
+
const fitScale = useSignalValue(store.fitScale);
|
|
12
|
+
const shown = zoom === "fit" ? Math.round(fitScale * 100) : Math.round(zoom * 100);
|
|
13
|
+
const trigger = (_jsxs("button", { type: "button", className: "flex items-center gap-1.5 bg-bg-2 border border-line rounded-ui text-[12px] font-semibold text-ink-1 pl-3 pr-2 py-2 hover:bg-bg-3 hover:border-line-2 data-[popup-open]:bg-bg-3 outline-none", children: [_jsxs("span", { className: "font-mono min-w-[32px]", children: [shown, "%"] }), _jsx("span", { className: "text-ink-3", children: _jsx(Icon, { name: "chevron", size: 13 }) })] }));
|
|
14
|
+
return (_jsxs(StMenu, { trigger: trigger, side: "bottom", align: "end", children: [_jsx(MenuItem, { selected: zoom === "fit", onClick: () => store.setZoom("fit"), children: "Fit to size" }), _jsx(MenuSeparator, {}), ZOOM_STEPS.map((z) => (_jsx(MenuItem, { selected: zoom === z, onClick: () => store.setZoom(z), children: z === 1 ? "100%" : `${z * 100}%` }, z)))] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=zoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/components/header/zoom.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAExE,wDAAwD;AACxD,MAAM,UAAU,IAAI;IAClB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IAEnF,MAAM,OAAO,GAAG,CACd,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,8LAA8L,aAExM,gBAAM,SAAS,EAAC,wBAAwB,aAAE,KAAK,SAAS,EACxD,eAAM,SAAS,EAAC,YAAY,YAC1B,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,EAAE,EAAE,GAAI,GAC5B,IACA,CACV,CAAC;IAEF,OAAO,CACL,MAAC,MAAM,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,KAAK,aACjD,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,KAAK,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,4BAE5D,EACX,KAAC,aAAa,KAAG,EAChB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACrB,KAAC,QAAQ,IAAS,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YACpE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IADpB,CAAC,CAEL,CACZ,CAAC,IACK,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import { type IconName } from "./paths.js";
|
|
3
|
+
export type IconProps = {
|
|
4
|
+
name: IconName;
|
|
5
|
+
size?: number;
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: CSSProperties;
|
|
8
|
+
};
|
|
9
|
+
/** Inline-SVG icon. `name` selects a glyph; `size` sets width/height (px). */
|
|
10
|
+
export declare function Icon({ name, size, className, style }: IconProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../src/components/icon/icon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,YAAY,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,8EAA8E;AAC9E,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,SAAS,2CAapE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { PATHS } from "./paths.js";
|
|
3
|
+
/** Inline-SVG icon. `name` selects a glyph; `size` sets width/height (px). */
|
|
4
|
+
export function Icon({ name, size = 16, className, style }) {
|
|
5
|
+
return (_jsx("svg", { width: size, height: size, viewBox: "0 0 18 18", className: className, style: { display: "block", flex: "0 0 auto", ...style }, "aria-hidden": "true", children: PATHS[name] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon.js","sourceRoot":"","sources":["../../../src/components/icon/icon.tsx"],"names":[],"mappings":";AACA,OAAO,EAAiB,KAAK,EAAE,MAAM,YAAY,CAAC;AASlD,8EAA8E;AAC9E,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAa;IACnE,OAAO,CACL,cACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,iBAC3C,MAAM,YAEjB,KAAK,CAAC,IAAI,CAAC,GACR,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Inline-SVG glyph set (viewBox 0 0 18 18). Ported from the SmooveStudio design. */
|
|
2
|
+
export declare const PATHS: {
|
|
3
|
+
search: import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
chevron: import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
chevronRight: import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
play: import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
pause: import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
prev: import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
next: import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
volume: import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
mute: import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
loop: import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
fullscreen: import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
fullscreenExit: import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
check: import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
close: import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
sliders: import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
info: import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
code: import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
panelRight: import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
text: import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
layout: import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
image: import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
media: import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
basic: import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
spark: import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
dots: import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
layers: import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
progress: import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
eye: import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
eyeOff: import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
markIn: import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
markOut: import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
server: import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
camera: import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
film: import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
download: import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
queue: import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
trash: import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
clock: import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
loader: import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
plus: import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
minus: import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
grip: import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
};
|
|
46
|
+
export type IconName = keyof typeof PATHS;
|
|
47
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/components/icon/paths.tsx"],"names":[],"mappings":"AAUA,qFAAqF;AACrF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmMmB,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,KAAK,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const p = {
|
|
3
|
+
fill: "none",
|
|
4
|
+
stroke: "currentColor",
|
|
5
|
+
strokeWidth: 1.7,
|
|
6
|
+
strokeLinecap: "round",
|
|
7
|
+
strokeLinejoin: "round",
|
|
8
|
+
};
|
|
9
|
+
/** Inline-SVG glyph set (viewBox 0 0 18 18). Ported from the SmooveStudio design. */
|
|
10
|
+
export const PATHS = {
|
|
11
|
+
search: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "7.5", cy: "7.5", r: "4.5", ...p }), _jsx("path", { d: "M11 11l3.5 3.5", ...p })] })),
|
|
12
|
+
chevron: _jsx("path", { d: "M4 6.5l4 4 4-4", ...p }),
|
|
13
|
+
chevronRight: _jsx("path", { d: "M6.5 4l4 4-4 4", ...p }),
|
|
14
|
+
play: _jsx("path", { d: "M6 4.5l9 5.5-9 5.5z", fill: "currentColor", stroke: "none" }),
|
|
15
|
+
pause: (_jsxs("g", { fill: "currentColor", stroke: "none", children: [_jsx("rect", { x: "5", y: "4", width: "3.2", height: "12", rx: "1" }), _jsx("rect", { x: "11.8", y: "4", width: "3.2", height: "12", rx: "1" })] })),
|
|
16
|
+
prev: (_jsxs("g", { fill: "currentColor", stroke: "none", children: [_jsx("path", { d: "M14 5v10l-7-5z" }), _jsx("rect", { x: "4.5", y: "5", width: "2.2", height: "10", rx: "1" })] })),
|
|
17
|
+
next: (_jsxs("g", { fill: "currentColor", stroke: "none", children: [_jsx("path", { d: "M6 5v10l7-5z" }), _jsx("rect", { x: "13.3", y: "5", width: "2.2", height: "10", rx: "1" })] })),
|
|
18
|
+
volume: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M4 8v4h2.5L11 15.5v-11L6.5 8z", fill: "currentColor", stroke: "none" }), _jsx("path", { d: "M13.2 7.2a3.6 3.6 0 010 5.6M15 5.4a6 6 0 010 9.2", ...p })] })),
|
|
19
|
+
mute: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M4 8v4h2.5L11 15.5v-11L6.5 8z", fill: "currentColor", stroke: "none" }), _jsx("path", { d: "M13.5 8l3 4M16.5 8l-3 4", ...p })] })),
|
|
20
|
+
loop: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M4 8V7.5A2.5 2.5 0 016.5 5H12", ...p }), _jsx("path", { d: "M10.5 3l2 2-2 2", ...p }), _jsx("path", { d: "M14 10v.5A2.5 2.5 0 0111.5 13H6", ...p }), _jsx("path", { d: "M7.5 15l-2-2 2-2", ...p })] })),
|
|
21
|
+
fullscreen: _jsx("path", { d: "M4 7V4h3M16 7V4h-3M4 13v3h3M16 13v3h-3", ...p }),
|
|
22
|
+
fullscreenExit: _jsx("path", { d: "M7 4v3H4M13 4v3h3M7 16v-3H4M13 16v-3h3", ...p }),
|
|
23
|
+
check: _jsx("path", { d: "M4 8.5l3 3 6-6.5", ...p }),
|
|
24
|
+
close: _jsx("path", { d: "M5 5l8 8M13 5l-8 8", ...p }),
|
|
25
|
+
sliders: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M4 6h6M14 6h2M4 12h2M10 12h6", ...p }), _jsx("circle", { cx: "12", cy: "6", r: "2", ...p }), _jsx("circle", { cx: "8", cy: "12", r: "2", ...p })] })),
|
|
26
|
+
info: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "9", cy: "9", r: "6.2", ...p }), _jsx("path", { d: "M9 8v4M9 5.6v.01", ...p })] })),
|
|
27
|
+
code: _jsx("path", { d: "M7 6l-3 3 3 3M11 6l3 3-3 3", ...p }),
|
|
28
|
+
panelRight: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "4", width: "12", height: "10", rx: "1.6", ...p }), _jsx("path", { d: "M11 4v10", ...p })] })),
|
|
29
|
+
text: _jsx("path", { d: "M4 5h10M9 5v9M6.5 14h5", ...p }),
|
|
30
|
+
layout: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3.5", y: "3.5", width: "11", height: "11", rx: "1.5", ...p }), _jsx("path", { d: "M3.5 7.5h11M8 7.5v7", ...p })] })),
|
|
31
|
+
image: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3.5", y: "4", width: "11", height: "10", rx: "1.5", ...p }), _jsx("circle", { cx: "7", cy: "7.5", r: "1.2", ...p }), _jsx("path", { d: "M4 13l3.5-3.5 3 2.5L13 9l1.5 1.3", ...p })] })),
|
|
32
|
+
media: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "9", cy: "9", r: "6", ...p }), _jsx("path", { d: "M7.5 6.5l4 2.5-4 2.5z", fill: "currentColor", stroke: "none" })] })),
|
|
33
|
+
basic: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "9", cy: "9", r: "6", ...p }), _jsx("path", { d: "M9 5.5v7M5.5 9h7", ...p })] })),
|
|
34
|
+
spark: (_jsxs("g", { transform: "scale(0.15)", children: [_jsxs("g", { stroke: "currentColor", strokeWidth: "9", strokeLinecap: "round", children: [_jsx("line", { x1: "40", y1: "38", x2: "40", y2: "82" }), _jsx("line", { x1: "52", y1: "44", x2: "52", y2: "76" }), _jsx("line", { x1: "64", y1: "50", x2: "64", y2: "70" }), _jsx("line", { x1: "76", y1: "56", x2: "76", y2: "64" })] }), _jsx("circle", { cx: "89", cy: "60", r: "3.5", fill: "#FFC23C", stroke: "none" })] })),
|
|
35
|
+
dots: (_jsxs("g", { fill: "currentColor", stroke: "none", children: [_jsx("circle", { cx: "9", cy: "4.4", r: "1.45" }), _jsx("circle", { cx: "9", cy: "9", r: "1.45" }), _jsx("circle", { cx: "9", cy: "13.6", r: "1.45" })] })),
|
|
36
|
+
layers: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M9 3l6 3-6 3-6-3 6-3z", ...p }), _jsx("path", { d: "M3 9l6 3 6-3M3 12l6 3 6-3", ...p })] })),
|
|
37
|
+
progress: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M3 9h12", ...p }), _jsx("circle", { cx: "11.5", cy: "9", r: "2.2", fill: "currentColor", stroke: "none" })] })),
|
|
38
|
+
eye: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M2 9s2.6-4.6 7-4.6S16 9 16 9s-2.6 4.6-7 4.6S2 9 2 9z", ...p }), _jsx("circle", { cx: "9", cy: "9", r: "1.9", ...p })] })),
|
|
39
|
+
eyeOff: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M2.2 9s2.6-4.6 6.8-4.6c1.2 0 2.3.4 3.2.9M16 9s-1 1.8-2.9 3M9 13.6c-4.4 0-6.8-4.6-6.8-4.6", ...p }), _jsx("path", { d: "M3.4 3.4l11.2 11.2", ...p })] })),
|
|
40
|
+
markIn: _jsx("path", { d: "M10.5 4H6v10h4.5", ...p }),
|
|
41
|
+
markOut: _jsx("path", { d: "M7.5 4H12v10H7.5", ...p }),
|
|
42
|
+
server: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "3.5", width: "12", height: "4.6", rx: "1.3", ...p }), _jsx("rect", { x: "3", y: "9.9", width: "12", height: "4.6", rx: "1.3", ...p }), _jsx("path", { d: "M5.6 5.8h.01M5.6 12.2h.01", ...p })] })),
|
|
43
|
+
camera: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "2.6", y: "6", width: "12.8", height: "8.4", rx: "1.8", ...p }), _jsx("circle", { cx: "9", cy: "10.2", r: "2.5", ...p }), _jsx("path", { d: "M6.6 6l1-1.6h2.8l1 1.6", ...p })] })),
|
|
44
|
+
film: (_jsxs(_Fragment, { children: [_jsx("rect", { x: "3", y: "4", width: "12", height: "10", rx: "1.5", ...p }), _jsx("path", { d: "M6.5 4v10M11.5 4v10M3 7.2h3.5M11.5 7.2H15M3 10.8h3.5M11.5 10.8H15", ...p })] })),
|
|
45
|
+
download: (_jsxs(_Fragment, { children: [_jsx("path", { d: "M9 3v8M5.6 7.6L9 11l3.4-3.4", ...p }), _jsx("path", { d: "M3.6 13.6h10.8", ...p })] })),
|
|
46
|
+
queue: _jsx("path", { d: "M4 5h10M4 9h10M4 13h6", ...p }),
|
|
47
|
+
trash: _jsx("path", { d: "M4 5.6h10M7.4 5.6V4.2h3.2v1.4M5.4 5.6l.7 8.8h5.8l.7-8.8", ...p }),
|
|
48
|
+
clock: (_jsxs(_Fragment, { children: [_jsx("circle", { cx: "9", cy: "9", r: "6", ...p }), _jsx("path", { d: "M9 5.4V9l2.6 1.6", ...p })] })),
|
|
49
|
+
loader: _jsx("path", { d: "M9 3a6 6 0 11-5.2 3", ...p }),
|
|
50
|
+
plus: _jsx("path", { d: "M9 4v10M4 9h10", ...p }),
|
|
51
|
+
minus: _jsx("path", { d: "M4 9h10", ...p }),
|
|
52
|
+
grip: (_jsxs("g", { fill: "currentColor", stroke: "none", children: [_jsx("circle", { cx: "7", cy: "5", r: "1.3" }), _jsx("circle", { cx: "11", cy: "5", r: "1.3" }), _jsx("circle", { cx: "7", cy: "9", r: "1.3" }), _jsx("circle", { cx: "11", cy: "9", r: "1.3" }), _jsx("circle", { cx: "7", cy: "13", r: "1.3" }), _jsx("circle", { cx: "11", cy: "13", r: "1.3" })] })),
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/components/icon/paths.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Searchable composition catalog — ungrouped rows first, then named groups. */
|
|
2
|
+
export declare function Library({ heading, searchPlaceholder, search, }: {
|
|
3
|
+
heading?: string;
|
|
4
|
+
searchPlaceholder?: string;
|
|
5
|
+
/** Show the search field (set false to omit it). */
|
|
6
|
+
search?: boolean;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/components/left-panel/library.tsx"],"names":[],"mappings":"AAQA,gFAAgF;AAChF,wBAAgB,OAAO,CAAC,EACtB,OAAwB,EACxB,iBAA0C,EAC1C,MAAa,GACd,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAsGA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { useStudio } from "../../hooks/use-studio.js";
|
|
4
|
+
import { useSignalValue } from "../../signals/signal-bridge.js";
|
|
5
|
+
import { Icon } from "../icon/icon.js";
|
|
6
|
+
import { SidebarGroup } from "./sidebar-group.js";
|
|
7
|
+
import { SidebarItem } from "./sidebar-item.js";
|
|
8
|
+
/** Searchable composition catalog — ungrouped rows first, then named groups. */
|
|
9
|
+
export function Library({ heading = "Compositions", searchPlaceholder = "Search compositions…", search = true, }) {
|
|
10
|
+
const store = useStudio();
|
|
11
|
+
const selectedId = useSignalValue(store.selectedId);
|
|
12
|
+
const status = useSignalValue(store.loadStatus); // re-render rows as comps load
|
|
13
|
+
const [q, setQ] = useState("");
|
|
14
|
+
const ql = q.trim().toLowerCase();
|
|
15
|
+
// Ungrouped entries render as a flat list; entries with a `group` collapse
|
|
16
|
+
// under that heading. Order is preserved from the registry.
|
|
17
|
+
const { flat, groups } = useMemo(() => {
|
|
18
|
+
const flat = [];
|
|
19
|
+
const map = new Map();
|
|
20
|
+
for (const e of store.entries) {
|
|
21
|
+
if (e.group) {
|
|
22
|
+
const list = map.get(e.group) ?? [];
|
|
23
|
+
list.push(e);
|
|
24
|
+
map.set(e.group, list);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
flat.push(e);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return { flat, groups: [...map.entries()].map(([group, items]) => ({ group, items })) };
|
|
31
|
+
}, [store.entries]);
|
|
32
|
+
const match = (e, group) => !ql ||
|
|
33
|
+
(e.title ?? e.id).toLowerCase().includes(ql) ||
|
|
34
|
+
(e.tags ?? []).some((t) => t.toLowerCase().includes(ql)) ||
|
|
35
|
+
(group ?? "").toLowerCase().includes(ql);
|
|
36
|
+
const flatHits = flat.filter((e) => match(e));
|
|
37
|
+
const groupHits = groups
|
|
38
|
+
.map((g) => ({ ...g, items: g.items.filter((e) => match(e, g.group)) }))
|
|
39
|
+
.filter((g) => g.items.length > 0);
|
|
40
|
+
const total = flat.length + groups.reduce((n, g) => n + g.items.length, 0);
|
|
41
|
+
const empty = flatHits.length === 0 && groupHits.length === 0;
|
|
42
|
+
const renderItem = (e) => {
|
|
43
|
+
const active = e.id === selectedId;
|
|
44
|
+
const loading = status[e.id] === "loading";
|
|
45
|
+
return (_jsx(SidebarItem, { active: active, title: e.title ?? e.id, dot: active && !loading, loading: loading, onClick: () => store.select(e.id) }, e.id));
|
|
46
|
+
};
|
|
47
|
+
return (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [search && (_jsx("div", { className: "px-3 pt-3 pb-2", children: _jsxs("div", { className: "relative", children: [_jsx("span", { className: "pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-ink-3", children: _jsx(Icon, { name: "search", size: 15 }) }), _jsx("input", { value: q, onChange: (e) => setQ(e.target.value), placeholder: searchPlaceholder, className: "w-full rounded-control border border-line bg-bg-2 pl-8 pr-2.5 py-[7px] text-[12.5px] text-ink-1 outline-none transition-colors placeholder:text-ink-3 focus:border-accent-line" })] }) })), _jsxs("div", { className: "scroll min-h-0 flex-1 overflow-y-auto px-2 pb-6", children: [_jsxs("div", { className: "flex items-center justify-between px-2 pt-1 pb-1.5", children: [_jsx("span", { className: "text-[10px] font-bold uppercase tracking-[.12em] text-ink-3", children: heading }), _jsx("span", { className: "font-mono text-[10px] text-ink-3", children: total })] }), empty ? (_jsxs("div", { className: "px-2 py-8 text-center text-[12px] text-ink-3", children: ["No compositions match \u201C", q.trim(), "\u201D"] })) : (_jsxs(_Fragment, { children: [flatHits.map(renderItem), groupHits.map(({ group, items }) => (_jsx(SidebarGroup, { label: group, count: items.length, defaultOpen: true, forceOpen: ql ? true : undefined, children: items.map(renderItem) }, group)))] }))] })] }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/components/left-panel/library.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,gFAAgF;AAChF,MAAM,UAAU,OAAO,CAAC,EACtB,OAAO,GAAG,cAAc,EACxB,iBAAiB,GAAG,sBAAsB,EAC1C,MAAM,GAAG,IAAI,GAMd;IACC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,+BAA+B;IAChF,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAElC,2EAA2E;IAC3E,4DAA4D;IAC5D,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,IAAI,GAAoB,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;IAC1F,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,KAAc,EAAW,EAAE,CAC1D,CAAC,EAAE;QACH,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACvE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;IAE9D,MAAM,UAAU,GAAG,CAAC,CAAgB,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;QAC3C,OAAO,CACL,KAAC,WAAW,IAEV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EACtB,GAAG,EAAE,MAAM,IAAI,CAAC,OAAO,EACvB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAL5B,CAAC,CAAC,EAAE,CAMT,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC1C,MAAM,IAAI,CACT,cAAK,SAAS,EAAC,gBAAgB,YAC7B,eAAK,SAAS,EAAC,UAAU,aACvB,eAAM,SAAS,EAAC,2EAA2E,YACzF,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,GAAI,GAC3B,EACP,gBACE,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACrC,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAC,gLAAgL,GAC1L,IACE,GACF,CACP,EAED,eAAK,SAAS,EAAC,iDAAiD,aAC9D,eAAK,SAAS,EAAC,oDAAoD,aACjE,eAAM,SAAS,EAAC,6DAA6D,YAC1E,OAAO,GACH,EACP,eAAM,SAAS,EAAC,kCAAkC,YAAE,KAAK,GAAQ,IAC7D,EAEL,KAAK,CAAC,CAAC,CAAC,CACP,eAAK,SAAS,EAAC,8CAA8C,6CACnC,CAAC,CAAC,IAAI,EAAE,cAC5B,CACP,CAAC,CAAC,CAAC,CACF,8BACG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EACxB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACnC,KAAC,YAAY,IAEX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,CAAC,MAAM,EACnB,WAAW,QACX,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,YAE/B,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IANjB,KAAK,CAOG,CAChB,CAAC,IACD,CACJ,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type SidebarGroupProps = {
|
|
3
|
+
label: string;
|
|
4
|
+
count?: number;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
/** When set, controls open state externally (e.g. force-open while searching). */
|
|
7
|
+
forceOpen?: boolean;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
};
|
|
10
|
+
/** Collapsible composition group — its rows are indented behind a guide rail. */
|
|
11
|
+
export declare function SidebarGroup({ label, count, defaultOpen, forceOpen, children, }: SidebarGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=sidebar-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-group.d.ts","sourceRoot":"","sources":["../../../src/components/left-panel/sidebar-group.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAIjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,WAAkB,EAClB,SAAS,EACT,QAAQ,GACT,EAAE,iBAAiB,2CAmCnB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { cn } from "../../lib/cn.js";
|
|
4
|
+
import { Icon } from "../icon/icon.js";
|
|
5
|
+
/** Collapsible composition group — its rows are indented behind a guide rail. */
|
|
6
|
+
export function SidebarGroup({ label, count, defaultOpen = true, forceOpen, children, }) {
|
|
7
|
+
const [open, setOpen] = useState(defaultOpen);
|
|
8
|
+
const isOpen = forceOpen != null ? forceOpen : open;
|
|
9
|
+
return (_jsxs("div", { className: "mt-0.5", children: [_jsxs("button", { type: "button", onClick: () => setOpen((o) => !o), className: "group flex w-full items-center gap-1.5 rounded-control px-1.5 py-1.5 text-ink-3 transition-colors hover:text-ink-1", children: [_jsx("span", { className: cn("flex transition-transform duration-200", !isOpen && "-rotate-90"), children: _jsx(Icon, { name: "chevron", size: 13 }) }), _jsx("span", { className: "text-[11px] font-semibold uppercase tracking-[.07em]", children: label }), count != null && (_jsx("span", { className: "ml-auto grid h-[17px] min-w-[17px] place-items-center rounded-full bg-bg-2 px-1.5 font-mono text-[10px] font-medium text-ink-3 transition-colors group-hover:text-ink-2", children: count }))] }), _jsx("div", { className: cn("grid transition-[grid-template-rows,opacity] duration-200", isOpen ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"), children: _jsx("div", { className: "min-h-0 overflow-hidden", children: _jsxs("div", { className: "relative ml-1.5 pl-2", children: [_jsx("span", { className: "absolute bottom-0.5 left-0 top-0.5 w-px bg-line" }), children] }) }) })] }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=sidebar-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-group.js","sourceRoot":"","sources":["../../../src/components/left-panel/sidebar-group.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAWvC,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,WAAW,GAAG,IAAI,EAClB,SAAS,EACT,QAAQ,GACU;IAClB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,OAAO,CACL,eAAK,SAAS,EAAC,QAAQ,aACrB,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACjC,SAAS,EAAC,oHAAoH,aAE9H,eAAM,SAAS,EAAE,EAAE,CAAC,wCAAwC,EAAE,CAAC,MAAM,IAAI,YAAY,CAAC,YACpF,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,EAAE,EAAE,GAAI,GAC5B,EACP,eAAM,SAAS,EAAC,sDAAsD,YAAE,KAAK,GAAQ,EACpF,KAAK,IAAI,IAAI,IAAI,CAChB,eAAM,SAAS,EAAC,yKAAyK,YACtL,KAAK,GACD,CACR,IACM,EACT,cACE,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,2BAA2B,CACrE,YAED,cAAK,SAAS,EAAC,yBAAyB,YACtC,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAM,SAAS,EAAC,iDAAiD,GAAG,EACnE,QAAQ,IACL,GACF,GACF,IACF,CACP,CAAC;AACJ,CAAC"}
|