@r2digisolutions/components 0.1.6 → 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 (389) hide show
  1. package/README.md +1 -1
  2. package/dist/components/atoms/Checkbox/Checkbox.svelte +10 -3
  3. package/dist/components/atoms/Checkbox/Checkbox.svelte.d.ts +3 -0
  4. package/dist/components/atoms/IconButton/IconButton.svelte +1 -1
  5. package/dist/components/atoms/Input/Input.svelte +17 -2
  6. package/dist/components/atoms/Input/Input.svelte.d.ts +6 -1
  7. package/dist/components/atoms/MarqueeRect/MarqueeRect.svelte +21 -0
  8. package/dist/components/atoms/MarqueeRect/MarqueeRect.svelte.d.ts +8 -0
  9. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.stories.js +8 -0
  10. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte +122 -0
  11. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte.d.ts +11 -0
  12. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte +12 -0
  13. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte.d.ts +18 -0
  14. package/dist/components/atoms/PanKnob/PanKnob.stories.d.ts +9 -0
  15. package/dist/components/atoms/PanKnob/PanKnob.stories.js +8 -0
  16. package/dist/components/atoms/PanKnob/PanKnob.svelte +218 -0
  17. package/dist/components/atoms/PanKnob/PanKnob.svelte.d.ts +19 -0
  18. package/dist/components/atoms/PanKnob/PanKnobStory.svelte +15 -0
  19. package/dist/components/atoms/PanKnob/PanKnobStory.svelte.d.ts +3 -0
  20. package/dist/components/atoms/Playhead/Playhead.stories.js +8 -0
  21. package/dist/components/atoms/Playhead/Playhead.svelte +59 -0
  22. package/dist/components/atoms/Playhead/Playhead.svelte.d.ts +13 -0
  23. package/dist/components/atoms/Playhead/PlayheadStory.svelte +9 -0
  24. package/dist/components/atoms/Playhead/PlayheadStory.svelte.d.ts +18 -0
  25. package/dist/components/atoms/Textarea/Textarea.svelte +4 -1
  26. package/dist/components/atoms/Textarea/Textarea.svelte.d.ts +1 -0
  27. package/dist/components/atoms/TimeRuler/TimeRuler.stories.js +8 -0
  28. package/dist/components/atoms/TimeRuler/TimeRuler.svelte +58 -0
  29. package/dist/components/atoms/TimeRuler/TimeRuler.svelte.d.ts +10 -0
  30. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte +7 -0
  31. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte.d.ts +18 -0
  32. package/dist/components/atoms/Toggle/Toggle.svelte +1 -1
  33. package/dist/components/atoms/Tooltip/Tooltip.svelte +1 -1
  34. package/dist/components/atoms/TrimHandle/TrimHandle.stories.js +8 -0
  35. package/dist/components/atoms/TrimHandle/TrimHandle.svelte +63 -0
  36. package/dist/components/atoms/TrimHandle/TrimHandle.svelte.d.ts +12 -0
  37. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte +11 -0
  38. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte.d.ts +18 -0
  39. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.d.ts +9 -0
  40. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.js +8 -0
  41. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte +102 -0
  42. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte.d.ts +20 -0
  43. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte +34 -0
  44. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte.d.ts +3 -0
  45. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte +112 -62
  46. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte.d.ts +2 -0
  47. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.stories.js +8 -0
  48. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte +117 -0
  49. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte.d.ts +23 -0
  50. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte +18 -0
  51. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte.d.ts +18 -0
  52. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.stories.js +8 -0
  53. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte +858 -0
  54. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte.d.ts +43 -0
  55. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte +7 -0
  56. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte.d.ts +18 -0
  57. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.d.ts +9 -0
  58. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.js +8 -0
  59. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte +1140 -0
  60. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte.d.ts +28 -0
  61. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte +20 -0
  62. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte.d.ts +3 -0
  63. package/dist/components/molecules/CodeEditor/CodeEditor.svelte +13 -10
  64. package/dist/components/molecules/ColorPicker/ColorPicker.svelte +167 -97
  65. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.d.ts +9 -0
  66. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.js +8 -0
  67. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte +108 -0
  68. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte.d.ts +18 -0
  69. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte +15 -0
  70. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte.d.ts +3 -0
  71. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.stories.d.ts +9 -0
  72. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.stories.js +8 -0
  73. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.svelte +412 -0
  74. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.svelte.d.ts +14 -0
  75. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanelStory.svelte +27 -0
  76. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanelStory.svelte.d.ts +3 -0
  77. package/dist/components/molecules/ConflictResolver/ConflictResolver.stories.js +8 -0
  78. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte +73 -0
  79. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte.d.ts +16 -0
  80. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte +11 -0
  81. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte.d.ts +18 -0
  82. package/dist/components/molecules/ContextMenu/ContextMenu.svelte +237 -41
  83. package/dist/components/molecules/ContextMenu/ContextMenu.svelte.d.ts +17 -1
  84. package/dist/components/molecules/DateTimePicker/DateTimePicker.svelte.d.ts +1 -1
  85. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.d.ts +9 -0
  86. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.js +8 -0
  87. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte +56 -0
  88. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte.d.ts +12 -0
  89. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte +12 -0
  90. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte.d.ts +3 -0
  91. package/dist/components/molecules/FilterList/FilterList.stories.d.ts +9 -0
  92. package/dist/components/molecules/FilterList/FilterList.stories.js +8 -0
  93. package/dist/components/molecules/FilterList/FilterList.svelte +101 -0
  94. package/dist/components/molecules/FilterList/FilterList.svelte.d.ts +18 -0
  95. package/dist/components/molecules/FilterList/FilterListStory.svelte +31 -0
  96. package/dist/components/molecules/FilterList/FilterListStory.svelte.d.ts +3 -0
  97. package/dist/components/molecules/FormDateTimePicker/FormDateTimePicker.svelte.d.ts +1 -1
  98. package/dist/components/molecules/Gauge/Gauge.stories.d.ts +1 -1
  99. package/dist/components/molecules/InfiniteScroll/InfiniteScroll.stories.d.ts +1 -1
  100. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.d.ts +9 -0
  101. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.js +8 -0
  102. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte +94 -0
  103. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte.d.ts +15 -0
  104. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte +18 -0
  105. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte.d.ts +3 -0
  106. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.stories.js +8 -0
  107. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte +50 -0
  108. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte.d.ts +11 -0
  109. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte +13 -0
  110. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte.d.ts +18 -0
  111. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.stories.js +8 -0
  112. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte +380 -0
  113. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte.d.ts +33 -0
  114. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte +14 -0
  115. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte.d.ts +18 -0
  116. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.d.ts +9 -0
  117. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.js +8 -0
  118. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte +399 -0
  119. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte.d.ts +37 -0
  120. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte +24 -0
  121. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte.d.ts +3 -0
  122. package/dist/components/molecules/MediaStage/MediaStage.stories.d.ts +9 -0
  123. package/dist/components/molecules/MediaStage/MediaStage.stories.js +8 -0
  124. package/dist/components/molecules/MediaStage/MediaStage.svelte +1498 -0
  125. package/dist/components/molecules/MediaStage/MediaStage.svelte.d.ts +45 -0
  126. package/dist/components/molecules/MediaStage/MediaStageStory.svelte +35 -0
  127. package/dist/components/molecules/MediaStage/MediaStageStory.svelte.d.ts +3 -0
  128. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.d.ts +9 -0
  129. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.js +8 -0
  130. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte +131 -0
  131. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte.d.ts +19 -0
  132. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte +20 -0
  133. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte.d.ts +3 -0
  134. package/dist/components/molecules/MixerChannel/MixerChannel.stories.d.ts +9 -0
  135. package/dist/components/molecules/MixerChannel/MixerChannel.stories.js +8 -0
  136. package/dist/components/molecules/MixerChannel/MixerChannel.svelte +92 -0
  137. package/dist/components/molecules/MixerChannel/MixerChannel.svelte.d.ts +11 -0
  138. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte +13 -0
  139. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte.d.ts +3 -0
  140. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte +454 -0
  141. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte.d.ts +8 -0
  142. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte +26 -0
  143. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte.d.ts +22 -0
  144. package/dist/components/molecules/NodeGraph/NodeGraph.stories.d.ts +12 -0
  145. package/dist/components/molecules/NodeGraph/NodeGraph.stories.js +9 -0
  146. package/dist/components/molecules/NodeGraph/NodeGraph.svelte +1409 -0
  147. package/dist/components/molecules/NodeGraph/NodeGraph.svelte.d.ts +33 -0
  148. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte +90 -0
  149. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte.d.ts +3 -0
  150. package/dist/components/molecules/NodePalette/NodePalette.stories.js +8 -0
  151. package/dist/components/molecules/NodePalette/NodePalette.svelte +86 -0
  152. package/dist/components/molecules/NodePalette/NodePalette.svelte.d.ts +11 -0
  153. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte +11 -0
  154. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte.d.ts +18 -0
  155. package/dist/components/molecules/Poll/Poll.stories.d.ts +1 -1
  156. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.stories.js +8 -0
  157. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte +72 -0
  158. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte.d.ts +12 -0
  159. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte +16 -0
  160. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte.d.ts +18 -0
  161. package/dist/components/molecules/PropertyField/PropertyField.svelte +57 -3
  162. package/dist/components/molecules/PropertyField/PropertyField.svelte.d.ts +10 -0
  163. package/dist/components/molecules/PropertyField/PropertyFieldStory.svelte +21 -0
  164. package/dist/components/molecules/PropertyGroup/PropertyGroup.svelte +1 -1
  165. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.d.ts +9 -0
  166. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.js +8 -0
  167. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte +52 -0
  168. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte.d.ts +18 -0
  169. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte +62 -0
  170. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte.d.ts +3 -0
  171. package/dist/components/molecules/RelationPicker/RelationPicker.stories.d.ts +9 -0
  172. package/dist/components/molecules/RelationPicker/RelationPicker.stories.js +8 -0
  173. package/dist/components/molecules/RelationPicker/RelationPicker.svelte +180 -0
  174. package/dist/components/molecules/RelationPicker/RelationPicker.svelte.d.ts +24 -0
  175. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte +16 -0
  176. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte.d.ts +3 -0
  177. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.d.ts +9 -0
  178. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.js +8 -0
  179. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte +154 -0
  180. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte.d.ts +12 -0
  181. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte +16 -0
  182. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte.d.ts +3 -0
  183. package/dist/components/molecules/SecretField/SecretField.stories.d.ts +9 -0
  184. package/dist/components/molecules/SecretField/SecretField.stories.js +8 -0
  185. package/dist/components/molecules/SecretField/SecretField.svelte +58 -0
  186. package/dist/components/molecules/SecretField/SecretField.svelte.d.ts +15 -0
  187. package/dist/components/molecules/SecretField/SecretFieldStory.svelte +8 -0
  188. package/dist/components/molecules/SecretField/SecretFieldStory.svelte.d.ts +3 -0
  189. package/dist/components/molecules/SplitPane/SplitPane.svelte +96 -37
  190. package/dist/components/molecules/SplitPane/SplitPane.svelte.d.ts +10 -2
  191. package/dist/components/molecules/TableToolbar/TableToolbar.svelte.d.ts +1 -1
  192. package/dist/components/molecules/Terminal/Terminal.stories.js +20 -0
  193. package/dist/components/molecules/Terminal/Terminal.svelte +238 -0
  194. package/dist/components/molecules/Terminal/Terminal.svelte.d.ts +19 -0
  195. package/dist/components/molecules/Terminal/TerminalStory.svelte +47 -0
  196. package/dist/components/molecules/Terminal/TerminalStory.svelte.d.ts +6 -0
  197. package/dist/components/molecules/TimelineClip/TimelineClip.stories.js +8 -0
  198. package/dist/components/molecules/TimelineClip/TimelineClip.svelte +116 -0
  199. package/dist/components/molecules/TimelineClip/TimelineClip.svelte.d.ts +15 -0
  200. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte +18 -0
  201. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte.d.ts +18 -0
  202. package/dist/components/molecules/TimelineTrack/TimelineTrack.stories.js +8 -0
  203. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte +56 -0
  204. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte.d.ts +16 -0
  205. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte +35 -0
  206. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte.d.ts +18 -0
  207. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.stories.js +8 -0
  208. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte +158 -0
  209. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte.d.ts +18 -0
  210. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte +55 -0
  211. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte.d.ts +18 -0
  212. package/dist/components/molecules/TrackHeader/TrackHeader.stories.d.ts +9 -0
  213. package/dist/components/molecules/TrackHeader/TrackHeader.stories.js +8 -0
  214. package/dist/components/molecules/TrackHeader/TrackHeader.svelte +54 -0
  215. package/dist/components/molecules/TrackHeader/TrackHeader.svelte.d.ts +9 -0
  216. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte +10 -0
  217. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte.d.ts +3 -0
  218. package/dist/components/molecules/TransportControls/TransportControls.stories.d.ts +9 -0
  219. package/dist/components/molecules/TransportControls/TransportControls.stories.js +8 -0
  220. package/dist/components/molecules/TransportControls/TransportControls.svelte +53 -0
  221. package/dist/components/molecules/TransportControls/TransportControls.svelte.d.ts +12 -0
  222. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte +18 -0
  223. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte.d.ts +3 -0
  224. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.stories.js +8 -0
  225. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte +117 -0
  226. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte.d.ts +20 -0
  227. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte +36 -0
  228. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte.d.ts +18 -0
  229. package/dist/components/molecules/VideoPlayer/VideoPlayer.stories.d.ts +1 -1
  230. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.d.ts +9 -0
  231. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.js +8 -0
  232. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte +59 -0
  233. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte.d.ts +9 -0
  234. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte +10 -0
  235. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte.d.ts +3 -0
  236. package/dist/components/molecules/WaveformRegion/WaveformRegion.stories.js +8 -0
  237. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte +82 -0
  238. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte.d.ts +13 -0
  239. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte +17 -0
  240. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte.d.ts +18 -0
  241. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte +13 -4
  242. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte.d.ts +3 -1
  243. package/dist/components/molecules/WidgetCanvas/widgetCanvasContext.d.ts +2 -0
  244. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte +206 -37
  245. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte.d.ts +31 -0
  246. package/dist/components/organisms/AssetPickerPage/AssetPickerPage.svelte.d.ts +1 -1
  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 +273 -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/BacklogPage/BacklogPage.svelte.d.ts +1 -1
  254. package/dist/components/organisms/BlogEditor/BlogEditor.stories.d.ts +12 -0
  255. package/dist/components/organisms/BlogEditor/BlogEditor.stories.js +9 -0
  256. package/dist/components/organisms/BlogEditor/BlogEditor.svelte +1208 -0
  257. package/dist/components/organisms/BlogEditor/BlogEditor.svelte.d.ts +16 -0
  258. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte +144 -0
  259. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte.d.ts +3 -0
  260. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte +28 -0
  261. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte.d.ts +10 -0
  262. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte +34 -0
  263. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte.d.ts +11 -0
  264. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte +13 -0
  265. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte.d.ts +8 -0
  266. package/dist/components/organisms/BlogRenderer/BlogRenderer.stories.js +8 -0
  267. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte +469 -0
  268. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte.d.ts +14 -0
  269. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte +20 -0
  270. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte.d.ts +18 -0
  271. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.d.ts +12 -0
  272. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.js +9 -0
  273. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte +1012 -0
  274. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte.d.ts +16 -0
  275. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte +76 -0
  276. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte.d.ts +3 -0
  277. package/dist/components/organisms/CalendarApp/CalendarApp.svelte.d.ts +1 -1
  278. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.d.ts +12 -0
  279. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.js +9 -0
  280. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte +1680 -0
  281. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte.d.ts +18 -0
  282. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte +329 -0
  283. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte.d.ts +3 -0
  284. package/dist/components/organisms/DashboardBuilderPage/DashboardBuilderPage.svelte.d.ts +1 -1
  285. package/dist/components/organisms/DataGrid/DataGrid.stories.d.ts +65 -0
  286. package/dist/components/organisms/DataGrid/DataGrid.stories.js +95 -0
  287. package/dist/components/organisms/DataGrid/DataGrid.svelte +2264 -0
  288. package/dist/components/organisms/DataGrid/DataGrid.svelte.d.ts +99 -0
  289. package/dist/components/organisms/DataGrid/DataGridStory.svelte +659 -0
  290. package/dist/components/organisms/DataGrid/DataGridStory.svelte.d.ts +11 -0
  291. package/dist/components/organisms/DataGrid/breakpoints.d.ts +10 -0
  292. package/dist/components/organisms/DataGrid/breakpoints.js +20 -0
  293. package/dist/components/organisms/DataGrid/cellEditors.d.ts +8 -0
  294. package/dist/components/organisms/DataGrid/cellEditors.js +59 -0
  295. package/dist/components/organisms/DataGrid/conditionalFormat.d.ts +11 -0
  296. package/dist/components/organisms/DataGrid/conditionalFormat.js +98 -0
  297. package/dist/components/organisms/DataGrid/filterRows.d.ts +5 -0
  298. package/dist/components/organisms/DataGrid/filterRows.js +60 -0
  299. package/dist/components/organisms/DataGrid/marks.d.ts +9 -0
  300. package/dist/components/organisms/DataGrid/marks.js +91 -0
  301. package/dist/components/organisms/DataGrid/types.d.ts +126 -0
  302. package/dist/components/organisms/DataGrid/types.js +21 -0
  303. package/dist/components/organisms/DesktopShell/DesktopShell.svelte.d.ts +1 -1
  304. package/dist/components/organisms/EditorShell/EditorShell.svelte +123 -28
  305. package/dist/components/organisms/EditorShell/EditorShell.svelte.d.ts +21 -1
  306. package/dist/components/organisms/FileUploader/FileUploader.svelte +77 -15
  307. package/dist/components/organisms/FileUploader/FileUploader.svelte.d.ts +11 -0
  308. package/dist/components/organisms/ImportWizard/ImportWizard.stories.js +8 -0
  309. package/dist/components/organisms/ImportWizard/ImportWizard.svelte +209 -0
  310. package/dist/components/organisms/ImportWizard/ImportWizard.svelte.d.ts +22 -0
  311. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte +16 -0
  312. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte.d.ts +18 -0
  313. package/dist/components/organisms/ResourceStudio/ResourceStudio.stories.d.ts +33 -0
  314. package/dist/components/organisms/ResourceStudio/ResourceStudio.stories.js +56 -0
  315. package/dist/components/organisms/ResourceStudio/ResourceStudio.svelte +830 -0
  316. package/dist/components/organisms/ResourceStudio/ResourceStudio.svelte.d.ts +68 -0
  317. package/dist/components/organisms/ResourceStudio/ResourceStudioStory.svelte +600 -0
  318. package/dist/components/organisms/ResourceStudio/ResourceStudioStory.svelte.d.ts +7 -0
  319. package/dist/components/organisms/ResourceStudio/fieldsToColumns.d.ts +4 -0
  320. package/dist/components/organisms/ResourceStudio/fieldsToColumns.js +20 -0
  321. package/dist/components/organisms/ResourceStudio/fieldsToSchema.d.ts +6 -0
  322. package/dist/components/organisms/ResourceStudio/fieldsToSchema.js +53 -0
  323. package/dist/components/organisms/ResourceStudio/types.d.ts +69 -0
  324. package/dist/components/organisms/ResourceStudio/types.js +15 -0
  325. package/dist/components/organisms/Scheduler/Scheduler.svelte.d.ts +1 -1
  326. package/dist/components/organisms/SchemaForm/SchemaForm.svelte +10 -3
  327. package/dist/components/organisms/SchemaForm/SchemaForm.svelte.d.ts +1 -0
  328. package/dist/components/organisms/VideoEditor/VideoEditor.stories.d.ts +12 -0
  329. package/dist/components/organisms/VideoEditor/VideoEditor.stories.js +9 -0
  330. package/dist/components/organisms/VideoEditor/VideoEditor.svelte +308 -0
  331. package/dist/components/organisms/VideoEditor/VideoEditor.svelte.d.ts +13 -0
  332. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte +10 -0
  333. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte.d.ts +3 -0
  334. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.d.ts +12 -0
  335. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.js +9 -0
  336. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte +22 -0
  337. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte.d.ts +13 -0
  338. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte +8 -0
  339. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte.d.ts +3 -0
  340. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.d.ts +12 -0
  341. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.js +9 -0
  342. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte +32 -0
  343. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte.d.ts +17 -0
  344. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte +21 -0
  345. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte.d.ts +3 -0
  346. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.stories.d.ts +25 -0
  347. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.stories.js +18 -0
  348. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.svelte +192 -0
  349. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.svelte.d.ts +62 -0
  350. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplateStory.svelte +129 -0
  351. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplateStory.svelte.d.ts +7 -0
  352. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.d.ts +12 -0
  353. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.js +9 -0
  354. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte +22 -0
  355. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte.d.ts +13 -0
  356. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte +8 -0
  357. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte.d.ts +3 -0
  358. package/dist/index.d.ts +94 -1
  359. package/dist/index.js +68 -0
  360. package/dist/types/xyflow-svelte.d.ts +62 -0
  361. package/dist/utils/audioProject.d.ts +19 -0
  362. package/dist/utils/audioProject.js +70 -0
  363. package/dist/utils/blogDocument.d.ts +175 -0
  364. package/dist/utils/blogDocument.js +220 -0
  365. package/dist/utils/blueprintRuntime.d.ts +34 -0
  366. package/dist/utils/blueprintRuntime.js +289 -0
  367. package/dist/utils/canvasDocument.d.ts +239 -0
  368. package/dist/utils/canvasDocument.js +443 -0
  369. package/dist/utils/canvasExport.d.ts +10 -0
  370. package/dist/utils/canvasExport.js +469 -0
  371. package/dist/utils/canvasHierarchy.d.ts +189 -0
  372. package/dist/utils/canvasHierarchy.js +674 -0
  373. package/dist/utils/canvasHistory.d.ts +19 -0
  374. package/dist/utils/canvasHistory.js +48 -0
  375. package/dist/utils/canvasWidget.d.ts +81 -0
  376. package/dist/utils/canvasWidget.js +597 -0
  377. package/dist/utils/marqueeSelect.d.ts +48 -0
  378. package/dist/utils/marqueeSelect.js +189 -0
  379. package/dist/utils/mediaTime.d.ts +16 -0
  380. package/dist/utils/mediaTime.js +57 -0
  381. package/dist/utils/mediaTracks.d.ts +61 -0
  382. package/dist/utils/mediaTracks.js +102 -0
  383. package/dist/utils/nodeGraph.d.ts +354 -0
  384. package/dist/utils/nodeGraph.js +1453 -0
  385. package/dist/utils/queryBridge.d.ts +18 -0
  386. package/dist/utils/queryBridge.js +118 -0
  387. package/dist/utils/videoSequence.d.ts +13 -0
  388. package/dist/utils/videoSequence.js +63 -0
  389. package/package.json +5 -2
@@ -0,0 +1,20 @@
1
+ /** Map ResourceField[] → DataGrid columns (skips hidden fields). */
2
+ export function fieldsToColumns(fields) {
3
+ return fields
4
+ .filter((f) => !f.hidden)
5
+ .map((f) => ({
6
+ id: f.id,
7
+ header: f.label,
8
+ accessor: f.id,
9
+ sortable: true,
10
+ editable: !f.readonly,
11
+ align: f.type === 'number' ? 'right' : 'left',
12
+ meta: {
13
+ fieldType: f.type,
14
+ options: f.options,
15
+ relation: f.relation,
16
+ required: f.required,
17
+ ...f.meta
18
+ }
19
+ }));
20
+ }
@@ -0,0 +1,6 @@
1
+ import type { SchemaField } from '../SchemaForm/SchemaForm.svelte';
2
+ import type { ResourceField } from './types.js';
3
+ /** Map ResourceField[] → SchemaForm fields (design-system controls). */
4
+ export declare function fieldsToSchema(fields: ResourceField[], options?: {
5
+ mode?: 'create' | 'edit';
6
+ }): SchemaField[];
@@ -0,0 +1,53 @@
1
+ function mapFieldType(field) {
2
+ switch (field.type) {
3
+ case 'text':
4
+ case 'json':
5
+ return 'textarea';
6
+ case 'number':
7
+ return 'number';
8
+ case 'boolean':
9
+ return 'toggle';
10
+ case 'date':
11
+ case 'datetime':
12
+ return 'date';
13
+ case 'enum':
14
+ return 'select';
15
+ case 'string':
16
+ case 'relation':
17
+ case 'file':
18
+ case 'custom':
19
+ default:
20
+ return field.options?.length ? 'select' : 'text';
21
+ }
22
+ }
23
+ function coerceDefault(field) {
24
+ if (field.defaultValue === undefined)
25
+ return undefined;
26
+ if (field.type === 'boolean')
27
+ return Boolean(field.defaultValue);
28
+ if (field.type === 'number') {
29
+ const n = Number(field.defaultValue);
30
+ return Number.isFinite(n) ? n : undefined;
31
+ }
32
+ return String(field.defaultValue);
33
+ }
34
+ /** Map ResourceField[] → SchemaForm fields (design-system controls). */
35
+ export function fieldsToSchema(fields, options) {
36
+ const mode = options?.mode ?? 'create';
37
+ return fields
38
+ .filter((f) => !f.hidden)
39
+ .filter((f) => mode === 'edit' || !f.readonly)
40
+ .map((f) => ({
41
+ name: f.id,
42
+ label: f.label,
43
+ type: mapFieldType(f),
44
+ required: f.required,
45
+ helperText: f.description,
46
+ options: f.options?.map((o) => ({ value: o.value, label: o.label })),
47
+ defaultValue: coerceDefault(f),
48
+ disabled: mode === 'edit' && Boolean(f.readonly),
49
+ placeholder: f.type === 'enum' || f.options?.length
50
+ ? `Select ${f.label.toLowerCase()}…`
51
+ : undefined
52
+ }));
53
+ }
@@ -0,0 +1,69 @@
1
+ import type { ConditionalFormatRule } from '../DataGrid/types.js';
2
+ export type FieldType = 'string' | 'text' | 'number' | 'boolean' | 'date' | 'datetime' | 'enum' | 'json' | 'relation' | 'file' | 'custom';
3
+ export interface ResourceField {
4
+ id: string;
5
+ label: string;
6
+ type: FieldType;
7
+ description?: string;
8
+ required?: boolean;
9
+ unique?: boolean;
10
+ readonly?: boolean;
11
+ hidden?: boolean;
12
+ defaultValue?: unknown;
13
+ options?: {
14
+ value: string;
15
+ label: string;
16
+ }[];
17
+ relation?: {
18
+ resourceId: string;
19
+ fieldId: string;
20
+ displayField?: string;
21
+ };
22
+ meta?: Record<string, unknown>;
23
+ }
24
+ export interface ResourceCapabilities {
25
+ create?: boolean;
26
+ update?: boolean;
27
+ delete?: boolean;
28
+ duplicate?: boolean;
29
+ export?: boolean;
30
+ import?: boolean;
31
+ bulkEdit?: boolean;
32
+ notes?: boolean;
33
+ conditionalFormat?: boolean;
34
+ editable?: boolean;
35
+ }
36
+ export interface ResourceDefinition {
37
+ id: string;
38
+ name: string;
39
+ description?: string;
40
+ group?: string;
41
+ icon?: string;
42
+ fields: ResourceField[];
43
+ primaryKey?: string;
44
+ recordCount?: number;
45
+ capabilities?: ResourceCapabilities;
46
+ defaultFormatRules?: ConditionalFormatRule[];
47
+ }
48
+ export type ResourceStudioMode = 'browse' | 'detail' | 'schema' | 'query' | 'activity';
49
+ export type ResourceStudioLayout = 'sidebar-main' | 'sidebar-main-detail' | 'main-only';
50
+ export interface ResourceStudioLabels {
51
+ resources?: string;
52
+ records?: string;
53
+ addRecord?: string;
54
+ schema?: string;
55
+ runQuery?: string;
56
+ searchPlaceholder?: string;
57
+ detail?: string;
58
+ activity?: string;
59
+ query?: string;
60
+ }
61
+ export interface ResourceStudioView {
62
+ id: string;
63
+ label: string;
64
+ resourceId?: string;
65
+ query?: string;
66
+ formatRuleIds?: string[];
67
+ }
68
+ export declare const DEFAULT_CAPABILITIES: Required<ResourceCapabilities>;
69
+ export declare function resolveCapabilities(caps?: ResourceCapabilities): Required<ResourceCapabilities>;
@@ -0,0 +1,15 @@
1
+ export const DEFAULT_CAPABILITIES = {
2
+ create: true,
3
+ update: true,
4
+ delete: true,
5
+ duplicate: false,
6
+ export: true,
7
+ import: false,
8
+ bulkEdit: false,
9
+ notes: true,
10
+ conditionalFormat: true,
11
+ editable: true
12
+ };
13
+ export function resolveCapabilities(caps) {
14
+ return { ...DEFAULT_CAPABILITIES, ...caps };
15
+ }
@@ -92,6 +92,6 @@ interface SchedulerProps {
92
92
  onconfirm?: (detail: ScheduleConfirmDetail) => void;
93
93
  onclear?: () => void;
94
94
  }
95
- declare const Scheduler: import("svelte").Component<SchedulerProps, {}, "start" | "end" | "date" | "duration" | "bookings" | "selectedSlotId" | "slotLayout">;
95
+ declare const Scheduler: import("svelte").Component<SchedulerProps, {}, "date" | "start" | "end" | "duration" | "bookings" | "selectedSlotId" | "slotLayout">;
96
96
  type Scheduler = ReturnType<typeof Scheduler>;
97
97
  export default Scheduler;
@@ -40,6 +40,7 @@
40
40
  placeholder?: string;
41
41
  helperText?: string;
42
42
  required?: boolean;
43
+ disabled?: boolean;
43
44
  options?: SchemaFieldOption[];
44
45
  /** Group heading before this field */
45
46
  section?: string;
@@ -151,6 +152,7 @@
151
152
  placeholder={field.placeholder}
152
153
  helperText={field.helperText}
153
154
  required={field.required}
155
+ disabled={field.disabled}
154
156
  bindData
155
157
  />
156
158
  {:else if type === 'select'}
@@ -160,6 +162,7 @@
160
162
  placeholder={field.placeholder ?? 'Select…'}
161
163
  helperText={field.helperText}
162
164
  required={field.required}
165
+ disabled={field.disabled}
163
166
  options={field.options ?? []}
164
167
  bindData
165
168
  />
@@ -168,6 +171,7 @@
168
171
  name={field.name}
169
172
  label={field.label}
170
173
  helperText={field.helperText}
174
+ disabled={field.disabled}
171
175
  bindData
172
176
  />
173
177
  {:else if type === 'checkbox'}
@@ -175,6 +179,7 @@
175
179
  name={field.name}
176
180
  label={field.label}
177
181
  helperText={field.helperText}
182
+ disabled={field.disabled}
178
183
  bindData
179
184
  />
180
185
  {:else if type === 'password'}
@@ -184,6 +189,7 @@
184
189
  placeholder={field.placeholder}
185
190
  helperText={field.helperText}
186
191
  required={field.required}
192
+ disabled={field.disabled}
187
193
  bindData
188
194
  />
189
195
  {:else if type === 'date'}
@@ -191,7 +197,7 @@
191
197
  <DatePicker
192
198
  label={field.label}
193
199
  placeholder={field.placeholder ?? 'Select date…'}
194
- disabled={loading}
200
+ disabled={loading || field.disabled}
195
201
  value={String(values[field.name] ?? '')}
196
202
  onchange={(detail) => setValue(field.name, detail.value)}
197
203
  />
@@ -207,7 +213,7 @@
207
213
  label={field.label}
208
214
  options={field.options ?? []}
209
215
  required={field.required}
210
- disabled={loading}
216
+ disabled={loading || field.disabled}
211
217
  status={fieldError ? 'error' : 'default'}
212
218
  helperText={fieldError ?? field.helperText}
213
219
  value={String(values[field.name] ?? '')}
@@ -219,7 +225,7 @@
219
225
  label={field.label}
220
226
  placeholder={field.placeholder ?? 'Select…'}
221
227
  options={field.options ?? []}
222
- disabled={loading}
228
+ disabled={loading || field.disabled}
223
229
  value={Array.isArray(values[field.name]) ? (values[field.name] as string[]) : []}
224
230
  onchange={(v) => setValue(field.name, v)}
225
231
  />
@@ -237,6 +243,7 @@
237
243
  placeholder={field.placeholder}
238
244
  helperText={field.helperText}
239
245
  required={field.required}
246
+ disabled={field.disabled}
240
247
  bindData
241
248
  />
242
249
  {/if}
@@ -11,6 +11,7 @@ export interface SchemaField {
11
11
  placeholder?: string;
12
12
  helperText?: string;
13
13
  required?: boolean;
14
+ disabled?: boolean;
14
15
  options?: SchemaFieldOption[];
15
16
  /** Group heading before this field */
16
17
  section?: string;
@@ -0,0 +1,12 @@
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
+ parameters: {
7
+ layout: string;
8
+ };
9
+ };
10
+ export default meta;
11
+ type Story = StoryObj<typeof meta>;
12
+ export declare const Default: Story;
@@ -0,0 +1,9 @@
1
+ import VideoEditorStory from './VideoEditorStory.svelte';
2
+ const meta = {
3
+ title: 'Organisms/VideoEditor',
4
+ component: VideoEditorStory,
5
+ tags: ['autodocs'],
6
+ parameters: { layout: 'fullscreen' }
7
+ };
8
+ export default meta;
9
+ export const Default = {};
@@ -0,0 +1,308 @@
1
+ <script lang="ts">
2
+ import EditorShell from '../EditorShell/EditorShell.svelte';
3
+ import MediaAssetBrowser from '../../molecules/MediaAssetBrowser/MediaAssetBrowser.svelte';
4
+ import ProgramMonitor from '../../molecules/ProgramMonitor/ProgramMonitor.svelte';
5
+ import TransportControls from '../../molecules/TransportControls/TransportControls.svelte';
6
+ import MediaTimeline from '../../molecules/MediaTimeline/MediaTimeline.svelte';
7
+ import PropertyGroup from '../../molecules/PropertyGroup/PropertyGroup.svelte';
8
+ import PropertyField from '../../molecules/PropertyField/PropertyField.svelte';
9
+ import Input from '../../atoms/Input/Input.svelte';
10
+ import Button from '../../atoms/Button/Button.svelte';
11
+ import IconButton from '../../atoms/IconButton/IconButton.svelte';
12
+ import {
13
+ createMediaClip,
14
+ updateClipInTracks,
15
+ removeClipFromTracks,
16
+ type MediaAsset,
17
+ type MediaClip,
18
+ type MediaTrack
19
+ } from '../../../utils/mediaTracks.js';
20
+ import {
21
+ emptyVideoSequence,
22
+ type VideoSequence
23
+ } from '../../../utils/videoSequence.js';
24
+ import { clampMs } from '../../../utils/mediaTime.js';
25
+ import Download from '@lucide/svelte/icons/download';
26
+ import PanelLeft from '@lucide/svelte/icons/panel-left';
27
+ import PanelRight from '@lucide/svelte/icons/panel-right';
28
+
29
+ interface VideoEditorProps {
30
+ value?: VideoSequence;
31
+ class?: string;
32
+ onchange?: (seq: VideoSequence) => void;
33
+ onexport?: (payload: { format: 'json'; document: VideoSequence }) => void;
34
+ }
35
+
36
+ let {
37
+ value = $bindable(emptyVideoSequence()),
38
+ class: className = '',
39
+ onchange,
40
+ onexport
41
+ }: VideoEditorProps = $props();
42
+
43
+ let selectedClipId = $state<string | null>(null);
44
+ let currentTimeMs = $state(0);
45
+ let playing = $state(false);
46
+ let zoom = $state(1);
47
+ let showSidebar = $state(true);
48
+ let showInspector = $state(true);
49
+ let raf = 0;
50
+ let lastTs = 0;
51
+
52
+ const selectedClip = $derived.by(() => {
53
+ for (const t of value.tracks) {
54
+ const c = t.clips.find((x) => x.id === selectedClipId);
55
+ if (c) return c;
56
+ }
57
+ return null;
58
+ });
59
+
60
+ function emit(next: VideoSequence) {
61
+ value = next;
62
+ onchange?.(next);
63
+ }
64
+
65
+ function setTracks(tracks: MediaTrack[]) {
66
+ emit({ ...value, tracks });
67
+ }
68
+
69
+ function addAssetAsClip(asset: MediaAsset) {
70
+ const trackKind = asset.kind === 'audio' ? 'audio' : 'video';
71
+ const track =
72
+ value.tracks.find((t) => t.kind === trackKind) ??
73
+ value.tracks.find((t) => t.kind === 'video') ??
74
+ value.tracks[0];
75
+ if (!track) return;
76
+ const startMs = currentTimeMs;
77
+ const dur = asset.durationMs ?? (asset.kind === 'audio' ? 8000 : 5000);
78
+ const clip = createMediaClip({
79
+ trackId: track.id,
80
+ assetId: asset.id,
81
+ name: asset.name,
82
+ kind: asset.kind,
83
+ src: asset.src,
84
+ startMs,
85
+ endMs: startMs + dur,
86
+ color: track.color ?? (trackKind === 'audio' ? '#10b981' : '#3b82f6')
87
+ });
88
+ const assets = value.assets.some((a) => a.id === asset.id)
89
+ ? value.assets
90
+ : [...value.assets, asset];
91
+ emit({
92
+ ...value,
93
+ assets,
94
+ tracks: value.tracks.map((t) =>
95
+ t.id === track.id ? { ...t, clips: [...t.clips, clip] } : t
96
+ )
97
+ });
98
+ selectedClipId = clip.id;
99
+ }
100
+
101
+ function patchClip(clip: MediaClip) {
102
+ setTracks(updateClipInTracks(value.tracks, clip.id, () => clip));
103
+ }
104
+
105
+ function patchTrack(track: MediaTrack) {
106
+ setTracks(value.tracks.map((t) => (t.id === track.id ? track : t)));
107
+ }
108
+
109
+ function tick(ts: number) {
110
+ if (!playing) return;
111
+ if (lastTs) {
112
+ const delta = ts - lastTs;
113
+ currentTimeMs = clampMs(currentTimeMs + delta, 0, value.durationMs);
114
+ if (currentTimeMs >= value.durationMs) {
115
+ playing = false;
116
+ currentTimeMs = value.durationMs;
117
+ }
118
+ }
119
+ lastTs = ts;
120
+ raf = requestAnimationFrame(tick);
121
+ }
122
+
123
+ $effect(() => {
124
+ if (playing) {
125
+ lastTs = 0;
126
+ raf = requestAnimationFrame(tick);
127
+ return () => cancelAnimationFrame(raf);
128
+ }
129
+ cancelAnimationFrame(raf);
130
+ });
131
+
132
+ function handleKeydown(e: KeyboardEvent) {
133
+ const tag = (e.target as HTMLElement)?.tagName;
134
+ if (tag === 'INPUT' || tag === 'TEXTAREA') return;
135
+ if (e.code === 'Space') {
136
+ e.preventDefault();
137
+ playing = !playing;
138
+ return;
139
+ }
140
+ if ((e.key === 'Delete' || e.key === 'Backspace') && selectedClipId) {
141
+ e.preventDefault();
142
+ setTracks(removeClipFromTracks(value.tracks, selectedClipId));
143
+ selectedClipId = null;
144
+ }
145
+ }
146
+
147
+ function exportJson() {
148
+ onexport?.({ format: 'json', document: value });
149
+ const blob = new Blob([JSON.stringify(value, null, 2)], { type: 'application/json' });
150
+ const url = URL.createObjectURL(blob);
151
+ const a = document.createElement('a');
152
+ a.href = url;
153
+ a.download = 'video-sequence.json';
154
+ a.click();
155
+ URL.revokeObjectURL(url);
156
+ }
157
+ </script>
158
+
159
+ <svelte:window onkeydown={handleKeydown} />
160
+
161
+ <div class={['flex h-full min-h-[560px] flex-col', className]}>
162
+ <div class="flex items-center gap-2 border-b border-border bg-surface-elevated px-3 py-2">
163
+ <span class="text-sm font-semibold text-primary">Video Editor</span>
164
+ <div class="ml-auto flex items-center gap-1">
165
+ <IconButton label="Toggle sidebar" size="sm" onclick={() => (showSidebar = !showSidebar)}>
166
+ <PanelLeft class="h-4 w-4" />
167
+ </IconButton>
168
+ <IconButton
169
+ label="Toggle inspector"
170
+ size="sm"
171
+ onclick={() => (showInspector = !showInspector)}
172
+ >
173
+ <PanelRight class="h-4 w-4" />
174
+ </IconButton>
175
+ <Button size="sm" variant="secondary" onclick={exportJson}>
176
+ <span class="inline-flex items-center gap-1.5">
177
+ <Download class="h-3.5 w-3.5" />
178
+ Export JSON
179
+ </span>
180
+ </Button>
181
+ </div>
182
+ </div>
183
+
184
+ <div class="min-h-0 flex-1">
185
+ <EditorShell
186
+ sidebarTitle="Media"
187
+ inspectorTitle="Clip"
188
+ workspaceTitle="Program"
189
+ bottomTitle="Timeline"
190
+ showBottom={true}
191
+ {showSidebar}
192
+ {showInspector}
193
+ wrapSidebar={true}
194
+ wrapInspector={true}
195
+ wrapWorkspace={false}
196
+ wrapBottom={false}
197
+ sidebarSize={280}
198
+ inspectorSize={260}
199
+ bottomSize={220}
200
+ sizeUnit="px"
201
+ fullHeight
202
+ >
203
+ {#snippet sidebar()}
204
+ <MediaAssetBrowser
205
+ assets={value.assets}
206
+ accept="image/*,video/*,audio/*"
207
+ helperText="Image, video or audio"
208
+ onassetschange={(assets) => emit({ ...value, assets })}
209
+ onselect={(id) => {
210
+ const asset = value.assets.find((a) => a.id === id);
211
+ if (asset) addAssetAsClip(asset);
212
+ }}
213
+ onadd={(asset) => {
214
+ emit({ ...value, assets: [...value.assets, asset] });
215
+ }}
216
+ />
217
+ {/snippet}
218
+
219
+ {#snippet workspace()}
220
+ <div class="flex h-full flex-col gap-2 bg-surface p-3">
221
+ <TransportControls
222
+ {playing}
223
+ {currentTimeMs}
224
+ durationMs={value.durationMs}
225
+ onplay={() => (playing = true)}
226
+ onpause={() => (playing = false)}
227
+ onstop={() => {
228
+ playing = false;
229
+ currentTimeMs = 0;
230
+ }}
231
+ />
232
+ <div class="min-h-0 flex-1">
233
+ <ProgramMonitor
234
+ width={value.width}
235
+ height={value.height}
236
+ background={value.background}
237
+ {currentTimeMs}
238
+ tracks={value.tracks}
239
+ class="mx-auto max-h-full"
240
+ />
241
+ </div>
242
+ </div>
243
+ {/snippet}
244
+
245
+ {#snippet inspector()}
246
+ {#if !selectedClip}
247
+ <p class="px-3 py-6 text-center text-xs text-muted">Select a clip</p>
248
+ {:else}
249
+ <PropertyGroup title="Clip">
250
+ <PropertyField label="Name">
251
+ <Input
252
+ size="sm"
253
+ value={selectedClip.name}
254
+ oninput={(e) =>
255
+ patchClip({
256
+ ...selectedClip,
257
+ name: (e.currentTarget as HTMLInputElement).value
258
+ })}
259
+ />
260
+ </PropertyField>
261
+ <PropertyField label="Start">
262
+ <Input
263
+ type="number"
264
+ size="sm"
265
+ value={String(Math.round(selectedClip.startMs))}
266
+ oninput={(e) => {
267
+ const startMs = Number((e.currentTarget as HTMLInputElement).value);
268
+ const dur = selectedClip.endMs - selectedClip.startMs;
269
+ patchClip({ ...selectedClip, startMs, endMs: startMs + dur });
270
+ }}
271
+ />
272
+ </PropertyField>
273
+ <PropertyField label="End">
274
+ <Input
275
+ type="number"
276
+ size="sm"
277
+ value={String(Math.round(selectedClip.endMs))}
278
+ oninput={(e) =>
279
+ patchClip({
280
+ ...selectedClip,
281
+ endMs: Number((e.currentTarget as HTMLInputElement).value)
282
+ })}
283
+ />
284
+ </PropertyField>
285
+ </PropertyGroup>
286
+ {/if}
287
+ {/snippet}
288
+
289
+ {#snippet bottom()}
290
+ <div class="h-full p-1">
291
+ <MediaTimeline
292
+ tracks={value.tracks}
293
+ durationMs={value.durationMs}
294
+ bind:currentTimeMs
295
+ bind:zoom
296
+ {selectedClipId}
297
+ onselectclip={(id) => (selectedClipId = id)}
298
+ onchangeclip={patchClip}
299
+ onchangetrack={patchTrack}
300
+ headerVariant="video"
301
+ onseek={(ms) => (currentTimeMs = ms)}
302
+ class="h-full"
303
+ />
304
+ </div>
305
+ {/snippet}
306
+ </EditorShell>
307
+ </div>
308
+ </div>
@@ -0,0 +1,13 @@
1
+ import { type VideoSequence } from '../../../utils/videoSequence.js';
2
+ interface VideoEditorProps {
3
+ value?: VideoSequence;
4
+ class?: string;
5
+ onchange?: (seq: VideoSequence) => void;
6
+ onexport?: (payload: {
7
+ format: 'json';
8
+ document: VideoSequence;
9
+ }) => void;
10
+ }
11
+ declare const VideoEditor: import("svelte").Component<VideoEditorProps, {}, "value">;
12
+ type VideoEditor = ReturnType<typeof VideoEditor>;
13
+ export default VideoEditor;
@@ -0,0 +1,10 @@
1
+ <script lang="ts">
2
+ import VideoEditor from './VideoEditor.svelte';
3
+ import { createDemoVideoSequence } from '../../../utils/videoSequence.js';
4
+
5
+ let value = $state(createDemoVideoSequence());
6
+ </script>
7
+
8
+ <div class="h-[780px] w-full overflow-hidden rounded-xl border border-border">
9
+ <VideoEditor bind:value />
10
+ </div>
@@ -0,0 +1,3 @@
1
+ declare const VideoEditorStory: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type VideoEditorStory = ReturnType<typeof VideoEditorStory>;
3
+ export default VideoEditorStory;
@@ -0,0 +1,12 @@
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
+ parameters: {
7
+ layout: string;
8
+ };
9
+ };
10
+ export default meta;
11
+ type Story = StoryObj<typeof meta>;
12
+ export declare const Default: Story;
@@ -0,0 +1,9 @@
1
+ import AudioEditorTemplateStory from './AudioEditorTemplateStory.svelte';
2
+ const meta = {
3
+ title: 'Templates/AudioEditorTemplate',
4
+ component: AudioEditorTemplateStory,
5
+ tags: ['autodocs'],
6
+ parameters: { layout: 'fullscreen' }
7
+ };
8
+ export default meta;
9
+ export const Default = {};
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import AudioEditor from '../../organisms/AudioEditor/AudioEditor.svelte';
3
+ import { emptyAudioProject, type AudioProject } from '../../../utils/audioProject.js';
4
+
5
+ interface AudioEditorTemplateProps {
6
+ value?: AudioProject;
7
+ class?: string;
8
+ onchange?: (project: AudioProject) => void;
9
+ onexport?: (payload: { format: 'json'; document: AudioProject }) => void;
10
+ }
11
+
12
+ let {
13
+ value = $bindable(emptyAudioProject()),
14
+ class: className = '',
15
+ onchange,
16
+ onexport
17
+ }: AudioEditorTemplateProps = $props();
18
+ </script>
19
+
20
+ <div class={['flex h-dvh w-full flex-col bg-surface', className]}>
21
+ <AudioEditor bind:value {onchange} {onexport} class="min-h-0 flex-1" />
22
+ </div>