@r2digisolutions/components 0.1.7 → 0.3.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 (350) 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 +98 -0
  15. package/dist/components/atoms/Playhead/Playhead.svelte.d.ts +21 -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 +117 -0
  20. package/dist/components/atoms/TimeRuler/TimeRuler.svelte.d.ts +17 -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/TimelineGrid/TimelineGrid.stories.js +8 -0
  24. package/dist/components/atoms/TimelineGrid/TimelineGrid.svelte +39 -0
  25. package/dist/components/atoms/TimelineGrid/TimelineGrid.svelte.d.ts +11 -0
  26. package/dist/components/atoms/TimelineGrid/TimelineGridStory.svelte +7 -0
  27. package/dist/components/atoms/TimelineGrid/TimelineGridStory.svelte.d.ts +18 -0
  28. package/dist/components/atoms/Tooltip/Tooltip.svelte +1 -1
  29. package/dist/components/atoms/TrimHandle/TrimHandle.stories.js +8 -0
  30. package/dist/components/atoms/TrimHandle/TrimHandle.svelte +63 -0
  31. package/dist/components/atoms/TrimHandle/TrimHandle.svelte.d.ts +12 -0
  32. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte +11 -0
  33. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte.d.ts +18 -0
  34. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.d.ts +9 -0
  35. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.js +8 -0
  36. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte +102 -0
  37. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte.d.ts +20 -0
  38. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte +34 -0
  39. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte.d.ts +3 -0
  40. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte +97 -61
  41. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte.d.ts +2 -0
  42. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.stories.js +8 -0
  43. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte +117 -0
  44. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte.d.ts +23 -0
  45. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte +18 -0
  46. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte.d.ts +18 -0
  47. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.stories.js +8 -0
  48. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte +858 -0
  49. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte.d.ts +43 -0
  50. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte +7 -0
  51. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte.d.ts +18 -0
  52. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.d.ts +9 -0
  53. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.js +8 -0
  54. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte +1140 -0
  55. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte.d.ts +28 -0
  56. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte +20 -0
  57. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte.d.ts +3 -0
  58. package/dist/components/molecules/ColorPicker/ColorPicker.svelte +46 -5
  59. package/dist/components/molecules/ColorPicker/ColorPicker.svelte.d.ts +2 -0
  60. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.d.ts +9 -0
  61. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.js +8 -0
  62. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte +108 -0
  63. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte.d.ts +18 -0
  64. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte +15 -0
  65. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte.d.ts +3 -0
  66. package/dist/components/molecules/ConflictResolver/ConflictResolver.stories.js +8 -0
  67. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte +73 -0
  68. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte.d.ts +16 -0
  69. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte +11 -0
  70. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte.d.ts +18 -0
  71. package/dist/components/molecules/ContextMenu/ContextMenu.svelte +237 -66
  72. package/dist/components/molecules/ContextMenu/ContextMenu.svelte.d.ts +9 -0
  73. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.d.ts +9 -0
  74. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.js +8 -0
  75. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte +56 -0
  76. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte.d.ts +12 -0
  77. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte +12 -0
  78. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte.d.ts +3 -0
  79. package/dist/components/molecules/FilterList/FilterList.stories.d.ts +9 -0
  80. package/dist/components/molecules/FilterList/FilterList.stories.js +8 -0
  81. package/dist/components/molecules/FilterList/FilterList.svelte +101 -0
  82. package/dist/components/molecules/FilterList/FilterList.svelte.d.ts +18 -0
  83. package/dist/components/molecules/FilterList/FilterListStory.svelte +31 -0
  84. package/dist/components/molecules/FilterList/FilterListStory.svelte.d.ts +3 -0
  85. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.d.ts +9 -0
  86. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.js +8 -0
  87. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte +109 -0
  88. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte.d.ts +20 -0
  89. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte +18 -0
  90. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte.d.ts +3 -0
  91. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.stories.js +8 -0
  92. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte +50 -0
  93. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte.d.ts +11 -0
  94. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte +13 -0
  95. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte.d.ts +18 -0
  96. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.stories.js +8 -0
  97. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte +380 -0
  98. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte.d.ts +33 -0
  99. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte +14 -0
  100. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte.d.ts +18 -0
  101. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.d.ts +9 -0
  102. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.js +8 -0
  103. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte +399 -0
  104. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte.d.ts +37 -0
  105. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte +24 -0
  106. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte.d.ts +3 -0
  107. package/dist/components/molecules/MediaStage/MediaStage.stories.d.ts +9 -0
  108. package/dist/components/molecules/MediaStage/MediaStage.stories.js +8 -0
  109. package/dist/components/molecules/MediaStage/MediaStage.svelte +1498 -0
  110. package/dist/components/molecules/MediaStage/MediaStage.svelte.d.ts +45 -0
  111. package/dist/components/molecules/MediaStage/MediaStageStory.svelte +35 -0
  112. package/dist/components/molecules/MediaStage/MediaStageStory.svelte.d.ts +3 -0
  113. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.d.ts +9 -0
  114. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.js +8 -0
  115. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte +441 -0
  116. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte.d.ts +39 -0
  117. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte +20 -0
  118. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte.d.ts +3 -0
  119. package/dist/components/molecules/MixerChannel/MixerChannel.stories.d.ts +9 -0
  120. package/dist/components/molecules/MixerChannel/MixerChannel.stories.js +8 -0
  121. package/dist/components/molecules/MixerChannel/MixerChannel.svelte +92 -0
  122. package/dist/components/molecules/MixerChannel/MixerChannel.svelte.d.ts +11 -0
  123. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte +13 -0
  124. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte.d.ts +3 -0
  125. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte +454 -0
  126. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte.d.ts +8 -0
  127. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte +26 -0
  128. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte.d.ts +22 -0
  129. package/dist/components/molecules/NodeGraph/NodeGraph.stories.d.ts +12 -0
  130. package/dist/components/molecules/NodeGraph/NodeGraph.stories.js +9 -0
  131. package/dist/components/molecules/NodeGraph/NodeGraph.svelte +1409 -0
  132. package/dist/components/molecules/NodeGraph/NodeGraph.svelte.d.ts +33 -0
  133. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte +90 -0
  134. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte.d.ts +3 -0
  135. package/dist/components/molecules/NodePalette/NodePalette.stories.js +8 -0
  136. package/dist/components/molecules/NodePalette/NodePalette.svelte +86 -0
  137. package/dist/components/molecules/NodePalette/NodePalette.svelte.d.ts +11 -0
  138. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte +11 -0
  139. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte.d.ts +18 -0
  140. package/dist/components/molecules/PdfViewer/PdfViewer.svelte.d.ts +1 -1
  141. package/dist/components/molecules/Poll/Poll.stories.d.ts +1 -1
  142. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.stories.js +8 -0
  143. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte +794 -0
  144. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte.d.ts +25 -0
  145. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte +16 -0
  146. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte.d.ts +18 -0
  147. package/dist/components/molecules/PropertyField/PropertyField.svelte +57 -3
  148. package/dist/components/molecules/PropertyField/PropertyField.svelte.d.ts +10 -0
  149. package/dist/components/molecules/PropertyField/PropertyFieldStory.svelte +21 -0
  150. package/dist/components/molecules/PropertyGroup/PropertyGroup.svelte +1 -1
  151. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.d.ts +9 -0
  152. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.js +8 -0
  153. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte +52 -0
  154. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte.d.ts +18 -0
  155. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte +62 -0
  156. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte.d.ts +3 -0
  157. package/dist/components/molecules/RelationPicker/RelationPicker.stories.d.ts +9 -0
  158. package/dist/components/molecules/RelationPicker/RelationPicker.stories.js +8 -0
  159. package/dist/components/molecules/RelationPicker/RelationPicker.svelte +180 -0
  160. package/dist/components/molecules/RelationPicker/RelationPicker.svelte.d.ts +24 -0
  161. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte +16 -0
  162. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte.d.ts +3 -0
  163. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.d.ts +9 -0
  164. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.js +8 -0
  165. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte +154 -0
  166. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte.d.ts +12 -0
  167. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte +16 -0
  168. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte.d.ts +3 -0
  169. package/dist/components/molecules/SecretField/SecretField.stories.d.ts +9 -0
  170. package/dist/components/molecules/SecretField/SecretField.stories.js +8 -0
  171. package/dist/components/molecules/SecretField/SecretField.svelte +58 -0
  172. package/dist/components/molecules/SecretField/SecretField.svelte.d.ts +15 -0
  173. package/dist/components/molecules/SecretField/SecretFieldStory.svelte +8 -0
  174. package/dist/components/molecules/SecretField/SecretFieldStory.svelte.d.ts +3 -0
  175. package/dist/components/molecules/SplitPane/SplitPane.svelte +99 -40
  176. package/dist/components/molecules/SplitPane/SplitPane.svelte.d.ts +10 -2
  177. package/dist/components/molecules/TableToolbar/TableToolbar.svelte.d.ts +1 -1
  178. package/dist/components/molecules/Terminal/Terminal.stories.js +20 -0
  179. package/dist/components/molecules/Terminal/Terminal.svelte +238 -0
  180. package/dist/components/molecules/Terminal/Terminal.svelte.d.ts +19 -0
  181. package/dist/components/molecules/Terminal/TerminalStory.svelte +47 -0
  182. package/dist/components/molecules/Terminal/TerminalStory.svelte.d.ts +6 -0
  183. package/dist/components/molecules/TimelineClip/TimelineClip.stories.js +8 -0
  184. package/dist/components/molecules/TimelineClip/TimelineClip.svelte +193 -0
  185. package/dist/components/molecules/TimelineClip/TimelineClip.svelte.d.ts +18 -0
  186. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte +18 -0
  187. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte.d.ts +18 -0
  188. package/dist/components/molecules/TimelineTrack/TimelineTrack.stories.js +8 -0
  189. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte +126 -0
  190. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte.d.ts +27 -0
  191. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte +35 -0
  192. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte.d.ts +18 -0
  193. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.stories.js +8 -0
  194. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte +158 -0
  195. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte.d.ts +18 -0
  196. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte +55 -0
  197. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte.d.ts +18 -0
  198. package/dist/components/molecules/TrackHeader/TrackHeader.stories.d.ts +9 -0
  199. package/dist/components/molecules/TrackHeader/TrackHeader.stories.js +8 -0
  200. package/dist/components/molecules/TrackHeader/TrackHeader.svelte +54 -0
  201. package/dist/components/molecules/TrackHeader/TrackHeader.svelte.d.ts +9 -0
  202. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte +10 -0
  203. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte.d.ts +3 -0
  204. package/dist/components/molecules/TransportControls/TransportControls.stories.d.ts +9 -0
  205. package/dist/components/molecules/TransportControls/TransportControls.stories.js +8 -0
  206. package/dist/components/molecules/TransportControls/TransportControls.svelte +135 -0
  207. package/dist/components/molecules/TransportControls/TransportControls.svelte.d.ts +24 -0
  208. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte +40 -0
  209. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte.d.ts +3 -0
  210. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.stories.js +8 -0
  211. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte +117 -0
  212. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte.d.ts +20 -0
  213. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte +36 -0
  214. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte.d.ts +18 -0
  215. package/dist/components/molecules/VideoAnimationsPanel/VideoAnimationsPanel.stories.js +8 -0
  216. package/dist/components/molecules/VideoAnimationsPanel/VideoAnimationsPanel.svelte +213 -0
  217. package/dist/components/molecules/VideoAnimationsPanel/VideoAnimationsPanel.svelte.d.ts +22 -0
  218. package/dist/components/molecules/VideoAnimationsPanel/VideoAnimationsPanelStory.svelte +7 -0
  219. package/dist/components/molecules/VideoAnimationsPanel/VideoAnimationsPanelStory.svelte.d.ts +18 -0
  220. package/dist/components/molecules/VideoComponentsPanel/VideoComponentsPanel.stories.js +8 -0
  221. package/dist/components/molecules/VideoComponentsPanel/VideoComponentsPanel.svelte +524 -0
  222. package/dist/components/molecules/VideoComponentsPanel/VideoComponentsPanel.svelte.d.ts +32 -0
  223. package/dist/components/molecules/VideoComponentsPanel/VideoComponentsPanelStory.svelte +7 -0
  224. package/dist/components/molecules/VideoComponentsPanel/VideoComponentsPanelStory.svelte.d.ts +18 -0
  225. package/dist/components/molecules/VideoPlayer/VideoPlayer.stories.d.ts +1 -1
  226. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.d.ts +9 -0
  227. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.js +8 -0
  228. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte +112 -0
  229. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte.d.ts +15 -0
  230. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte +10 -0
  231. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte.d.ts +3 -0
  232. package/dist/components/molecules/VideoTransitionsPanel/VideoTransitionsPanel.stories.js +8 -0
  233. package/dist/components/molecules/VideoTransitionsPanel/VideoTransitionsPanel.svelte +113 -0
  234. package/dist/components/molecules/VideoTransitionsPanel/VideoTransitionsPanel.svelte.d.ts +18 -0
  235. package/dist/components/molecules/VideoTransitionsPanel/VideoTransitionsPanelStory.svelte +7 -0
  236. package/dist/components/molecules/VideoTransitionsPanel/VideoTransitionsPanelStory.svelte.d.ts +18 -0
  237. package/dist/components/molecules/WaveformRegion/WaveformRegion.stories.js +8 -0
  238. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte +82 -0
  239. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte.d.ts +13 -0
  240. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte +17 -0
  241. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte.d.ts +18 -0
  242. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte +13 -4
  243. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte.d.ts +3 -1
  244. package/dist/components/molecules/WidgetCanvas/widgetCanvasContext.d.ts +2 -0
  245. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte +206 -37
  246. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte.d.ts +31 -0
  247. package/dist/components/organisms/AudioEditor/AudioEditor.stories.d.ts +12 -0
  248. package/dist/components/organisms/AudioEditor/AudioEditor.stories.js +9 -0
  249. package/dist/components/organisms/AudioEditor/AudioEditor.svelte +324 -0
  250. package/dist/components/organisms/AudioEditor/AudioEditor.svelte.d.ts +13 -0
  251. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte +10 -0
  252. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte.d.ts +3 -0
  253. package/dist/components/organisms/BlogEditor/BlogEditor.stories.d.ts +12 -0
  254. package/dist/components/organisms/BlogEditor/BlogEditor.stories.js +9 -0
  255. package/dist/components/organisms/BlogEditor/BlogEditor.svelte +1208 -0
  256. package/dist/components/organisms/BlogEditor/BlogEditor.svelte.d.ts +16 -0
  257. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte +144 -0
  258. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte.d.ts +3 -0
  259. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte +28 -0
  260. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte.d.ts +10 -0
  261. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte +34 -0
  262. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte.d.ts +11 -0
  263. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte +13 -0
  264. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte.d.ts +8 -0
  265. package/dist/components/organisms/BlogRenderer/BlogRenderer.stories.js +8 -0
  266. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte +469 -0
  267. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte.d.ts +14 -0
  268. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte +20 -0
  269. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte.d.ts +18 -0
  270. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.d.ts +12 -0
  271. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.js +9 -0
  272. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte +1012 -0
  273. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte.d.ts +16 -0
  274. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte +76 -0
  275. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte.d.ts +3 -0
  276. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.d.ts +12 -0
  277. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.js +9 -0
  278. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte +1680 -0
  279. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte.d.ts +18 -0
  280. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte +329 -0
  281. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte.d.ts +3 -0
  282. package/dist/components/organisms/DashboardBuilderPage/DashboardBuilderPage.svelte.d.ts +1 -1
  283. package/dist/components/organisms/DesktopShell/DesktopShell.svelte.d.ts +1 -1
  284. package/dist/components/organisms/EditorShell/EditorShell.svelte +162 -57
  285. package/dist/components/organisms/EditorShell/EditorShell.svelte.d.ts +21 -1
  286. package/dist/components/organisms/FileUploader/FileUploader.stories.d.ts +10 -0
  287. package/dist/components/organisms/FileUploader/FileUploader.stories.js +21 -0
  288. package/dist/components/organisms/FileUploader/FileUploader.svelte +127 -25
  289. package/dist/components/organisms/FileUploader/FileUploader.svelte.d.ts +20 -0
  290. package/dist/components/organisms/FileUploader/FileUploaderStory.svelte +7 -1
  291. package/dist/components/organisms/FileUploader/FileUploaderStory.svelte.d.ts +3 -0
  292. package/dist/components/organisms/ImportWizard/ImportWizard.stories.js +8 -0
  293. package/dist/components/organisms/ImportWizard/ImportWizard.svelte +209 -0
  294. package/dist/components/organisms/ImportWizard/ImportWizard.svelte.d.ts +22 -0
  295. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte +16 -0
  296. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte.d.ts +18 -0
  297. package/dist/components/organisms/VideoEditor/VideoEditor.stories.d.ts +12 -0
  298. package/dist/components/organisms/VideoEditor/VideoEditor.stories.js +9 -0
  299. package/dist/components/organisms/VideoEditor/VideoEditor.svelte +1687 -0
  300. package/dist/components/organisms/VideoEditor/VideoEditor.svelte.d.ts +14 -0
  301. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte +11 -0
  302. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte.d.ts +3 -0
  303. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.d.ts +12 -0
  304. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.js +9 -0
  305. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte +22 -0
  306. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte.d.ts +13 -0
  307. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte +8 -0
  308. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte.d.ts +3 -0
  309. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.d.ts +12 -0
  310. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.js +9 -0
  311. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte +32 -0
  312. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte.d.ts +17 -0
  313. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte +21 -0
  314. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte.d.ts +3 -0
  315. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.d.ts +12 -0
  316. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.js +9 -0
  317. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte +22 -0
  318. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte.d.ts +13 -0
  319. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte +8 -0
  320. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte.d.ts +3 -0
  321. package/dist/index.d.ts +91 -1
  322. package/dist/index.js +64 -0
  323. package/dist/types/xyflow-svelte.d.ts +62 -0
  324. package/dist/utils/audioProject.d.ts +19 -0
  325. package/dist/utils/audioProject.js +70 -0
  326. package/dist/utils/blogDocument.d.ts +175 -0
  327. package/dist/utils/blogDocument.js +220 -0
  328. package/dist/utils/blueprintRuntime.d.ts +34 -0
  329. package/dist/utils/blueprintRuntime.js +289 -0
  330. package/dist/utils/canvasDocument.d.ts +239 -0
  331. package/dist/utils/canvasDocument.js +443 -0
  332. package/dist/utils/canvasExport.d.ts +10 -0
  333. package/dist/utils/canvasExport.js +469 -0
  334. package/dist/utils/canvasHierarchy.d.ts +189 -0
  335. package/dist/utils/canvasHierarchy.js +674 -0
  336. package/dist/utils/canvasHistory.d.ts +19 -0
  337. package/dist/utils/canvasHistory.js +48 -0
  338. package/dist/utils/canvasWidget.d.ts +81 -0
  339. package/dist/utils/canvasWidget.js +597 -0
  340. package/dist/utils/mediaTime.d.ts +26 -0
  341. package/dist/utils/mediaTime.js +76 -0
  342. package/dist/utils/mediaTracks.d.ts +215 -0
  343. package/dist/utils/mediaTracks.js +798 -0
  344. package/dist/utils/nodeGraph.d.ts +354 -0
  345. package/dist/utils/nodeGraph.js +1453 -0
  346. package/dist/utils/queryBridge.d.ts +18 -0
  347. package/dist/utils/queryBridge.js +118 -0
  348. package/dist/utils/videoSequence.d.ts +13 -0
  349. package/dist/utils/videoSequence.js +94 -0
  350. package/package.json +5 -2
@@ -0,0 +1,45 @@
1
+ import { type CanvasDocument, type CanvasLayer } from '../../../utils/canvasDocument.js';
2
+ import { type CanvasElementDef } from '../CanvasElementsPanel/CanvasElementsPanel.svelte';
3
+ interface MediaStageProps {
4
+ document: CanvasDocument;
5
+ selectedIds?: string[];
6
+ /** Multiplier on fit-to-view scale (1 = fit). */
7
+ zoom?: number;
8
+ showGrid?: boolean;
9
+ showGuides?: boolean;
10
+ snap?: boolean;
11
+ cellSize?: number;
12
+ /** Pen tool: click to place points, dblclick / Enter to finish, click first point to close. */
13
+ drawMode?: boolean;
14
+ /** Expand widget instances into resolved children for preview. */
15
+ expandWidgets?: boolean;
16
+ class?: string;
17
+ onselect?: (ids: string[]) => void;
18
+ onzoom?: (zoom: number) => void;
19
+ onlayerchange?: (layer: CanvasLayer) => void;
20
+ ondocumentchange?: (doc: CanvasDocument) => void;
21
+ oncontextlayer?: (payload: {
22
+ id: string;
23
+ x: number;
24
+ y: number;
25
+ }) => void;
26
+ /** Drop an element from the Elements panel onto the artboard. */
27
+ ondropelement?: (payload: {
28
+ def: CanvasElementDef;
29
+ x: number;
30
+ y: number;
31
+ }) => void;
32
+ ondrawcomplete?: (payload: {
33
+ points: {
34
+ x: number;
35
+ y: number;
36
+ }[];
37
+ closed: boolean;
38
+ }) => void;
39
+ ondrawcancel?: () => void;
40
+ /** Double-click a widget instance or container. */
41
+ onenterlayer?: (id: string) => void;
42
+ }
43
+ declare const MediaStage: import("svelte").Component<MediaStageProps, {}, "">;
44
+ type MediaStage = ReturnType<typeof MediaStage>;
45
+ export default MediaStage;
@@ -0,0 +1,35 @@
1
+ <script lang="ts">
2
+ import MediaStage from './MediaStage.svelte';
3
+ import { createCanvasLayer, emptyCanvasDocument } from '../../../utils/canvasDocument.js';
4
+
5
+ let doc = $state(
6
+ emptyCanvasDocument({
7
+ layers: [
8
+ createCanvasLayer('image', {
9
+ name: 'Photo',
10
+ src: 'https://picsum.photos/seed/canvas-photo/480/320',
11
+ rect: { x: 120, y: 80, w: 480, h: 320 },
12
+ zIndex: 0
13
+ }),
14
+ createCanvasLayer('text', {
15
+ name: 'Title',
16
+ text: 'Canvas',
17
+ rect: { x: 160, y: 120, w: 240, h: 64 },
18
+ zIndex: 1
19
+ })
20
+ ]
21
+ })
22
+ );
23
+ let selectedIds = $state<string[]>([doc.layers[1]?.id].filter(Boolean) as string[]);
24
+ </script>
25
+
26
+ <div class="h-[520px] overflow-hidden rounded-lg border border-border">
27
+ <MediaStage
28
+ document={doc}
29
+ {selectedIds}
30
+ onselect={(ids) => (selectedIds = ids)}
31
+ onlayerchange={(layer) => {
32
+ doc = { ...doc, layers: doc.layers.map((l) => (l.id === layer.id ? layer : l)) };
33
+ }}
34
+ />
35
+ </div>
@@ -0,0 +1,3 @@
1
+ declare const MediaStageStory: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type MediaStageStory = ReturnType<typeof MediaStageStory>;
3
+ export default MediaStageStory;
@@ -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 MediaTimelineStory from './MediaTimelineStory.svelte';
2
+ const meta = {
3
+ title: 'Molecules/MediaTimeline',
4
+ component: MediaTimelineStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};
@@ -0,0 +1,441 @@
1
+ <script lang="ts">
2
+ import Playhead from '../../atoms/Playhead/Playhead.svelte';
3
+ import TimeRuler from '../../atoms/TimeRuler/TimeRuler.svelte';
4
+ import TimelineGrid from '../../atoms/TimelineGrid/TimelineGrid.svelte';
5
+ import MarqueeRect from '../../atoms/MarqueeRect/MarqueeRect.svelte';
6
+ import TimelineTrack from '../TimelineTrack/TimelineTrack.svelte';
7
+ import VideoTrackHeader from '../VideoTrackHeader/VideoTrackHeader.svelte';
8
+ import TrackHeader from '../TrackHeader/TrackHeader.svelte';
9
+ import IconButton from '../../atoms/IconButton/IconButton.svelte';
10
+ import Button from '../../atoms/Button/Button.svelte';
11
+ import type { MediaClip, MediaTrack, MediaTrackKind } from '../../../utils/mediaTracks.js';
12
+ import {
13
+ clampMs,
14
+ msToPx,
15
+ pxPerMsFromZoom,
16
+ pxToMs,
17
+ snapStepForZoom,
18
+ ticksForDuration
19
+ } from '../../../utils/mediaTime.js';
20
+ import {
21
+ attachMarqueeSelect,
22
+ collectMarqueeItems,
23
+ defaultMarqueeIgnore,
24
+ resolveMarqueeSelection,
25
+ type MarqueeRect as MarqueeBox
26
+ } from '../../../utils/marqueeSelect.js';
27
+ import ZoomIn from '@lucide/svelte/icons/zoom-in';
28
+ import ZoomOut from '@lucide/svelte/icons/zoom-out';
29
+ import { onDestroy } from 'svelte';
30
+
31
+ interface MediaTimelineProps {
32
+ tracks?: MediaTrack[];
33
+ durationMs?: number;
34
+ currentTimeMs?: number;
35
+ zoom?: number;
36
+ selectedClipIds?: string[];
37
+ /** @deprecated use selectedClipIds */
38
+ selectedClipId?: string | null;
39
+ showHeaders?: boolean;
40
+ headerVariant?: 'video' | 'audio' | 'plain';
41
+ snap?: boolean;
42
+ showTrackActions?: boolean;
43
+ /** Allow drag-reorder of tracks via header grip */
44
+ reorderTracks?: boolean;
45
+ /** Show delete control on video track headers */
46
+ allowRemoveTracks?: boolean;
47
+ class?: string;
48
+ onseek?: (ms: number) => void;
49
+ onselectclip?: (clipId: string, e: MouseEvent) => void;
50
+ oncontextmenuclip?: (clipId: string, e: MouseEvent) => void;
51
+ oncontextmenutrack?: (trackId: string, e: MouseEvent) => void;
52
+ onchangeclip?: (clip: MediaClip) => void;
53
+ onmoveclips?: (clipIds: string[], deltaMs: number) => void;
54
+ ondropclip?: (clipId: string, e: DragEvent) => void;
55
+ ondroptrack?: (trackId: string, e: DragEvent, timeMs: number) => void;
56
+ onchangetrack?: (track: MediaTrack) => void;
57
+ onzoomchange?: (zoom: number) => void;
58
+ onaddtrack?: (kind: MediaTrackKind) => void;
59
+ onremovetrack?: (trackId: string) => void;
60
+ /** Fired with new track id order after drag reorder */
61
+ onreordertracks?: (orderedIds: string[]) => void;
62
+ onemptyclick?: (e: MouseEvent) => void;
63
+ /** Replace / add / toggle selection from marquee */
64
+ onselectionchange?: (clipIds: string[]) => void;
65
+ }
66
+
67
+ let {
68
+ tracks = [],
69
+ durationMs = 30_000,
70
+ currentTimeMs = $bindable(0),
71
+ zoom = $bindable(1),
72
+ selectedClipIds,
73
+ selectedClipId = null,
74
+ showHeaders = true,
75
+ headerVariant = 'plain',
76
+ snap = true,
77
+ showTrackActions = false,
78
+ reorderTracks = false,
79
+ allowRemoveTracks = false,
80
+ class: className = '',
81
+ onseek,
82
+ onselectclip,
83
+ oncontextmenuclip,
84
+ oncontextmenutrack,
85
+ onchangeclip,
86
+ onmoveclips,
87
+ ondropclip,
88
+ ondroptrack,
89
+ onchangetrack,
90
+ onzoomchange,
91
+ onaddtrack,
92
+ onremovetrack,
93
+ onreordertracks,
94
+ onemptyclick,
95
+ onselectionchange
96
+ }: MediaTimelineProps = $props();
97
+
98
+ const resolvedSelected = $derived(
99
+ selectedClipIds ?? (selectedClipId ? [selectedClipId] : [])
100
+ );
101
+ const pxPerMs = $derived(pxPerMsFromZoom(zoom));
102
+ const contentWidth = $derived(Math.max(1, durationMs * pxPerMs));
103
+ const playheadX = $derived(msToPx(currentTimeMs, pxPerMs));
104
+ const ticks = $derived(ticksForDuration(durationMs, pxPerMs));
105
+ const snapToMs = $derived(snap ? snapStepForZoom(pxPerMs) : 0);
106
+ const headerW = $derived(reorderTracks || allowRemoveTracks ? 200 : 176);
107
+
108
+ let scroller = $state<HTMLDivElement | null>(null);
109
+ let tracksEl = $state<HTMLDivElement | null>(null);
110
+ let dragTrackId = $state<string | null>(null);
111
+ let dragTrackHeight = $state(44);
112
+ let floatPos = $state({ x: 0, y: 0, w: 0 });
113
+ let dragOffset = $state({ x: 0, y: 0 });
114
+ let scrubbing = $state(false);
115
+ let marquee = $state<MarqueeBox | null>(null);
116
+ let disposeMarquee: (() => void) | null = null;
117
+ const rulerH = 28;
118
+
119
+ const draggingTrack = $derived(dragTrackId ? tracks.find((t) => t.id === dragTrackId) : null);
120
+
121
+ $effect(() => {
122
+ disposeMarquee?.();
123
+ disposeMarquee = null;
124
+ const el = tracksEl;
125
+ if (!el || !onselectionchange) return;
126
+ disposeMarquee = attachMarqueeSelect(el, {
127
+ getItems: () => collectMarqueeItems(el),
128
+ onRect: (r) => (marquee = r),
129
+ shouldIgnore: (target) =>
130
+ defaultMarqueeIgnore(target) ||
131
+ (target instanceof Element &&
132
+ Boolean(
133
+ target.closest(
134
+ '[data-marquee-id], [data-marquee-ignore], [aria-label="Playhead"], [role="slider"], .sticky'
135
+ )
136
+ )),
137
+ onSelect: ({ ids, modifier }) => {
138
+ onselectionchange(resolveMarqueeSelection(ids, resolvedSelected, modifier));
139
+ }
140
+ });
141
+ });
142
+
143
+ onDestroy(() => {
144
+ disposeMarquee?.();
145
+ endTrackReorder();
146
+ });
147
+
148
+ function seekFromClientX(clientX: number) {
149
+ if (!scroller) return;
150
+ const rect = scroller.getBoundingClientRect();
151
+ const x = clientX - rect.left + scroller.scrollLeft - (showHeaders ? headerW : 0);
152
+ const ms = clampMs(pxToMs(x, pxPerMs), 0, durationMs);
153
+ currentTimeMs = ms;
154
+ onseek?.(ms);
155
+ }
156
+
157
+ function seekToMs(ms: number) {
158
+ currentTimeMs = clampMs(ms, 0, durationMs);
159
+ onseek?.(currentTimeMs);
160
+ }
161
+
162
+ function setZoom(next: number) {
163
+ zoom = Math.min(8, Math.max(0.25, next));
164
+ onzoomchange?.(zoom);
165
+ }
166
+
167
+ function trackIndexFromPoint(clientY: number): number {
168
+ if (!tracksEl) return -1;
169
+ const rows = [...tracksEl.querySelectorAll<HTMLElement>('[data-track-row]')];
170
+ if (!rows.length) return -1;
171
+ for (let i = 0; i < rows.length; i++) {
172
+ const rect = rows[i].getBoundingClientRect();
173
+ const mid = rect.top + rect.height / 2;
174
+ if (clientY < mid) return i;
175
+ }
176
+ return rows.length - 1;
177
+ }
178
+
179
+ function moveTrackToIndex(sourceId: string, toIndex: number) {
180
+ const ids = tracks.map((t) => t.id);
181
+ const from = ids.indexOf(sourceId);
182
+ if (from < 0 || toIndex < 0 || toIndex >= ids.length || from === toIndex) return;
183
+ const next = [...ids];
184
+ next.splice(from, 1);
185
+ next.splice(toIndex, 0, sourceId);
186
+ onreordertracks?.(next);
187
+ }
188
+
189
+ function onTrackReorderMove(e: PointerEvent) {
190
+ if (!dragTrackId) return;
191
+ floatPos = {
192
+ x: e.clientX - dragOffset.x,
193
+ y: e.clientY - dragOffset.y,
194
+ w: floatPos.w
195
+ };
196
+ const to = trackIndexFromPoint(e.clientY);
197
+ if (to >= 0) moveTrackToIndex(dragTrackId, to);
198
+ }
199
+
200
+ function endTrackReorder() {
201
+ dragTrackId = null;
202
+ window.removeEventListener('pointermove', onTrackReorderMove);
203
+ window.removeEventListener('pointerup', endTrackReorder);
204
+ window.removeEventListener('pointercancel', endTrackReorder);
205
+ }
206
+
207
+ function startTrackReorder(trackId: string, e: PointerEvent) {
208
+ if (!reorderTracks) return;
209
+ const row = (e.currentTarget as HTMLElement).closest('[data-track-row]') as HTMLElement | null;
210
+ if (!row) return;
211
+ const rect = row.getBoundingClientRect();
212
+ const scrollerRect = scroller?.getBoundingClientRect();
213
+ const ghostW = Math.min(
214
+ Math.max(headerW + 180, scroller?.clientWidth ?? 360),
215
+ window.innerWidth - 16
216
+ );
217
+ const ghostX = scrollerRect?.left ?? Math.max(8, rect.left);
218
+ dragTrackHeight = rect.height;
219
+ dragOffset = { x: e.clientX - ghostX, y: e.clientY - rect.top };
220
+ floatPos = { x: ghostX, y: rect.top, w: ghostW };
221
+ dragTrackId = trackId;
222
+ window.addEventListener('pointermove', onTrackReorderMove);
223
+ window.addEventListener('pointerup', endTrackReorder);
224
+ window.addEventListener('pointercancel', endTrackReorder);
225
+ }
226
+ </script>
227
+
228
+ <div
229
+ class={[
230
+ 'flex h-full min-h-0 flex-col overflow-hidden rounded-lg border border-border bg-surface',
231
+ className
232
+ ]}
233
+ >
234
+ <div class="flex shrink-0 items-center gap-2 border-b border-border px-2 py-1">
235
+ {#if showTrackActions}
236
+ <Button size="xs" variant="ghost" onclick={() => onaddtrack?.('video')}>+ Video</Button>
237
+ <Button size="xs" variant="ghost" onclick={() => onaddtrack?.('audio')}>+ Audio</Button>
238
+ {/if}
239
+ <div class="ml-auto flex items-center gap-1">
240
+ <IconButton label="Zoom out" size="xs" onclick={() => setZoom(zoom / 1.25)}>
241
+ <ZoomOut class="h-3.5 w-3.5" />
242
+ </IconButton>
243
+ <IconButton label="Zoom in" size="xs" onclick={() => setZoom(zoom * 1.25)}>
244
+ <ZoomIn class="h-3.5 w-3.5" />
245
+ </IconButton>
246
+ </div>
247
+ </div>
248
+ <div bind:this={scroller} class="relative min-h-0 flex-1 overflow-auto">
249
+ <div class="relative" style:width={`${contentWidth + (showHeaders ? headerW : 0)}px`}>
250
+ <div class="sticky top-0 z-30 flex bg-surface">
251
+ {#if showHeaders}
252
+ <div
253
+ class="sticky left-0 z-10 shrink-0 border-r border-border bg-surface-elevated"
254
+ style:width={`${headerW}px`}
255
+ style:height={`${rulerH}px`}
256
+ ></div>
257
+ {/if}
258
+ <div class="relative" style:width={`${contentWidth}px`}>
259
+ <TimeRuler
260
+ {durationMs}
261
+ {pxPerMs}
262
+ {ticks}
263
+ height={rulerH}
264
+ onclick={(ms) => seekToMs(ms)}
265
+ onscrub={(ms) => seekToMs(ms)}
266
+ onscrubstart={() => (scrubbing = true)}
267
+ onscrubend={() => (scrubbing = false)}
268
+ />
269
+ <!-- Head sits on top of the time guide -->
270
+ <Playhead
271
+ x={playheadX}
272
+ variant="head"
273
+ headSize={rulerH}
274
+ height={rulerH}
275
+ dragging={scrubbing}
276
+ class="pointer-events-auto"
277
+ ondrag={(e) => seekFromClientX(e.clientX)}
278
+ ondragstart={(e) => {
279
+ scrubbing = true;
280
+ seekFromClientX(e.clientX);
281
+ }}
282
+ ondragend={() => (scrubbing = false)}
283
+ />
284
+ </div>
285
+ </div>
286
+
287
+ <div
288
+ bind:this={tracksEl}
289
+ class="relative"
290
+ role="presentation"
291
+ onclick={(e) => {
292
+ if (e.target === e.currentTarget) onemptyclick?.(e);
293
+ }}
294
+ >
295
+ <div
296
+ class="absolute inset-y-0 z-0"
297
+ style:left={`${showHeaders ? headerW : 0}px`}
298
+ style:width={`${contentWidth}px`}
299
+ >
300
+ <TimelineGrid {durationMs} {pxPerMs} {ticks} />
301
+ </div>
302
+
303
+ {#each tracks as track (track.id)}
304
+ {@const isDragging = dragTrackId === track.id}
305
+ <div
306
+ data-track-row
307
+ data-track-id={track.id}
308
+ class={[
309
+ 'relative',
310
+ isDragging &&
311
+ 'rounded-md border border-dashed border-brand-400 bg-brand-50/50 dark:bg-brand-950/30'
312
+ ]}
313
+ style:height={isDragging ? `${dragTrackHeight}px` : undefined}
314
+ >
315
+ {#if isDragging}
316
+ <div
317
+ class="flex h-full items-center gap-2 px-3"
318
+ style:padding-left={showHeaders ? undefined : undefined}
319
+ >
320
+ <div class="sticky left-0 flex items-center gap-2" style:width={`${headerW}px`}>
321
+ <span class="text-[10px] font-medium text-brand-600 dark:text-brand-400"
322
+ >Drop here</span
323
+ >
324
+ </div>
325
+ </div>
326
+ {:else}
327
+ <TimelineTrack
328
+ {track}
329
+ {pxPerMs}
330
+ {durationMs}
331
+ selectedClipIds={resolvedSelected}
332
+ {snapToMs}
333
+ headerWidth={headerW}
334
+ onselectclip={onselectclip}
335
+ oncontextmenuclip={oncontextmenuclip}
336
+ oncontextmenutrack={oncontextmenutrack}
337
+ onchangeclip={onchangeclip}
338
+ {onmoveclips}
339
+ {ondropclip}
340
+ {ondroptrack}
341
+ {onemptyclick}
342
+ >
343
+ {#snippet header()}
344
+ {#if showHeaders}
345
+ {#if headerVariant === 'video' && onchangetrack}
346
+ <VideoTrackHeader
347
+ {track}
348
+ onchange={onchangetrack}
349
+ draggable={reorderTracks}
350
+ canRemove={allowRemoveTracks && tracks.length > 1}
351
+ onremove={onremovetrack}
352
+ onreorderstart={startTrackReorder}
353
+ />
354
+ {:else if headerVariant === 'audio' && onchangetrack}
355
+ <TrackHeader {track} onchange={onchangetrack} />
356
+ {:else}
357
+ <span class="truncate text-xs font-medium text-secondary">{track.name}</span>
358
+ {/if}
359
+ {/if}
360
+ {/snippet}
361
+ </TimelineTrack>
362
+ {/if}
363
+ </div>
364
+ {/each}
365
+
366
+ <MarqueeRect rect={marquee} />
367
+
368
+ <!-- Needle continues through the tracks -->
369
+ <div
370
+ class="pointer-events-none absolute inset-y-0 z-20"
371
+ style:left={`${showHeaders ? headerW : 0}px`}
372
+ style:width={`${contentWidth}px`}
373
+ >
374
+ <Playhead
375
+ x={playheadX}
376
+ variant="line"
377
+ class="pointer-events-auto"
378
+ dragging={scrubbing}
379
+ ondrag={(e) => seekFromClientX(e.clientX)}
380
+ ondragstart={(e) => {
381
+ scrubbing = true;
382
+ seekFromClientX(e.clientX);
383
+ }}
384
+ ondragend={() => (scrubbing = false)}
385
+ />
386
+ </div>
387
+ </div>
388
+ </div>
389
+ </div>
390
+ </div>
391
+
392
+ {#if draggingTrack && dragTrackId}
393
+ <div
394
+ class="pointer-events-none fixed z-[200] overflow-hidden rounded-lg border border-brand-400 bg-surface-elevated shadow-xl ring-2 ring-brand-500/25"
395
+ style:left={`${floatPos.x}px`}
396
+ style:top={`${floatPos.y}px`}
397
+ style:width={`${floatPos.w}px`}
398
+ style:height={`${dragTrackHeight}px`}
399
+ aria-hidden="true"
400
+ >
401
+ <div class="flex h-full items-center border-b border-border/60 bg-surface-elevated">
402
+ <div
403
+ class="flex h-full shrink-0 items-center gap-1.5 border-r border-border px-1.5"
404
+ style:width={`${headerW}px`}
405
+ >
406
+ <span class="flex h-6 w-5 items-center justify-center text-muted">
407
+ <svg class="h-3.5 w-3.5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
408
+ <circle cx="9" cy="7" r="1.5" />
409
+ <circle cx="15" cy="7" r="1.5" />
410
+ <circle cx="9" cy="12" r="1.5" />
411
+ <circle cx="15" cy="12" r="1.5" />
412
+ <circle cx="9" cy="17" r="1.5" />
413
+ <circle cx="15" cy="17" r="1.5" />
414
+ </svg>
415
+ </span>
416
+ <span
417
+ class="h-2 w-2 shrink-0 rounded-full"
418
+ style:background={draggingTrack.color ??
419
+ (draggingTrack.kind === 'audio' ? '#10b981' : '#3b82f6')}
420
+ ></span>
421
+ <span class="min-w-0 flex-1 truncate text-xs font-semibold text-primary"
422
+ >{draggingTrack.name}</span
423
+ >
424
+ </div>
425
+ <div class="relative min-h-0 min-w-0 flex-1 self-stretch bg-surface/80">
426
+ {#each draggingTrack.clips as clip (clip.id)}
427
+ {@const left = msToPx(clip.startMs, pxPerMs)}
428
+ {@const w = Math.max(8, msToPx(clip.endMs - clip.startMs, pxPerMs))}
429
+ <div
430
+ class="absolute top-1 bottom-1 overflow-hidden rounded-md border border-black/20 text-[10px] text-white"
431
+ style:left={`${left}px`}
432
+ style:width={`${w}px`}
433
+ style:background={clip.color ?? draggingTrack.color ?? '#3b82f6'}
434
+ >
435
+ <span class="block truncate px-1.5 py-0.5 font-medium">{clip.name}</span>
436
+ </div>
437
+ {/each}
438
+ </div>
439
+ </div>
440
+ </div>
441
+ {/if}
@@ -0,0 +1,39 @@
1
+ import type { MediaClip, MediaTrack, MediaTrackKind } from '../../../utils/mediaTracks.js';
2
+ interface MediaTimelineProps {
3
+ tracks?: MediaTrack[];
4
+ durationMs?: number;
5
+ currentTimeMs?: number;
6
+ zoom?: number;
7
+ selectedClipIds?: string[];
8
+ /** @deprecated use selectedClipIds */
9
+ selectedClipId?: string | null;
10
+ showHeaders?: boolean;
11
+ headerVariant?: 'video' | 'audio' | 'plain';
12
+ snap?: boolean;
13
+ showTrackActions?: boolean;
14
+ /** Allow drag-reorder of tracks via header grip */
15
+ reorderTracks?: boolean;
16
+ /** Show delete control on video track headers */
17
+ allowRemoveTracks?: boolean;
18
+ class?: string;
19
+ onseek?: (ms: number) => void;
20
+ onselectclip?: (clipId: string, e: MouseEvent) => void;
21
+ oncontextmenuclip?: (clipId: string, e: MouseEvent) => void;
22
+ oncontextmenutrack?: (trackId: string, e: MouseEvent) => void;
23
+ onchangeclip?: (clip: MediaClip) => void;
24
+ onmoveclips?: (clipIds: string[], deltaMs: number) => void;
25
+ ondropclip?: (clipId: string, e: DragEvent) => void;
26
+ ondroptrack?: (trackId: string, e: DragEvent, timeMs: number) => void;
27
+ onchangetrack?: (track: MediaTrack) => void;
28
+ onzoomchange?: (zoom: number) => void;
29
+ onaddtrack?: (kind: MediaTrackKind) => void;
30
+ onremovetrack?: (trackId: string) => void;
31
+ /** Fired with new track id order after drag reorder */
32
+ onreordertracks?: (orderedIds: string[]) => void;
33
+ onemptyclick?: (e: MouseEvent) => void;
34
+ /** Replace / add / toggle selection from marquee */
35
+ onselectionchange?: (clipIds: string[]) => void;
36
+ }
37
+ declare const MediaTimeline: import("svelte").Component<MediaTimelineProps, {}, "zoom" | "currentTimeMs">;
38
+ type MediaTimeline = ReturnType<typeof MediaTimeline>;
39
+ export default MediaTimeline;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import MediaTimeline from './MediaTimeline.svelte';
3
+ import { createDemoVideoSequence } from '../../../utils/videoSequence.js';
4
+
5
+ const seq = createDemoVideoSequence();
6
+ let currentTimeMs = $state(2000);
7
+ let zoom = $state(1.2);
8
+ let selectedClipId = $state<string | null>(seq.tracks[0]?.clips[0]?.id ?? null);
9
+ </script>
10
+
11
+ <div class="h-64">
12
+ <MediaTimeline
13
+ tracks={seq.tracks}
14
+ durationMs={seq.durationMs}
15
+ bind:currentTimeMs
16
+ bind:zoom
17
+ {selectedClipId}
18
+ onselectclip={(id) => (selectedClipId = id)}
19
+ />
20
+ </div>
@@ -0,0 +1,3 @@
1
+ declare const MediaTimelineStory: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type MediaTimelineStory = ReturnType<typeof MediaTimelineStory>;
3
+ export default MediaTimelineStory;
@@ -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 MixerChannelStory from './MixerChannelStory.svelte';
2
+ const meta = {
3
+ title: 'Molecules/MixerChannel',
4
+ component: MixerChannelStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};