@r2digisolutions/components 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/dist/components/atoms/IconButton/IconButton.svelte +1 -1
  2. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.stories.js +8 -0
  3. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte +122 -0
  4. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte.d.ts +11 -0
  5. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte +12 -0
  6. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte.d.ts +18 -0
  7. package/dist/components/atoms/PanKnob/PanKnob.stories.d.ts +9 -0
  8. package/dist/components/atoms/PanKnob/PanKnob.stories.js +8 -0
  9. package/dist/components/atoms/PanKnob/PanKnob.svelte +218 -0
  10. package/dist/components/atoms/PanKnob/PanKnob.svelte.d.ts +19 -0
  11. package/dist/components/atoms/PanKnob/PanKnobStory.svelte +15 -0
  12. package/dist/components/atoms/PanKnob/PanKnobStory.svelte.d.ts +3 -0
  13. package/dist/components/atoms/Playhead/Playhead.stories.js +8 -0
  14. package/dist/components/atoms/Playhead/Playhead.svelte +59 -0
  15. package/dist/components/atoms/Playhead/Playhead.svelte.d.ts +13 -0
  16. package/dist/components/atoms/Playhead/PlayheadStory.svelte +9 -0
  17. package/dist/components/atoms/Playhead/PlayheadStory.svelte.d.ts +18 -0
  18. package/dist/components/atoms/TimeRuler/TimeRuler.stories.js +8 -0
  19. package/dist/components/atoms/TimeRuler/TimeRuler.svelte +58 -0
  20. package/dist/components/atoms/TimeRuler/TimeRuler.svelte.d.ts +10 -0
  21. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte +7 -0
  22. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte.d.ts +18 -0
  23. package/dist/components/atoms/Tooltip/Tooltip.svelte +1 -1
  24. package/dist/components/atoms/TrimHandle/TrimHandle.stories.js +8 -0
  25. package/dist/components/atoms/TrimHandle/TrimHandle.svelte +63 -0
  26. package/dist/components/atoms/TrimHandle/TrimHandle.svelte.d.ts +12 -0
  27. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte +11 -0
  28. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte.d.ts +18 -0
  29. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.d.ts +9 -0
  30. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.js +8 -0
  31. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte +102 -0
  32. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte.d.ts +20 -0
  33. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte +34 -0
  34. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte.d.ts +3 -0
  35. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte +97 -61
  36. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte.d.ts +2 -0
  37. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.stories.js +8 -0
  38. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte +117 -0
  39. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte.d.ts +23 -0
  40. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte +18 -0
  41. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte.d.ts +18 -0
  42. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.stories.js +8 -0
  43. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte +858 -0
  44. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte.d.ts +43 -0
  45. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte +7 -0
  46. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte.d.ts +18 -0
  47. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.d.ts +9 -0
  48. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.js +8 -0
  49. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte +1140 -0
  50. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte.d.ts +28 -0
  51. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte +20 -0
  52. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte.d.ts +3 -0
  53. package/dist/components/molecules/ColorPicker/ColorPicker.svelte +1 -1
  54. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.d.ts +9 -0
  55. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.js +8 -0
  56. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte +108 -0
  57. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte.d.ts +18 -0
  58. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte +15 -0
  59. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte.d.ts +3 -0
  60. package/dist/components/molecules/ConflictResolver/ConflictResolver.stories.js +8 -0
  61. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte +73 -0
  62. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte.d.ts +16 -0
  63. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte +11 -0
  64. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte.d.ts +18 -0
  65. package/dist/components/molecules/ContextMenu/ContextMenu.svelte +204 -60
  66. package/dist/components/molecules/ContextMenu/ContextMenu.svelte.d.ts +9 -0
  67. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.d.ts +9 -0
  68. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.js +8 -0
  69. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte +56 -0
  70. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte.d.ts +12 -0
  71. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte +12 -0
  72. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte.d.ts +3 -0
  73. package/dist/components/molecules/FilterList/FilterList.stories.d.ts +9 -0
  74. package/dist/components/molecules/FilterList/FilterList.stories.js +8 -0
  75. package/dist/components/molecules/FilterList/FilterList.svelte +101 -0
  76. package/dist/components/molecules/FilterList/FilterList.svelte.d.ts +18 -0
  77. package/dist/components/molecules/FilterList/FilterListStory.svelte +31 -0
  78. package/dist/components/molecules/FilterList/FilterListStory.svelte.d.ts +3 -0
  79. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.d.ts +9 -0
  80. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.js +8 -0
  81. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte +94 -0
  82. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte.d.ts +15 -0
  83. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte +18 -0
  84. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte.d.ts +3 -0
  85. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.stories.js +8 -0
  86. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte +50 -0
  87. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte.d.ts +11 -0
  88. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte +13 -0
  89. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte.d.ts +18 -0
  90. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.stories.js +8 -0
  91. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte +380 -0
  92. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte.d.ts +33 -0
  93. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte +14 -0
  94. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte.d.ts +18 -0
  95. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.d.ts +9 -0
  96. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.js +8 -0
  97. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte +399 -0
  98. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte.d.ts +37 -0
  99. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte +24 -0
  100. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte.d.ts +3 -0
  101. package/dist/components/molecules/MediaStage/MediaStage.stories.d.ts +9 -0
  102. package/dist/components/molecules/MediaStage/MediaStage.stories.js +8 -0
  103. package/dist/components/molecules/MediaStage/MediaStage.svelte +1498 -0
  104. package/dist/components/molecules/MediaStage/MediaStage.svelte.d.ts +45 -0
  105. package/dist/components/molecules/MediaStage/MediaStageStory.svelte +35 -0
  106. package/dist/components/molecules/MediaStage/MediaStageStory.svelte.d.ts +3 -0
  107. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.d.ts +9 -0
  108. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.js +8 -0
  109. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte +131 -0
  110. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte.d.ts +19 -0
  111. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte +20 -0
  112. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte.d.ts +3 -0
  113. package/dist/components/molecules/MixerChannel/MixerChannel.stories.d.ts +9 -0
  114. package/dist/components/molecules/MixerChannel/MixerChannel.stories.js +8 -0
  115. package/dist/components/molecules/MixerChannel/MixerChannel.svelte +92 -0
  116. package/dist/components/molecules/MixerChannel/MixerChannel.svelte.d.ts +11 -0
  117. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte +13 -0
  118. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte.d.ts +3 -0
  119. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte +454 -0
  120. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte.d.ts +8 -0
  121. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte +26 -0
  122. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte.d.ts +22 -0
  123. package/dist/components/molecules/NodeGraph/NodeGraph.stories.d.ts +12 -0
  124. package/dist/components/molecules/NodeGraph/NodeGraph.stories.js +9 -0
  125. package/dist/components/molecules/NodeGraph/NodeGraph.svelte +1409 -0
  126. package/dist/components/molecules/NodeGraph/NodeGraph.svelte.d.ts +33 -0
  127. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte +90 -0
  128. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte.d.ts +3 -0
  129. package/dist/components/molecules/NodePalette/NodePalette.stories.js +8 -0
  130. package/dist/components/molecules/NodePalette/NodePalette.svelte +86 -0
  131. package/dist/components/molecules/NodePalette/NodePalette.svelte.d.ts +11 -0
  132. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte +11 -0
  133. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte.d.ts +18 -0
  134. package/dist/components/molecules/Poll/Poll.stories.d.ts +1 -1
  135. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.stories.js +8 -0
  136. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte +72 -0
  137. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte.d.ts +12 -0
  138. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte +16 -0
  139. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte.d.ts +18 -0
  140. package/dist/components/molecules/PropertyField/PropertyField.svelte +57 -3
  141. package/dist/components/molecules/PropertyField/PropertyField.svelte.d.ts +10 -0
  142. package/dist/components/molecules/PropertyField/PropertyFieldStory.svelte +21 -0
  143. package/dist/components/molecules/PropertyGroup/PropertyGroup.svelte +1 -1
  144. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.d.ts +9 -0
  145. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.js +8 -0
  146. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte +52 -0
  147. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte.d.ts +18 -0
  148. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte +62 -0
  149. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte.d.ts +3 -0
  150. package/dist/components/molecules/RelationPicker/RelationPicker.stories.d.ts +9 -0
  151. package/dist/components/molecules/RelationPicker/RelationPicker.stories.js +8 -0
  152. package/dist/components/molecules/RelationPicker/RelationPicker.svelte +180 -0
  153. package/dist/components/molecules/RelationPicker/RelationPicker.svelte.d.ts +24 -0
  154. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte +16 -0
  155. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte.d.ts +3 -0
  156. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.d.ts +9 -0
  157. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.js +8 -0
  158. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte +154 -0
  159. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte.d.ts +12 -0
  160. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte +16 -0
  161. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte.d.ts +3 -0
  162. package/dist/components/molecules/SecretField/SecretField.stories.d.ts +9 -0
  163. package/dist/components/molecules/SecretField/SecretField.stories.js +8 -0
  164. package/dist/components/molecules/SecretField/SecretField.svelte +58 -0
  165. package/dist/components/molecules/SecretField/SecretField.svelte.d.ts +15 -0
  166. package/dist/components/molecules/SecretField/SecretFieldStory.svelte +8 -0
  167. package/dist/components/molecules/SecretField/SecretFieldStory.svelte.d.ts +3 -0
  168. package/dist/components/molecules/SplitPane/SplitPane.svelte +96 -37
  169. package/dist/components/molecules/SplitPane/SplitPane.svelte.d.ts +10 -2
  170. package/dist/components/molecules/TableToolbar/TableToolbar.svelte.d.ts +1 -1
  171. package/dist/components/molecules/Terminal/Terminal.stories.js +20 -0
  172. package/dist/components/molecules/Terminal/Terminal.svelte +238 -0
  173. package/dist/components/molecules/Terminal/Terminal.svelte.d.ts +19 -0
  174. package/dist/components/molecules/Terminal/TerminalStory.svelte +47 -0
  175. package/dist/components/molecules/Terminal/TerminalStory.svelte.d.ts +6 -0
  176. package/dist/components/molecules/TimelineClip/TimelineClip.stories.js +8 -0
  177. package/dist/components/molecules/TimelineClip/TimelineClip.svelte +116 -0
  178. package/dist/components/molecules/TimelineClip/TimelineClip.svelte.d.ts +15 -0
  179. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte +18 -0
  180. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte.d.ts +18 -0
  181. package/dist/components/molecules/TimelineTrack/TimelineTrack.stories.js +8 -0
  182. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte +56 -0
  183. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte.d.ts +16 -0
  184. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte +35 -0
  185. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte.d.ts +18 -0
  186. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.stories.js +8 -0
  187. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte +158 -0
  188. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte.d.ts +18 -0
  189. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte +55 -0
  190. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte.d.ts +18 -0
  191. package/dist/components/molecules/TrackHeader/TrackHeader.stories.d.ts +9 -0
  192. package/dist/components/molecules/TrackHeader/TrackHeader.stories.js +8 -0
  193. package/dist/components/molecules/TrackHeader/TrackHeader.svelte +54 -0
  194. package/dist/components/molecules/TrackHeader/TrackHeader.svelte.d.ts +9 -0
  195. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte +10 -0
  196. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte.d.ts +3 -0
  197. package/dist/components/molecules/TransportControls/TransportControls.stories.d.ts +9 -0
  198. package/dist/components/molecules/TransportControls/TransportControls.stories.js +8 -0
  199. package/dist/components/molecules/TransportControls/TransportControls.svelte +53 -0
  200. package/dist/components/molecules/TransportControls/TransportControls.svelte.d.ts +12 -0
  201. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte +18 -0
  202. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte.d.ts +3 -0
  203. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.stories.js +8 -0
  204. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte +117 -0
  205. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte.d.ts +20 -0
  206. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte +36 -0
  207. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte.d.ts +18 -0
  208. package/dist/components/molecules/VideoPlayer/VideoPlayer.stories.d.ts +1 -1
  209. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.d.ts +9 -0
  210. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.js +8 -0
  211. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte +59 -0
  212. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte.d.ts +9 -0
  213. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte +10 -0
  214. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte.d.ts +3 -0
  215. package/dist/components/molecules/WaveformRegion/WaveformRegion.stories.js +8 -0
  216. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte +82 -0
  217. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte.d.ts +13 -0
  218. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte +17 -0
  219. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte.d.ts +18 -0
  220. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte +13 -4
  221. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte.d.ts +3 -1
  222. package/dist/components/molecules/WidgetCanvas/widgetCanvasContext.d.ts +2 -0
  223. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte +206 -37
  224. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte.d.ts +31 -0
  225. package/dist/components/organisms/AudioEditor/AudioEditor.stories.d.ts +12 -0
  226. package/dist/components/organisms/AudioEditor/AudioEditor.stories.js +9 -0
  227. package/dist/components/organisms/AudioEditor/AudioEditor.svelte +273 -0
  228. package/dist/components/organisms/AudioEditor/AudioEditor.svelte.d.ts +13 -0
  229. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte +10 -0
  230. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte.d.ts +3 -0
  231. package/dist/components/organisms/BlogEditor/BlogEditor.stories.d.ts +12 -0
  232. package/dist/components/organisms/BlogEditor/BlogEditor.stories.js +9 -0
  233. package/dist/components/organisms/BlogEditor/BlogEditor.svelte +1208 -0
  234. package/dist/components/organisms/BlogEditor/BlogEditor.svelte.d.ts +16 -0
  235. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte +144 -0
  236. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte.d.ts +3 -0
  237. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte +28 -0
  238. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte.d.ts +10 -0
  239. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte +34 -0
  240. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte.d.ts +11 -0
  241. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte +13 -0
  242. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte.d.ts +8 -0
  243. package/dist/components/organisms/BlogRenderer/BlogRenderer.stories.js +8 -0
  244. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte +469 -0
  245. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte.d.ts +14 -0
  246. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte +20 -0
  247. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte.d.ts +18 -0
  248. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.d.ts +12 -0
  249. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.js +9 -0
  250. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte +1012 -0
  251. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte.d.ts +16 -0
  252. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte +76 -0
  253. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte.d.ts +3 -0
  254. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.d.ts +12 -0
  255. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.js +9 -0
  256. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte +1680 -0
  257. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte.d.ts +18 -0
  258. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte +329 -0
  259. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte.d.ts +3 -0
  260. package/dist/components/organisms/DashboardBuilderPage/DashboardBuilderPage.svelte.d.ts +1 -1
  261. package/dist/components/organisms/DesktopShell/DesktopShell.svelte.d.ts +1 -1
  262. package/dist/components/organisms/EditorShell/EditorShell.svelte +123 -28
  263. package/dist/components/organisms/EditorShell/EditorShell.svelte.d.ts +21 -1
  264. package/dist/components/organisms/FileUploader/FileUploader.svelte +77 -15
  265. package/dist/components/organisms/FileUploader/FileUploader.svelte.d.ts +11 -0
  266. package/dist/components/organisms/ImportWizard/ImportWizard.stories.js +8 -0
  267. package/dist/components/organisms/ImportWizard/ImportWizard.svelte +209 -0
  268. package/dist/components/organisms/ImportWizard/ImportWizard.svelte.d.ts +22 -0
  269. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte +16 -0
  270. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte.d.ts +18 -0
  271. package/dist/components/organisms/VideoEditor/VideoEditor.stories.d.ts +12 -0
  272. package/dist/components/organisms/VideoEditor/VideoEditor.stories.js +9 -0
  273. package/dist/components/organisms/VideoEditor/VideoEditor.svelte +308 -0
  274. package/dist/components/organisms/VideoEditor/VideoEditor.svelte.d.ts +13 -0
  275. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte +10 -0
  276. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte.d.ts +3 -0
  277. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.d.ts +12 -0
  278. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.js +9 -0
  279. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte +22 -0
  280. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte.d.ts +13 -0
  281. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte +8 -0
  282. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte.d.ts +3 -0
  283. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.d.ts +12 -0
  284. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.js +9 -0
  285. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte +32 -0
  286. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte.d.ts +17 -0
  287. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte +21 -0
  288. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte.d.ts +3 -0
  289. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.d.ts +12 -0
  290. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.js +9 -0
  291. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte +22 -0
  292. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte.d.ts +13 -0
  293. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte +8 -0
  294. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte.d.ts +3 -0
  295. package/dist/index.d.ts +83 -1
  296. package/dist/index.js +60 -0
  297. package/dist/types/xyflow-svelte.d.ts +62 -0
  298. package/dist/utils/audioProject.d.ts +19 -0
  299. package/dist/utils/audioProject.js +70 -0
  300. package/dist/utils/blogDocument.d.ts +175 -0
  301. package/dist/utils/blogDocument.js +220 -0
  302. package/dist/utils/blueprintRuntime.d.ts +34 -0
  303. package/dist/utils/blueprintRuntime.js +289 -0
  304. package/dist/utils/canvasDocument.d.ts +239 -0
  305. package/dist/utils/canvasDocument.js +443 -0
  306. package/dist/utils/canvasExport.d.ts +10 -0
  307. package/dist/utils/canvasExport.js +469 -0
  308. package/dist/utils/canvasHierarchy.d.ts +189 -0
  309. package/dist/utils/canvasHierarchy.js +674 -0
  310. package/dist/utils/canvasHistory.d.ts +19 -0
  311. package/dist/utils/canvasHistory.js +48 -0
  312. package/dist/utils/canvasWidget.d.ts +81 -0
  313. package/dist/utils/canvasWidget.js +597 -0
  314. package/dist/utils/mediaTime.d.ts +16 -0
  315. package/dist/utils/mediaTime.js +57 -0
  316. package/dist/utils/mediaTracks.d.ts +61 -0
  317. package/dist/utils/mediaTracks.js +102 -0
  318. package/dist/utils/nodeGraph.d.ts +354 -0
  319. package/dist/utils/nodeGraph.js +1453 -0
  320. package/dist/utils/queryBridge.d.ts +18 -0
  321. package/dist/utils/queryBridge.js +118 -0
  322. package/dist/utils/videoSequence.d.ts +13 -0
  323. package/dist/utils/videoSequence.js +63 -0
  324. package/package.json +5 -2
@@ -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 = {};