@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,239 @@
1
+ export type CanvasLayerKind = 'image' | 'video' | 'audio' | 'text' | 'rect' | 'roundRect' | 'ellipse' | 'triangle' | 'star' | 'hexagon' | 'pentagon' | 'diamond' | 'heart' | 'line' | 'arrow' | 'path' | 'sticky' | 'canvasPanel' | 'overlay' | 'border' | 'hBox' | 'vBox' | 'sizeBox' | 'scaleBox' | 'group' | 'widget' | 'namedSlot' | 'scrollBox' | 'wrapBox' | 'uniformGrid';
2
+ export type CanvasObjectFit = 'cover' | 'contain' | 'fill';
3
+ export type CanvasTextAlign = 'left' | 'center' | 'right';
4
+ export type CanvasFontStyle = 'normal' | 'italic';
5
+ export type CanvasTextDecoration = 'none' | 'underline' | 'line-through';
6
+ export type CanvasAlign = 'left' | 'center-h' | 'right' | 'top' | 'center-v' | 'bottom' | 'center' | 'full';
7
+ /** Normalized point inside a layer rect (0–1). */
8
+ export interface CanvasPoint {
9
+ x: number;
10
+ y: number;
11
+ }
12
+ export interface CanvasLayerRect {
13
+ x: number;
14
+ y: number;
15
+ w: number;
16
+ h: number;
17
+ }
18
+ /** UMG-style anchors (0–1 normalized against parent). */
19
+ export interface CanvasAnchors {
20
+ minX: number;
21
+ minY: number;
22
+ maxX: number;
23
+ maxY: number;
24
+ }
25
+ /** UMG slot: anchors + offsets in px relative to anchored edges. */
26
+ export interface CanvasSlot {
27
+ anchors: CanvasAnchors;
28
+ offsets: {
29
+ left: number;
30
+ top: number;
31
+ right: number;
32
+ bottom: number;
33
+ };
34
+ padding?: {
35
+ left: number;
36
+ top: number;
37
+ right: number;
38
+ bottom: number;
39
+ };
40
+ sizeRule?: 'auto' | 'fill' | 'fixed';
41
+ alignment?: {
42
+ x: number;
43
+ y: number;
44
+ };
45
+ order?: number;
46
+ }
47
+ export interface CanvasExposedProp {
48
+ id: string;
49
+ targetLayerId: string;
50
+ field: string;
51
+ label: string;
52
+ /** true = editable on instances (eye open) */
53
+ exposed: boolean;
54
+ }
55
+ export interface CanvasWidgetDefinition {
56
+ id: string;
57
+ name: string;
58
+ width: number;
59
+ height: number;
60
+ background?: string;
61
+ layers: CanvasLayer[];
62
+ exposed: CanvasExposedProp[];
63
+ }
64
+ export interface CanvasLayer {
65
+ id: string;
66
+ kind: CanvasLayerKind;
67
+ name: string;
68
+ src?: string;
69
+ text?: string;
70
+ fill?: string;
71
+ stroke?: string;
72
+ strokeWidth?: number;
73
+ fontSize?: number;
74
+ fontWeight?: number | string;
75
+ fontFamily?: string;
76
+ fontStyle?: CanvasFontStyle;
77
+ textDecoration?: CanvasTextDecoration;
78
+ letterSpacing?: number;
79
+ lineHeight?: number;
80
+ textAlign?: CanvasTextAlign;
81
+ color?: string;
82
+ /** Text box background */
83
+ textBackground?: string;
84
+ objectFit?: CanvasObjectFit;
85
+ borderRadius?: number;
86
+ rotation?: number;
87
+ flipX?: boolean;
88
+ flipY?: boolean;
89
+ shadowBlur?: number;
90
+ shadowColor?: string;
91
+ blur?: number;
92
+ /** For `path`: normalized points (0–1) relative to rect. */
93
+ points?: CanvasPoint[];
94
+ /** For `path`: close the shape into a filled polygon. */
95
+ closed?: boolean;
96
+ /** Parent layer id; null/undefined = artboard root. */
97
+ parentId?: string | null;
98
+ /** UMG slot (preferred). When missing, derived from rect + top-left anchors. */
99
+ slot?: CanvasSlot;
100
+ clipChildren?: boolean;
101
+ /** Gap for hBox / vBox / wrapBox / uniformGrid */
102
+ gap?: number;
103
+ /** namedSlot: public slot name exposed on the User Widget */
104
+ slotName?: string;
105
+ /** Child of a widget instance: which named slot to fill */
106
+ fillSlot?: string;
107
+ /** uniformGrid column count */
108
+ columns?: number;
109
+ /** kind === 'widget' */
110
+ definitionId?: string;
111
+ /** Exposed prop overrides on widget instances */
112
+ overrides?: Record<string, unknown>;
113
+ rect: CanvasLayerRect;
114
+ zIndex: number;
115
+ opacity: number;
116
+ visible: boolean;
117
+ locked: boolean;
118
+ }
119
+ export type CanvasGuideOrientation = 'horizontal' | 'vertical';
120
+ export interface CanvasGuide {
121
+ id: string;
122
+ orientation: CanvasGuideOrientation;
123
+ /** X for vertical, Y for horizontal (document px). */
124
+ position: number;
125
+ locked?: boolean;
126
+ }
127
+ export interface CanvasDocument {
128
+ version: 1 | 2;
129
+ width: number;
130
+ height: number;
131
+ background: string;
132
+ layers: CanvasLayer[];
133
+ guides?: CanvasGuide[];
134
+ /** When true, all guides are locked. */
135
+ guidesLocked?: boolean;
136
+ /** Local User Widget library (v2). */
137
+ widgets?: CanvasWidgetDefinition[];
138
+ }
139
+ /** Top-left point anchors; offsets encode x/y/w/h without needing parent size. */
140
+ export declare function defaultSlotFromRect(rect: CanvasLayerRect, anchors?: CanvasAnchors): CanvasSlot;
141
+ /** For top-left point anchors, offsets.left/top = x/y and right/bottom = -(x+w)/-(y+h) when parent size unknown.
142
+ * Prefer slotFromLocalRect from canvasHierarchy when parent size is known. */
143
+ export declare function rectFromSlot(slot: CanvasSlot, parentSize: {
144
+ width: number;
145
+ height: number;
146
+ }): CanvasLayerRect;
147
+ export declare function emptyCanvasDocument(partial?: Partial<Omit<CanvasDocument, 'version' | 'layers'>> & {
148
+ layers?: CanvasLayer[];
149
+ widgets?: CanvasWidgetDefinition[];
150
+ }): CanvasDocument;
151
+ /** Migrate v1 (flat absolute layers) → v2 (parentId + slot). */
152
+ export declare function migrateCanvasDocument(doc: CanvasDocument | (Omit<CanvasDocument, 'version'> & {
153
+ version?: number;
154
+ })): CanvasDocument;
155
+ export declare function ensureLayerSlot(layer: CanvasLayer): CanvasLayer;
156
+ export declare function createCanvasGuide(orientation: CanvasGuideOrientation, position: number, partial?: Partial<Omit<CanvasGuide, 'id' | 'orientation' | 'position'>>): CanvasGuide;
157
+ export declare function createCanvasLayer(kind: CanvasLayerKind, partial?: Partial<Omit<CanvasLayer, 'id' | 'kind'>>): CanvasLayer;
158
+ /** Scalar fields that can reset to createCanvasLayer defaults (UE-style details). */
159
+ export type CanvasResettableField = 'opacity' | 'rotation' | 'visible' | 'locked' | 'flipX' | 'flipY' | 'blur' | 'shadowBlur' | 'shadowColor' | 'fill' | 'stroke' | 'strokeWidth' | 'fontSize' | 'fontWeight' | 'fontFamily' | 'fontStyle' | 'textDecoration' | 'letterSpacing' | 'lineHeight' | 'textAlign' | 'color' | 'textBackground' | 'objectFit' | 'borderRadius' | 'gap' | 'columns' | 'clipChildren' | 'text' | 'name';
160
+ /** Default value for a layer field (same as createCanvasLayer would use). */
161
+ export declare function canvasLayerFieldDefault(kind: CanvasLayerKind, field: CanvasResettableField): unknown;
162
+ export declare function isCanvasFieldModified(layer: CanvasLayer, field: CanvasResettableField): boolean;
163
+ export declare function resetCanvasField(layer: CanvasLayer, field: CanvasResettableField): Partial<CanvasLayer>;
164
+ export declare function reorderCanvasLayers(layers: CanvasLayer[], orderedIds: string[]): CanvasLayer[];
165
+ export declare function updateCanvasLayer(doc: CanvasDocument, layerId: string, updater: (l: CanvasLayer) => CanvasLayer): CanvasDocument;
166
+ export declare function updateCanvasLayers(doc: CanvasDocument, ids: string[], updater: (l: CanvasLayer) => CanvasLayer): CanvasDocument;
167
+ export declare function snapLayerRect(rect: CanvasLayerRect, cellSize: number, enabled: boolean, bounds: {
168
+ width: number;
169
+ height: number;
170
+ }, minW?: number, minH?: number, guides?: Pick<CanvasGuide, 'orientation' | 'position'>[], guideThreshold?: number): CanvasLayerRect;
171
+ /** Snap left / center / right (or top / middle / bottom) edges to guides. */
172
+ export declare function snapRectToGuides(rect: CanvasLayerRect, guides: Pick<CanvasGuide, 'orientation' | 'position'>[], threshold?: number): CanvasLayerRect;
173
+ export declare function alignLayerRect(rect: CanvasLayerRect, bounds: {
174
+ width: number;
175
+ height: number;
176
+ }, align: CanvasAlign): CanvasLayerRect;
177
+ export declare const CANVAS_PRESETS: readonly [{
178
+ readonly id: "hd";
179
+ readonly label: "HD · 1280×720";
180
+ readonly width: 1280;
181
+ readonly height: 720;
182
+ }, {
183
+ readonly id: "fhd";
184
+ readonly label: "Full HD · 1920×1080";
185
+ readonly width: 1920;
186
+ readonly height: 1080;
187
+ }, {
188
+ readonly id: "square";
189
+ readonly label: "Instagram · 1080×1080";
190
+ readonly width: 1080;
191
+ readonly height: 1080;
192
+ }, {
193
+ readonly id: "story";
194
+ readonly label: "Story · 1080×1920";
195
+ readonly width: 1080;
196
+ readonly height: 1920;
197
+ }, {
198
+ readonly id: "landscape";
199
+ readonly label: "Landscape · 1600×900";
200
+ readonly width: 1600;
201
+ readonly height: 900;
202
+ }, {
203
+ readonly id: "presentation";
204
+ readonly label: "Presentation · 1920×1080";
205
+ readonly width: 1920;
206
+ readonly height: 1080;
207
+ }, {
208
+ readonly id: "a4";
209
+ readonly label: "A4 · 794×1123";
210
+ readonly width: 794;
211
+ readonly height: 1123;
212
+ }, {
213
+ readonly id: "twitter";
214
+ readonly label: "X Post · 1600×900";
215
+ readonly width: 1600;
216
+ readonly height: 900;
217
+ }];
218
+ export declare function presetIdForSize(width: number, height: number): string;
219
+ /** Build a path layer from absolute document points. */
220
+ export declare function createPathFromDocPoints(docPoints: {
221
+ x: number;
222
+ y: number;
223
+ }[], opts?: {
224
+ closed?: boolean;
225
+ fill?: string;
226
+ strokeWidth?: number;
227
+ name?: string;
228
+ zIndex?: number;
229
+ }): CanvasLayer;
230
+ /** Recompute rect + normalized points after editing absolute doc points. */
231
+ export declare function rebakePathLayer(layer: CanvasLayer, docPoints: {
232
+ x: number;
233
+ y: number;
234
+ }[]): CanvasLayer;
235
+ /** Map normalized path points → document space using an absolute (or local) rect. */
236
+ export declare function pathPointsToDoc(layer: CanvasLayer, absRect?: Pick<CanvasLayerRect, 'x' | 'y' | 'w' | 'h'>): {
237
+ x: number;
238
+ y: number;
239
+ }[];
@@ -0,0 +1,443 @@
1
+ import { uid } from './mediaTracks.js';
2
+ const TOP_LEFT = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
3
+ /** Top-left point anchors; offsets encode x/y/w/h without needing parent size. */
4
+ export function defaultSlotFromRect(rect, anchors = TOP_LEFT) {
5
+ const a = { ...anchors };
6
+ // Only valid without parent size when anchors are a point at origin (top-left).
7
+ if (a.minX === 0 && a.minY === 0 && a.maxX === 0 && a.maxY === 0) {
8
+ return {
9
+ anchors: a,
10
+ offsets: {
11
+ left: rect.x,
12
+ top: rect.y,
13
+ right: -(rect.x + rect.w),
14
+ bottom: -(rect.y + rect.h)
15
+ }
16
+ };
17
+ }
18
+ return {
19
+ anchors: a,
20
+ offsets: {
21
+ left: rect.x,
22
+ top: rect.y,
23
+ right: -(rect.x + rect.w),
24
+ bottom: -(rect.y + rect.h)
25
+ }
26
+ };
27
+ }
28
+ /** For top-left point anchors, offsets.left/top = x/y and right/bottom = -(x+w)/-(y+h) when parent size unknown.
29
+ * Prefer slotFromLocalRect from canvasHierarchy when parent size is known. */
30
+ export function rectFromSlot(slot, parentSize) {
31
+ const left = slot.anchors.minX * parentSize.width + slot.offsets.left;
32
+ const top = slot.anchors.minY * parentSize.height + slot.offsets.top;
33
+ const right = slot.anchors.maxX * parentSize.width - slot.offsets.right;
34
+ const bottom = slot.anchors.maxY * parentSize.height - slot.offsets.bottom;
35
+ return {
36
+ x: left,
37
+ y: top,
38
+ w: Math.max(1, right - left),
39
+ h: Math.max(1, bottom - top)
40
+ };
41
+ }
42
+ const LAYER_DEFAULTS = {
43
+ image: { w: 320, h: 240, name: 'Image' },
44
+ video: { w: 480, h: 270, name: 'Video' },
45
+ audio: { w: 200, h: 48, name: 'Audio' },
46
+ text: { w: 280, h: 64, name: 'Text', text: 'Add your text', fontSize: 32 },
47
+ rect: { w: 240, h: 160, name: 'Rectangle', fill: '#3b82f6' },
48
+ roundRect: { w: 240, h: 160, name: 'Rounded', fill: '#8b5cf6', borderRadius: 24 },
49
+ ellipse: { w: 200, h: 200, name: 'Ellipse', fill: '#22c55e' },
50
+ triangle: { w: 200, h: 180, name: 'Triangle', fill: '#f59e0b' },
51
+ star: { w: 200, h: 200, name: 'Star', fill: '#ef4444' },
52
+ hexagon: { w: 200, h: 200, name: 'Hexagon', fill: '#06b6d4' },
53
+ pentagon: { w: 200, h: 200, name: 'Pentagon', fill: '#a855f7' },
54
+ diamond: { w: 180, h: 180, name: 'Diamond', fill: '#f43f5e' },
55
+ heart: { w: 200, h: 180, name: 'Heart', fill: '#ec4899' },
56
+ line: { w: 280, h: 4, name: 'Line', fill: '#94a3b8' },
57
+ arrow: { w: 280, h: 24, name: 'Arrow', fill: '#0f172a' },
58
+ path: { w: 240, h: 180, name: 'Path', fill: '#0f172a' },
59
+ sticky: {
60
+ w: 220,
61
+ h: 220,
62
+ name: 'Sticky note',
63
+ fill: '#fef08a',
64
+ text: 'Note',
65
+ fontSize: 20,
66
+ borderRadius: 4,
67
+ color: '#713f12'
68
+ },
69
+ canvasPanel: { w: 400, h: 300, name: 'Canvas Panel', fill: 'transparent', clipChildren: true },
70
+ overlay: { w: 320, h: 240, name: 'Overlay', fill: 'transparent', clipChildren: true },
71
+ border: { w: 320, h: 240, name: 'Border', fill: '#ffffff', borderRadius: 12, clipChildren: true },
72
+ hBox: { w: 360, h: 80, name: 'Horizontal Box', fill: 'transparent', gap: 8 },
73
+ vBox: { w: 200, h: 240, name: 'Vertical Box', fill: 'transparent', gap: 8 },
74
+ sizeBox: { w: 200, h: 200, name: 'Size Box', fill: 'transparent', clipChildren: true },
75
+ scaleBox: { w: 240, h: 240, name: 'Scale Box', fill: 'transparent', clipChildren: true },
76
+ group: { w: 280, h: 200, name: 'Group', fill: 'transparent' },
77
+ widget: { w: 280, h: 160, name: 'Widget' },
78
+ namedSlot: { w: 200, h: 120, name: 'Named Slot', fill: 'rgba(59,130,246,0.08)' },
79
+ scrollBox: { w: 280, h: 320, name: 'Scroll Box', fill: 'transparent', clipChildren: true },
80
+ wrapBox: { w: 360, h: 200, name: 'Wrap Box', fill: 'transparent', gap: 8 },
81
+ uniformGrid: { w: 320, h: 240, name: 'Uniform Grid', fill: 'transparent', gap: 8 }
82
+ };
83
+ export function emptyCanvasDocument(partial) {
84
+ return {
85
+ version: 2,
86
+ width: partial?.width ?? 1280,
87
+ height: partial?.height ?? 720,
88
+ background: partial?.background ?? '#ffffff',
89
+ layers: (partial?.layers ?? []).map(ensureLayerSlot),
90
+ guides: partial?.guides ?? [],
91
+ guidesLocked: partial?.guidesLocked ?? false,
92
+ widgets: partial?.widgets ?? []
93
+ };
94
+ }
95
+ /** Migrate v1 (flat absolute layers) → v2 (parentId + slot). */
96
+ export function migrateCanvasDocument(doc) {
97
+ const version = doc.version ?? 1;
98
+ if (version >= 2) {
99
+ // Hot path: already v2 with slots — keep identity to avoid thrashing drag reactivity.
100
+ if (doc.version === 2 &&
101
+ doc.widgets &&
102
+ doc.layers.every((l) => l.slot && l.parentId !== undefined)) {
103
+ return doc;
104
+ }
105
+ return {
106
+ ...doc,
107
+ version: 2,
108
+ widgets: doc.widgets ?? [],
109
+ layers: doc.layers.map(ensureLayerSlot)
110
+ };
111
+ }
112
+ return {
113
+ ...doc,
114
+ version: 2,
115
+ widgets: doc.widgets ?? [],
116
+ layers: doc.layers.map((l) => ensureLayerSlot({
117
+ ...l,
118
+ parentId: l.parentId ?? null,
119
+ slot: l.slot ?? defaultSlotFromRect(l.rect),
120
+ clipChildren: l.clipChildren
121
+ }))
122
+ };
123
+ }
124
+ export function ensureLayerSlot(layer) {
125
+ if (layer.slot && layer.parentId !== undefined)
126
+ return layer;
127
+ return {
128
+ ...layer,
129
+ parentId: layer.parentId ?? null,
130
+ slot: layer.slot ?? defaultSlotFromRect(layer.rect)
131
+ };
132
+ }
133
+ export function createCanvasGuide(orientation, position, partial) {
134
+ return {
135
+ id: uid('guide'),
136
+ orientation,
137
+ position,
138
+ locked: partial?.locked ?? false
139
+ };
140
+ }
141
+ export function createCanvasLayer(kind, partial) {
142
+ const d = LAYER_DEFAULTS[kind];
143
+ const rect = partial?.rect ?? { x: 80, y: 80, w: d.w, h: d.h };
144
+ return ensureLayerSlot({
145
+ id: uid('layer'),
146
+ kind,
147
+ name: partial?.name ?? d.name,
148
+ src: partial?.src,
149
+ text: partial?.text ?? d.text,
150
+ fill: partial?.fill ?? d.fill,
151
+ stroke: partial?.stroke,
152
+ strokeWidth: partial?.strokeWidth ?? (kind === 'line' || kind === 'arrow' || kind === 'path' ? 4 : undefined),
153
+ fontSize: partial?.fontSize ?? d.fontSize,
154
+ fontWeight: partial?.fontWeight,
155
+ fontFamily: partial?.fontFamily,
156
+ fontStyle: partial?.fontStyle,
157
+ textDecoration: partial?.textDecoration,
158
+ letterSpacing: partial?.letterSpacing,
159
+ lineHeight: partial?.lineHeight,
160
+ textAlign: partial?.textAlign ?? (kind === 'text' || kind === 'sticky' ? 'left' : undefined),
161
+ color: partial?.color ?? d.color ?? (kind === 'text' ? '#0f172a' : undefined),
162
+ textBackground: partial?.textBackground,
163
+ objectFit: partial?.objectFit ?? (kind === 'image' || kind === 'video' ? 'cover' : undefined),
164
+ borderRadius: partial?.borderRadius ?? d.borderRadius,
165
+ rotation: partial?.rotation ?? 0,
166
+ flipX: partial?.flipX ?? false,
167
+ flipY: partial?.flipY ?? false,
168
+ shadowBlur: partial?.shadowBlur,
169
+ shadowColor: partial?.shadowColor,
170
+ blur: partial?.blur,
171
+ points: partial?.points,
172
+ closed: partial?.closed ?? false,
173
+ parentId: partial?.parentId ?? null,
174
+ slot: partial?.slot,
175
+ clipChildren: partial?.clipChildren ?? d.clipChildren ?? false,
176
+ gap: partial?.gap ?? d.gap,
177
+ slotName: partial?.slotName ?? (kind === 'namedSlot' ? partial?.name ?? d.name : undefined),
178
+ fillSlot: partial?.fillSlot,
179
+ columns: partial?.columns ?? (kind === 'uniformGrid' ? 2 : undefined),
180
+ definitionId: partial?.definitionId,
181
+ overrides: partial?.overrides,
182
+ rect,
183
+ zIndex: partial?.zIndex ?? 0,
184
+ opacity: partial?.opacity ?? 1,
185
+ visible: partial?.visible ?? true,
186
+ locked: partial?.locked ?? false
187
+ });
188
+ }
189
+ function canvasValuesEqual(a, b) {
190
+ if (a === b)
191
+ return true;
192
+ // Treat unset numeric effects as 0
193
+ if ((a == null || a === 0) && (b == null || b === 0))
194
+ return true;
195
+ if (a == null && b == null)
196
+ return true;
197
+ return false;
198
+ }
199
+ /** Default value for a layer field (same as createCanvasLayer would use). */
200
+ export function canvasLayerFieldDefault(kind, field) {
201
+ const d = LAYER_DEFAULTS[kind];
202
+ switch (field) {
203
+ case 'opacity':
204
+ return 1;
205
+ case 'rotation':
206
+ return 0;
207
+ case 'visible':
208
+ return true;
209
+ case 'locked':
210
+ return false;
211
+ case 'flipX':
212
+ case 'flipY':
213
+ return false;
214
+ case 'blur':
215
+ case 'shadowBlur':
216
+ return undefined;
217
+ case 'shadowColor':
218
+ return undefined;
219
+ case 'fill':
220
+ return d.fill;
221
+ case 'stroke':
222
+ return undefined;
223
+ case 'strokeWidth':
224
+ return kind === 'line' || kind === 'arrow' || kind === 'path' ? 4 : undefined;
225
+ case 'fontSize':
226
+ return d.fontSize;
227
+ case 'fontWeight':
228
+ case 'fontFamily':
229
+ case 'fontStyle':
230
+ case 'textDecoration':
231
+ case 'letterSpacing':
232
+ case 'lineHeight':
233
+ return undefined;
234
+ case 'textAlign':
235
+ return kind === 'text' || kind === 'sticky' ? 'left' : undefined;
236
+ case 'color':
237
+ return d.color ?? (kind === 'text' ? '#0f172a' : undefined);
238
+ case 'textBackground':
239
+ return undefined;
240
+ case 'objectFit':
241
+ return kind === 'image' || kind === 'video' ? 'cover' : undefined;
242
+ case 'borderRadius':
243
+ return d.borderRadius;
244
+ case 'gap':
245
+ return d.gap;
246
+ case 'columns':
247
+ return kind === 'uniformGrid' ? 2 : undefined;
248
+ case 'clipChildren':
249
+ return d.clipChildren ?? false;
250
+ case 'text':
251
+ return d.text;
252
+ case 'name':
253
+ return d.name;
254
+ default:
255
+ return undefined;
256
+ }
257
+ }
258
+ export function isCanvasFieldModified(layer, field) {
259
+ const cur = layer[field];
260
+ const def = canvasLayerFieldDefault(layer.kind, field);
261
+ return !canvasValuesEqual(cur, def);
262
+ }
263
+ export function resetCanvasField(layer, field) {
264
+ return { [field]: canvasLayerFieldDefault(layer.kind, field) };
265
+ }
266
+ export function reorderCanvasLayers(layers, orderedIds) {
267
+ const map = new Map(layers.map((l) => [l.id, l]));
268
+ const next = [];
269
+ orderedIds.forEach((id, i) => {
270
+ const layer = map.get(id);
271
+ if (layer) {
272
+ next.push({ ...layer, zIndex: i });
273
+ map.delete(id);
274
+ }
275
+ });
276
+ for (const layer of map.values()) {
277
+ next.push({ ...layer, zIndex: next.length });
278
+ }
279
+ return next;
280
+ }
281
+ export function updateCanvasLayer(doc, layerId, updater) {
282
+ return {
283
+ ...doc,
284
+ layers: doc.layers.map((l) => (l.id === layerId ? updater(l) : l))
285
+ };
286
+ }
287
+ export function updateCanvasLayers(doc, ids, updater) {
288
+ const set = new Set(ids);
289
+ return {
290
+ ...doc,
291
+ layers: doc.layers.map((l) => (set.has(l.id) ? updater(l) : l))
292
+ };
293
+ }
294
+ export function snapLayerRect(rect, cellSize, enabled, bounds, minW = 24, minH = 24, guides = [], guideThreshold = 8) {
295
+ const snap = (v) => (enabled ? Math.round(v / cellSize) * cellSize : v);
296
+ let w = Math.max(minW, enabled ? snap(rect.w) : rect.w);
297
+ let h = Math.max(minH, enabled ? snap(rect.h) : rect.h);
298
+ let x = enabled ? snap(rect.x) : rect.x;
299
+ let y = enabled ? snap(rect.y) : rect.y;
300
+ if (guides.length && guideThreshold > 0) {
301
+ const snapped = snapRectToGuides({ x, y, w, h }, guides, guideThreshold);
302
+ x = snapped.x;
303
+ y = snapped.y;
304
+ }
305
+ x = Math.min(Math.max(0, x), Math.max(0, bounds.width - w));
306
+ y = Math.min(Math.max(0, y), Math.max(0, bounds.height - h));
307
+ w = Math.min(w, bounds.width - x);
308
+ h = Math.min(h, bounds.height - y);
309
+ return { x, y, w, h };
310
+ }
311
+ /** Snap left / center / right (or top / middle / bottom) edges to guides. */
312
+ export function snapRectToGuides(rect, guides, threshold = 8) {
313
+ let { x, y, w, h } = rect;
314
+ let bestDx = threshold + 1;
315
+ let bestDy = threshold + 1;
316
+ let nextX = x;
317
+ let nextY = y;
318
+ for (const g of guides) {
319
+ if (g.orientation === 'vertical') {
320
+ const candidates = [x, x + w / 2, x + w];
321
+ for (const edge of candidates) {
322
+ const d = Math.abs(edge - g.position);
323
+ if (d < bestDx) {
324
+ bestDx = d;
325
+ nextX = x + (g.position - edge);
326
+ }
327
+ }
328
+ }
329
+ else {
330
+ const candidates = [y, y + h / 2, y + h];
331
+ for (const edge of candidates) {
332
+ const d = Math.abs(edge - g.position);
333
+ if (d < bestDy) {
334
+ bestDy = d;
335
+ nextY = y + (g.position - edge);
336
+ }
337
+ }
338
+ }
339
+ }
340
+ if (bestDx <= threshold)
341
+ x = nextX;
342
+ if (bestDy <= threshold)
343
+ y = nextY;
344
+ return { x, y, w, h };
345
+ }
346
+ export function alignLayerRect(rect, bounds, align) {
347
+ if (align === 'full') {
348
+ return { x: 0, y: 0, w: bounds.width, h: bounds.height };
349
+ }
350
+ let { x, y, w, h } = rect;
351
+ switch (align) {
352
+ case 'left':
353
+ x = 0;
354
+ break;
355
+ case 'center-h':
356
+ x = Math.max(0, (bounds.width - w) / 2);
357
+ break;
358
+ case 'right':
359
+ x = Math.max(0, bounds.width - w);
360
+ break;
361
+ case 'top':
362
+ y = 0;
363
+ break;
364
+ case 'center-v':
365
+ y = Math.max(0, (bounds.height - h) / 2);
366
+ break;
367
+ case 'bottom':
368
+ y = Math.max(0, bounds.height - h);
369
+ break;
370
+ case 'center':
371
+ x = Math.max(0, (bounds.width - w) / 2);
372
+ y = Math.max(0, (bounds.height - h) / 2);
373
+ break;
374
+ }
375
+ return { x, y, w, h };
376
+ }
377
+ export const CANVAS_PRESETS = [
378
+ { id: 'hd', label: 'HD · 1280×720', width: 1280, height: 720 },
379
+ { id: 'fhd', label: 'Full HD · 1920×1080', width: 1920, height: 1080 },
380
+ { id: 'square', label: 'Instagram · 1080×1080', width: 1080, height: 1080 },
381
+ { id: 'story', label: 'Story · 1080×1920', width: 1080, height: 1920 },
382
+ { id: 'landscape', label: 'Landscape · 1600×900', width: 1600, height: 900 },
383
+ { id: 'presentation', label: 'Presentation · 1920×1080', width: 1920, height: 1080 },
384
+ { id: 'a4', label: 'A4 · 794×1123', width: 794, height: 1123 },
385
+ { id: 'twitter', label: 'X Post · 1600×900', width: 1600, height: 900 }
386
+ ];
387
+ export function presetIdForSize(width, height) {
388
+ const match = CANVAS_PRESETS.find((p) => p.width === width && p.height === height);
389
+ return match?.id ?? 'custom';
390
+ }
391
+ /** Build a path layer from absolute document points. */
392
+ export function createPathFromDocPoints(docPoints, opts) {
393
+ const pad = 8;
394
+ let minX = Infinity;
395
+ let minY = Infinity;
396
+ let maxX = -Infinity;
397
+ let maxY = -Infinity;
398
+ for (const p of docPoints) {
399
+ minX = Math.min(minX, p.x);
400
+ minY = Math.min(minY, p.y);
401
+ maxX = Math.max(maxX, p.x);
402
+ maxY = Math.max(maxY, p.y);
403
+ }
404
+ const w = Math.max(24, maxX - minX + pad * 2);
405
+ const h = Math.max(24, maxY - minY + pad * 2);
406
+ const x = minX - pad;
407
+ const y = minY - pad;
408
+ const points = docPoints.map((p) => ({
409
+ x: w > 0 ? (p.x - x) / w : 0,
410
+ y: h > 0 ? (p.y - y) / h : 0
411
+ }));
412
+ return createCanvasLayer('path', {
413
+ name: opts?.name ?? (opts?.closed ? 'Shape' : 'Path'),
414
+ fill: opts?.fill ?? '#0f172a',
415
+ strokeWidth: opts?.strokeWidth ?? 3,
416
+ closed: opts?.closed ?? false,
417
+ points,
418
+ zIndex: opts?.zIndex ?? 0,
419
+ rect: { x, y, w, h }
420
+ });
421
+ }
422
+ /** Recompute rect + normalized points after editing absolute doc points. */
423
+ export function rebakePathLayer(layer, docPoints) {
424
+ const next = createPathFromDocPoints(docPoints, {
425
+ closed: layer.closed,
426
+ fill: layer.fill,
427
+ strokeWidth: layer.strokeWidth,
428
+ name: layer.name,
429
+ zIndex: layer.zIndex
430
+ });
431
+ return {
432
+ ...layer,
433
+ points: next.points,
434
+ rect: next.rect,
435
+ closed: next.closed
436
+ };
437
+ }
438
+ /** Map normalized path points → document space using an absolute (or local) rect. */
439
+ export function pathPointsToDoc(layer, absRect) {
440
+ const pts = layer.points ?? [];
441
+ const { x, y, w, h } = absRect ?? layer.rect;
442
+ return pts.map((p) => ({ x: x + p.x * w, y: y + p.y * h }));
443
+ }
@@ -0,0 +1,10 @@
1
+ import type { CanvasDocument } from './canvasDocument.js';
2
+ export type CanvasExportFormat = 'png' | 'jpeg' | 'json';
3
+ /** Parse CSS color alpha; `transparent` / missing → 0. */
4
+ export declare function backgroundAlpha(color: string | undefined): number;
5
+ /** Renders the artboard at 1:1 document pixels into an offscreen canvas. */
6
+ export declare function renderCanvasDocument(doc: CanvasDocument, opts?: {
7
+ opaqueBackground?: boolean;
8
+ }): Promise<HTMLCanvasElement>;
9
+ export declare function exportCanvasBlob(doc: CanvasDocument, format?: 'png' | 'jpeg', quality?: number): Promise<Blob>;
10
+ export declare function downloadBlob(blob: Blob, filename: string): void;