@r2digisolutions/components 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/dist/components/atoms/IconButton/IconButton.svelte +1 -1
  2. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.stories.js +8 -0
  3. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte +122 -0
  4. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte.d.ts +11 -0
  5. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte +12 -0
  6. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte.d.ts +18 -0
  7. package/dist/components/atoms/PanKnob/PanKnob.stories.d.ts +9 -0
  8. package/dist/components/atoms/PanKnob/PanKnob.stories.js +8 -0
  9. package/dist/components/atoms/PanKnob/PanKnob.svelte +218 -0
  10. package/dist/components/atoms/PanKnob/PanKnob.svelte.d.ts +19 -0
  11. package/dist/components/atoms/PanKnob/PanKnobStory.svelte +15 -0
  12. package/dist/components/atoms/PanKnob/PanKnobStory.svelte.d.ts +3 -0
  13. package/dist/components/atoms/Playhead/Playhead.stories.js +8 -0
  14. package/dist/components/atoms/Playhead/Playhead.svelte +59 -0
  15. package/dist/components/atoms/Playhead/Playhead.svelte.d.ts +13 -0
  16. package/dist/components/atoms/Playhead/PlayheadStory.svelte +9 -0
  17. package/dist/components/atoms/Playhead/PlayheadStory.svelte.d.ts +18 -0
  18. package/dist/components/atoms/TimeRuler/TimeRuler.stories.js +8 -0
  19. package/dist/components/atoms/TimeRuler/TimeRuler.svelte +58 -0
  20. package/dist/components/atoms/TimeRuler/TimeRuler.svelte.d.ts +10 -0
  21. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte +7 -0
  22. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte.d.ts +18 -0
  23. package/dist/components/atoms/Tooltip/Tooltip.svelte +1 -1
  24. package/dist/components/atoms/TrimHandle/TrimHandle.stories.js +8 -0
  25. package/dist/components/atoms/TrimHandle/TrimHandle.svelte +63 -0
  26. package/dist/components/atoms/TrimHandle/TrimHandle.svelte.d.ts +12 -0
  27. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte +11 -0
  28. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte.d.ts +18 -0
  29. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.d.ts +9 -0
  30. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.js +8 -0
  31. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte +102 -0
  32. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte.d.ts +20 -0
  33. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte +34 -0
  34. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte.d.ts +3 -0
  35. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte +97 -61
  36. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte.d.ts +2 -0
  37. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.stories.js +8 -0
  38. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte +117 -0
  39. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte.d.ts +23 -0
  40. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte +18 -0
  41. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte.d.ts +18 -0
  42. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.stories.js +8 -0
  43. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte +858 -0
  44. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte.d.ts +43 -0
  45. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte +7 -0
  46. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte.d.ts +18 -0
  47. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.d.ts +9 -0
  48. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.js +8 -0
  49. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte +1140 -0
  50. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte.d.ts +28 -0
  51. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte +20 -0
  52. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte.d.ts +3 -0
  53. package/dist/components/molecules/ColorPicker/ColorPicker.svelte +1 -1
  54. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.d.ts +9 -0
  55. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.js +8 -0
  56. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte +108 -0
  57. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte.d.ts +18 -0
  58. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte +15 -0
  59. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte.d.ts +3 -0
  60. package/dist/components/molecules/ConflictResolver/ConflictResolver.stories.js +8 -0
  61. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte +73 -0
  62. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte.d.ts +16 -0
  63. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte +11 -0
  64. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte.d.ts +18 -0
  65. package/dist/components/molecules/ContextMenu/ContextMenu.svelte +204 -60
  66. package/dist/components/molecules/ContextMenu/ContextMenu.svelte.d.ts +9 -0
  67. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.d.ts +9 -0
  68. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.js +8 -0
  69. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte +56 -0
  70. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte.d.ts +12 -0
  71. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte +12 -0
  72. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte.d.ts +3 -0
  73. package/dist/components/molecules/FilterList/FilterList.stories.d.ts +9 -0
  74. package/dist/components/molecules/FilterList/FilterList.stories.js +8 -0
  75. package/dist/components/molecules/FilterList/FilterList.svelte +101 -0
  76. package/dist/components/molecules/FilterList/FilterList.svelte.d.ts +18 -0
  77. package/dist/components/molecules/FilterList/FilterListStory.svelte +31 -0
  78. package/dist/components/molecules/FilterList/FilterListStory.svelte.d.ts +3 -0
  79. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.d.ts +9 -0
  80. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.js +8 -0
  81. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte +94 -0
  82. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte.d.ts +15 -0
  83. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte +18 -0
  84. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte.d.ts +3 -0
  85. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.stories.js +8 -0
  86. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte +50 -0
  87. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte.d.ts +11 -0
  88. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte +13 -0
  89. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte.d.ts +18 -0
  90. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.stories.js +8 -0
  91. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte +380 -0
  92. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte.d.ts +33 -0
  93. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte +14 -0
  94. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte.d.ts +18 -0
  95. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.d.ts +9 -0
  96. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.js +8 -0
  97. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte +399 -0
  98. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte.d.ts +37 -0
  99. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte +24 -0
  100. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte.d.ts +3 -0
  101. package/dist/components/molecules/MediaStage/MediaStage.stories.d.ts +9 -0
  102. package/dist/components/molecules/MediaStage/MediaStage.stories.js +8 -0
  103. package/dist/components/molecules/MediaStage/MediaStage.svelte +1498 -0
  104. package/dist/components/molecules/MediaStage/MediaStage.svelte.d.ts +45 -0
  105. package/dist/components/molecules/MediaStage/MediaStageStory.svelte +35 -0
  106. package/dist/components/molecules/MediaStage/MediaStageStory.svelte.d.ts +3 -0
  107. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.d.ts +9 -0
  108. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.js +8 -0
  109. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte +131 -0
  110. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte.d.ts +19 -0
  111. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte +20 -0
  112. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte.d.ts +3 -0
  113. package/dist/components/molecules/MixerChannel/MixerChannel.stories.d.ts +9 -0
  114. package/dist/components/molecules/MixerChannel/MixerChannel.stories.js +8 -0
  115. package/dist/components/molecules/MixerChannel/MixerChannel.svelte +92 -0
  116. package/dist/components/molecules/MixerChannel/MixerChannel.svelte.d.ts +11 -0
  117. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte +13 -0
  118. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte.d.ts +3 -0
  119. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte +454 -0
  120. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte.d.ts +8 -0
  121. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte +26 -0
  122. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte.d.ts +22 -0
  123. package/dist/components/molecules/NodeGraph/NodeGraph.stories.d.ts +12 -0
  124. package/dist/components/molecules/NodeGraph/NodeGraph.stories.js +9 -0
  125. package/dist/components/molecules/NodeGraph/NodeGraph.svelte +1409 -0
  126. package/dist/components/molecules/NodeGraph/NodeGraph.svelte.d.ts +33 -0
  127. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte +90 -0
  128. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte.d.ts +3 -0
  129. package/dist/components/molecules/NodePalette/NodePalette.stories.js +8 -0
  130. package/dist/components/molecules/NodePalette/NodePalette.svelte +86 -0
  131. package/dist/components/molecules/NodePalette/NodePalette.svelte.d.ts +11 -0
  132. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte +11 -0
  133. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte.d.ts +18 -0
  134. package/dist/components/molecules/Poll/Poll.stories.d.ts +1 -1
  135. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.stories.js +8 -0
  136. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte +72 -0
  137. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte.d.ts +12 -0
  138. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte +16 -0
  139. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte.d.ts +18 -0
  140. package/dist/components/molecules/PropertyField/PropertyField.svelte +57 -3
  141. package/dist/components/molecules/PropertyField/PropertyField.svelte.d.ts +10 -0
  142. package/dist/components/molecules/PropertyField/PropertyFieldStory.svelte +21 -0
  143. package/dist/components/molecules/PropertyGroup/PropertyGroup.svelte +1 -1
  144. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.d.ts +9 -0
  145. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.js +8 -0
  146. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte +52 -0
  147. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte.d.ts +18 -0
  148. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte +62 -0
  149. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte.d.ts +3 -0
  150. package/dist/components/molecules/RelationPicker/RelationPicker.stories.d.ts +9 -0
  151. package/dist/components/molecules/RelationPicker/RelationPicker.stories.js +8 -0
  152. package/dist/components/molecules/RelationPicker/RelationPicker.svelte +180 -0
  153. package/dist/components/molecules/RelationPicker/RelationPicker.svelte.d.ts +24 -0
  154. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte +16 -0
  155. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte.d.ts +3 -0
  156. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.d.ts +9 -0
  157. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.js +8 -0
  158. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte +154 -0
  159. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte.d.ts +12 -0
  160. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte +16 -0
  161. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte.d.ts +3 -0
  162. package/dist/components/molecules/SecretField/SecretField.stories.d.ts +9 -0
  163. package/dist/components/molecules/SecretField/SecretField.stories.js +8 -0
  164. package/dist/components/molecules/SecretField/SecretField.svelte +58 -0
  165. package/dist/components/molecules/SecretField/SecretField.svelte.d.ts +15 -0
  166. package/dist/components/molecules/SecretField/SecretFieldStory.svelte +8 -0
  167. package/dist/components/molecules/SecretField/SecretFieldStory.svelte.d.ts +3 -0
  168. package/dist/components/molecules/SplitPane/SplitPane.svelte +96 -37
  169. package/dist/components/molecules/SplitPane/SplitPane.svelte.d.ts +10 -2
  170. package/dist/components/molecules/TableToolbar/TableToolbar.svelte.d.ts +1 -1
  171. package/dist/components/molecules/Terminal/Terminal.stories.js +20 -0
  172. package/dist/components/molecules/Terminal/Terminal.svelte +238 -0
  173. package/dist/components/molecules/Terminal/Terminal.svelte.d.ts +19 -0
  174. package/dist/components/molecules/Terminal/TerminalStory.svelte +47 -0
  175. package/dist/components/molecules/Terminal/TerminalStory.svelte.d.ts +6 -0
  176. package/dist/components/molecules/TimelineClip/TimelineClip.stories.js +8 -0
  177. package/dist/components/molecules/TimelineClip/TimelineClip.svelte +116 -0
  178. package/dist/components/molecules/TimelineClip/TimelineClip.svelte.d.ts +15 -0
  179. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte +18 -0
  180. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte.d.ts +18 -0
  181. package/dist/components/molecules/TimelineTrack/TimelineTrack.stories.js +8 -0
  182. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte +56 -0
  183. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte.d.ts +16 -0
  184. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte +35 -0
  185. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte.d.ts +18 -0
  186. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.stories.js +8 -0
  187. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte +158 -0
  188. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte.d.ts +18 -0
  189. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte +55 -0
  190. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte.d.ts +18 -0
  191. package/dist/components/molecules/TrackHeader/TrackHeader.stories.d.ts +9 -0
  192. package/dist/components/molecules/TrackHeader/TrackHeader.stories.js +8 -0
  193. package/dist/components/molecules/TrackHeader/TrackHeader.svelte +54 -0
  194. package/dist/components/molecules/TrackHeader/TrackHeader.svelte.d.ts +9 -0
  195. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte +10 -0
  196. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte.d.ts +3 -0
  197. package/dist/components/molecules/TransportControls/TransportControls.stories.d.ts +9 -0
  198. package/dist/components/molecules/TransportControls/TransportControls.stories.js +8 -0
  199. package/dist/components/molecules/TransportControls/TransportControls.svelte +53 -0
  200. package/dist/components/molecules/TransportControls/TransportControls.svelte.d.ts +12 -0
  201. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte +18 -0
  202. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte.d.ts +3 -0
  203. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.stories.js +8 -0
  204. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte +117 -0
  205. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte.d.ts +20 -0
  206. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte +36 -0
  207. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte.d.ts +18 -0
  208. package/dist/components/molecules/VideoPlayer/VideoPlayer.stories.d.ts +1 -1
  209. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.d.ts +9 -0
  210. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.js +8 -0
  211. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte +59 -0
  212. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte.d.ts +9 -0
  213. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte +10 -0
  214. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte.d.ts +3 -0
  215. package/dist/components/molecules/WaveformRegion/WaveformRegion.stories.js +8 -0
  216. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte +82 -0
  217. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte.d.ts +13 -0
  218. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte +17 -0
  219. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte.d.ts +18 -0
  220. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte +13 -4
  221. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte.d.ts +3 -1
  222. package/dist/components/molecules/WidgetCanvas/widgetCanvasContext.d.ts +2 -0
  223. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte +206 -37
  224. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte.d.ts +31 -0
  225. package/dist/components/organisms/AudioEditor/AudioEditor.stories.d.ts +12 -0
  226. package/dist/components/organisms/AudioEditor/AudioEditor.stories.js +9 -0
  227. package/dist/components/organisms/AudioEditor/AudioEditor.svelte +273 -0
  228. package/dist/components/organisms/AudioEditor/AudioEditor.svelte.d.ts +13 -0
  229. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte +10 -0
  230. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte.d.ts +3 -0
  231. package/dist/components/organisms/BlogEditor/BlogEditor.stories.d.ts +12 -0
  232. package/dist/components/organisms/BlogEditor/BlogEditor.stories.js +9 -0
  233. package/dist/components/organisms/BlogEditor/BlogEditor.svelte +1208 -0
  234. package/dist/components/organisms/BlogEditor/BlogEditor.svelte.d.ts +16 -0
  235. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte +144 -0
  236. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte.d.ts +3 -0
  237. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte +28 -0
  238. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte.d.ts +10 -0
  239. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte +34 -0
  240. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte.d.ts +11 -0
  241. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte +13 -0
  242. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte.d.ts +8 -0
  243. package/dist/components/organisms/BlogRenderer/BlogRenderer.stories.js +8 -0
  244. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte +469 -0
  245. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte.d.ts +14 -0
  246. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte +20 -0
  247. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte.d.ts +18 -0
  248. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.d.ts +12 -0
  249. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.js +9 -0
  250. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte +1012 -0
  251. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte.d.ts +16 -0
  252. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte +76 -0
  253. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte.d.ts +3 -0
  254. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.d.ts +12 -0
  255. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.js +9 -0
  256. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte +1680 -0
  257. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte.d.ts +18 -0
  258. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte +329 -0
  259. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte.d.ts +3 -0
  260. package/dist/components/organisms/DashboardBuilderPage/DashboardBuilderPage.svelte.d.ts +1 -1
  261. package/dist/components/organisms/DesktopShell/DesktopShell.svelte.d.ts +1 -1
  262. package/dist/components/organisms/EditorShell/EditorShell.svelte +123 -28
  263. package/dist/components/organisms/EditorShell/EditorShell.svelte.d.ts +21 -1
  264. package/dist/components/organisms/FileUploader/FileUploader.svelte +77 -15
  265. package/dist/components/organisms/FileUploader/FileUploader.svelte.d.ts +11 -0
  266. package/dist/components/organisms/ImportWizard/ImportWizard.stories.js +8 -0
  267. package/dist/components/organisms/ImportWizard/ImportWizard.svelte +209 -0
  268. package/dist/components/organisms/ImportWizard/ImportWizard.svelte.d.ts +22 -0
  269. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte +16 -0
  270. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte.d.ts +18 -0
  271. package/dist/components/organisms/VideoEditor/VideoEditor.stories.d.ts +12 -0
  272. package/dist/components/organisms/VideoEditor/VideoEditor.stories.js +9 -0
  273. package/dist/components/organisms/VideoEditor/VideoEditor.svelte +308 -0
  274. package/dist/components/organisms/VideoEditor/VideoEditor.svelte.d.ts +13 -0
  275. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte +10 -0
  276. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte.d.ts +3 -0
  277. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.d.ts +12 -0
  278. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.js +9 -0
  279. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte +22 -0
  280. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte.d.ts +13 -0
  281. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte +8 -0
  282. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte.d.ts +3 -0
  283. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.d.ts +12 -0
  284. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.js +9 -0
  285. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte +32 -0
  286. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte.d.ts +17 -0
  287. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte +21 -0
  288. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte.d.ts +3 -0
  289. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.d.ts +12 -0
  290. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.js +9 -0
  291. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte +22 -0
  292. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte.d.ts +13 -0
  293. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte +8 -0
  294. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte.d.ts +3 -0
  295. package/dist/index.d.ts +83 -1
  296. package/dist/index.js +60 -0
  297. package/dist/types/xyflow-svelte.d.ts +62 -0
  298. package/dist/utils/audioProject.d.ts +19 -0
  299. package/dist/utils/audioProject.js +70 -0
  300. package/dist/utils/blogDocument.d.ts +175 -0
  301. package/dist/utils/blogDocument.js +220 -0
  302. package/dist/utils/blueprintRuntime.d.ts +34 -0
  303. package/dist/utils/blueprintRuntime.js +289 -0
  304. package/dist/utils/canvasDocument.d.ts +239 -0
  305. package/dist/utils/canvasDocument.js +443 -0
  306. package/dist/utils/canvasExport.d.ts +10 -0
  307. package/dist/utils/canvasExport.js +469 -0
  308. package/dist/utils/canvasHierarchy.d.ts +189 -0
  309. package/dist/utils/canvasHierarchy.js +674 -0
  310. package/dist/utils/canvasHistory.d.ts +19 -0
  311. package/dist/utils/canvasHistory.js +48 -0
  312. package/dist/utils/canvasWidget.d.ts +81 -0
  313. package/dist/utils/canvasWidget.js +597 -0
  314. package/dist/utils/mediaTime.d.ts +16 -0
  315. package/dist/utils/mediaTime.js +57 -0
  316. package/dist/utils/mediaTracks.d.ts +61 -0
  317. package/dist/utils/mediaTracks.js +102 -0
  318. package/dist/utils/nodeGraph.d.ts +354 -0
  319. package/dist/utils/nodeGraph.js +1453 -0
  320. package/dist/utils/queryBridge.d.ts +18 -0
  321. package/dist/utils/queryBridge.js +118 -0
  322. package/dist/utils/videoSequence.d.ts +13 -0
  323. package/dist/utils/videoSequence.js +63 -0
  324. package/package.json +5 -2
@@ -35,7 +35,7 @@
35
35
  const isDisabled = $derived(disabled || loading);
36
36
 
37
37
  const baseClasses =
38
- 'relative inline-flex items-center justify-center transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 select-none cursor-pointer disabled:cursor-not-allowed disabled:opacity-50';
38
+ 'relative inline-flex shrink-0 items-center justify-center transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 select-none cursor-pointer disabled:cursor-not-allowed disabled:opacity-50';
39
39
 
40
40
  const variantClasses: Record<IconButtonVariant, string> = {
41
41
  primary:
@@ -0,0 +1,8 @@
1
+ import MediaKindIconStory from './MediaKindIconStory.svelte';
2
+ const meta = {
3
+ title: 'Atoms/MediaKindIcon',
4
+ component: MediaKindIconStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};
@@ -0,0 +1,122 @@
1
+ <script lang="ts">
2
+ import type { CanvasLayerKind } from '../../../utils/canvasDocument.js';
3
+ import type { MediaAssetKind } from '../../../utils/mediaTracks.js';
4
+ import ImageIcon from '@lucide/svelte/icons/image';
5
+ import Video from '@lucide/svelte/icons/video';
6
+ import AudioLines from '@lucide/svelte/icons/audio-lines';
7
+ import Type from '@lucide/svelte/icons/type';
8
+ import Square from '@lucide/svelte/icons/square';
9
+ import Circle from '@lucide/svelte/icons/circle';
10
+ import Minus from '@lucide/svelte/icons/minus';
11
+ import Triangle from '@lucide/svelte/icons/triangle';
12
+ import Star from '@lucide/svelte/icons/star';
13
+ import MoveRight from '@lucide/svelte/icons/move-right';
14
+ import SquareRoundCorner from '@lucide/svelte/icons/square-round-corner';
15
+ import Hexagon from '@lucide/svelte/icons/hexagon';
16
+ import Pentagon from '@lucide/svelte/icons/pentagon';
17
+ import Diamond from '@lucide/svelte/icons/diamond';
18
+ import Heart from '@lucide/svelte/icons/heart';
19
+ import StickyNote from '@lucide/svelte/icons/sticky-note';
20
+ import LayoutPanelLeft from '@lucide/svelte/icons/layout-panel-left';
21
+ import Layers from '@lucide/svelte/icons/layers';
22
+ import Group from '@lucide/svelte/icons/group';
23
+ import Columns2 from '@lucide/svelte/icons/columns-2';
24
+ import Rows2 from '@lucide/svelte/icons/rows-2';
25
+ import Scaling from '@lucide/svelte/icons/scaling';
26
+ import Box from '@lucide/svelte/icons/box';
27
+ import Component from '@lucide/svelte/icons/component';
28
+ import Frame from '@lucide/svelte/icons/frame';
29
+
30
+ export type MediaKindIconSize = 'sm' | 'md' | 'lg';
31
+
32
+ interface MediaKindIconProps {
33
+ kind: MediaAssetKind | CanvasLayerKind;
34
+ size?: MediaKindIconSize;
35
+ class?: string;
36
+ }
37
+
38
+ let { kind, size = 'md', class: className = '' }: MediaKindIconProps = $props();
39
+
40
+ const sizes: Record<MediaKindIconSize, string> = {
41
+ sm: 'h-3.5 w-3.5',
42
+ md: 'h-4 w-4',
43
+ lg: 'h-5 w-5'
44
+ };
45
+
46
+ const iconClass = $derived(`${sizes[size]} ${className}`.trim());
47
+ </script>
48
+
49
+ {#if kind === 'image'}
50
+ <ImageIcon class={iconClass} aria-hidden="true" />
51
+ {:else if kind === 'video'}
52
+ <Video class={iconClass} aria-hidden="true" />
53
+ {:else if kind === 'audio'}
54
+ <AudioLines class={iconClass} aria-hidden="true" />
55
+ {:else if kind === 'rect'}
56
+ <Square class={iconClass} aria-hidden="true" />
57
+ {:else if kind === 'roundRect' || kind === 'border'}
58
+ <SquareRoundCorner class={iconClass} aria-hidden="true" />
59
+ {:else if kind === 'ellipse'}
60
+ <Circle class={iconClass} aria-hidden="true" />
61
+ {:else if kind === 'triangle'}
62
+ <Triangle class={iconClass} aria-hidden="true" />
63
+ {:else if kind === 'star'}
64
+ <Star class={iconClass} aria-hidden="true" />
65
+ {:else if kind === 'hexagon'}
66
+ <Hexagon class={iconClass} aria-hidden="true" />
67
+ {:else if kind === 'pentagon'}
68
+ <Pentagon class={iconClass} aria-hidden="true" />
69
+ {:else if kind === 'diamond'}
70
+ <Diamond class={iconClass} aria-hidden="true" />
71
+ {:else if kind === 'heart'}
72
+ <Heart class={iconClass} aria-hidden="true" />
73
+ {:else if kind === 'line'}
74
+ <Minus class={iconClass} aria-hidden="true" />
75
+ {:else if kind === 'arrow'}
76
+ <MoveRight class={iconClass} aria-hidden="true" />
77
+ {:else if kind === 'path'}
78
+ <svg class={iconClass} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
79
+ <path stroke-linecap="round" stroke-linejoin="round" d="M4 16l5-8 4 5 3-4 4 7" />
80
+ </svg>
81
+ {:else if kind === 'sticky'}
82
+ <StickyNote class={iconClass} aria-hidden="true" />
83
+ {:else if kind === 'canvasPanel'}
84
+ <LayoutPanelLeft class={iconClass} aria-hidden="true" />
85
+ {:else if kind === 'overlay'}
86
+ <Layers class={iconClass} aria-hidden="true" />
87
+ {:else if kind === 'hBox'}
88
+ <Columns2 class={iconClass} aria-hidden="true" />
89
+ {:else if kind === 'vBox'}
90
+ <Rows2 class={iconClass} aria-hidden="true" />
91
+ {:else if kind === 'sizeBox'}
92
+ <Box class={iconClass} aria-hidden="true" />
93
+ {:else if kind === 'scaleBox'}
94
+ <Scaling class={iconClass} aria-hidden="true" />
95
+ {:else if kind === 'group'}
96
+ <Group class={iconClass} aria-hidden="true" />
97
+ {:else if kind === 'widget'}
98
+ <Component class={iconClass} aria-hidden="true" />
99
+ {:else if kind === 'namedSlot'}
100
+ <Frame class={iconClass} aria-hidden="true" />
101
+ {:else if kind === 'scrollBox'}
102
+ <svg class={iconClass} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
103
+ <rect x="4" y="3" width="16" height="18" rx="2" />
104
+ <path d="M16 8h2M16 12h2M16 16h2" stroke-linecap="round" />
105
+ </svg>
106
+ {:else if kind === 'wrapBox'}
107
+ <svg class={iconClass} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
108
+ <rect x="3" y="4" width="7" height="6" rx="1" />
109
+ <rect x="12" y="4" width="9" height="6" rx="1" />
110
+ <rect x="3" y="13" width="9" height="6" rx="1" />
111
+ <rect x="14" y="13" width="7" height="6" rx="1" />
112
+ </svg>
113
+ {:else if kind === 'uniformGrid'}
114
+ <svg class={iconClass} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
115
+ <rect x="3" y="3" width="7" height="7" rx="1" />
116
+ <rect x="14" y="3" width="7" height="7" rx="1" />
117
+ <rect x="3" y="14" width="7" height="7" rx="1" />
118
+ <rect x="14" y="14" width="7" height="7" rx="1" />
119
+ </svg>
120
+ {:else}
121
+ <Type class={iconClass} aria-hidden="true" />
122
+ {/if}
@@ -0,0 +1,11 @@
1
+ import type { CanvasLayerKind } from '../../../utils/canvasDocument.js';
2
+ import type { MediaAssetKind } from '../../../utils/mediaTracks.js';
3
+ export type MediaKindIconSize = 'sm' | 'md' | 'lg';
4
+ interface MediaKindIconProps {
5
+ kind: MediaAssetKind | CanvasLayerKind;
6
+ size?: MediaKindIconSize;
7
+ class?: string;
8
+ }
9
+ declare const MediaKindIcon: import("svelte").Component<MediaKindIconProps, {}, "">;
10
+ type MediaKindIcon = ReturnType<typeof MediaKindIcon>;
11
+ export default MediaKindIcon;
@@ -0,0 +1,12 @@
1
+ <script lang="ts">
2
+ import MediaKindIcon from './MediaKindIcon.svelte';
3
+ </script>
4
+
5
+ <div class="flex items-center gap-4 text-secondary">
6
+ {#each ['image', 'video', 'audio', 'text'] as kind (kind)}
7
+ <span class="inline-flex items-center gap-1.5 text-sm">
8
+ <MediaKindIcon kind={kind as 'image' | 'video' | 'audio' | 'text'} />
9
+ {kind}
10
+ </span>
11
+ {/each}
12
+ </div>
@@ -0,0 +1,18 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const MediaKindIconStory: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type MediaKindIconStory = InstanceType<typeof MediaKindIconStory>;
18
+ export default MediaKindIconStory;
@@ -0,0 +1,9 @@
1
+ import type { StoryObj } from '@storybook/svelte';
2
+ declare const meta: {
3
+ title: string;
4
+ component: import("svelte").Component<Record<string, never>, {}, "">;
5
+ tags: string[];
6
+ };
7
+ export default meta;
8
+ type Story = StoryObj<typeof meta>;
9
+ export declare const Default: Story;
@@ -0,0 +1,8 @@
1
+ import PanKnobStory from './PanKnobStory.svelte';
2
+ const meta = {
3
+ title: 'Atoms/PanKnob',
4
+ component: PanKnobStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};
@@ -0,0 +1,218 @@
1
+ <script lang="ts">
2
+ export type PanKnobSize = 'sm' | 'md' | 'lg';
3
+
4
+ interface PanKnobProps {
5
+ /** Pan value from -1 (full L) to 1 (full R). 0 is center. */
6
+ value?: number;
7
+ min?: number;
8
+ max?: number;
9
+ step?: number;
10
+ size?: PanKnobSize;
11
+ disabled?: boolean;
12
+ showLabel?: boolean;
13
+ showValue?: boolean;
14
+ label?: string;
15
+ class?: string;
16
+ oninput?: (value: number) => void;
17
+ onchange?: (value: number) => void;
18
+ }
19
+
20
+ let {
21
+ value = $bindable(0),
22
+ min = -1,
23
+ max = 1,
24
+ step = 0.01,
25
+ size = 'md',
26
+ disabled = false,
27
+ showLabel = true,
28
+ showValue = true,
29
+ label = 'Pan',
30
+ class: className = '',
31
+ oninput,
32
+ onchange
33
+ }: PanKnobProps = $props();
34
+
35
+ /** Degrees of travel from center to either extreme (Logic-like). */
36
+ const SWEEP = 135;
37
+
38
+ const px = $derived({ sm: 28, md: 36, lg: 48 }[size]);
39
+ const stroke = $derived({ sm: 2.5, md: 3, lg: 3.5 }[size]);
40
+ const clamped = $derived(Math.min(max, Math.max(min, value)));
41
+ const norm = $derived(max === min ? 0 : (clamped - min) / (max - min)); // 0..1
42
+ const bipolar = $derived(norm * 2 - 1); // -1..1 relative to min/max
43
+ const rotation = $derived(bipolar * SWEEP);
44
+
45
+ const display = $derived.by(() => {
46
+ const abs = Math.round(Math.abs(bipolar) * 64);
47
+ if (abs === 0) return 'C';
48
+ return bipolar < 0 ? `L${abs}` : `R${abs}`;
49
+ });
50
+
51
+ let dragging = $state(false);
52
+ let startY = 0;
53
+ let startValue = 0;
54
+
55
+ function snap(v: number) {
56
+ const stepped = Math.round(v / step) * step;
57
+ return Math.min(max, Math.max(min, Number(stepped.toFixed(4))));
58
+ }
59
+
60
+ function commit(next: number, final = false) {
61
+ const v = snap(next);
62
+ value = v;
63
+ oninput?.(v);
64
+ if (final) onchange?.(v);
65
+ }
66
+
67
+ function onPointerDown(e: PointerEvent) {
68
+ if (disabled) return;
69
+ e.preventDefault();
70
+ (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);
71
+ dragging = true;
72
+ startY = e.clientY;
73
+ startValue = clamped;
74
+ }
75
+
76
+ function onPointerMove(e: PointerEvent) {
77
+ if (!dragging || disabled) return;
78
+ const sensitivity = e.shiftKey ? 300 : 100;
79
+ const delta = (startY - e.clientY) / sensitivity;
80
+ commit(startValue + delta * (max - min));
81
+ }
82
+
83
+ function onPointerUp(e: PointerEvent) {
84
+ if (!dragging) return;
85
+ dragging = false;
86
+ try {
87
+ (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);
88
+ } catch {
89
+ /* already released */
90
+ }
91
+ onchange?.(clamped);
92
+ }
93
+
94
+ function onDblClick() {
95
+ if (disabled) return;
96
+ commit(0, true);
97
+ }
98
+
99
+ function onKeyDown(e: KeyboardEvent) {
100
+ if (disabled) return;
101
+ const fine = e.shiftKey ? step : step * 5;
102
+ if (e.key === 'ArrowUp' || e.key === 'ArrowRight') {
103
+ e.preventDefault();
104
+ commit(clamped + fine, true);
105
+ } else if (e.key === 'ArrowDown' || e.key === 'ArrowLeft') {
106
+ e.preventDefault();
107
+ commit(clamped - fine, true);
108
+ } else if (e.key === 'Home') {
109
+ e.preventDefault();
110
+ commit(0, true);
111
+ }
112
+ }
113
+
114
+ /** Polar helper: angle 0 = 12 o'clock, positive clockwise. */
115
+ function polar(cx: number, cy: number, r: number, deg: number) {
116
+ const rad = ((deg - 90) * Math.PI) / 180;
117
+ return { x: cx + r * Math.cos(rad), y: cy + r * Math.sin(rad) };
118
+ }
119
+
120
+ function arcPath(r: number, fromDeg: number, toDeg: number) {
121
+ const c = px / 2;
122
+ const start = polar(c, c, r, fromDeg);
123
+ const end = polar(c, c, r, toDeg);
124
+ const delta = toDeg - fromDeg;
125
+ const large = Math.abs(delta) > 180 ? 1 : 0;
126
+ const sweep = delta >= 0 ? 1 : 0;
127
+ return `M ${start.x} ${start.y} A ${r} ${r} 0 ${large} ${sweep} ${end.x} ${end.y}`;
128
+ }
129
+
130
+ const trackR = $derived(px / 2 - stroke);
131
+ const trackPath = $derived(arcPath(trackR, -SWEEP, SWEEP));
132
+ const fillPath = $derived(
133
+ Math.abs(bipolar) < 0.001 ? '' : arcPath(trackR, 0, rotation)
134
+ );
135
+ const indicator = $derived(polar(px / 2, px / 2, trackR - stroke * 1.6, rotation));
136
+ </script>
137
+
138
+ <div class={['inline-flex flex-col items-center gap-0.5 select-none', className]}>
139
+ {#if showLabel}
140
+ <span class="text-[9px] font-medium uppercase tracking-wide text-muted">{label}</span>
141
+ {/if}
142
+
143
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
144
+ <div
145
+ role="slider"
146
+ tabindex={disabled ? -1 : 0}
147
+ aria-label={label}
148
+ aria-valuemin={min}
149
+ aria-valuemax={max}
150
+ aria-valuenow={clamped}
151
+ aria-valuetext={display}
152
+ aria-disabled={disabled || undefined}
153
+ class={[
154
+ 'relative touch-none rounded-full outline-none focus-visible:ring-2 focus-visible:ring-brand-500/30',
155
+ disabled ? 'cursor-not-allowed opacity-50' : 'cursor-ns-resize'
156
+ ]}
157
+ style:width="{px}px"
158
+ style:height="{px}px"
159
+ onpointerdown={onPointerDown}
160
+ onpointermove={onPointerMove}
161
+ onpointerup={onPointerUp}
162
+ onpointercancel={onPointerUp}
163
+ ondblclick={onDblClick}
164
+ onkeydown={onKeyDown}
165
+ >
166
+ <svg width={px} height={px} viewBox="0 0 {px} {px}" aria-hidden="true" class="block">
167
+ <!-- Track arc -->
168
+ <path
169
+ d={trackPath}
170
+ fill="none"
171
+ stroke="var(--color-border-strong, #d4d4d8)"
172
+ stroke-width={stroke}
173
+ stroke-linecap="round"
174
+ />
175
+
176
+ <!-- Bipolar fill from center -->
177
+ {#if fillPath}
178
+ <path
179
+ d={fillPath}
180
+ fill="none"
181
+ stroke="var(--color-brand-500, #3b82f6)"
182
+ stroke-width={stroke}
183
+ stroke-linecap="round"
184
+ />
185
+ {/if}
186
+
187
+ <!-- Knob body -->
188
+ <circle
189
+ cx={px / 2}
190
+ cy={px / 2}
191
+ r={trackR - stroke * 1.8}
192
+ fill="var(--surface-elevated, #fff)"
193
+ stroke="var(--border, #e4e4e7)"
194
+ stroke-width="1"
195
+ />
196
+
197
+ <!-- Center pip -->
198
+ <circle
199
+ cx={px / 2}
200
+ cy={px / 2}
201
+ r={1.5}
202
+ fill="var(--border-strong, #d4d4d8)"
203
+ />
204
+
205
+ <!-- Indicator notch -->
206
+ <circle
207
+ cx={indicator.x}
208
+ cy={indicator.y}
209
+ r={stroke * 0.85}
210
+ fill="var(--color-brand-500, #3b82f6)"
211
+ />
212
+ </svg>
213
+ </div>
214
+
215
+ {#if showValue}
216
+ <span class="font-mono text-[9px] tabular-nums text-secondary">{display}</span>
217
+ {/if}
218
+ </div>
@@ -0,0 +1,19 @@
1
+ export type PanKnobSize = 'sm' | 'md' | 'lg';
2
+ interface PanKnobProps {
3
+ /** Pan value from -1 (full L) to 1 (full R). 0 is center. */
4
+ value?: number;
5
+ min?: number;
6
+ max?: number;
7
+ step?: number;
8
+ size?: PanKnobSize;
9
+ disabled?: boolean;
10
+ showLabel?: boolean;
11
+ showValue?: boolean;
12
+ label?: string;
13
+ class?: string;
14
+ oninput?: (value: number) => void;
15
+ onchange?: (value: number) => void;
16
+ }
17
+ declare const PanKnob: import("svelte").Component<PanKnobProps, {}, "value">;
18
+ type PanKnob = ReturnType<typeof PanKnob>;
19
+ export default PanKnob;
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import PanKnob from './PanKnob.svelte';
3
+
4
+ let value = $state(-0.2);
5
+ let left = $state(-0.75);
6
+ let center = $state(0);
7
+ let right = $state(0.6);
8
+ </script>
9
+
10
+ <div class="flex flex-wrap items-end gap-8 p-4">
11
+ <PanKnob bind:value size="md" />
12
+ <PanKnob bind:value={left} size="sm" label="L" />
13
+ <PanKnob bind:value={center} size="md" label="C" />
14
+ <PanKnob bind:value={right} size="lg" label="R" />
15
+ </div>
@@ -0,0 +1,3 @@
1
+ declare const PanKnobStory: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type PanKnobStory = ReturnType<typeof PanKnobStory>;
3
+ export default PanKnobStory;
@@ -0,0 +1,8 @@
1
+ import PlayheadStory from './PlayheadStory.svelte';
2
+ const meta = {
3
+ title: 'Atoms/Playhead',
4
+ component: PlayheadStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};
@@ -0,0 +1,59 @@
1
+ <script lang="ts">
2
+ interface PlayheadProps {
3
+ /** Position in px from left of timeline content */
4
+ x?: number;
5
+ height?: number | string;
6
+ dragging?: boolean;
7
+ class?: string;
8
+ ondragstart?: (e: PointerEvent) => void;
9
+ ondrag?: (e: PointerEvent) => void;
10
+ ondragend?: (e: PointerEvent) => void;
11
+ }
12
+
13
+ let {
14
+ x = 0,
15
+ height = '100%',
16
+ dragging = false,
17
+ class: className = '',
18
+ ondragstart,
19
+ ondrag,
20
+ ondragend
21
+ }: PlayheadProps = $props();
22
+
23
+ function onPointerDown(e: PointerEvent) {
24
+ (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);
25
+ ondragstart?.(e);
26
+ }
27
+
28
+ function onPointerMove(e: PointerEvent) {
29
+ if (!(e.currentTarget as HTMLElement).hasPointerCapture(e.pointerId)) return;
30
+ ondrag?.(e);
31
+ }
32
+
33
+ function onPointerUp(e: PointerEvent) {
34
+ (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);
35
+ ondragend?.(e);
36
+ }
37
+ </script>
38
+
39
+ <div
40
+ role="slider"
41
+ aria-label="Playhead"
42
+ aria-valuenow={Math.round(x)}
43
+ tabindex="0"
44
+ class={[
45
+ 'absolute top-0 z-20 w-0 touch-none select-none',
46
+ dragging ? 'cursor-grabbing' : 'cursor-ew-resize',
47
+ className
48
+ ]}
49
+ style:left={`${x}px`}
50
+ style:height={typeof height === 'number' ? `${height}px` : height}
51
+ onpointerdown={onPointerDown}
52
+ onpointermove={onPointerMove}
53
+ onpointerup={onPointerUp}
54
+ >
55
+ <div
56
+ class="absolute left-1/2 top-0 h-3 w-3 -translate-x-1/2 rounded-sm bg-red-500 shadow-sm"
57
+ ></div>
58
+ <div class="absolute left-1/2 top-2 h-[calc(100%-0.5rem)] w-px -translate-x-1/2 bg-red-500"></div>
59
+ </div>
@@ -0,0 +1,13 @@
1
+ interface PlayheadProps {
2
+ /** Position in px from left of timeline content */
3
+ x?: number;
4
+ height?: number | string;
5
+ dragging?: boolean;
6
+ class?: string;
7
+ ondragstart?: (e: PointerEvent) => void;
8
+ ondrag?: (e: PointerEvent) => void;
9
+ ondragend?: (e: PointerEvent) => void;
10
+ }
11
+ declare const Playhead: import("svelte").Component<PlayheadProps, {}, "">;
12
+ type Playhead = ReturnType<typeof Playhead>;
13
+ export default Playhead;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">
2
+ import Playhead from './Playhead.svelte';
3
+ </script>
4
+
5
+ <div class="relative h-40 overflow-hidden rounded-lg border border-border bg-surface-elevated">
6
+ <div class="absolute inset-x-0 top-0 h-6 border-b border-border bg-surface"></div>
7
+ <Playhead x={120} />
8
+ <Playhead x={280} class="opacity-40" />
9
+ </div>
@@ -0,0 +1,18 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const PlayheadStory: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type PlayheadStory = InstanceType<typeof PlayheadStory>;
18
+ export default PlayheadStory;
@@ -0,0 +1,8 @@
1
+ import TimeRulerStory from './TimeRulerStory.svelte';
2
+ const meta = {
3
+ title: 'Atoms/TimeRuler',
4
+ component: TimeRulerStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};
@@ -0,0 +1,58 @@
1
+ <script lang="ts">
2
+ import { formatTimecode, ticksForDuration } from '../../../utils/mediaTime.js';
3
+
4
+ interface TimeRulerProps {
5
+ durationMs?: number;
6
+ pxPerMs?: number;
7
+ height?: number;
8
+ class?: string;
9
+ onclick?: (ms: number, e: MouseEvent) => void;
10
+ }
11
+
12
+ let {
13
+ durationMs = 30_000,
14
+ pxPerMs = 0.05,
15
+ height = 28,
16
+ class: className = '',
17
+ onclick
18
+ }: TimeRulerProps = $props();
19
+
20
+ const ticks = $derived(ticksForDuration(durationMs, pxPerMs));
21
+ const width = $derived(Math.max(1, durationMs * pxPerMs));
22
+
23
+ function handleClick(e: MouseEvent) {
24
+ const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();
25
+ const x = e.clientX - rect.left;
26
+ onclick?.(x / pxPerMs, e);
27
+ }
28
+ </script>
29
+
30
+ <div
31
+ role="presentation"
32
+ class={[
33
+ 'relative shrink-0 select-none border-b border-border bg-surface text-[10px] text-muted',
34
+ className
35
+ ]}
36
+ style:height={`${height}px`}
37
+ style:width={`${width}px`}
38
+ onclick={handleClick}
39
+ >
40
+ {#each ticks as tick (tick.ms)}
41
+ <div
42
+ class="absolute top-0 flex h-full flex-col justify-end"
43
+ style:left={`${tick.ms * pxPerMs}px`}
44
+ >
45
+ <span
46
+ class={[
47
+ 'mb-0.5 -translate-x-1/2 whitespace-nowrap pl-1',
48
+ tick.major ? 'text-secondary' : 'text-muted/70'
49
+ ]}
50
+ >
51
+ {formatTimecode(tick.ms)}
52
+ </span>
53
+ <div
54
+ class={['w-px bg-border-strong', tick.major ? 'h-3' : 'h-2 opacity-60']}
55
+ ></div>
56
+ </div>
57
+ {/each}
58
+ </div>
@@ -0,0 +1,10 @@
1
+ interface TimeRulerProps {
2
+ durationMs?: number;
3
+ pxPerMs?: number;
4
+ height?: number;
5
+ class?: string;
6
+ onclick?: (ms: number, e: MouseEvent) => void;
7
+ }
8
+ declare const TimeRuler: import("svelte").Component<TimeRulerProps, {}, "">;
9
+ type TimeRuler = ReturnType<typeof TimeRuler>;
10
+ export default TimeRuler;
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ import TimeRuler from './TimeRuler.svelte';
3
+ </script>
4
+
5
+ <div class="overflow-x-auto rounded-lg border border-border bg-surface-elevated p-2">
6
+ <TimeRuler durationMs={60000} pxPerMs={0.08} />
7
+ </div>