@r2digisolutions/components 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/README.md +1 -1
  2. package/dist/components/atoms/Checkbox/Checkbox.svelte +10 -3
  3. package/dist/components/atoms/Checkbox/Checkbox.svelte.d.ts +3 -0
  4. package/dist/components/atoms/IconButton/IconButton.svelte +1 -1
  5. package/dist/components/atoms/Input/Input.svelte +17 -2
  6. package/dist/components/atoms/Input/Input.svelte.d.ts +6 -1
  7. package/dist/components/atoms/MarqueeRect/MarqueeRect.svelte +21 -0
  8. package/dist/components/atoms/MarqueeRect/MarqueeRect.svelte.d.ts +8 -0
  9. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.stories.js +8 -0
  10. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte +122 -0
  11. package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte.d.ts +11 -0
  12. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte +12 -0
  13. package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte.d.ts +18 -0
  14. package/dist/components/atoms/PanKnob/PanKnob.stories.d.ts +9 -0
  15. package/dist/components/atoms/PanKnob/PanKnob.stories.js +8 -0
  16. package/dist/components/atoms/PanKnob/PanKnob.svelte +218 -0
  17. package/dist/components/atoms/PanKnob/PanKnob.svelte.d.ts +19 -0
  18. package/dist/components/atoms/PanKnob/PanKnobStory.svelte +15 -0
  19. package/dist/components/atoms/PanKnob/PanKnobStory.svelte.d.ts +3 -0
  20. package/dist/components/atoms/Playhead/Playhead.stories.js +8 -0
  21. package/dist/components/atoms/Playhead/Playhead.svelte +59 -0
  22. package/dist/components/atoms/Playhead/Playhead.svelte.d.ts +13 -0
  23. package/dist/components/atoms/Playhead/PlayheadStory.svelte +9 -0
  24. package/dist/components/atoms/Playhead/PlayheadStory.svelte.d.ts +18 -0
  25. package/dist/components/atoms/Textarea/Textarea.svelte +4 -1
  26. package/dist/components/atoms/Textarea/Textarea.svelte.d.ts +1 -0
  27. package/dist/components/atoms/TimeRuler/TimeRuler.stories.js +8 -0
  28. package/dist/components/atoms/TimeRuler/TimeRuler.svelte +58 -0
  29. package/dist/components/atoms/TimeRuler/TimeRuler.svelte.d.ts +10 -0
  30. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte +7 -0
  31. package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte.d.ts +18 -0
  32. package/dist/components/atoms/Toggle/Toggle.svelte +1 -1
  33. package/dist/components/atoms/Tooltip/Tooltip.svelte +1 -1
  34. package/dist/components/atoms/TrimHandle/TrimHandle.stories.js +8 -0
  35. package/dist/components/atoms/TrimHandle/TrimHandle.svelte +63 -0
  36. package/dist/components/atoms/TrimHandle/TrimHandle.svelte.d.ts +12 -0
  37. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte +11 -0
  38. package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte.d.ts +18 -0
  39. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.d.ts +9 -0
  40. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.js +8 -0
  41. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte +102 -0
  42. package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte.d.ts +20 -0
  43. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte +34 -0
  44. package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte.d.ts +3 -0
  45. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte +112 -62
  46. package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte.d.ts +2 -0
  47. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.stories.js +8 -0
  48. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte +117 -0
  49. package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte.d.ts +23 -0
  50. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte +18 -0
  51. package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte.d.ts +18 -0
  52. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.stories.js +8 -0
  53. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte +858 -0
  54. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte.d.ts +43 -0
  55. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte +7 -0
  56. package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte.d.ts +18 -0
  57. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.d.ts +9 -0
  58. package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.js +8 -0
  59. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte +1140 -0
  60. package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte.d.ts +28 -0
  61. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte +20 -0
  62. package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte.d.ts +3 -0
  63. package/dist/components/molecules/CodeEditor/CodeEditor.svelte +13 -10
  64. package/dist/components/molecules/ColorPicker/ColorPicker.svelte +167 -97
  65. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.d.ts +9 -0
  66. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.js +8 -0
  67. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte +108 -0
  68. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte.d.ts +18 -0
  69. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte +15 -0
  70. package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte.d.ts +3 -0
  71. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.stories.d.ts +9 -0
  72. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.stories.js +8 -0
  73. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.svelte +412 -0
  74. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanel.svelte.d.ts +14 -0
  75. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanelStory.svelte +27 -0
  76. package/dist/components/molecules/ConditionalFormatPanel/ConditionalFormatPanelStory.svelte.d.ts +3 -0
  77. package/dist/components/molecules/ConflictResolver/ConflictResolver.stories.js +8 -0
  78. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte +73 -0
  79. package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte.d.ts +16 -0
  80. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte +11 -0
  81. package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte.d.ts +18 -0
  82. package/dist/components/molecules/ContextMenu/ContextMenu.svelte +237 -41
  83. package/dist/components/molecules/ContextMenu/ContextMenu.svelte.d.ts +17 -1
  84. package/dist/components/molecules/DateTimePicker/DateTimePicker.svelte.d.ts +1 -1
  85. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.d.ts +9 -0
  86. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.js +8 -0
  87. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte +56 -0
  88. package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte.d.ts +12 -0
  89. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte +12 -0
  90. package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte.d.ts +3 -0
  91. package/dist/components/molecules/FilterList/FilterList.stories.d.ts +9 -0
  92. package/dist/components/molecules/FilterList/FilterList.stories.js +8 -0
  93. package/dist/components/molecules/FilterList/FilterList.svelte +101 -0
  94. package/dist/components/molecules/FilterList/FilterList.svelte.d.ts +18 -0
  95. package/dist/components/molecules/FilterList/FilterListStory.svelte +31 -0
  96. package/dist/components/molecules/FilterList/FilterListStory.svelte.d.ts +3 -0
  97. package/dist/components/molecules/FormDateTimePicker/FormDateTimePicker.svelte.d.ts +1 -1
  98. package/dist/components/molecules/Gauge/Gauge.stories.d.ts +1 -1
  99. package/dist/components/molecules/InfiniteScroll/InfiniteScroll.stories.d.ts +1 -1
  100. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.d.ts +9 -0
  101. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.js +8 -0
  102. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte +94 -0
  103. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte.d.ts +15 -0
  104. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte +18 -0
  105. package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte.d.ts +3 -0
  106. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.stories.js +8 -0
  107. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte +50 -0
  108. package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte.d.ts +11 -0
  109. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte +13 -0
  110. package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte.d.ts +18 -0
  111. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.stories.js +8 -0
  112. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte +380 -0
  113. package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte.d.ts +33 -0
  114. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte +14 -0
  115. package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte.d.ts +18 -0
  116. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.d.ts +9 -0
  117. package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.js +8 -0
  118. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte +399 -0
  119. package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte.d.ts +37 -0
  120. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte +24 -0
  121. package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte.d.ts +3 -0
  122. package/dist/components/molecules/MediaStage/MediaStage.stories.d.ts +9 -0
  123. package/dist/components/molecules/MediaStage/MediaStage.stories.js +8 -0
  124. package/dist/components/molecules/MediaStage/MediaStage.svelte +1498 -0
  125. package/dist/components/molecules/MediaStage/MediaStage.svelte.d.ts +45 -0
  126. package/dist/components/molecules/MediaStage/MediaStageStory.svelte +35 -0
  127. package/dist/components/molecules/MediaStage/MediaStageStory.svelte.d.ts +3 -0
  128. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.d.ts +9 -0
  129. package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.js +8 -0
  130. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte +131 -0
  131. package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte.d.ts +19 -0
  132. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte +20 -0
  133. package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte.d.ts +3 -0
  134. package/dist/components/molecules/MixerChannel/MixerChannel.stories.d.ts +9 -0
  135. package/dist/components/molecules/MixerChannel/MixerChannel.stories.js +8 -0
  136. package/dist/components/molecules/MixerChannel/MixerChannel.svelte +92 -0
  137. package/dist/components/molecules/MixerChannel/MixerChannel.svelte.d.ts +11 -0
  138. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte +13 -0
  139. package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte.d.ts +3 -0
  140. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte +454 -0
  141. package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte.d.ts +8 -0
  142. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte +26 -0
  143. package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte.d.ts +22 -0
  144. package/dist/components/molecules/NodeGraph/NodeGraph.stories.d.ts +12 -0
  145. package/dist/components/molecules/NodeGraph/NodeGraph.stories.js +9 -0
  146. package/dist/components/molecules/NodeGraph/NodeGraph.svelte +1409 -0
  147. package/dist/components/molecules/NodeGraph/NodeGraph.svelte.d.ts +33 -0
  148. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte +90 -0
  149. package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte.d.ts +3 -0
  150. package/dist/components/molecules/NodePalette/NodePalette.stories.js +8 -0
  151. package/dist/components/molecules/NodePalette/NodePalette.svelte +86 -0
  152. package/dist/components/molecules/NodePalette/NodePalette.svelte.d.ts +11 -0
  153. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte +11 -0
  154. package/dist/components/molecules/NodePalette/NodePaletteStory.svelte.d.ts +18 -0
  155. package/dist/components/molecules/Poll/Poll.stories.d.ts +1 -1
  156. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.stories.js +8 -0
  157. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte +72 -0
  158. package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte.d.ts +12 -0
  159. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte +16 -0
  160. package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte.d.ts +18 -0
  161. package/dist/components/molecules/PropertyField/PropertyField.svelte +57 -3
  162. package/dist/components/molecules/PropertyField/PropertyField.svelte.d.ts +10 -0
  163. package/dist/components/molecules/PropertyField/PropertyFieldStory.svelte +21 -0
  164. package/dist/components/molecules/PropertyGroup/PropertyGroup.svelte +1 -1
  165. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.d.ts +9 -0
  166. package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.js +8 -0
  167. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte +52 -0
  168. package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte.d.ts +18 -0
  169. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte +62 -0
  170. package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte.d.ts +3 -0
  171. package/dist/components/molecules/RelationPicker/RelationPicker.stories.d.ts +9 -0
  172. package/dist/components/molecules/RelationPicker/RelationPicker.stories.js +8 -0
  173. package/dist/components/molecules/RelationPicker/RelationPicker.svelte +180 -0
  174. package/dist/components/molecules/RelationPicker/RelationPicker.svelte.d.ts +24 -0
  175. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte +16 -0
  176. package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte.d.ts +3 -0
  177. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.d.ts +9 -0
  178. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.js +8 -0
  179. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte +154 -0
  180. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte.d.ts +12 -0
  181. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte +16 -0
  182. package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte.d.ts +3 -0
  183. package/dist/components/molecules/SecretField/SecretField.stories.d.ts +9 -0
  184. package/dist/components/molecules/SecretField/SecretField.stories.js +8 -0
  185. package/dist/components/molecules/SecretField/SecretField.svelte +58 -0
  186. package/dist/components/molecules/SecretField/SecretField.svelte.d.ts +15 -0
  187. package/dist/components/molecules/SecretField/SecretFieldStory.svelte +8 -0
  188. package/dist/components/molecules/SecretField/SecretFieldStory.svelte.d.ts +3 -0
  189. package/dist/components/molecules/SplitPane/SplitPane.svelte +96 -37
  190. package/dist/components/molecules/SplitPane/SplitPane.svelte.d.ts +10 -2
  191. package/dist/components/molecules/TableToolbar/TableToolbar.svelte.d.ts +1 -1
  192. package/dist/components/molecules/Terminal/Terminal.stories.js +20 -0
  193. package/dist/components/molecules/Terminal/Terminal.svelte +238 -0
  194. package/dist/components/molecules/Terminal/Terminal.svelte.d.ts +19 -0
  195. package/dist/components/molecules/Terminal/TerminalStory.svelte +47 -0
  196. package/dist/components/molecules/Terminal/TerminalStory.svelte.d.ts +6 -0
  197. package/dist/components/molecules/TimelineClip/TimelineClip.stories.js +8 -0
  198. package/dist/components/molecules/TimelineClip/TimelineClip.svelte +116 -0
  199. package/dist/components/molecules/TimelineClip/TimelineClip.svelte.d.ts +15 -0
  200. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte +18 -0
  201. package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte.d.ts +18 -0
  202. package/dist/components/molecules/TimelineTrack/TimelineTrack.stories.js +8 -0
  203. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte +56 -0
  204. package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte.d.ts +16 -0
  205. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte +35 -0
  206. package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte.d.ts +18 -0
  207. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.stories.js +8 -0
  208. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte +158 -0
  209. package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte.d.ts +18 -0
  210. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte +55 -0
  211. package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte.d.ts +18 -0
  212. package/dist/components/molecules/TrackHeader/TrackHeader.stories.d.ts +9 -0
  213. package/dist/components/molecules/TrackHeader/TrackHeader.stories.js +8 -0
  214. package/dist/components/molecules/TrackHeader/TrackHeader.svelte +54 -0
  215. package/dist/components/molecules/TrackHeader/TrackHeader.svelte.d.ts +9 -0
  216. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte +10 -0
  217. package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte.d.ts +3 -0
  218. package/dist/components/molecules/TransportControls/TransportControls.stories.d.ts +9 -0
  219. package/dist/components/molecules/TransportControls/TransportControls.stories.js +8 -0
  220. package/dist/components/molecules/TransportControls/TransportControls.svelte +53 -0
  221. package/dist/components/molecules/TransportControls/TransportControls.svelte.d.ts +12 -0
  222. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte +18 -0
  223. package/dist/components/molecules/TransportControls/TransportControlsStory.svelte.d.ts +3 -0
  224. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.stories.js +8 -0
  225. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte +117 -0
  226. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte.d.ts +20 -0
  227. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte +36 -0
  228. package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte.d.ts +18 -0
  229. package/dist/components/molecules/VideoPlayer/VideoPlayer.stories.d.ts +1 -1
  230. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.d.ts +9 -0
  231. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.js +8 -0
  232. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte +59 -0
  233. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte.d.ts +9 -0
  234. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte +10 -0
  235. package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte.d.ts +3 -0
  236. package/dist/components/molecules/WaveformRegion/WaveformRegion.stories.js +8 -0
  237. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte +82 -0
  238. package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte.d.ts +13 -0
  239. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte +17 -0
  240. package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte.d.ts +18 -0
  241. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte +13 -4
  242. package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte.d.ts +3 -1
  243. package/dist/components/molecules/WidgetCanvas/widgetCanvasContext.d.ts +2 -0
  244. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte +206 -37
  245. package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte.d.ts +31 -0
  246. package/dist/components/organisms/AssetPickerPage/AssetPickerPage.svelte.d.ts +1 -1
  247. package/dist/components/organisms/AudioEditor/AudioEditor.stories.d.ts +12 -0
  248. package/dist/components/organisms/AudioEditor/AudioEditor.stories.js +9 -0
  249. package/dist/components/organisms/AudioEditor/AudioEditor.svelte +273 -0
  250. package/dist/components/organisms/AudioEditor/AudioEditor.svelte.d.ts +13 -0
  251. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte +10 -0
  252. package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte.d.ts +3 -0
  253. package/dist/components/organisms/BacklogPage/BacklogPage.svelte.d.ts +1 -1
  254. package/dist/components/organisms/BlogEditor/BlogEditor.stories.d.ts +12 -0
  255. package/dist/components/organisms/BlogEditor/BlogEditor.stories.js +9 -0
  256. package/dist/components/organisms/BlogEditor/BlogEditor.svelte +1208 -0
  257. package/dist/components/organisms/BlogEditor/BlogEditor.svelte.d.ts +16 -0
  258. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte +144 -0
  259. package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte.d.ts +3 -0
  260. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte +28 -0
  261. package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte.d.ts +10 -0
  262. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte +34 -0
  263. package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte.d.ts +11 -0
  264. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte +13 -0
  265. package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte.d.ts +8 -0
  266. package/dist/components/organisms/BlogRenderer/BlogRenderer.stories.js +8 -0
  267. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte +469 -0
  268. package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte.d.ts +14 -0
  269. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte +20 -0
  270. package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte.d.ts +18 -0
  271. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.d.ts +12 -0
  272. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.js +9 -0
  273. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte +1012 -0
  274. package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte.d.ts +16 -0
  275. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte +76 -0
  276. package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte.d.ts +3 -0
  277. package/dist/components/organisms/CalendarApp/CalendarApp.svelte.d.ts +1 -1
  278. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.d.ts +12 -0
  279. package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.js +9 -0
  280. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte +1680 -0
  281. package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte.d.ts +18 -0
  282. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte +329 -0
  283. package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte.d.ts +3 -0
  284. package/dist/components/organisms/DashboardBuilderPage/DashboardBuilderPage.svelte.d.ts +1 -1
  285. package/dist/components/organisms/DataGrid/DataGrid.stories.d.ts +65 -0
  286. package/dist/components/organisms/DataGrid/DataGrid.stories.js +95 -0
  287. package/dist/components/organisms/DataGrid/DataGrid.svelte +2264 -0
  288. package/dist/components/organisms/DataGrid/DataGrid.svelte.d.ts +99 -0
  289. package/dist/components/organisms/DataGrid/DataGridStory.svelte +659 -0
  290. package/dist/components/organisms/DataGrid/DataGridStory.svelte.d.ts +11 -0
  291. package/dist/components/organisms/DataGrid/breakpoints.d.ts +10 -0
  292. package/dist/components/organisms/DataGrid/breakpoints.js +20 -0
  293. package/dist/components/organisms/DataGrid/cellEditors.d.ts +8 -0
  294. package/dist/components/organisms/DataGrid/cellEditors.js +59 -0
  295. package/dist/components/organisms/DataGrid/conditionalFormat.d.ts +11 -0
  296. package/dist/components/organisms/DataGrid/conditionalFormat.js +98 -0
  297. package/dist/components/organisms/DataGrid/filterRows.d.ts +5 -0
  298. package/dist/components/organisms/DataGrid/filterRows.js +60 -0
  299. package/dist/components/organisms/DataGrid/marks.d.ts +9 -0
  300. package/dist/components/organisms/DataGrid/marks.js +91 -0
  301. package/dist/components/organisms/DataGrid/types.d.ts +126 -0
  302. package/dist/components/organisms/DataGrid/types.js +21 -0
  303. package/dist/components/organisms/DesktopShell/DesktopShell.svelte.d.ts +1 -1
  304. package/dist/components/organisms/EditorShell/EditorShell.svelte +123 -28
  305. package/dist/components/organisms/EditorShell/EditorShell.svelte.d.ts +21 -1
  306. package/dist/components/organisms/FileUploader/FileUploader.svelte +77 -15
  307. package/dist/components/organisms/FileUploader/FileUploader.svelte.d.ts +11 -0
  308. package/dist/components/organisms/ImportWizard/ImportWizard.stories.js +8 -0
  309. package/dist/components/organisms/ImportWizard/ImportWizard.svelte +209 -0
  310. package/dist/components/organisms/ImportWizard/ImportWizard.svelte.d.ts +22 -0
  311. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte +16 -0
  312. package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte.d.ts +18 -0
  313. package/dist/components/organisms/ResourceStudio/ResourceStudio.stories.d.ts +33 -0
  314. package/dist/components/organisms/ResourceStudio/ResourceStudio.stories.js +56 -0
  315. package/dist/components/organisms/ResourceStudio/ResourceStudio.svelte +830 -0
  316. package/dist/components/organisms/ResourceStudio/ResourceStudio.svelte.d.ts +68 -0
  317. package/dist/components/organisms/ResourceStudio/ResourceStudioStory.svelte +600 -0
  318. package/dist/components/organisms/ResourceStudio/ResourceStudioStory.svelte.d.ts +7 -0
  319. package/dist/components/organisms/ResourceStudio/fieldsToColumns.d.ts +4 -0
  320. package/dist/components/organisms/ResourceStudio/fieldsToColumns.js +20 -0
  321. package/dist/components/organisms/ResourceStudio/fieldsToSchema.d.ts +6 -0
  322. package/dist/components/organisms/ResourceStudio/fieldsToSchema.js +53 -0
  323. package/dist/components/organisms/ResourceStudio/types.d.ts +69 -0
  324. package/dist/components/organisms/ResourceStudio/types.js +15 -0
  325. package/dist/components/organisms/Scheduler/Scheduler.svelte.d.ts +1 -1
  326. package/dist/components/organisms/SchemaForm/SchemaForm.svelte +10 -3
  327. package/dist/components/organisms/SchemaForm/SchemaForm.svelte.d.ts +1 -0
  328. package/dist/components/organisms/VideoEditor/VideoEditor.stories.d.ts +12 -0
  329. package/dist/components/organisms/VideoEditor/VideoEditor.stories.js +9 -0
  330. package/dist/components/organisms/VideoEditor/VideoEditor.svelte +308 -0
  331. package/dist/components/organisms/VideoEditor/VideoEditor.svelte.d.ts +13 -0
  332. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte +10 -0
  333. package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte.d.ts +3 -0
  334. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.d.ts +12 -0
  335. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.js +9 -0
  336. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte +22 -0
  337. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte.d.ts +13 -0
  338. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte +8 -0
  339. package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte.d.ts +3 -0
  340. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.d.ts +12 -0
  341. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.js +9 -0
  342. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte +32 -0
  343. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte.d.ts +17 -0
  344. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte +21 -0
  345. package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte.d.ts +3 -0
  346. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.stories.d.ts +25 -0
  347. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.stories.js +18 -0
  348. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.svelte +192 -0
  349. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplate.svelte.d.ts +62 -0
  350. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplateStory.svelte +129 -0
  351. package/dist/components/templates/ResourceStudioTemplate/ResourceStudioTemplateStory.svelte.d.ts +7 -0
  352. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.d.ts +12 -0
  353. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.js +9 -0
  354. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte +22 -0
  355. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte.d.ts +13 -0
  356. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte +8 -0
  357. package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte.d.ts +3 -0
  358. package/dist/index.d.ts +94 -1
  359. package/dist/index.js +68 -0
  360. package/dist/types/xyflow-svelte.d.ts +62 -0
  361. package/dist/utils/audioProject.d.ts +19 -0
  362. package/dist/utils/audioProject.js +70 -0
  363. package/dist/utils/blogDocument.d.ts +175 -0
  364. package/dist/utils/blogDocument.js +220 -0
  365. package/dist/utils/blueprintRuntime.d.ts +34 -0
  366. package/dist/utils/blueprintRuntime.js +289 -0
  367. package/dist/utils/canvasDocument.d.ts +239 -0
  368. package/dist/utils/canvasDocument.js +443 -0
  369. package/dist/utils/canvasExport.d.ts +10 -0
  370. package/dist/utils/canvasExport.js +469 -0
  371. package/dist/utils/canvasHierarchy.d.ts +189 -0
  372. package/dist/utils/canvasHierarchy.js +674 -0
  373. package/dist/utils/canvasHistory.d.ts +19 -0
  374. package/dist/utils/canvasHistory.js +48 -0
  375. package/dist/utils/canvasWidget.d.ts +81 -0
  376. package/dist/utils/canvasWidget.js +597 -0
  377. package/dist/utils/marqueeSelect.d.ts +48 -0
  378. package/dist/utils/marqueeSelect.js +189 -0
  379. package/dist/utils/mediaTime.d.ts +16 -0
  380. package/dist/utils/mediaTime.js +57 -0
  381. package/dist/utils/mediaTracks.d.ts +61 -0
  382. package/dist/utils/mediaTracks.js +102 -0
  383. package/dist/utils/nodeGraph.d.ts +354 -0
  384. package/dist/utils/nodeGraph.js +1453 -0
  385. package/dist/utils/queryBridge.d.ts +18 -0
  386. package/dist/utils/queryBridge.js +118 -0
  387. package/dist/utils/videoSequence.d.ts +13 -0
  388. package/dist/utils/videoSequence.js +63 -0
  389. package/package.json +5 -2
@@ -0,0 +1,674 @@
1
+ import { createCanvasLayer, defaultSlotFromRect, rectFromSlot } from './canvasDocument.js';
2
+ import { uid } from './mediaTracks.js';
3
+ export const CONTAINER_KINDS = new Set([
4
+ 'canvasPanel',
5
+ 'overlay',
6
+ 'border',
7
+ 'hBox',
8
+ 'vBox',
9
+ 'sizeBox',
10
+ 'scaleBox',
11
+ 'group',
12
+ 'image',
13
+ 'rect',
14
+ 'roundRect',
15
+ 'ellipse',
16
+ 'namedSlot',
17
+ 'scrollBox',
18
+ 'wrapBox',
19
+ 'uniformGrid'
20
+ ]);
21
+ export const LAYOUT_BOX_KINDS = new Set([
22
+ 'hBox',
23
+ 'vBox',
24
+ 'sizeBox',
25
+ 'scaleBox',
26
+ 'wrapBox',
27
+ 'uniformGrid',
28
+ 'scrollBox'
29
+ ]);
30
+ /**
31
+ * Structural shells whose empty area should start a marquee (not a layer drag),
32
+ * matching Figma-style select-drag on the canvas / inside frames.
33
+ */
34
+ export const MARQUEE_PASS_KINDS = new Set([
35
+ 'canvasPanel',
36
+ 'overlay',
37
+ 'group',
38
+ ...LAYOUT_BOX_KINDS
39
+ ]);
40
+ export function isContainerKind(kind) {
41
+ return CONTAINER_KINDS.has(kind);
42
+ }
43
+ export function isMarqueePassThroughKind(kind) {
44
+ return MARQUEE_PASS_KINDS.has(kind);
45
+ }
46
+ export function canHaveChildren(layer) {
47
+ return isContainerKind(layer.kind);
48
+ }
49
+ export function getChildren(layers, parentId) {
50
+ return layers
51
+ .filter((l) => (l.parentId ?? null) === parentId)
52
+ .sort((a, b) => a.zIndex - b.zIndex || (a.slot?.order ?? 0) - (b.slot?.order ?? 0));
53
+ }
54
+ export function getDescendantIds(layers, rootId) {
55
+ const out = [];
56
+ const walk = (pid) => {
57
+ for (const c of getChildren(layers, pid)) {
58
+ out.push(c.id);
59
+ walk(c.id);
60
+ }
61
+ };
62
+ walk(rootId);
63
+ return out;
64
+ }
65
+ export function getSubtreeIds(layers, rootId) {
66
+ return [rootId, ...getDescendantIds(layers, rootId)];
67
+ }
68
+ export function getAncestors(layers, layerId) {
69
+ const map = new Map(layers.map((l) => [l.id, l]));
70
+ const out = [];
71
+ let cur = map.get(layerId);
72
+ while (cur?.parentId) {
73
+ const parent = map.get(cur.parentId);
74
+ if (!parent)
75
+ break;
76
+ out.push(parent);
77
+ cur = parent;
78
+ }
79
+ return out;
80
+ }
81
+ /** True when the layer and every ancestor is visible (flat stage paint must check this). */
82
+ export function isEffectivelyVisible(layers, layerId, map) {
83
+ const byId = map ?? new Map(layers.map((l) => [l.id, l]));
84
+ let cur = byId.get(layerId);
85
+ while (cur) {
86
+ if (!cur.visible)
87
+ return false;
88
+ cur = cur.parentId ? byId.get(cur.parentId) : undefined;
89
+ }
90
+ return true;
91
+ }
92
+ /**
93
+ * CSS transform for a flat-stage layer so ancestor rotations orbit children
94
+ * around each ancestor's center (DOM is not nested).
95
+ * Uses transform-origin top-left (0 0) of the layer box.
96
+ */
97
+ export function paintTransformForLayer(layers, layerId, absMap, map) {
98
+ const byId = map ?? new Map(layers.map((l) => [l.id, l]));
99
+ const layer = byId.get(layerId);
100
+ if (!layer)
101
+ return undefined;
102
+ const selfAbs = absMap.get(layerId) ?? layer.rect;
103
+ const ancestors = [];
104
+ let cur = layer.parentId ? byId.get(layer.parentId) : undefined;
105
+ while (cur) {
106
+ ancestors.unshift(cur);
107
+ cur = cur.parentId ? byId.get(cur.parentId) : undefined;
108
+ }
109
+ const parts = [];
110
+ for (const anc of ancestors) {
111
+ const deg = anc.rotation ?? 0;
112
+ if (!deg)
113
+ continue;
114
+ const a = absMap.get(anc.id) ?? anc.rect;
115
+ const ox = a.x + a.w / 2 - selfAbs.x;
116
+ const oy = a.y + a.h / 2 - selfAbs.y;
117
+ parts.push(`translate(${ox}px, ${oy}px) rotate(${deg}deg) translate(${-ox}px, ${-oy}px)`);
118
+ }
119
+ const own = layer.rotation ?? 0;
120
+ if (own) {
121
+ const ox = selfAbs.w / 2;
122
+ const oy = selfAbs.h / 2;
123
+ parts.push(`translate(${ox}px, ${oy}px) rotate(${own}deg) translate(${-ox}px, ${-oy}px)`);
124
+ }
125
+ return parts.length ? parts.join(' ') : undefined;
126
+ }
127
+ export function isDescendant(layers, maybeChildId, ancestorId) {
128
+ return getAncestors(layers, maybeChildId).some((a) => a.id === ancestorId);
129
+ }
130
+ export function canReparent(layers, layerId, newParentId) {
131
+ if (newParentId === null)
132
+ return true;
133
+ if (layerId === newParentId)
134
+ return false;
135
+ const parent = layers.find((l) => l.id === newParentId);
136
+ if (!parent || !canHaveChildren(parent))
137
+ return false;
138
+ if (isDescendant(layers, newParentId, layerId))
139
+ return false;
140
+ return true;
141
+ }
142
+ export const ANCHOR_PRESETS = {
143
+ topLeft: { minX: 0, minY: 0, maxX: 0, maxY: 0 },
144
+ topCenter: { minX: 0.5, minY: 0, maxX: 0.5, maxY: 0 },
145
+ topRight: { minX: 1, minY: 0, maxX: 1, maxY: 0 },
146
+ centerLeft: { minX: 0, minY: 0.5, maxX: 0, maxY: 0.5 },
147
+ center: { minX: 0.5, minY: 0.5, maxX: 0.5, maxY: 0.5 },
148
+ centerRight: { minX: 1, minY: 0.5, maxX: 1, maxY: 0.5 },
149
+ bottomLeft: { minX: 0, minY: 1, maxX: 0, maxY: 1 },
150
+ bottomCenter: { minX: 0.5, minY: 1, maxX: 0.5, maxY: 1 },
151
+ bottomRight: { minX: 1, minY: 1, maxX: 1, maxY: 1 },
152
+ stretch: { minX: 0, minY: 0, maxX: 1, maxY: 1 },
153
+ stretchHorizontal: { minX: 0, minY: 0, maxX: 1, maxY: 0 },
154
+ stretchVertical: { minX: 0, minY: 0, maxX: 0, maxY: 1 }
155
+ };
156
+ /** Resolve UMG slot against parent content size → local rect. */
157
+ export function resolveSlotRect(parentSize, slot) {
158
+ const { anchors, offsets } = slot;
159
+ const left = anchors.minX * parentSize.width + offsets.left;
160
+ const top = anchors.minY * parentSize.height + offsets.top;
161
+ const right = anchors.maxX * parentSize.width - offsets.right;
162
+ const bottom = anchors.maxY * parentSize.height - offsets.bottom;
163
+ return {
164
+ x: left,
165
+ y: top,
166
+ w: Math.max(1, right - left),
167
+ h: Math.max(1, bottom - top)
168
+ };
169
+ }
170
+ /** Build slot offsets from a local rect + anchors (keeps anchors, recomputes offsets). */
171
+ export function slotFromLocalRect(parentSize, rect, anchors = ANCHOR_PRESETS.topLeft) {
172
+ return {
173
+ anchors: { ...anchors },
174
+ offsets: {
175
+ left: rect.x - anchors.minX * parentSize.width,
176
+ top: rect.y - anchors.minY * parentSize.height,
177
+ right: anchors.maxX * parentSize.width - (rect.x + rect.w),
178
+ bottom: anchors.maxY * parentSize.height - (rect.y + rect.h)
179
+ }
180
+ };
181
+ }
182
+ export function contentPadding(layer) {
183
+ const p = layer.slot?.padding;
184
+ return {
185
+ left: p?.left ?? 0,
186
+ top: p?.top ?? 0,
187
+ right: p?.right ?? 0,
188
+ bottom: p?.bottom ?? 0
189
+ };
190
+ }
191
+ export function contentSize(layerRect, layer) {
192
+ const pad = contentPadding(layer);
193
+ return {
194
+ width: Math.max(0, layerRect.w - pad.left - pad.right),
195
+ height: Math.max(0, layerRect.h - pad.top - pad.bottom)
196
+ };
197
+ }
198
+ /**
199
+ * Compute absolute (document) rect for every layer via parent walk + layout boxes.
200
+ * Returns map layerId → absolute rect.
201
+ */
202
+ export function computeAbsoluteRects(layers, rootSize) {
203
+ const abs = new Map();
204
+ const byParent = new Map();
205
+ for (const l of layers) {
206
+ const pid = l.parentId ?? null;
207
+ const list = byParent.get(pid) ?? [];
208
+ list.push(l);
209
+ byParent.set(pid, list);
210
+ }
211
+ for (const [, list] of byParent) {
212
+ list.sort((a, b) => a.zIndex - b.zIndex || (a.slot?.order ?? 0) - (b.slot?.order ?? 0));
213
+ }
214
+ const layoutUnder = (parentId, parentAbs, parentLayer) => {
215
+ const children = byParent.get(parentId) ?? [];
216
+ if (!children.length)
217
+ return;
218
+ const parentW = parentAbs?.w ?? rootSize.width;
219
+ const parentH = parentAbs?.h ?? rootSize.height;
220
+ const pad = parentLayer ? contentPadding(parentLayer) : { left: 0, top: 0, right: 0, bottom: 0 };
221
+ const originX = (parentAbs?.x ?? 0) + pad.left;
222
+ const originY = (parentAbs?.y ?? 0) + pad.top;
223
+ const contentW = Math.max(0, parentW - pad.left - pad.right);
224
+ const contentH = Math.max(0, parentH - pad.top - pad.bottom);
225
+ const kind = parentLayer?.kind;
226
+ let placed = [];
227
+ if (kind === 'hBox' || kind === 'vBox') {
228
+ const gap = parentLayer?.gap ?? 0;
229
+ const horizontal = kind === 'hBox';
230
+ let cursor = 0;
231
+ const flexKids = children.filter((c) => (c.slot?.sizeRule ?? 'fixed') === 'fill');
232
+ const fixedKids = children.filter((c) => (c.slot?.sizeRule ?? 'fixed') !== 'fill');
233
+ let fixedTotal = 0;
234
+ for (const c of fixedKids) {
235
+ const r = c.rect;
236
+ fixedTotal += horizontal ? r.w : r.h;
237
+ }
238
+ fixedTotal += gap * Math.max(0, children.length - 1);
239
+ const remaining = Math.max(0, (horizontal ? contentW : contentH) - fixedTotal);
240
+ const fillEach = flexKids.length ? remaining / flexKids.length : 0;
241
+ for (const c of children) {
242
+ const rule = c.slot?.sizeRule ?? 'fixed';
243
+ const align = c.slot?.alignment ?? { x: 0, y: 0 };
244
+ if (horizontal) {
245
+ const w = rule === 'fill' ? fillEach : c.rect.w;
246
+ const h = rule === 'fill' ? contentH : c.rect.h;
247
+ const y = (contentH - h) * align.y;
248
+ placed.push({ layer: c, local: { x: cursor, y, w, h } });
249
+ cursor += w + gap;
250
+ }
251
+ else {
252
+ const h = rule === 'fill' ? fillEach : c.rect.h;
253
+ const w = rule === 'fill' ? contentW : c.rect.w;
254
+ const x = (contentW - w) * align.x;
255
+ placed.push({ layer: c, local: { x, y: cursor, w, h } });
256
+ cursor += h + gap;
257
+ }
258
+ }
259
+ }
260
+ else if (kind === 'wrapBox') {
261
+ const gap = parentLayer?.gap ?? 0;
262
+ let x = 0;
263
+ let y = 0;
264
+ let rowH = 0;
265
+ for (const c of children) {
266
+ const w = Math.min(c.rect.w, contentW);
267
+ const h = c.rect.h;
268
+ if (x > 0 && x + w > contentW) {
269
+ x = 0;
270
+ y += rowH + gap;
271
+ rowH = 0;
272
+ }
273
+ placed.push({ layer: c, local: { x, y, w, h } });
274
+ x += w + gap;
275
+ rowH = Math.max(rowH, h);
276
+ }
277
+ }
278
+ else if (kind === 'uniformGrid') {
279
+ const gap = parentLayer?.gap ?? 0;
280
+ const cols = Math.max(1, parentLayer?.columns ?? 2);
281
+ const cellW = Math.max(1, (contentW - gap * Math.max(0, cols - 1)) / cols);
282
+ const rows = Math.max(1, Math.ceil(children.length / cols));
283
+ const cellH = Math.max(1, (contentH - gap * Math.max(0, rows - 1)) / rows);
284
+ children.forEach((c, i) => {
285
+ const col = i % cols;
286
+ const row = Math.floor(i / cols);
287
+ placed.push({
288
+ layer: c,
289
+ local: {
290
+ x: col * (cellW + gap),
291
+ y: row * (cellH + gap),
292
+ w: cellW,
293
+ h: cellH
294
+ }
295
+ });
296
+ });
297
+ }
298
+ else if (kind === 'sizeBox' || kind === 'scaleBox') {
299
+ for (const c of children) {
300
+ const slot = c.slot ?? defaultSlotFromRect(c.rect);
301
+ let local = resolveSlotRect({ width: contentW, height: contentH }, slot);
302
+ if (kind === 'scaleBox' && c.rect.w > 0 && c.rect.h > 0) {
303
+ const sx = contentW / c.rect.w;
304
+ const sy = contentH / c.rect.h;
305
+ const s = Math.min(sx, sy);
306
+ const w = c.rect.w * s;
307
+ const h = c.rect.h * s;
308
+ local = {
309
+ x: (contentW - w) / 2,
310
+ y: (contentH - h) / 2,
311
+ w,
312
+ h
313
+ };
314
+ }
315
+ else if (kind === 'sizeBox') {
316
+ local = {
317
+ x: Math.max(0, Math.min(local.x, contentW - 1)),
318
+ y: Math.max(0, Math.min(local.y, contentH - 1)),
319
+ w: Math.min(local.w, contentW),
320
+ h: Math.min(local.h, contentH)
321
+ };
322
+ }
323
+ placed.push({ layer: c, local });
324
+ }
325
+ }
326
+ else {
327
+ // canvasPanel / border / group / overlay / namedSlot / image / shapes / root — freeform slots
328
+ for (const c of children) {
329
+ const slot = c.slot ?? defaultSlotFromRect(c.rect);
330
+ const local = resolveSlotRect({ width: contentW, height: contentH }, slot);
331
+ placed.push({ layer: c, local });
332
+ }
333
+ }
334
+ for (const { layer, local } of placed) {
335
+ const absolute = {
336
+ x: originX + local.x,
337
+ y: originY + local.y,
338
+ w: local.w,
339
+ h: local.h
340
+ };
341
+ abs.set(layer.id, absolute);
342
+ layoutUnder(layer.id, absolute, layer);
343
+ }
344
+ };
345
+ layoutUnder(null, null, null);
346
+ return abs;
347
+ }
348
+ export function absoluteRectFor(layerId, layers, rootSize) {
349
+ return computeAbsoluteRects(layers, rootSize).get(layerId) ?? null;
350
+ }
351
+ /**
352
+ * CSS clip-path inset for a child absolute rect clipped by ancestors with clipChildren.
353
+ * Values are relative to the child's own box.
354
+ * `scrollBox` always clips (UMG-style viewport).
355
+ */
356
+ export function clipPathForLayer(layerId, layers, absMap) {
357
+ const child = absMap.get(layerId);
358
+ if (!child)
359
+ return undefined;
360
+ const map = new Map(layers.map((l) => [l.id, l]));
361
+ let cur = map.get(layerId);
362
+ let clip = null;
363
+ while (cur?.parentId) {
364
+ const parent = map.get(cur.parentId);
365
+ if (!parent)
366
+ break;
367
+ if (parent.clipChildren || parent.kind === 'scrollBox') {
368
+ const pa = absMap.get(parent.id);
369
+ if (pa) {
370
+ clip = clip
371
+ ? {
372
+ x: Math.max(clip.x, pa.x),
373
+ y: Math.max(clip.y, pa.y),
374
+ w: Math.min(clip.x + clip.w, pa.x + pa.w) - Math.max(clip.x, pa.x),
375
+ h: Math.min(clip.y + clip.h, pa.y + pa.h) - Math.max(clip.y, pa.y)
376
+ }
377
+ : { ...pa };
378
+ if (clip.w <= 0 || clip.h <= 0)
379
+ return 'inset(100%)';
380
+ }
381
+ }
382
+ cur = parent;
383
+ }
384
+ if (!clip)
385
+ return undefined;
386
+ const top = Math.max(0, clip.y - child.y);
387
+ const left = Math.max(0, clip.x - child.x);
388
+ const right = Math.max(0, child.x + child.w - (clip.x + clip.w));
389
+ const bottom = Math.max(0, child.y + child.h - (clip.y + clip.h));
390
+ if (top === 0 && left === 0 && right === 0 && bottom === 0)
391
+ return undefined;
392
+ return `inset(${top}px ${right}px ${bottom}px ${left}px)`;
393
+ }
394
+ /** Scrollbar thumb size/position for a scrollBox viewport (preview chrome). */
395
+ export function scrollBarMetrics(viewport, maxScroll, offset) {
396
+ if (maxScroll <= 0 || viewport <= 0)
397
+ return null;
398
+ const content = viewport + maxScroll;
399
+ const thumb = Math.max(18, Math.min(viewport, (viewport / content) * viewport));
400
+ const travel = Math.max(0, viewport - thumb);
401
+ const thumbOffset = maxScroll > 0 ? (offset / maxScroll) * travel : 0;
402
+ return { thumb, offset: thumbOffset, track: viewport };
403
+ }
404
+ /** Max scrollable overflow of a scrollBox (content extent beyond the viewport). */
405
+ export function scrollBoxOverflow(scrollBoxId, layers, absMap) {
406
+ const box = absMap.get(scrollBoxId);
407
+ if (!box)
408
+ return { maxX: 0, maxY: 0 };
409
+ let maxR = box.w;
410
+ let maxB = box.h;
411
+ for (const l of layers) {
412
+ if ((l.parentId ?? null) !== scrollBoxId)
413
+ continue;
414
+ const r = absMap.get(l.id);
415
+ if (!r)
416
+ continue;
417
+ maxR = Math.max(maxR, r.x + r.w - box.x);
418
+ maxB = Math.max(maxB, r.y + r.h - box.y);
419
+ }
420
+ return {
421
+ maxX: Math.max(0, maxR - box.w),
422
+ maxY: Math.max(0, maxB - box.h)
423
+ };
424
+ }
425
+ /**
426
+ * Shift descendants of scrollBoxes by ephemeral scroll offsets (preview only).
427
+ * ScrollBox frames themselves stay put.
428
+ */
429
+ export function applyScrollBoxOffsets(layers, absMap, offsets) {
430
+ if (!offsets.size)
431
+ return absMap;
432
+ const byId = new Map(layers.map((l) => [l.id, l]));
433
+ const out = new Map();
434
+ for (const [id, rect] of absMap) {
435
+ let dx = 0;
436
+ let dy = 0;
437
+ let cur = byId.get(id);
438
+ while (cur?.parentId) {
439
+ const parent = byId.get(cur.parentId);
440
+ if (!parent)
441
+ break;
442
+ if (parent.kind === 'scrollBox') {
443
+ const o = offsets.get(parent.id);
444
+ if (o) {
445
+ dx -= o.x;
446
+ dy -= o.y;
447
+ }
448
+ }
449
+ cur = parent;
450
+ }
451
+ out.set(id, dx || dy ? { ...rect, x: rect.x + dx, y: rect.y + dy } : rect);
452
+ }
453
+ return out;
454
+ }
455
+ export function reparentLayer(layers, layerId, newParentId, rootSize) {
456
+ if (!canReparent(layers, layerId, newParentId))
457
+ return layers;
458
+ const absMap = computeAbsoluteRects(layers, rootSize);
459
+ const layer = layers.find((l) => l.id === layerId);
460
+ if (!layer)
461
+ return layers;
462
+ const abs = absMap.get(layerId) ?? layer.rect;
463
+ let parentAbs = { x: 0, y: 0, w: rootSize.width, h: rootSize.height };
464
+ let parentLayer = null;
465
+ if (newParentId) {
466
+ parentLayer = layers.find((l) => l.id === newParentId) ?? null;
467
+ const pa = absMap.get(newParentId);
468
+ if (pa)
469
+ parentAbs = pa;
470
+ }
471
+ const pad = parentLayer ? contentPadding(parentLayer) : { left: 0, top: 0, right: 0, bottom: 0 };
472
+ const contentW = Math.max(0, parentAbs.w - pad.left - pad.right);
473
+ const contentH = Math.max(0, parentAbs.h - pad.top - pad.bottom);
474
+ const local = {
475
+ x: abs.x - parentAbs.x - pad.left,
476
+ y: abs.y - parentAbs.y - pad.top,
477
+ w: abs.w,
478
+ h: abs.h
479
+ };
480
+ const siblings = getChildren(layers, newParentId).filter((c) => c.id !== layerId);
481
+ const zIndex = siblings.length ? Math.max(...siblings.map((s) => s.zIndex)) + 1 : 0;
482
+ const slot = slotFromLocalRect({ width: contentW, height: contentH }, local);
483
+ return layers.map((l) => l.id === layerId
484
+ ? {
485
+ ...l,
486
+ parentId: newParentId,
487
+ rect: local,
488
+ slot: { ...slot, order: zIndex },
489
+ zIndex
490
+ }
491
+ : l);
492
+ }
493
+ export function wrapSelection(doc, selectedIds, wrapKind = 'group') {
494
+ if (!selectedIds.length)
495
+ return null;
496
+ const set = new Set(selectedIds);
497
+ let layers = doc.layers;
498
+ const rootSize = { width: doc.width, height: doc.height };
499
+ // Exclude descendants when parent+child are both selected
500
+ let selected = layers.filter((l) => set.has(l.id));
501
+ selected = selected.filter((l) => !selected.some((other) => other.id !== l.id && isDescendant(layers, l.id, other.id)));
502
+ if (selected.length < 2)
503
+ return null;
504
+ const wrapIds = selected.map((l) => l.id);
505
+ // Only wrap siblings that share the same parent — otherwise lift to root first
506
+ let parentId = selected[0].parentId ?? null;
507
+ if (!selected.every((l) => (l.parentId ?? null) === parentId)) {
508
+ for (const id of wrapIds) {
509
+ layers = reparentLayer(layers, id, null, rootSize);
510
+ }
511
+ parentId = null;
512
+ selected = wrapIds.map((id) => layers.find((l) => l.id === id)).filter(Boolean);
513
+ }
514
+ const absMap = computeAbsoluteRects(layers, rootSize);
515
+ let minX = Infinity;
516
+ let minY = Infinity;
517
+ let maxX = -Infinity;
518
+ let maxY = -Infinity;
519
+ for (const l of selected) {
520
+ const r = absMap.get(l.id) ?? l.rect;
521
+ minX = Math.min(minX, r.x);
522
+ minY = Math.min(minY, r.y);
523
+ maxX = Math.max(maxX, r.x + r.w);
524
+ maxY = Math.max(maxY, r.y + r.h);
525
+ }
526
+ const wrapperAbs = {
527
+ x: minX,
528
+ y: minY,
529
+ w: Math.max(24, maxX - minX),
530
+ h: Math.max(24, maxY - minY)
531
+ };
532
+ let parentAbs = { x: 0, y: 0, w: doc.width, h: doc.height };
533
+ let parentLayer = null;
534
+ if (parentId) {
535
+ parentLayer = layers.find((l) => l.id === parentId) ?? null;
536
+ const pa = absMap.get(parentId);
537
+ if (pa)
538
+ parentAbs = pa;
539
+ }
540
+ const pad = parentLayer ? contentPadding(parentLayer) : { left: 0, top: 0, right: 0, bottom: 0 };
541
+ const contentW = Math.max(0, parentAbs.w - pad.left - pad.right);
542
+ const contentH = Math.max(0, parentAbs.h - pad.top - pad.bottom);
543
+ const wrapperLocal = {
544
+ x: wrapperAbs.x - parentAbs.x - pad.left,
545
+ y: wrapperAbs.y - parentAbs.y - pad.top,
546
+ w: wrapperAbs.w,
547
+ h: wrapperAbs.h
548
+ };
549
+ const zIndex = Math.min(...selected.map((s) => s.zIndex));
550
+ const wrapper = createCanvasLayer(wrapKind, {
551
+ name: wrapKind === 'group' ? 'Group' : wrapKind,
552
+ parentId,
553
+ rect: wrapperLocal,
554
+ slot: slotFromLocalRect({ width: contentW, height: contentH }, wrapperLocal),
555
+ zIndex,
556
+ clipChildren: wrapKind === 'border' || wrapKind === 'canvasPanel' || wrapKind === 'scrollBox',
557
+ fill: wrapKind === 'border' || wrapKind === 'roundRect'
558
+ ? '#ffffff'
559
+ : wrapKind === 'group'
560
+ ? 'transparent'
561
+ : undefined,
562
+ borderRadius: wrapKind === 'border' || wrapKind === 'roundRect' ? 12 : undefined,
563
+ opacity: 1
564
+ });
565
+ let resultLayers = [...layers, wrapper];
566
+ for (const id of wrapIds) {
567
+ resultLayers = reparentLayer(resultLayers, id, wrapper.id, rootSize);
568
+ }
569
+ return { doc: { ...doc, layers: resultLayers }, wrapperId: wrapper.id };
570
+ }
571
+ export function groupLayers(doc, selectedIds) {
572
+ return wrapSelection(doc, selectedIds, 'group');
573
+ }
574
+ export function ungroupLayers(doc, groupId) {
575
+ const group = doc.layers.find((l) => l.id === groupId);
576
+ if (!group)
577
+ return doc;
578
+ const parentId = group.parentId ?? null;
579
+ const children = getChildren(doc.layers, groupId);
580
+ const rootSize = { width: doc.width, height: doc.height };
581
+ let layers = doc.layers;
582
+ for (const c of children) {
583
+ layers = reparentLayer(layers, c.id, parentId, rootSize);
584
+ }
585
+ layers = layers.filter((l) => l.id !== groupId);
586
+ return { ...doc, layers };
587
+ }
588
+ /** Delete layer and all descendants. */
589
+ export function deleteSubtree(doc, ids) {
590
+ const remove = new Set();
591
+ for (const id of ids) {
592
+ for (const sid of getSubtreeIds(doc.layers, id))
593
+ remove.add(sid);
594
+ }
595
+ return { ...doc, layers: doc.layers.filter((l) => !remove.has(l.id)) };
596
+ }
597
+ /** Duplicate subtree with new ids; keeps relative hierarchy. */
598
+ export function duplicateSubtree(doc, rootIds, offset = { x: 16, y: 16 }) {
599
+ const absMap = computeAbsoluteRects(doc.layers, { width: doc.width, height: doc.height });
600
+ const idMap = new Map();
601
+ const toCopy = [];
602
+ for (const rootId of rootIds) {
603
+ for (const id of getSubtreeIds(doc.layers, rootId)) {
604
+ if (idMap.has(id))
605
+ continue;
606
+ const layer = doc.layers.find((l) => l.id === id);
607
+ if (!layer)
608
+ continue;
609
+ idMap.set(id, uid('layer'));
610
+ toCopy.push(layer);
611
+ }
612
+ }
613
+ const clones = toCopy.map((layer) => {
614
+ const newId = idMap.get(layer.id);
615
+ const isRoot = rootIds.includes(layer.id);
616
+ const parentMapped = layer.parentId && idMap.has(layer.parentId)
617
+ ? idMap.get(layer.parentId)
618
+ : isRoot
619
+ ? (layer.parentId ?? null)
620
+ : (layer.parentId ?? null);
621
+ let rect = { ...layer.rect };
622
+ let slot = layer.slot ? { ...layer.slot, anchors: { ...layer.slot.anchors }, offsets: { ...layer.slot.offsets } } : undefined;
623
+ if (isRoot) {
624
+ rect = { ...rect, x: rect.x + offset.x, y: rect.y + offset.y };
625
+ if (slot) {
626
+ slot = {
627
+ ...slot,
628
+ offsets: {
629
+ ...slot.offsets,
630
+ left: slot.offsets.left + offset.x,
631
+ top: slot.offsets.top + offset.y
632
+ }
633
+ };
634
+ }
635
+ }
636
+ return {
637
+ ...layer,
638
+ id: newId,
639
+ parentId: parentMapped,
640
+ rect,
641
+ slot,
642
+ overrides: layer.overrides ? { ...layer.overrides } : undefined
643
+ };
644
+ });
645
+ // Fix parentId for non-copied parents of roots — already handled
646
+ const newIds = rootIds.map((id) => idMap.get(id)).filter(Boolean);
647
+ return { doc: { ...doc, layers: [...doc.layers, ...clones] }, newIds };
648
+ }
649
+ export function reorderSiblings(layers, parentId, orderedChildIds) {
650
+ const set = new Set(orderedChildIds);
651
+ return layers.map((l) => {
652
+ if ((l.parentId ?? null) !== parentId || !set.has(l.id))
653
+ return l;
654
+ const z = orderedChildIds.indexOf(l.id);
655
+ return { ...l, zIndex: z, slot: { ...(l.slot ?? defaultSlotFromRect(l.rect)), order: z } };
656
+ });
657
+ }
658
+ /** Sync layer.rect from its slot given parent size (for editors that edit rect). */
659
+ export function syncRectFromSlot(layer, parentSize) {
660
+ if (!layer.slot)
661
+ return layer;
662
+ return { ...layer, rect: resolveSlotRect(parentSize, layer.slot) };
663
+ }
664
+ export function syncSlotFromRect(layer, parentSize) {
665
+ const anchors = layer.slot?.anchors ?? ANCHOR_PRESETS.topLeft;
666
+ const slot = {
667
+ ...slotFromLocalRect(parentSize, layer.rect, anchors),
668
+ padding: layer.slot?.padding,
669
+ sizeRule: layer.slot?.sizeRule,
670
+ alignment: layer.slot?.alignment,
671
+ order: layer.slot?.order
672
+ };
673
+ return { ...layer, slot, rect: rectFromSlot(slot, parentSize) };
674
+ }
@@ -0,0 +1,19 @@
1
+ import type { CanvasDocument } from './canvasDocument.js';
2
+ export declare function serializeCanvasDoc(doc: CanvasDocument): string;
3
+ export declare function parseCanvasDoc(raw: string): CanvasDocument;
4
+ export type CanvasHistoryState = {
5
+ past: string[];
6
+ future: string[];
7
+ last: string;
8
+ };
9
+ export declare function createCanvasHistory(doc: CanvasDocument): CanvasHistoryState;
10
+ /** Push current `last` to past when document changes (skips no-ops). */
11
+ export declare function pushCanvasHistory(state: CanvasHistoryState, nextDoc: CanvasDocument): CanvasHistoryState;
12
+ export declare function undoCanvasHistory(state: CanvasHistoryState): {
13
+ state: CanvasHistoryState;
14
+ doc: CanvasDocument;
15
+ } | null;
16
+ export declare function redoCanvasHistory(state: CanvasHistoryState): {
17
+ state: CanvasHistoryState;
18
+ doc: CanvasDocument;
19
+ } | null;