@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.
Files changed (276) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +60 -0
  3. package/dist/components/brand/brand.d.ts +9 -0
  4. package/dist/components/brand/brand.d.ts.map +1 -0
  5. package/dist/components/brand/brand.js +11 -0
  6. package/dist/components/brand/brand.js.map +1 -0
  7. package/dist/components/button/button.d.ts +21 -0
  8. package/dist/components/button/button.d.ts.map +1 -0
  9. package/dist/components/button/button.js +20 -0
  10. package/dist/components/button/button.js.map +1 -0
  11. package/dist/components/button/icon-button.d.ts +27 -0
  12. package/dist/components/button/icon-button.d.ts.map +1 -0
  13. package/dist/components/button/icon-button.js +19 -0
  14. package/dist/components/button/icon-button.js.map +1 -0
  15. package/dist/components/header/header-title.d.ts +8 -0
  16. package/dist/components/header/header-title.d.ts.map +1 -0
  17. package/dist/components/header/header-title.js +7 -0
  18. package/dist/components/header/header-title.js.map +1 -0
  19. package/dist/components/header/header.d.ts +7 -0
  20. package/dist/components/header/header.d.ts.map +1 -0
  21. package/dist/components/header/header.js +7 -0
  22. package/dist/components/header/header.js.map +1 -0
  23. package/dist/components/header/zoom.d.ts +3 -0
  24. package/dist/components/header/zoom.d.ts.map +1 -0
  25. package/dist/components/header/zoom.js +16 -0
  26. package/dist/components/header/zoom.js.map +1 -0
  27. package/dist/components/icon/icon.d.ts +11 -0
  28. package/dist/components/icon/icon.d.ts.map +1 -0
  29. package/dist/components/icon/icon.js +7 -0
  30. package/dist/components/icon/icon.js.map +1 -0
  31. package/dist/components/icon/paths.d.ts +47 -0
  32. package/dist/components/icon/paths.d.ts.map +1 -0
  33. package/dist/components/icon/paths.js +54 -0
  34. package/dist/components/icon/paths.js.map +1 -0
  35. package/dist/components/left-panel/library.d.ts +8 -0
  36. package/dist/components/left-panel/library.d.ts.map +1 -0
  37. package/dist/components/left-panel/library.js +49 -0
  38. package/dist/components/left-panel/library.js.map +1 -0
  39. package/dist/components/left-panel/sidebar-group.d.ts +12 -0
  40. package/dist/components/left-panel/sidebar-group.d.ts.map +1 -0
  41. package/dist/components/left-panel/sidebar-group.js +11 -0
  42. package/dist/components/left-panel/sidebar-group.js.map +1 -0
  43. package/dist/components/left-panel/sidebar-item.d.ts +17 -0
  44. package/dist/components/left-panel/sidebar-item.d.ts.map +1 -0
  45. package/dist/components/left-panel/sidebar-item.js +12 -0
  46. package/dist/components/left-panel/sidebar-item.js.map +1 -0
  47. package/dist/components/left-panel/sidebar.d.ts +8 -0
  48. package/dist/components/left-panel/sidebar.d.ts.map +1 -0
  49. package/dist/components/left-panel/sidebar.js +8 -0
  50. package/dist/components/left-panel/sidebar.js.map +1 -0
  51. package/dist/components/primitives/dialog.d.ts +33 -0
  52. package/dist/components/primitives/dialog.d.ts.map +1 -0
  53. package/dist/components/primitives/dialog.js +30 -0
  54. package/dist/components/primitives/dialog.js.map +1 -0
  55. package/dist/components/primitives/menu.d.ts +25 -0
  56. package/dist/components/primitives/menu.d.ts.map +1 -0
  57. package/dist/components/primitives/menu.js +31 -0
  58. package/dist/components/primitives/menu.js.map +1 -0
  59. package/dist/components/primitives/number-field.d.ts +12 -0
  60. package/dist/components/primitives/number-field.d.ts.map +1 -0
  61. package/dist/components/primitives/number-field.js +7 -0
  62. package/dist/components/primitives/number-field.js.map +1 -0
  63. package/dist/components/primitives/portal-context.d.ts +9 -0
  64. package/dist/components/primitives/portal-context.d.ts.map +1 -0
  65. package/dist/components/primitives/portal-context.js +10 -0
  66. package/dist/components/primitives/portal-context.js.map +1 -0
  67. package/dist/components/primitives/select.d.ts +14 -0
  68. package/dist/components/primitives/select.d.ts.map +1 -0
  69. package/dist/components/primitives/select.js +11 -0
  70. package/dist/components/primitives/select.js.map +1 -0
  71. package/dist/components/primitives/slider.d.ts +10 -0
  72. package/dist/components/primitives/slider.d.ts.map +1 -0
  73. package/dist/components/primitives/slider.js +7 -0
  74. package/dist/components/primitives/slider.js.map +1 -0
  75. package/dist/components/primitives/switch.d.ts +5 -0
  76. package/dist/components/primitives/switch.d.ts.map +1 -0
  77. package/dist/components/primitives/switch.js +6 -0
  78. package/dist/components/primitives/switch.js.map +1 -0
  79. package/dist/components/primitives/tabs.d.ts +23 -0
  80. package/dist/components/primitives/tabs.d.ts.map +1 -0
  81. package/dist/components/primitives/tabs.js +17 -0
  82. package/dist/components/primitives/tabs.js.map +1 -0
  83. package/dist/components/primitives/tooltip.d.ts +9 -0
  84. package/dist/components/primitives/tooltip.d.ts.map +1 -0
  85. package/dist/components/primitives/tooltip.js +11 -0
  86. package/dist/components/primitives/tooltip.js.map +1 -0
  87. package/dist/components/render/export-frame-dialog.d.ts +8 -0
  88. package/dist/components/render/export-frame-dialog.d.ts.map +1 -0
  89. package/dist/components/render/export-frame-dialog.js +60 -0
  90. package/dist/components/render/export-frame-dialog.js.map +1 -0
  91. package/dist/components/render/render-dialog.d.ts +8 -0
  92. package/dist/components/render/render-dialog.d.ts.map +1 -0
  93. package/dist/components/render/render-dialog.js +95 -0
  94. package/dist/components/render/render-dialog.js.map +1 -0
  95. package/dist/components/render/render-queue.d.ts +5 -0
  96. package/dist/components/render/render-queue.d.ts.map +1 -0
  97. package/dist/components/render/render-queue.js +40 -0
  98. package/dist/components/render/render-queue.js.map +1 -0
  99. package/dist/components/right-panel/panel-handle.d.ts +3 -0
  100. package/dist/components/right-panel/panel-handle.d.ts.map +1 -0
  101. package/dist/components/right-panel/panel-handle.js +9 -0
  102. package/dist/components/right-panel/panel-handle.js.map +1 -0
  103. package/dist/components/right-panel/panel-tabs.d.ts +3 -0
  104. package/dist/components/right-panel/panel-tabs.d.ts.map +1 -0
  105. package/dist/components/right-panel/panel-tabs.js +26 -0
  106. package/dist/components/right-panel/panel-tabs.js.map +1 -0
  107. package/dist/components/right-panel/panel.d.ts +8 -0
  108. package/dist/components/right-panel/panel.d.ts.map +1 -0
  109. package/dist/components/right-panel/panel.js +16 -0
  110. package/dist/components/right-panel/panel.js.map +1 -0
  111. package/dist/components/schema-form/field.d.ts +9 -0
  112. package/dist/components/schema-form/field.d.ts.map +1 -0
  113. package/dist/components/schema-form/field.js +102 -0
  114. package/dist/components/schema-form/field.js.map +1 -0
  115. package/dist/components/schema-form/schema-form.d.ts +3 -0
  116. package/dist/components/schema-form/schema-form.d.ts.map +1 -0
  117. package/dist/components/schema-form/schema-form.js +18 -0
  118. package/dist/components/schema-form/schema-form.js.map +1 -0
  119. package/dist/components/stage/stage.d.ts +12 -0
  120. package/dist/components/stage/stage.d.ts.map +1 -0
  121. package/dist/components/stage/stage.js +103 -0
  122. package/dist/components/stage/stage.js.map +1 -0
  123. package/dist/components/studio/features.d.ts +4 -0
  124. package/dist/components/studio/features.d.ts.map +1 -0
  125. package/dist/components/studio/features.js +18 -0
  126. package/dist/components/studio/features.js.map +1 -0
  127. package/dist/components/studio/layout.d.ts +19 -0
  128. package/dist/components/studio/layout.d.ts.map +1 -0
  129. package/dist/components/studio/layout.js +17 -0
  130. package/dist/components/studio/layout.js.map +1 -0
  131. package/dist/components/studio/studio-context.d.ts +53 -0
  132. package/dist/components/studio/studio-context.d.ts.map +1 -0
  133. package/dist/components/studio/studio-context.js +3 -0
  134. package/dist/components/studio/studio-context.js.map +1 -0
  135. package/dist/components/studio/studio.d.ts +21 -0
  136. package/dist/components/studio/studio.d.ts.map +1 -0
  137. package/dist/components/studio/studio.js +38 -0
  138. package/dist/components/studio/studio.js.map +1 -0
  139. package/dist/components/timeline/layered-body.d.ts +8 -0
  140. package/dist/components/timeline/layered-body.d.ts.map +1 -0
  141. package/dist/components/timeline/layered-body.js +75 -0
  142. package/dist/components/timeline/layered-body.js.map +1 -0
  143. package/dist/components/timeline/region-handles.d.ts +8 -0
  144. package/dist/components/timeline/region-handles.d.ts.map +1 -0
  145. package/dist/components/timeline/region-handles.js +13 -0
  146. package/dist/components/timeline/region-handles.js.map +1 -0
  147. package/dist/components/timeline/ruler.d.ts +7 -0
  148. package/dist/components/timeline/ruler.d.ts.map +1 -0
  149. package/dist/components/timeline/ruler.js +19 -0
  150. package/dist/components/timeline/ruler.js.map +1 -0
  151. package/dist/components/timeline/scrubber.d.ts +6 -0
  152. package/dist/components/timeline/scrubber.d.ts.map +1 -0
  153. package/dist/components/timeline/scrubber.js +25 -0
  154. package/dist/components/timeline/scrubber.js.map +1 -0
  155. package/dist/components/timeline/timeline-header.d.ts +3 -0
  156. package/dist/components/timeline/timeline-header.d.ts.map +1 -0
  157. package/dist/components/timeline/timeline-header.js +36 -0
  158. package/dist/components/timeline/timeline-header.js.map +1 -0
  159. package/dist/components/timeline/timeline.d.ts +5 -0
  160. package/dist/components/timeline/timeline.d.ts.map +1 -0
  161. package/dist/components/timeline/timeline.js +16 -0
  162. package/dist/components/timeline/timeline.js.map +1 -0
  163. package/dist/components/timeline/transport.d.ts +5 -0
  164. package/dist/components/timeline/transport.d.ts.map +1 -0
  165. package/dist/components/timeline/transport.js +21 -0
  166. package/dist/components/timeline/transport.js.map +1 -0
  167. package/dist/components/timeline/use-scrub-surface.d.ts +20 -0
  168. package/dist/components/timeline/use-scrub-surface.d.ts.map +1 -0
  169. package/dist/components/timeline/use-scrub-surface.js +56 -0
  170. package/dist/components/timeline/use-scrub-surface.js.map +1 -0
  171. package/dist/components/toasts/toasts.d.ts +4 -0
  172. package/dist/components/toasts/toasts.d.ts.map +1 -0
  173. package/dist/components/toasts/toasts.js +22 -0
  174. package/dist/components/toasts/toasts.js.map +1 -0
  175. package/dist/hooks/use-composition.d.ts +10 -0
  176. package/dist/hooks/use-composition.d.ts.map +1 -0
  177. package/dist/hooks/use-composition.js +13 -0
  178. package/dist/hooks/use-composition.js.map +1 -0
  179. package/dist/hooks/use-layers.d.ts +9 -0
  180. package/dist/hooks/use-layers.d.ts.map +1 -0
  181. package/dist/hooks/use-layers.js +34 -0
  182. package/dist/hooks/use-layers.js.map +1 -0
  183. package/dist/hooks/use-playback.d.ts +15 -0
  184. package/dist/hooks/use-playback.d.ts.map +1 -0
  185. package/dist/hooks/use-playback.js +38 -0
  186. package/dist/hooks/use-playback.js.map +1 -0
  187. package/dist/hooks/use-props-form.d.ts +15 -0
  188. package/dist/hooks/use-props-form.d.ts.map +1 -0
  189. package/dist/hooks/use-props-form.js +22 -0
  190. package/dist/hooks/use-props-form.js.map +1 -0
  191. package/dist/hooks/use-real-fps.d.ts +3 -0
  192. package/dist/hooks/use-real-fps.d.ts.map +1 -0
  193. package/dist/hooks/use-real-fps.js +27 -0
  194. package/dist/hooks/use-real-fps.js.map +1 -0
  195. package/dist/hooks/use-shortcuts.d.ts +7 -0
  196. package/dist/hooks/use-shortcuts.d.ts.map +1 -0
  197. package/dist/hooks/use-shortcuts.js +53 -0
  198. package/dist/hooks/use-shortcuts.js.map +1 -0
  199. package/dist/hooks/use-studio.d.ts +4 -0
  200. package/dist/hooks/use-studio.d.ts.map +1 -0
  201. package/dist/hooks/use-studio.js +10 -0
  202. package/dist/hooks/use-studio.js.map +1 -0
  203. package/dist/index.d.ts +145 -0
  204. package/dist/index.d.ts.map +1 -0
  205. package/dist/index.js +117 -0
  206. package/dist/index.js.map +1 -0
  207. package/dist/lib/cn.d.ts +3 -0
  208. package/dist/lib/cn.d.ts.map +1 -0
  209. package/dist/lib/cn.js +8 -0
  210. package/dist/lib/cn.js.map +1 -0
  211. package/dist/lib/constants.d.ts +28 -0
  212. package/dist/lib/constants.d.ts.map +1 -0
  213. package/dist/lib/constants.js +38 -0
  214. package/dist/lib/constants.js.map +1 -0
  215. package/dist/lib/cva.d.ts +25 -0
  216. package/dist/lib/cva.d.ts.map +1 -0
  217. package/dist/lib/cva.js +23 -0
  218. package/dist/lib/cva.js.map +1 -0
  219. package/dist/lib/format.d.ts +13 -0
  220. package/dist/lib/format.d.ts.map +1 -0
  221. package/dist/lib/format.js +25 -0
  222. package/dist/lib/format.js.map +1 -0
  223. package/dist/lib/ids.d.ts +3 -0
  224. package/dist/lib/ids.d.ts.map +1 -0
  225. package/dist/lib/ids.js +6 -0
  226. package/dist/lib/ids.js.map +1 -0
  227. package/dist/registry/define-registry.d.ts +8 -0
  228. package/dist/registry/define-registry.d.ts.map +1 -0
  229. package/dist/registry/define-registry.js +71 -0
  230. package/dist/registry/define-registry.js.map +1 -0
  231. package/dist/registry/props-signal.d.ts +9 -0
  232. package/dist/registry/props-signal.d.ts.map +1 -0
  233. package/dist/registry/props-signal.js +25 -0
  234. package/dist/registry/props-signal.js.map +1 -0
  235. package/dist/schema/kf.d.ts +28 -0
  236. package/dist/schema/kf.d.ts.map +1 -0
  237. package/dist/schema/kf.js +82 -0
  238. package/dist/schema/kf.js.map +1 -0
  239. package/dist/schema/types.d.ts +69 -0
  240. package/dist/schema/types.d.ts.map +1 -0
  241. package/dist/schema/types.js +4 -0
  242. package/dist/schema/types.js.map +1 -0
  243. package/dist/server/index.d.ts +6 -0
  244. package/dist/server/index.d.ts.map +1 -0
  245. package/dist/server/index.js +7 -0
  246. package/dist/server/index.js.map +1 -0
  247. package/dist/server/map.d.ts +19 -0
  248. package/dist/server/map.d.ts.map +1 -0
  249. package/dist/server/map.js +63 -0
  250. package/dist/server/map.js.map +1 -0
  251. package/dist/server/render-queue.d.ts +46 -0
  252. package/dist/server/render-queue.d.ts.map +1 -0
  253. package/dist/server/render-queue.js +147 -0
  254. package/dist/server/render-queue.js.map +1 -0
  255. package/dist/server/temp-storage.d.ts +13 -0
  256. package/dist/server/temp-storage.d.ts.map +1 -0
  257. package/dist/server/temp-storage.js +55 -0
  258. package/dist/server/temp-storage.js.map +1 -0
  259. package/dist/server/types.d.ts +57 -0
  260. package/dist/server/types.d.ts.map +1 -0
  261. package/dist/server/types.js +2 -0
  262. package/dist/server/types.js.map +1 -0
  263. package/dist/signals/signal-bridge.d.ts +18 -0
  264. package/dist/signals/signal-bridge.d.ts.map +1 -0
  265. package/dist/signals/signal-bridge.js +39 -0
  266. package/dist/signals/signal-bridge.js.map +1 -0
  267. package/dist/store/store.d.ts +74 -0
  268. package/dist/store/store.d.ts.map +1 -0
  269. package/dist/store/store.js +276 -0
  270. package/dist/store/store.js.map +1 -0
  271. package/dist/styles/studio.css +2 -0
  272. package/dist/types.d.ts +112 -0
  273. package/dist/types.d.ts.map +1 -0
  274. package/dist/types.js +2 -0
  275. package/dist/types.js.map +1 -0
  276. package/package.json +66 -0
@@ -0,0 +1,17 @@
1
+ import type { IconName } from "../icon/paths.js";
2
+ export type SidebarItemProps = {
3
+ active?: boolean;
4
+ icon?: IconName;
5
+ title: string;
6
+ sub?: string;
7
+ badge?: number;
8
+ dot?: boolean;
9
+ /** Show a spinner in the trailing slot (e.g. a composition resolving). */
10
+ loading?: boolean;
11
+ onClick?: () => void;
12
+ };
13
+ /** A sidebar row — used for compositions and for top-level nav items. */
14
+ export declare function SidebarItem({ active, icon, title, sub, badge, dot, loading, onClick, }: SidebarItemProps): import("react/jsx-runtime").JSX.Element;
15
+ /** A leaf nav row (alias of SidebarItem, for semantics). */
16
+ export declare const NavItem: typeof SidebarItem;
17
+ //# sourceMappingURL=sidebar-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-item.d.ts","sourceRoot":"","sources":["../../../src/components/left-panel/sidebar-item.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,IAAI,EACJ,KAAK,EACL,GAAG,EACH,KAAK,EACL,GAAG,EACH,OAAO,EACP,OAAO,GACR,EAAE,gBAAgB,2CAuDlB;AAED,4DAA4D;AAC5D,eAAO,MAAM,OAAO,oBAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/cn.js";
3
+ import { Icon } from "../icon/icon.js";
4
+ /** A sidebar row — used for compositions and for top-level nav items. */
5
+ export function SidebarItem({ active, icon, title, sub, badge, dot, loading, onClick, }) {
6
+ return (_jsxs("button", { type: "button", onClick: onClick, className: cn("group relative flex w-full items-center gap-2.5 rounded-control px-2 py-1.5 text-left transition-colors", active ? "bg-accent-soft text-ink-1" : "text-ink-2 hover:bg-bg-2 hover:text-ink-1"), children: [_jsx("span", { className: cn("absolute left-0 top-1/2 h-4 w-[3px] -translate-y-1/2 rounded-r-full bg-accent transition-opacity", active ? "opacity-100" : "opacity-0") }), icon && (_jsx("span", { className: cn("grid size-7 flex-none place-items-center rounded-[7px] border transition-colors", active
7
+ ? "border-accent-line bg-accent/15 text-accent-2"
8
+ : "border-line bg-bg-2 text-ink-2 group-hover:border-line-2 group-hover:text-ink-1"), children: _jsx(Icon, { name: icon, size: 15 }) })), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate text-[13px] font-medium leading-tight", children: title }), sub && (_jsx("span", { className: cn("mt-0.5 block truncate text-[11px] leading-tight", active ? "text-ink-2" : "text-ink-3"), children: sub }))] }), loading ? (_jsx(Icon, { name: "loader", size: 14, className: "spin flex-none text-ink-3" })) : badge != null && badge > 0 ? (_jsx("span", { className: "grid h-[18px] min-w-[18px] flex-none place-items-center rounded-full bg-accent px-1.5 font-mono text-[10.5px] font-bold text-white shadow-[0_0_8px_var(--color-accent-soft)]", children: badge })) : (dot && (_jsx("span", { className: "size-1.5 flex-none rounded-full bg-accent shadow-[0_0_7px_var(--color-accent-soft)]" })))] }));
9
+ }
10
+ /** A leaf nav row (alias of SidebarItem, for semantics). */
11
+ export const NavItem = SidebarItem;
12
+ //# sourceMappingURL=sidebar-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-item.js","sourceRoot":"","sources":["../../../src/components/left-panel/sidebar-item.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAevC,yEAAyE;AACzE,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,IAAI,EACJ,KAAK,EACL,GAAG,EACH,KAAK,EACL,GAAG,EACH,OAAO,EACP,OAAO,GACU;IACjB,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CACX,yGAAyG,EACzG,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,2CAA2C,CACnF,aAGD,eACE,SAAS,EAAE,EAAE,CACX,kGAAkG,EAClG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CACrC,GACD,EACD,IAAI,IAAI,CACP,eACE,SAAS,EAAE,EAAE,CACX,iFAAiF,EACjF,MAAM;oBACJ,CAAC,CAAC,+CAA+C;oBACjD,CAAC,CAAC,iFAAiF,CACtF,YAED,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,GACzB,CACR,EACD,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,sDAAsD,YAAE,KAAK,GAAQ,EACpF,GAAG,IAAI,CACN,eACE,SAAS,EAAE,EAAE,CACX,iDAAiD,EACjD,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CACrC,YAEA,GAAG,GACC,CACR,IACI,EACN,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,2BAA2B,GAAG,CACvE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAC/B,eAAM,SAAS,EAAC,8KAA8K,YAC3L,KAAK,GACD,CACR,CAAC,CAAC,CAAC,CACF,GAAG,IAAI,CACL,eAAM,SAAS,EAAC,qFAAqF,GAAG,CACzG,CACF,IACM,CACV,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from "react";
2
+ /** Left rail container. */
3
+ export declare function Sidebar({ children, className, width, }: {
4
+ children: ReactNode;
5
+ className?: string;
6
+ width?: string;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/left-panel/sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,2BAA2B;AAC3B,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,KAAK,GACN,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,2CAUA"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/cn.js";
3
+ /** Left rail container. */
4
+ export function Sidebar({ children, className, width, }) {
5
+ const w = width ?? "var(--spacing-sidebar)";
6
+ return (_jsx("aside", { className: cn("flex flex-col min-h-0 bg-bg-1 border-r border-line", className), style: { width: w, flex: `0 0 ${w}` }, children: children }));
7
+ }
8
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/components/left-panel/sidebar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,2BAA2B;AAC3B,MAAM,UAAU,OAAO,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,KAAK,GAKN;IACC,MAAM,CAAC,GAAG,KAAK,IAAI,wBAAwB,CAAC;IAC5C,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CAAC,oDAAoD,EAAE,SAAS,CAAC,EAC9E,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,YAEpC,QAAQ,GACH,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { Dialog } from "@base-ui/react/dialog";
2
+ import type { ReactNode } from "react";
3
+ import type { IconName } from "../icon/paths.js";
4
+ declare function DialogRoot({ open, onOpenChange, children, }: {
5
+ open?: boolean;
6
+ onOpenChange?: (open: boolean) => void;
7
+ children: ReactNode;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ declare function DialogPopup({ width, children, className, }: {
10
+ width?: number;
11
+ children: ReactNode;
12
+ className?: string;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ declare function DialogHeader({ icon, title }: {
15
+ icon?: IconName;
16
+ title: ReactNode;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ export declare const StDialog: typeof DialogRoot & {
19
+ Popup: typeof DialogPopup;
20
+ Header: typeof DialogHeader;
21
+ Body: ({ children }: {
22
+ children: ReactNode;
23
+ }) => import("react/jsx-runtime").JSX.Element;
24
+ Footer: ({ children }: {
25
+ children: ReactNode;
26
+ }) => import("react/jsx-runtime").JSX.Element;
27
+ Title: import("react").ForwardRefExoticComponent<Omit<import("@base-ui/react").AlertDialogTitleProps, "ref"> & import("react").RefAttributes<HTMLHeadingElement>>;
28
+ Description: import("react").ForwardRefExoticComponent<Omit<import("@base-ui/react").AlertDialogDescriptionProps, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
29
+ Close: import("react").ForwardRefExoticComponent<Omit<import("@base-ui/react").AlertDialogCloseProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
30
+ Trigger: Dialog.Trigger;
31
+ };
32
+ export {};
33
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AASjD,iBAAS,UAAU,CAAC,EAClB,IAAI,EACJ,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,iBAAS,WAAW,CAAC,EACnB,KAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAUA;AAED,iBAAS,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,2CAY3E;AAUD,eAAO,MAAM,QAAQ;;;yBARa;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE;2BAIrB;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE;;;;;CAazD,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Dialog } from "@base-ui/react/dialog";
3
+ import { cn } from "../../lib/cn.js";
4
+ import { IconButton } from "../button/icon-button.js";
5
+ import { Icon } from "../icon/icon.js";
6
+ import { usePortalContainer } from "./portal-context.js";
7
+ const popupCls = cn("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-50 flex flex-col max-h-[calc(100vh-48px)]", "bg-bg-1 border border-line-2 rounded-2xl shadow-[0_30px_80px_-20px_rgba(0,0,0,.8)] overflow-hidden outline-none", "transition-[transform,opacity] data-[starting-style]:opacity-0 data-[starting-style]:scale-[.97] data-[ending-style]:opacity-0 data-[ending-style]:scale-[.97]");
8
+ function DialogRoot({ open, onOpenChange, children, }) {
9
+ return (_jsx(Dialog.Root, { open: open, onOpenChange: onOpenChange, children: children }));
10
+ }
11
+ function DialogPopup({ width = 480, children, className, }) {
12
+ const container = usePortalContainer();
13
+ return (_jsxs(Dialog.Portal, { container: container, children: [_jsx(Dialog.Backdrop, { className: "fixed inset-0 z-40 bg-[rgba(6,6,9,.62)] backdrop-blur-[3px] transition-opacity data-[starting-style]:opacity-0 data-[ending-style]:opacity-0" }), _jsx(Dialog.Popup, { className: cn(popupCls, className), style: { width }, children: children })] }));
14
+ }
15
+ function DialogHeader({ icon, title }) {
16
+ return (_jsxs("div", { className: "flex items-center gap-3 px-4 pt-4 pb-3.5 border-b border-line", children: [icon && (_jsx("span", { className: "size-[30px] grid place-items-center rounded-ui bg-accent-soft text-accent-2 border border-accent-line", children: _jsx(Icon, { name: icon, size: 16 }) })), _jsx(Dialog.Title, { className: "text-[15px] font-bold tracking-tight flex-1", children: title }), _jsx(Dialog.Close, { render: _jsx(IconButton, { size: "sm", icon: "close", "aria-label": "Close" }) })] }));
17
+ }
18
+ const DialogBody = ({ children }) => (_jsx("div", { className: "p-4 overflow-y-auto scroll", children: children }));
19
+ const DialogFooter = ({ children }) => (_jsx("div", { className: "flex items-center gap-3 px-4 py-3 border-t border-line bg-bg-0", children: children }));
20
+ export const StDialog = Object.assign(DialogRoot, {
21
+ Popup: DialogPopup,
22
+ Header: DialogHeader,
23
+ Body: DialogBody,
24
+ Footer: DialogFooter,
25
+ Title: Dialog.Title,
26
+ Description: Dialog.Description,
27
+ Close: Dialog.Close,
28
+ Trigger: Dialog.Trigger,
29
+ });
30
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/components/primitives/dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,QAAQ,GAAG,EAAE,CACjB,sGAAsG,EACtG,iHAAiH,EACjH,gKAAgK,CACjK,CAAC;AAEF,SAAS,UAAU,CAAC,EAClB,IAAI,EACJ,YAAY,EACZ,QAAQ,GAKT;IACC,OAAO,CACL,KAAC,MAAM,CAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,YAChD,QAAQ,GACG,CACf,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,KAAK,GAAG,GAAG,EACX,QAAQ,EACR,SAAS,GAKV;IACC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,OAAO,CACL,MAAC,MAAM,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,aACjC,KAAC,MAAM,CAAC,QAAQ,IAAC,SAAS,EAAC,8IAA8I,GAAG,EAC5K,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,YAC/D,QAAQ,GACI,IACD,CACjB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAyC;IAC1E,OAAO,CACL,eAAK,SAAS,EAAC,+DAA+D,aAC3E,IAAI,IAAI,CACP,eAAM,SAAS,EAAC,uGAAuG,YACrH,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,GACzB,CACR,EACD,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,6CAA6C,YAAE,KAAK,GAAgB,EAC5F,KAAC,MAAM,CAAC,KAAK,IAAC,MAAM,EAAE,KAAC,UAAU,IAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,gBAAY,OAAO,GAAG,GAAI,IAC9E,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE,CAAC,CAC5D,cAAK,SAAS,EAAC,4BAA4B,YAAE,QAAQ,GAAO,CAC7D,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAA2B,EAAE,EAAE,CAAC,CAC9D,cAAK,SAAS,EAAC,gEAAgE,YAAE,QAAQ,GAAO,CACjG,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;IAChD,KAAK,EAAE,WAAW;IAClB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;IACnB,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { ReactElement, ReactNode } from "react";
2
+ import type { IconName } from "../icon/paths.js";
3
+ export type StMenuProps = {
4
+ icon?: IconName;
5
+ label?: string;
6
+ tooltip?: ReactNode;
7
+ /** Provide your own trigger element (rendered via Base UI `render`). */
8
+ trigger?: ReactElement;
9
+ side?: "top" | "bottom" | "left" | "right";
10
+ align?: "start" | "center" | "end";
11
+ sideOffset?: number;
12
+ children: ReactNode;
13
+ };
14
+ export declare function StMenu({ icon, label, tooltip, trigger, side, align, sideOffset, children, }: StMenuProps): import("react/jsx-runtime").JSX.Element;
15
+ export type MenuItemProps = {
16
+ icon?: IconName;
17
+ children: ReactNode;
18
+ onClick?: () => void;
19
+ disabled?: boolean;
20
+ selected?: boolean;
21
+ badge?: number;
22
+ };
23
+ export declare function MenuItem({ icon, children, onClick, disabled, selected, badge }: MenuItemProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare const MenuSeparator: () => import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AASjD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,wEAAwE;IACxE,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,KAAK,EACL,OAAO,EACP,OAAO,EACP,IAAe,EACf,KAAe,EACf,UAAc,EACd,QAAQ,GACT,EAAE,WAAW,2CAqCb;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,aAAa,2CAqB7F;AAED,eAAO,MAAM,aAAa,+CAAiE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Menu } from "@base-ui/react/menu";
3
+ import { cn } from "../../lib/cn.js";
4
+ import { buttonCls } from "../button/button.js";
5
+ import { iconBtnCls } from "../button/icon-button.js";
6
+ import { Icon } from "../icon/icon.js";
7
+ import { usePortalContainer } from "./portal-context.js";
8
+ import { StTooltip } from "./tooltip.js";
9
+ const popupCls = cn("min-w-52 bg-bg-1/97 backdrop-blur-xl border border-line-2 rounded-ui p-1.5 shadow-[0_18px_44px_-12px_rgba(0,0,0,.7)] outline-none", "origin-[var(--transform-origin)] transition-[transform,opacity] data-[starting-style]:opacity-0 data-[starting-style]:scale-95 data-[ending-style]:opacity-0");
10
+ export function StMenu({ icon, label, tooltip, trigger, side = "bottom", align = "start", sideOffset = 6, children, }) {
11
+ const container = usePortalContainer();
12
+ let triggerEl;
13
+ if (trigger) {
14
+ triggerEl = _jsx(Menu.Trigger, { render: trigger });
15
+ }
16
+ else if (label) {
17
+ triggerEl = (_jsxs(Menu.Trigger, { className: buttonCls({ tone: "default", className: "data-[popup-open]:bg-bg-3" }), children: [icon && _jsx(Icon, { name: icon, size: 15 }), " ", label, " ", _jsx(Icon, { name: "chevron", size: 13, className: "text-ink-3" })] }));
18
+ }
19
+ else {
20
+ triggerEl = (_jsx(Menu.Trigger, { className: iconBtnCls({
21
+ tone: "bordered",
22
+ className: "data-[popup-open]:bg-bg-3 data-[popup-open]:text-ink-1",
23
+ }), children: _jsx(Icon, { name: icon ?? "dots", size: 18 }) }));
24
+ }
25
+ return (_jsxs(Menu.Root, { children: [tooltip ? _jsx(StTooltip, { content: tooltip, children: triggerEl }) : triggerEl, _jsx(Menu.Portal, { container: container, children: _jsx(Menu.Positioner, { side: side, align: align, sideOffset: sideOffset, children: _jsx(Menu.Popup, { className: popupCls, children: children }) }) })] }));
26
+ }
27
+ export function MenuItem({ icon, children, onClick, disabled, selected, badge }) {
28
+ return (_jsxs(Menu.Item, { disabled: disabled, onClick: onClick, className: cn("flex items-center gap-2.5 px-2.5 py-2 rounded-control text-[13px] font-medium cursor-default outline-none select-none", "text-ink-2 data-[highlighted]:bg-bg-3 data-[highlighted]:text-ink-1 data-[disabled]:opacity-40 data-[disabled]:pointer-events-none", selected && "text-ink-1"), children: [icon && _jsx(Icon, { name: icon, size: 15, className: "text-ink-3" }), _jsx("span", { className: "flex-1", children: children }), badge != null && badge > 0 && (_jsx("span", { className: "font-mono text-[10.5px] font-bold text-white bg-accent rounded-full min-w-[18px] h-[18px] px-1.5 grid place-items-center", children: badge })), selected && _jsx(Icon, { name: "check", size: 14, className: "text-accent-2" })] }));
29
+ }
30
+ export const MenuSeparator = () => _jsx(Menu.Separator, { className: "h-px bg-line my-1 -mx-0.5" });
31
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../../src/components/primitives/menu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type StNumberFieldProps = {
2
+ value: number;
3
+ onValueChange: (value: number) => void;
4
+ min?: number;
5
+ max?: number;
6
+ step?: number;
7
+ /** Short unit suffix shown inside the field (e.g. "W", "H", "fps"). */
8
+ suffix?: string;
9
+ className?: string;
10
+ };
11
+ export declare function StNumberField({ value, onValueChange, min, max, step, suffix, className, }: StNumberFieldProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=number-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/number-field.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,aAAa,EACb,GAAG,EACH,GAAG,EACH,IAAQ,EACR,MAAM,EACN,SAAS,GACV,EAAE,kBAAkB,2CAgBpB"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { NumberField } from "@base-ui/react/number-field";
3
+ import { cn } from "../../lib/cn.js";
4
+ export function StNumberField({ value, onValueChange, min, max, step = 1, suffix, className, }) {
5
+ return (_jsx(NumberField.Root, { value: value, min: min, max: max, step: step, onValueChange: (v) => onValueChange(v ?? min ?? 0), className: cn("flex-1", className), children: _jsxs(NumberField.Group, { className: "flex items-center bg-bg-2 border border-line rounded-control pr-2.5 focus-within:border-accent focus-within:shadow-[0_0_0_3px_var(--color-accent-soft)]", children: [_jsx(NumberField.Input, { className: "flex-1 min-w-0 w-full bg-transparent outline-none text-ink-1 font-mono text-[13px] px-2.5 py-2.5 [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none" }), suffix && _jsx("span", { className: "text-[10.5px] font-bold text-ink-3", children: suffix })] }) }));
6
+ }
7
+ //# sourceMappingURL=number-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.js","sourceRoot":"","sources":["../../../src/components/primitives/number-field.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAarC,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,aAAa,EACb,GAAG,EACH,GAAG,EACH,IAAI,GAAG,CAAC,EACR,MAAM,EACN,SAAS,GACU;IACnB,OAAO,CACL,KAAC,WAAW,CAAC,IAAI,IACf,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,EAClD,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,YAElC,MAAC,WAAW,CAAC,KAAK,IAAC,SAAS,EAAC,yJAAyJ,aACpL,KAAC,WAAW,CAAC,KAAK,IAAC,SAAS,EAAC,uNAAuN,GAAG,EACtP,MAAM,IAAI,eAAM,SAAS,EAAC,oCAAoC,YAAE,MAAM,GAAQ,IAC7D,GACH,CACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Base UI portals (menus/dialogs/tooltips/toasts) render to `document.body` by
3
+ * default. The Studio root provides a container that lives INSIDE the
4
+ * `.smoove-studio` subtree so scoped base styles + theme tokens still apply; every
5
+ * primitive routes its `*.Portal` through this container.
6
+ */
7
+ export declare const PortalContainerContext: import("react").Context<HTMLElement | null>;
8
+ export declare const usePortalContainer: () => HTMLElement | null;
9
+ //# sourceMappingURL=portal-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-context.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/portal-context.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,6CAA0C,CAAC;AAE9E,eAAO,MAAM,kBAAkB,QAAO,WAAW,GAAG,IAA0C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { createContext, useContext } from "react";
2
+ /**
3
+ * Base UI portals (menus/dialogs/tooltips/toasts) render to `document.body` by
4
+ * default. The Studio root provides a container that lives INSIDE the
5
+ * `.smoove-studio` subtree so scoped base styles + theme tokens still apply; every
6
+ * primitive routes its `*.Portal` through this container.
7
+ */
8
+ export const PortalContainerContext = createContext(null);
9
+ export const usePortalContainer = () => useContext(PortalContainerContext);
10
+ //# sourceMappingURL=portal-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-context.js","sourceRoot":"","sources":["../../../src/components/primitives/portal-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAuB,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type SelectOption = {
2
+ value: string;
3
+ label: string;
4
+ desc?: string;
5
+ };
6
+ export type StSelectProps = {
7
+ value: string;
8
+ onValueChange: (value: string) => void;
9
+ options: SelectOption[];
10
+ placeholder?: string;
11
+ className?: string;
12
+ };
13
+ export declare function StSelect({ value, onValueChange, options, placeholder, className, }: StSelectProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/select.tsx"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,aAAa,EACb,OAAO,EACP,WAAuB,EACvB,SAAS,GACV,EAAE,aAAa,2CAuCf"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Select } from "@base-ui/react/select";
3
+ import { cn } from "../../lib/cn.js";
4
+ import { Icon } from "../icon/icon.js";
5
+ import { usePortalContainer } from "./portal-context.js";
6
+ export function StSelect({ value, onValueChange, options, placeholder = "Select…", className, }) {
7
+ const container = usePortalContainer();
8
+ const labelFor = (v) => options.find((o) => o.value === v)?.label ?? placeholder;
9
+ return (_jsxs(Select.Root, { value: value, onValueChange: (v) => onValueChange(String(v)), children: [_jsxs(Select.Trigger, { className: cn("flex items-center justify-between gap-2 w-full bg-bg-2 border border-line rounded-control text-[13px] text-ink-1 px-3 py-2 text-left hover:border-line-2 data-[popup-open]:border-accent data-[popup-open]:shadow-[0_0_0_3px_var(--color-accent-soft)] outline-none", className), children: [_jsx(Select.Value, { className: "truncate", children: (val) => labelFor(val) }), _jsx(Select.Icon, { className: "text-ink-3", children: _jsx(Icon, { name: "chevron", size: 13 }) })] }), _jsx(Select.Portal, { container: container, children: _jsx(Select.Positioner, { sideOffset: 5, className: "z-50", children: _jsx(Select.Popup, { className: "min-w-[var(--anchor-width)] max-h-72 overflow-y-auto scroll bg-bg-1/98 backdrop-blur-xl border border-line-2 rounded-ui p-1.5 shadow-[0_18px_44px_-12px_rgba(0,0,0,.7)] outline-none origin-[var(--transform-origin)] transition-[transform,opacity] data-[starting-style]:opacity-0 data-[starting-style]:scale-95 data-[ending-style]:opacity-0", children: options.map((o) => (_jsxs(Select.Item, { value: o.value, className: "flex items-start gap-2 px-2.5 py-2 rounded-control text-[13px] text-ink-2 data-[highlighted]:bg-bg-3 data-[highlighted]:text-ink-1 data-[selected]:text-ink-1 cursor-default outline-none", children: [_jsxs(Select.ItemText, { className: "flex-1", children: [_jsx("span", { className: "block", children: o.label }), o.desc && _jsx("span", { className: "block text-[11px] text-ink-3", children: o.desc })] }), _jsx(Select.ItemIndicator, { className: "text-accent-2 mt-0.5", children: _jsx(Icon, { name: "check", size: 14 }) })] }, o.value))) }) }) })] }));
10
+ }
11
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/components/primitives/select.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAYzD,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,aAAa,EACb,OAAO,EACP,WAAW,GAAG,SAAS,EACvB,SAAS,GACK;IACd,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,WAAW,CAAC;IACjG,OAAO,CACL,MAAC,MAAM,CAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aACvE,MAAC,MAAM,CAAC,OAAO,IACb,SAAS,EAAE,EAAE,CACX,qQAAqQ,EACrQ,SAAS,CACV,aAED,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,UAAU,YAAE,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAgB,EAClF,KAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAC,YAAY,YACjC,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,EAAE,EAAE,GAAI,GACrB,IACC,EACjB,KAAC,MAAM,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YACjC,KAAC,MAAM,CAAC,UAAU,IAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAC,MAAM,YAChD,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,mVAAmV,YACxW,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,MAAC,MAAM,CAAC,IAAI,IAEV,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,SAAS,EAAC,2LAA2L,aAErM,MAAC,MAAM,CAAC,QAAQ,IAAC,SAAS,EAAC,QAAQ,aACjC,eAAM,SAAS,EAAC,OAAO,YAAE,CAAC,CAAC,KAAK,GAAQ,EACvC,CAAC,CAAC,IAAI,IAAI,eAAM,SAAS,EAAC,8BAA8B,YAAE,CAAC,CAAC,IAAI,GAAQ,IACzD,EAClB,KAAC,MAAM,CAAC,aAAa,IAAC,SAAS,EAAC,sBAAsB,YACpD,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAE,EAAE,GAAI,GACV,KAVlB,CAAC,CAAC,KAAK,CAWA,CACf,CAAC,GACW,GACG,GACN,IACJ,CACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type StSliderProps = {
2
+ value: number;
3
+ onValueChange: (value: number) => void;
4
+ min?: number;
5
+ max?: number;
6
+ step?: number;
7
+ className?: string;
8
+ };
9
+ export declare function StSlider({ value, onValueChange, min, max, step, className, }: StSliderProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/slider.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,aAAa,EACb,GAAO,EACP,GAAS,EACT,IAAQ,EACR,SAAS,GACV,EAAE,aAAa,2CAkBf"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Slider } from "@base-ui/react/slider";
3
+ import { cn } from "../../lib/cn.js";
4
+ export function StSlider({ value, onValueChange, min = 0, max = 100, step = 1, className, }) {
5
+ return (_jsx(Slider.Root, { value: value, onValueChange: (v) => onValueChange(Array.isArray(v) ? (v[0] ?? 0) : v), min: min, max: max, step: step, className: cn("flex-1", className), children: _jsx(Slider.Control, { className: "flex items-center h-4 w-full cursor-pointer", children: _jsxs(Slider.Track, { className: "h-1 w-full rounded-full bg-bg-3 relative", children: [_jsx(Slider.Indicator, { className: "rounded-full bg-accent" }), _jsx(Slider.Thumb, { className: "size-[15px] rounded-full bg-accent-2 outline-none shadow-[0_0_0_3px_var(--color-accent-soft)] focus-visible:shadow-[0_0_0_4px_var(--color-accent-soft)]" })] }) }) }));
6
+ }
7
+ //# sourceMappingURL=slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.js","sourceRoot":"","sources":["../../../src/components/primitives/slider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAWrC,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,aAAa,EACb,GAAG,GAAG,CAAC,EACP,GAAG,GAAG,GAAG,EACT,IAAI,GAAG,CAAC,EACR,SAAS,GACK;IACd,OAAO,CACL,KAAC,MAAM,CAAC,IAAI,IACV,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,YAElC,KAAC,MAAM,CAAC,OAAO,IAAC,SAAS,EAAC,6CAA6C,YACrE,MAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,0CAA0C,aAChE,KAAC,MAAM,CAAC,SAAS,IAAC,SAAS,EAAC,wBAAwB,GAAG,EACvD,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,yJAAyJ,GAAG,IACvK,GACA,GACL,CACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function StSwitch({ checked, onCheckedChange, }: {
2
+ checked: boolean;
3
+ onCheckedChange: (checked: boolean) => void;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/switch.tsx"],"names":[],"mappings":"AAEA,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,eAAe,GAChB,EAAE;IACD,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C,2CAUA"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Switch } from "@base-ui/react/switch";
3
+ export function StSwitch({ checked, onCheckedChange, }) {
4
+ return (_jsx(Switch.Root, { checked: checked, onCheckedChange: onCheckedChange, className: "w-10 h-[23px] rounded-full bg-bg-3 data-[checked]:bg-accent relative transition-colors cursor-pointer flex-none outline-none focus-visible:ring-2 focus-visible:ring-accent/50", children: _jsx(Switch.Thumb, { className: "block size-[17px] rounded-full bg-white absolute top-[3px] left-[3px] transition-transform data-[checked]:translate-x-[17px]" }) }));
5
+ }
6
+ //# sourceMappingURL=switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/components/primitives/switch.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,EACP,eAAe,GAIhB;IACC,OAAO,CACL,KAAC,MAAM,CAAC,IAAI,IACV,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAC,gLAAgL,YAE1L,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,8HAA8H,GAAG,GAC7I,CACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ReactNode } from "react";
2
+ import type { IconName } from "../icon/paths.js";
3
+ export declare function StTabs({ value, onValueChange, children, className, }: {
4
+ value: string;
5
+ onValueChange: (value: string) => void;
6
+ children: ReactNode;
7
+ className?: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ export declare function TabList({ children, className }: {
10
+ children: ReactNode;
11
+ className?: string;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ export declare function Tab({ value, icon, children, }: {
14
+ value: string;
15
+ icon?: IconName;
16
+ children: ReactNode;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ export declare function TabPanel({ value, children, className, }: {
19
+ value: string;
20
+ children: ReactNode;
21
+ className?: string;
22
+ }): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,aAAa,EACb,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAUA;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAY3F;AAED,wBAAgB,GAAG,CAAC,EAClB,KAAK,EACL,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;CACrB,2CASA;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CASA"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Tabs } from "@base-ui/react/tabs";
3
+ import { cn } from "../../lib/cn.js";
4
+ import { Icon } from "../icon/icon.js";
5
+ export function StTabs({ value, onValueChange, children, className, }) {
6
+ return (_jsx(Tabs.Root, { value: value, onValueChange: (v) => onValueChange(String(v)), className: cn("flex flex-col min-h-0 flex-1", className), children: children }));
7
+ }
8
+ export function TabList({ children, className }) {
9
+ return (_jsxs(Tabs.List, { className: cn("relative flex items-stretch h-14 flex-none border-b border-line px-1.5", className), children: [children, _jsx(Tabs.Indicator, { className: "absolute bottom-0 left-0 h-0.5 bg-accent rounded-full transition-all duration-200 w-[var(--active-tab-width)] translate-x-[var(--active-tab-left)]" })] }));
10
+ }
11
+ export function Tab({ value, icon, children, }) {
12
+ return (_jsxs(Tabs.Tab, { value: value, className: "relative flex items-center gap-1.5 px-3.5 text-[13px] font-semibold text-ink-3 hover:text-ink-2 data-[selected]:text-ink-1 cursor-default outline-none", children: [icon && _jsx(Icon, { name: icon, size: 15 }), " ", children] }));
13
+ }
14
+ export function TabPanel({ value, children, className, }) {
15
+ return (_jsx(Tabs.Panel, { value: value, className: cn("flex-1 min-h-0 overflow-y-auto scroll outline-none", className), children: children }));
16
+ }
17
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/components/primitives/tabs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,MAAM,UAAU,MAAM,CAAC,EACrB,KAAK,EACL,aAAa,EACb,QAAQ,EACR,SAAS,GAMV;IACC,OAAO,CACL,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAC9C,SAAS,EAAE,EAAE,CAAC,8BAA8B,EAAE,SAAS,CAAC,YAEvD,QAAQ,GACC,CACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAA+C;IAC1F,OAAO,CACL,MAAC,IAAI,CAAC,IAAI,IACR,SAAS,EAAE,EAAE,CACX,wEAAwE,EACxE,SAAS,CACV,aAEA,QAAQ,EACT,KAAC,IAAI,CAAC,SAAS,IAAC,SAAS,EAAC,oJAAoJ,GAAG,IACvK,CACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAClB,KAAK,EACL,IAAI,EACJ,QAAQ,GAKT;IACC,OAAO,CACL,MAAC,IAAI,CAAC,GAAG,IACP,KAAK,EAAE,KAAK,EACZ,SAAS,EAAC,wJAAwJ,aAEjK,IAAI,IAAI,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAI,OAAG,QAAQ,IACzC,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,SAAS,GAKV;IACC,OAAO,CACL,KAAC,IAAI,CAAC,KAAK,IACT,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CAAC,oDAAoD,EAAE,SAAS,CAAC,YAE7E,QAAQ,GACE,CACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ReactElement, ReactNode } from "react";
2
+ export type TooltipProps = {
3
+ content?: ReactNode;
4
+ side?: "top" | "bottom" | "left" | "right";
5
+ children: ReactElement;
6
+ };
7
+ /** Thin Base UI Tooltip wrapper. Renders the child as-is when no content. */
8
+ export declare function StTooltip({ content, side, children }: TooltipProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/tooltip.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,IAAY,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAe1E"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Tooltip } from "@base-ui/react/tooltip";
3
+ import { usePortalContainer } from "./portal-context.js";
4
+ /** Thin Base UI Tooltip wrapper. Renders the child as-is when no content. */
5
+ export function StTooltip({ content, side = "top", children }) {
6
+ const container = usePortalContainer();
7
+ if (!content)
8
+ return children;
9
+ return (_jsxs(Tooltip.Root, { children: [_jsx(Tooltip.Trigger, { render: children }), _jsx(Tooltip.Portal, { container: container, children: _jsx(Tooltip.Positioner, { side: side, sideOffset: 7, children: _jsx(Tooltip.Popup, { className: "bg-black/92 backdrop-blur-sm text-white text-xs font-medium px-2.5 py-1.5 rounded-control border border-line-2 shadow-xl data-[starting-style]:opacity-0 data-[ending-style]:opacity-0 transition-opacity", children: content }) }) })] }));
10
+ }
11
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../src/components/primitives/tooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQzD,6EAA6E;AAC7E,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,KAAK,EAAE,QAAQ,EAAgB;IACzE,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,CACL,MAAC,OAAO,CAAC,IAAI,eACX,KAAC,OAAO,CAAC,OAAO,IAAC,MAAM,EAAE,QAAQ,GAAI,EACrC,KAAC,OAAO,CAAC,MAAM,IAAC,SAAS,EAAE,SAAS,YAClC,KAAC,OAAO,CAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,YAC3C,KAAC,OAAO,CAAC,KAAK,IAAC,SAAS,EAAC,2MAA2M,YACjO,OAAO,GACM,GACG,GACN,IACJ,CAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Export the current frame as a still (mocked). */
2
+ export declare function ExportFrameDialog({ open, onOpenChange, onSubmitted, }: {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ /** Fired after the still is enqueued. */
6
+ onSubmitted?: () => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=export-frame-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-frame-dialog.d.ts","sourceRoot":"","sources":["../../../src/components/render/export-frame-dialog.tsx"],"names":[],"mappings":"AAwBA,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,WAAW,GACZ,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B,2CAwFA"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useComposition } from "../../hooks/use-composition.js";
4
+ import { usePlayback } from "../../hooks/use-playback.js";
5
+ import { useStudio } from "../../hooks/use-studio.js";
6
+ import { estMB } from "../../lib/constants.js";
7
+ import { fmtTime } from "../../lib/format.js";
8
+ import { Button } from "../button/button.js";
9
+ import { Icon } from "../icon/icon.js";
10
+ import { StDialog } from "../primitives/dialog.js";
11
+ import { StSelect } from "../primitives/select.js";
12
+ const Field = ({ label, children }) => (_jsxs("div", { className: "mb-4", children: [_jsx("span", { className: "block text-[11.5px] font-semibold text-ink-2 mb-1.5", children: label }), children] }));
13
+ const FMTS = [
14
+ { value: "png", label: "PNG · lossless" },
15
+ { value: "jpg", label: "JPEG · compact" },
16
+ { value: "webp", label: "WebP" },
17
+ ];
18
+ /** Export the current frame as a still (mocked). */
19
+ export function ExportFrameDialog({ open, onOpenChange, onSubmitted, }) {
20
+ const store = useStudio();
21
+ const { composition: comp, entry } = useComposition();
22
+ const { frame, fps } = usePlayback();
23
+ const [format, setFormat] = useState("png");
24
+ const [scale, setScale] = useState("1");
25
+ const baseW = comp?.width() ?? 1280;
26
+ const baseH = comp?.height() ?? 720;
27
+ const factor = Number(scale);
28
+ const w = Math.round(baseW * factor);
29
+ const h = Math.round(baseH * factor);
30
+ const timeSec = frame / (fps || 30);
31
+ const title = entry?.title ?? entry?.id ?? "Composition";
32
+ const SCALES = [
33
+ { value: "1", label: `1× · ${baseW}×${baseH}` },
34
+ { value: "2", label: `2× · ${baseW * 2}×${baseH * 2}` },
35
+ { value: "3", label: `3× · ${baseW * 3}×${baseH * 3}` },
36
+ ];
37
+ const submit = () => {
38
+ store.exportFrame({
39
+ id: store.selectedId.get(),
40
+ kind: "still",
41
+ comp: title,
42
+ // Capture the live props so the exported frame matches the preview.
43
+ props: comp?.props.get(),
44
+ format,
45
+ quality: "frame",
46
+ w,
47
+ h,
48
+ fps,
49
+ frames: 1,
50
+ frameNo: frame,
51
+ rangeLabel: `Frame ${frame}`,
52
+ sizeEst: estMB(w, h, 1, format === "png" ? 4 : 1.2, 1) * 2,
53
+ });
54
+ onOpenChange(false);
55
+ onSubmitted?.();
56
+ };
57
+ const D = StDialog;
58
+ return (_jsx(D, { open: open, onOpenChange: onOpenChange, children: _jsxs(D.Popup, { width: 440, children: [_jsx(D.Header, { icon: "camera", title: "Export frame" }), _jsxs(D.Body, { children: [_jsxs("div", { className: "flex gap-3.5 items-center mb-4.5", children: [_jsxs("div", { className: "relative flex-none", children: [_jsx("div", { className: "w-[140px] h-[79px] rounded-ui grid place-items-center shadow-[0_0_0_1px_var(--color-line-2)_inset]", style: { background: "linear-gradient(135deg,#23204a,rgba(255,86,64,.4))" }, children: _jsx(Icon, { name: "camera", size: 26, style: { color: "rgba(255,255,255,.55)" } }) }), _jsxs("div", { className: "absolute bottom-1.5 right-1.5 font-mono text-[9.5px] text-white bg-black/60 rounded px-1.5", children: [fmtTime(timeSec), " \u00B7 #", frame] })] }), _jsx("p", { className: "text-[12px] leading-relaxed text-ink-3 m-0 flex-1", children: "Captures the composition exactly at the current playhead position." })] }), _jsx(Field, { label: "Format", children: _jsx(StSelect, { value: format, onValueChange: setFormat, options: FMTS }) }), _jsx(Field, { label: "Scale", children: _jsx(StSelect, { value: scale, onValueChange: setScale, options: SCALES }) })] }), _jsxs(D.Footer, { children: [_jsxs("div", { className: "flex items-center gap-1.5 font-mono text-[11.5px] text-ink-2", children: [_jsx(Icon, { name: "camera", size: 13, className: "text-ink-3" }), _jsxs("span", { children: ["Frame ", frame, " \u00B7 ", fmtTime(timeSec)] })] }), _jsxs("div", { className: "flex items-center gap-2 ml-auto", children: [_jsx(D.Close, { render: _jsx(Button, { tone: "ghost", children: "Cancel" }) }), _jsx(Button, { tone: "primary", icon: "download", onClick: submit, children: "Export still" })] })] })] }) }));
59
+ }
60
+ //# sourceMappingURL=export-frame-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-frame-dialog.js","sourceRoot":"","sources":["../../../src/components/render/export-frame-dialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** Server-render dialog (mocked): format/quality/resolution/fps/range → enqueue. */
2
+ export declare function RenderDialog({ open, onOpenChange, onSubmitted, }: {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ /** Fired after a job is enqueued (e.g. to navigate to the queue). */
6
+ onSubmitted?: () => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=render-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-dialog.d.ts","sourceRoot":"","sources":["../../../src/components/render/render-dialog.tsx"],"names":[],"mappings":"AAoBA,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,YAAY,EACZ,WAAW,GACZ,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B,2CAuLA"}