@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,469 @@
1
+ <script lang="ts">
2
+ import Callout from '../../molecules/Callout/Callout.svelte';
3
+ import CodeBlock from '../../molecules/CodeBlock/CodeBlock.svelte';
4
+ import Quote from '../../molecules/Quote/Quote.svelte';
5
+ import MarkdownPreview from '../../molecules/MarkdownPreview/MarkdownPreview.svelte';
6
+ import EmptyState from '../../molecules/EmptyState/EmptyState.svelte';
7
+ import Button from '../../atoms/Button/Button.svelte';
8
+ import Badge from '../../atoms/Badge/Badge.svelte';
9
+ import {
10
+ blogAlignClass,
11
+ blogAspectPadding,
12
+ blogWidthClass,
13
+ getBlogComponent,
14
+ parseBlogDocument,
15
+ type BlogBlock,
16
+ type BlogCalloutData,
17
+ type BlogCodeData,
18
+ type BlogComponentData,
19
+ type BlogCtaData,
20
+ type BlogDividerData,
21
+ type BlogDocument,
22
+ type BlogEmbedData,
23
+ type BlogGalleryData,
24
+ type BlogHeadingData,
25
+ type BlogHtmlData,
26
+ type BlogImageData,
27
+ type BlogListData,
28
+ type BlogMarkdownData,
29
+ type BlogParagraphData,
30
+ type BlogQuoteData,
31
+ type BlogSpacerData,
32
+ type BlogTableData,
33
+ type BlogVideoData
34
+ } from '../../../utils/blogDocument.js';
35
+
36
+ export type { BlogDocument, BlogBlock };
37
+
38
+ interface BlogRendererProps {
39
+ /** Document object or JSON string */
40
+ value?: BlogDocument | string;
41
+ /** Show document meta (author, tags, cover). */
42
+ showMeta?: boolean;
43
+ class?: string;
44
+ }
45
+
46
+ let {
47
+ value = emptyDoc(),
48
+ showMeta = true,
49
+ class: className = ''
50
+ }: BlogRendererProps = $props();
51
+
52
+ function emptyDoc(): BlogDocument {
53
+ return { version: 1, title: '', blocks: [] };
54
+ }
55
+
56
+ const doc = $derived(parseBlogDocument(value));
57
+
58
+ function headingTag(level: number): 'h1' | 'h2' | 'h3' | 'h4' {
59
+ if (level === 1) return 'h1';
60
+ if (level === 2) return 'h2';
61
+ if (level === 3) return 'h3';
62
+ return 'h4';
63
+ }
64
+
65
+ const headingClass: Record<number, string> = {
66
+ 1: 'text-3xl font-bold text-primary',
67
+ 2: 'text-2xl font-semibold text-primary',
68
+ 3: 'text-xl font-semibold text-primary',
69
+ 4: 'text-lg font-medium text-primary'
70
+ };
71
+
72
+ function calloutTone(tone?: string): 'info' | 'success' | 'warning' | 'error' | 'neutral' {
73
+ if (tone === 'danger') return 'error';
74
+ if (tone === 'success' || tone === 'warning' || tone === 'info' || tone === 'neutral')
75
+ return tone;
76
+ return 'info';
77
+ }
78
+
79
+ function spacerClass(size?: BlogSpacerData['size']): string {
80
+ switch (size) {
81
+ case 'xs':
82
+ return 'h-2';
83
+ case 'sm':
84
+ return 'h-4';
85
+ case 'lg':
86
+ return 'h-12';
87
+ case 'xl':
88
+ return 'h-20';
89
+ case 'md':
90
+ default:
91
+ return 'h-8';
92
+ }
93
+ }
94
+
95
+ function galleryCols(cols?: number): string {
96
+ if (cols === 2) return 'grid-cols-2';
97
+ if (cols === 4) return 'grid-cols-2 sm:grid-cols-4';
98
+ return 'grid-cols-2 sm:grid-cols-3';
99
+ }
100
+
101
+ function galleryGap(gap?: string): string {
102
+ if (gap === 'sm') return 'gap-2';
103
+ if (gap === 'lg') return 'gap-5';
104
+ return 'gap-3';
105
+ }
106
+
107
+ function toEmbedSrc(url: string): string {
108
+ try {
109
+ const u = new URL(url);
110
+ if (u.hostname.includes('youtube.com')) {
111
+ const id = u.searchParams.get('v');
112
+ if (id) return `https://www.youtube.com/embed/${id}`;
113
+ }
114
+ if (u.hostname === 'youtu.be') {
115
+ const id = u.pathname.slice(1);
116
+ if (id) return `https://www.youtube.com/embed/${id}`;
117
+ }
118
+ if (u.hostname.includes('vimeo.com')) {
119
+ const id = u.pathname.split('/').filter(Boolean).pop();
120
+ if (id) return `https://player.vimeo.com/video/${id}`;
121
+ }
122
+ } catch {
123
+ /* keep raw */
124
+ }
125
+ return url;
126
+ }
127
+ </script>
128
+
129
+ <article class={['mx-auto flex w-full max-w-3xl flex-col gap-5', className]} data-blog-renderer>
130
+ {#if showMeta && doc.coverImage}
131
+ <div class="overflow-hidden rounded-xl border border-border">
132
+ <img src={doc.coverImage} alt="" class="max-h-72 w-full object-cover" />
133
+ </div>
134
+ {/if}
135
+
136
+ {#if doc.title}
137
+ <h1 class="text-3xl font-bold tracking-tight text-primary">{doc.title}</h1>
138
+ {/if}
139
+
140
+ {#if showMeta && (doc.description || doc.author || doc.tags?.length || doc.publishedAt)}
141
+ <div class="flex flex-col gap-2 border-b border-border pb-4">
142
+ {#if doc.description}
143
+ <p class="text-base text-secondary">{doc.description}</p>
144
+ {/if}
145
+ <div class="flex flex-wrap items-center gap-2 text-xs text-muted">
146
+ {#if doc.author}
147
+ <span>{doc.author}</span>
148
+ {/if}
149
+ {#if doc.publishedAt}
150
+ <span>· {doc.publishedAt}</span>
151
+ {/if}
152
+ </div>
153
+ {#if doc.tags?.length}
154
+ <div class="flex flex-wrap gap-1.5">
155
+ {#each doc.tags as tag (tag)}
156
+ <Badge variant="secondary">{tag}</Badge>
157
+ {/each}
158
+ </div>
159
+ {/if}
160
+ </div>
161
+ {/if}
162
+
163
+ {#if doc.blocks.length === 0}
164
+ <EmptyState title="Empty document" description="Pass a BlogDocument JSON to render content." />
165
+ {:else}
166
+ {#each doc.blocks as block (block.id)}
167
+ {#if block.type === 'heading'}
168
+ {@const data = block.data as BlogHeadingData}
169
+ {@const Tag = headingTag(data.level)}
170
+ <svelte:element
171
+ this={Tag}
172
+ id={data.anchor || undefined}
173
+ class={[headingClass[data.level] ?? headingClass[2], blogAlignClass(data.align)]}
174
+ >
175
+ {data.text}
176
+ </svelte:element>
177
+ {:else if block.type === 'paragraph'}
178
+ {@const data = block.data as BlogParagraphData}
179
+ <p
180
+ class={[
181
+ 'leading-relaxed whitespace-pre-wrap',
182
+ data.lead ? 'text-lg text-primary' : 'text-base text-secondary',
183
+ data.muted ? 'text-muted' : '',
184
+ blogAlignClass(data.align)
185
+ ]}
186
+ >
187
+ {data.text}
188
+ </p>
189
+ {:else if block.type === 'image'}
190
+ {@const data = block.data as BlogImageData}
191
+ <figure
192
+ class={[
193
+ 'overflow-hidden border border-border',
194
+ data.rounded !== false ? 'rounded-xl' : '',
195
+ data.shadow ? 'shadow-md' : '',
196
+ blogWidthClass(data.width),
197
+ blogAlignClass(data.align)
198
+ ]}
199
+ >
200
+ {#if data.src}
201
+ {#if data.href}
202
+ <a href={data.href} target="_blank" rel="noopener noreferrer">
203
+ <img src={data.src} alt={data.alt ?? ''} class="w-full object-cover" />
204
+ </a>
205
+ {:else}
206
+ <img src={data.src} alt={data.alt ?? ''} class="w-full object-cover" />
207
+ {/if}
208
+ {:else}
209
+ <div class="bg-surface-overlay px-4 py-12 text-center text-sm text-muted">No image</div>
210
+ {/if}
211
+ {#if data.caption}
212
+ <figcaption class="border-t border-border px-3 py-2 text-xs text-muted">
213
+ {data.caption}
214
+ </figcaption>
215
+ {/if}
216
+ </figure>
217
+ {:else if block.type === 'code'}
218
+ {@const data = block.data as BlogCodeData}
219
+ <div class="overflow-hidden rounded-xl border border-border">
220
+ {#if data.filename || data.language}
221
+ <div
222
+ class="flex items-center justify-between border-b border-border bg-surface-overlay/60 px-3 py-1.5 text-[11px] text-muted"
223
+ >
224
+ <span class="font-medium text-secondary">{data.filename || data.language}</span>
225
+ {#if data.filename && data.language}
226
+ <span>{data.language}</span>
227
+ {/if}
228
+ </div>
229
+ {/if}
230
+ <CodeBlock code={data.code} language={data.language ?? 'ts'} />
231
+ </div>
232
+ {:else if block.type === 'callout'}
233
+ {@const data = block.data as BlogCalloutData}
234
+ <Callout tone={calloutTone(data.tone)} title={data.title}>
235
+ {#snippet children()}
236
+ <p class="whitespace-pre-wrap">{data.text}</p>
237
+ {/snippet}
238
+ </Callout>
239
+ {:else if block.type === 'quote'}
240
+ {@const data = block.data as BlogQuoteData}
241
+ <div class={blogAlignClass(data.align)}>
242
+ <Quote
243
+ quote={data.text}
244
+ author={data.cite}
245
+ role={data.role}
246
+ />
247
+ </div>
248
+ {:else if block.type === 'list'}
249
+ {@const data = block.data as BlogListData}
250
+ {#if data.ordered}
251
+ <ol
252
+ class={[
253
+ 'list-decimal pl-5 text-secondary',
254
+ data.tight ? 'space-y-0.5' : 'space-y-1'
255
+ ]}
256
+ start={data.start ?? 1}
257
+ >
258
+ {#each data.items as item, i (i)}
259
+ <li>{item}</li>
260
+ {/each}
261
+ </ol>
262
+ {:else}
263
+ <ul
264
+ class={[
265
+ 'list-disc pl-5 text-secondary',
266
+ data.tight ? 'space-y-0.5' : 'space-y-1'
267
+ ]}
268
+ >
269
+ {#each data.items as item, i (i)}
270
+ <li>{item}</li>
271
+ {/each}
272
+ </ul>
273
+ {/if}
274
+ {:else if block.type === 'divider'}
275
+ {@const data = block.data as BlogDividerData}
276
+ <div
277
+ class={[
278
+ data.spacing === 'sm' ? 'py-1' : data.spacing === 'lg' ? 'py-6' : 'py-3'
279
+ ]}
280
+ >
281
+ {#if data.label}
282
+ <div class="flex items-center gap-3 text-xs font-medium uppercase tracking-wide text-muted">
283
+ <span class="h-px flex-1 bg-border"></span>
284
+ {data.label}
285
+ <span class="h-px flex-1 bg-border"></span>
286
+ </div>
287
+ {:else}
288
+ <hr
289
+ class={[
290
+ 'border-0 border-t border-border',
291
+ data.style === 'dashed'
292
+ ? 'border-dashed'
293
+ : data.style === 'dotted'
294
+ ? 'border-dotted'
295
+ : ''
296
+ ]}
297
+ />
298
+ {/if}
299
+ </div>
300
+ {:else if block.type === 'markdown'}
301
+ {@const data = block.data as BlogMarkdownData}
302
+ <MarkdownPreview source={data.source} />
303
+ {:else if block.type === 'video'}
304
+ {@const data = block.data as BlogVideoData}
305
+ <figure class={[blogWidthClass(data.width), blogAlignClass(data.align)]}>
306
+ {#if data.src}
307
+ <!-- svelte-ignore a11y_media_has_caption -->
308
+ <video
309
+ src={data.src}
310
+ poster={data.poster || undefined}
311
+ controls={data.controls !== false}
312
+ autoplay={!!data.autoplay}
313
+ loop={!!data.loop}
314
+ muted={!!data.muted || !!data.autoplay}
315
+ class="w-full rounded-xl border border-border bg-black"
316
+ ></video>
317
+ {:else}
318
+ <div
319
+ class="rounded-xl border border-dashed border-border bg-surface-overlay px-4 py-12 text-center text-sm text-muted"
320
+ >
321
+ No video
322
+ </div>
323
+ {/if}
324
+ {#if data.caption}
325
+ <figcaption class="mt-2 text-xs text-muted">{data.caption}</figcaption>
326
+ {/if}
327
+ </figure>
328
+ {:else if block.type === 'embed'}
329
+ {@const data = block.data as BlogEmbedData}
330
+ <figure>
331
+ {#if data.url}
332
+ <div
333
+ class="relative w-full overflow-hidden rounded-xl border border-border"
334
+ style={data.height
335
+ ? `height:${data.height}px`
336
+ : `padding-bottom:${blogAspectPadding(data.aspectRatio)}`}
337
+ >
338
+ <iframe
339
+ src={toEmbedSrc(data.url)}
340
+ title={data.title || 'Embed'}
341
+ class="absolute inset-0 h-full w-full"
342
+ loading="lazy"
343
+ referrerpolicy="no-referrer"
344
+ allowfullscreen
345
+ ></iframe>
346
+ </div>
347
+ {:else}
348
+ <div
349
+ class="rounded-xl border border-dashed border-border px-4 py-12 text-center text-sm text-muted"
350
+ >
351
+ No embed URL
352
+ </div>
353
+ {/if}
354
+ {#if data.caption}
355
+ <figcaption class="mt-2 text-xs text-muted">{data.caption}</figcaption>
356
+ {/if}
357
+ </figure>
358
+ {:else if block.type === 'gallery'}
359
+ {@const data = block.data as BlogGalleryData}
360
+ <div class={['grid', galleryCols(data.columns), galleryGap(data.gap)]}>
361
+ {#each data.images as img, i (i)}
362
+ <figure
363
+ class={[
364
+ 'overflow-hidden border border-border bg-surface-overlay',
365
+ data.rounded !== false ? 'rounded-lg' : ''
366
+ ]}
367
+ >
368
+ {#if img.src}
369
+ <img src={img.src} alt={img.alt ?? ''} class="aspect-square w-full object-cover" />
370
+ {:else}
371
+ <div class="flex aspect-square items-center justify-center text-xs text-muted">
372
+ Empty
373
+ </div>
374
+ {/if}
375
+ {#if img.caption}
376
+ <figcaption class="px-2 py-1 text-[11px] text-muted">{img.caption}</figcaption>
377
+ {/if}
378
+ </figure>
379
+ {/each}
380
+ </div>
381
+ {:else if block.type === 'table'}
382
+ {@const data = block.data as BlogTableData}
383
+ <div class="overflow-x-auto rounded-xl border border-border">
384
+ <table class="w-full text-left text-sm">
385
+ {#if data.caption}
386
+ <caption class="border-b border-border px-3 py-2 text-xs text-muted">
387
+ {data.caption}
388
+ </caption>
389
+ {/if}
390
+ <thead class="bg-surface-overlay/70 text-xs uppercase tracking-wide text-muted">
391
+ <tr>
392
+ {#each data.headers as header, i (i)}
393
+ <th class={['px-3 font-semibold', data.compact ? 'py-1.5' : 'py-2.5']}>
394
+ {header}
395
+ </th>
396
+ {/each}
397
+ </tr>
398
+ </thead>
399
+ <tbody>
400
+ {#each data.rows as row, ri (ri)}
401
+ <tr
402
+ class={[
403
+ 'border-t border-border',
404
+ data.striped && ri % 2 === 1 ? 'bg-surface-overlay/40' : ''
405
+ ]}
406
+ >
407
+ {#each row as cell, ci (ci)}
408
+ <td class={['px-3 text-secondary', data.compact ? 'py-1.5' : 'py-2.5']}>
409
+ {cell}
410
+ </td>
411
+ {/each}
412
+ </tr>
413
+ {/each}
414
+ </tbody>
415
+ </table>
416
+ </div>
417
+ {:else if block.type === 'cta'}
418
+ {@const data = block.data as BlogCtaData}
419
+ <div class={['flex flex-col gap-2', blogAlignClass(data.align)]}>
420
+ {#if data.subtitle}
421
+ <p class="text-sm text-muted">{data.subtitle}</p>
422
+ {/if}
423
+ <div class={data.align === 'center' ? 'flex justify-center' : data.align === 'right' ? 'flex justify-end' : ''}>
424
+ {#if data.href}
425
+ <a
426
+ href={data.href}
427
+ target={data.openInNewTab ? '_blank' : undefined}
428
+ rel={data.openInNewTab ? 'noopener noreferrer' : undefined}
429
+ >
430
+ <Button
431
+ variant={data.variant === 'outline' ? 'secondary' : (data.variant ?? 'primary')}
432
+ >
433
+ {data.label}
434
+ </Button>
435
+ </a>
436
+ {:else}
437
+ <Button
438
+ variant={data.variant === 'outline' ? 'secondary' : (data.variant ?? 'primary')}
439
+ >
440
+ {data.label}
441
+ </Button>
442
+ {/if}
443
+ </div>
444
+ </div>
445
+ {:else if block.type === 'spacer'}
446
+ {@const data = block.data as BlogSpacerData}
447
+ <div class={spacerClass(data.size)} aria-hidden="true"></div>
448
+ {:else if block.type === 'html'}
449
+ {@const data = block.data as BlogHtmlData}
450
+ <!-- Trusted CMS HTML only — consumers must sanitize upstream if needed. -->
451
+ <div class="blog-html prose prose-sm max-w-none text-secondary">
452
+ {@html data.html}
453
+ </div>
454
+ {:else if block.type === 'component'}
455
+ {@const data = block.data as BlogComponentData}
456
+ {@const reg = getBlogComponent(data.componentId)}
457
+ {#if reg}
458
+ {@const Comp = reg.component}
459
+ <Comp {...(data.props ?? {})} />
460
+ {:else}
461
+ <EmptyState
462
+ title={`Unknown component: ${data.componentId}`}
463
+ description="Register it with registerBlogComponent() before rendering."
464
+ />
465
+ {/if}
466
+ {/if}
467
+ {/each}
468
+ {/if}
469
+ </article>
@@ -0,0 +1,14 @@
1
+ import { type BlogDocument } from '../../../utils/blogDocument.js';
2
+ interface BlogRendererProps {
3
+ /** Document object or JSON string */
4
+ value?: BlogDocument | string;
5
+ /** Show document meta (author, tags, cover). */
6
+ showMeta?: boolean;
7
+ class?: string;
8
+ }
9
+ declare const BlogRenderer: import("svelte").Component<BlogRendererProps, {
10
+ BlogDocument: typeof BlogDocument;
11
+ BlogBlock: typeof BlogBlock;
12
+ }, "">;
13
+ type BlogRenderer = ReturnType<typeof BlogRenderer>;
14
+ export default BlogRenderer;
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import BlogRenderer from './BlogRenderer.svelte';
3
+ import { createBlock, emptyBlogDocument } from '../../../utils/blogDocument.js';
4
+
5
+ const value = {
6
+ ...emptyBlogDocument('Rendered from JSON'),
7
+ blocks: [
8
+ createBlock('heading', { level: 1, text: 'Hello from JSON' }),
9
+ createBlock('paragraph', { text: 'This document was hydrated by BlogRenderer.' }),
10
+ createBlock('quote', { text: 'Serialize once, render everywhere.', cite: 'Design system' }),
11
+ createBlock('list', { ordered: false, items: ['Heading', 'Paragraph', 'Quote', 'List'] }),
12
+ createBlock('divider'),
13
+ createBlock('markdown', { source: '**Markdown** block with _emphasis_.' })
14
+ ]
15
+ };
16
+ </script>
17
+
18
+ <div class="p-6">
19
+ <BlogRenderer {value} />
20
+ </div>
@@ -0,0 +1,18 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const BlogRendererStory: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type BlogRendererStory = InstanceType<typeof BlogRendererStory>;
18
+ export default BlogRendererStory;
@@ -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 BlueprintEditorStory from './BlueprintEditorStory.svelte';
2
+ const meta = {
3
+ title: 'Organisms/BlueprintEditor',
4
+ component: BlueprintEditorStory,
5
+ tags: ['autodocs'],
6
+ parameters: { layout: 'fullscreen' }
7
+ };
8
+ export default meta;
9
+ export const Default = {};