@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
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
+ import SearchInput from '../SearchInput/SearchInput.svelte';
3
4
 
4
5
  export interface ContextMenuItem {
5
6
  id: string;
@@ -7,38 +8,106 @@
7
8
  disabled?: boolean;
8
9
  destructive?: boolean;
9
10
  separator?: boolean;
11
+ /** Non-interactive section header (category title). */
12
+ header?: boolean;
10
13
  shortcut?: string;
14
+ /** Group label — items sharing a category are shown under one header. */
15
+ category?: string;
16
+ description?: string;
17
+ }
18
+
19
+ export interface ContextMenuAnchor {
20
+ x: number;
21
+ y: number;
11
22
  }
12
23
 
13
24
  interface ContextMenuProps {
14
25
  items?: ContextMenuItem[];
15
26
  open?: boolean;
27
+ /** Screen coordinates for the menu (clientX / clientY). */
28
+ anchor?: ContextMenuAnchor | null;
29
+ /** Show a search field and filter items by label / description / category. */
30
+ searchable?: boolean;
31
+ searchPlaceholder?: string;
32
+ class?: string;
16
33
  children?: Snippet;
17
34
  onselect?: (id: string, item: ContextMenuItem) => void;
35
+ onclose?: () => void;
18
36
  }
19
37
 
20
38
  let {
21
39
  items = [],
22
40
  open = $bindable(false),
41
+ anchor = $bindable<ContextMenuAnchor | null>(null),
42
+ searchable = false,
43
+ searchPlaceholder = 'Search…',
44
+ class: className = '',
23
45
  children,
24
- onselect
46
+ onselect,
47
+ onclose
25
48
  }: ContextMenuProps = $props();
26
49
 
27
50
  let menuX = $state(0);
28
51
  let menuY = $state(0);
29
52
  let menuEl = $state<HTMLDivElement | null>(null);
30
- let containerEl = $state<HTMLDivElement | null>(null);
31
53
  let highlighted = $state(-1);
54
+ let query = $state('');
55
+ const menuId = `ctx-menu-${Math.random().toString(36).slice(2, 9)}`;
56
+
57
+ const filteredItems = $derived.by(() => {
58
+ const q = query.trim().toLowerCase();
59
+ if (!q) return items;
60
+ return items.filter((item) => {
61
+ if (item.separator || item.header) return false;
62
+ return (
63
+ item.label.toLowerCase().includes(q) ||
64
+ item.description?.toLowerCase().includes(q) ||
65
+ item.category?.toLowerCase().includes(q) ||
66
+ item.id.toLowerCase().includes(q)
67
+ );
68
+ });
69
+ });
70
+
71
+ /** Flat list with auto category headers when items carry `category`. */
72
+ const displayItems = $derived.by(() => {
73
+ const src = filteredItems;
74
+ const hasCategories = src.some((i) => i.category && !i.header && !i.separator);
75
+ if (!hasCategories) return src;
76
+
77
+ const actionable = src
78
+ .filter((i) => !i.separator && !i.header)
79
+ .slice()
80
+ .sort((a, b) => {
81
+ const ca = a.category ?? 'Other';
82
+ const cb = b.category ?? 'Other';
83
+ if (ca !== cb) return ca.localeCompare(cb);
84
+ return a.label.localeCompare(b.label);
85
+ });
86
+
87
+ const out: ContextMenuItem[] = [];
88
+ let lastCat = '';
89
+ let seq = 0;
90
+ for (const item of actionable) {
91
+ const cat = item.category ?? 'Other';
92
+ if (cat !== lastCat) {
93
+ if (out.length) out.push({ id: `sep:${seq++}`, label: '', separator: true });
94
+ out.push({ id: `hdr:${seq++}`, label: cat, header: true });
95
+ lastCat = cat;
96
+ }
97
+ out.push(item);
98
+ }
99
+ return out;
100
+ });
32
101
 
33
102
  const enabledIndexes = $derived(
34
- items.map((item, i) => (item.separator || item.disabled ? -1 : i)).filter((i) => i !== -1)
103
+ displayItems
104
+ .map((item, i) => (item.separator || item.header || item.disabled ? -1 : i))
105
+ .filter((i) => i !== -1)
35
106
  );
36
107
 
37
- function openAt(x: number, y: number) {
38
- open = true;
39
- highlighted = -1;
40
-
41
- // Defer to measure menu dimensions after render
108
+ function placeMenu(x: number, y: number) {
109
+ menuX = x;
110
+ menuY = y;
42
111
  requestAnimationFrame(() => {
43
112
  if (!menuEl) return;
44
113
  const vw = window.innerWidth;
@@ -47,36 +116,92 @@
47
116
  menuX = x + mw > vw - 8 ? Math.max(8, x - mw) : x;
48
117
  menuY = y + mh > vh - 8 ? Math.max(8, y - mh) : y;
49
118
  });
119
+ }
50
120
 
51
- // Optimistically position (will be corrected by rAF)
52
- menuX = x;
53
- menuY = y;
121
+ function showMenu() {
122
+ if (!menuEl) return;
123
+ if (!menuEl.matches(':popover-open')) menuEl.showPopover();
124
+ }
125
+
126
+ function hideMenu() {
127
+ if (menuEl?.matches(':popover-open')) menuEl.hidePopover();
128
+ }
129
+
130
+ function openAt(x: number, y: number) {
131
+ anchor = { x, y };
132
+ open = true;
133
+ highlighted = -1;
134
+ query = '';
135
+ placeMenu(x, y);
136
+ // Defer past the contextmenu/mouseup that would light-dismiss a popover=auto.
137
+ requestAnimationFrame(() => {
138
+ requestAnimationFrame(() => {
139
+ if (open) showMenu();
140
+ });
141
+ });
54
142
  }
55
143
 
56
144
  function close() {
145
+ if (menuEl?.matches(':popover-open')) {
146
+ menuEl.hidePopover();
147
+ return;
148
+ }
149
+ if (!open && !anchor) return;
57
150
  open = false;
151
+ anchor = null;
58
152
  highlighted = -1;
153
+ query = '';
154
+ onclose?.();
59
155
  }
60
156
 
61
157
  function selectItem(item: ContextMenuItem) {
62
- if (item.disabled || item.separator) return;
158
+ if (item.disabled || item.separator || item.header) return;
63
159
  onselect?.(item.id, item);
64
160
  close();
65
161
  }
66
162
 
67
163
  function handleContextMenu(event: MouseEvent) {
68
164
  event.preventDefault();
165
+ event.stopPropagation();
69
166
  openAt(event.clientX, event.clientY);
70
167
  }
71
168
 
72
- function handleOutsideClick(event: MouseEvent) {
169
+ function onToggle(event: ToggleEvent) {
170
+ if (event.newState === 'open') {
171
+ open = true;
172
+ return;
173
+ }
174
+ open = false;
175
+ anchor = null;
176
+ highlighted = -1;
177
+ query = '';
178
+ onclose?.();
179
+ }
180
+
181
+ /** Manual popover: close on outside pointer. Keep open on scroll —
182
+ * the menu is position:fixed, and closing on scroll also kills scrolling
183
+ * inside a long/searchable menu. */
184
+ function onDocPointerDown(event: PointerEvent) {
73
185
  if (!open) return;
74
- if (menuEl && menuEl.contains(event.target as Node)) return;
186
+ const t = event.target;
187
+ if (t instanceof Node && menuEl?.contains(t)) return;
75
188
  close();
76
189
  }
77
190
 
78
191
  function handleKeydown(event: KeyboardEvent) {
79
- if (!open) return;
192
+ if (!open && !menuEl?.matches(':popover-open')) return;
193
+ const tag = (event.target as HTMLElement)?.tagName;
194
+ if (tag === 'INPUT' || tag === 'TEXTAREA') {
195
+ if (event.key === 'Escape') {
196
+ event.preventDefault();
197
+ close();
198
+ }
199
+ if (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Enter') {
200
+ /* allow nav from search */
201
+ } else {
202
+ return;
203
+ }
204
+ }
80
205
  switch (event.key) {
81
206
  case 'Escape':
82
207
  event.preventDefault();
@@ -92,8 +217,9 @@
92
217
  break;
93
218
  case 'Enter':
94
219
  case ' ': {
220
+ if (tag === 'INPUT' && event.key === ' ') return;
95
221
  event.preventDefault();
96
- const item = highlighted >= 0 ? items[highlighted] : undefined;
222
+ const item = highlighted >= 0 ? displayItems[highlighted] : undefined;
97
223
  if (item) selectItem(item);
98
224
  break;
99
225
  }
@@ -109,33 +235,75 @@
109
235
  highlighted = enabledIndexes[next];
110
236
  }
111
237
  }
238
+
239
+ $effect(() => {
240
+ if (!open || !anchor) {
241
+ if (!open) hideMenu();
242
+ return;
243
+ }
244
+ const x = anchor.x;
245
+ const y = anchor.y;
246
+ placeMenu(x, y);
247
+ requestAnimationFrame(() => {
248
+ requestAnimationFrame(() => {
249
+ if (open) showMenu();
250
+ });
251
+ });
252
+ });
253
+
254
+ $effect(() => {
255
+ if (!open) return;
256
+ // Bind after current pointer gesture ends so the opening right-click doesn't close us.
257
+ const timer = window.setTimeout(() => {
258
+ document.addEventListener('pointerdown', onDocPointerDown, true);
259
+ }, 0);
260
+ return () => {
261
+ window.clearTimeout(timer);
262
+ document.removeEventListener('pointerdown', onDocPointerDown, true);
263
+ };
264
+ });
112
265
  </script>
113
266
 
114
- <svelte:window onclick={handleOutsideClick} onkeydown={handleKeydown} />
267
+ <svelte:window onkeydown={handleKeydown} />
115
268
 
116
- <!-- svelte-ignore a11y_no_static_element_interactions -->
269
+ {#if children}
270
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
271
+ <div class={['h-full min-h-0 w-full', className]} oncontextmenu={handleContextMenu}>
272
+ {@render children()}
273
+ </div>
274
+ {/if}
275
+
276
+ <!-- Manual popover — context menus must not light-dismiss on the opening mouseup -->
117
277
  <div
118
- bind:this={containerEl}
119
- class="contents"
120
- oncontextmenu={handleContextMenu}
278
+ bind:this={menuEl}
279
+ id={menuId}
280
+ popover="manual"
281
+ role="menu"
282
+ tabindex={-1}
283
+ aria-label="Context menu"
284
+ ontoggle={onToggle}
285
+ style={`top:${menuY}px;left:${menuX}px;margin:0;`}
286
+ class={[
287
+ 'context-menu-popover flex max-h-[min(28rem,70vh)] min-w-52 max-w-72 flex-col overflow-hidden rounded-xl border border-border bg-surface-elevated shadow-xl outline-none',
288
+ !children && className
289
+ ]}
121
290
  >
122
- {#if children}
123
- {@render children()}
291
+ {#if searchable}
292
+ <div class="border-b border-border p-2">
293
+ <SearchInput bind:value={query} placeholder={searchPlaceholder} size="sm" />
294
+ </div>
124
295
  {/if}
125
- </div>
126
-
127
- {#if open}
128
- <div
129
- bind:this={menuEl}
130
- role="menu"
131
- tabindex={-1}
132
- aria-label="Context menu"
133
- style="position:fixed;top:{menuY}px;left:{menuX}px;z-index:9999;"
134
- class="min-w-44 rounded-xl border border-border bg-surface-elevated p-1.5 shadow-xl outline-none animate-in fade-in zoom-in-95 duration-100"
135
- >
136
- {#each items as item, index (item.id)}
296
+ <div class="min-h-0 flex-1 overflow-auto p-1.5">
297
+ {#each displayItems as item, index (item.id)}
137
298
  {#if item.separator}
138
299
  <div class="my-1 h-px bg-border" role="separator"></div>
300
+ {:else if item.header}
301
+ <p
302
+ class="px-2.5 pb-1 pt-2 text-[10px] font-semibold uppercase tracking-wide text-muted"
303
+ role="presentation"
304
+ >
305
+ {item.label}
306
+ </p>
139
307
  {:else}
140
308
  <!-- svelte-ignore a11y_click_events_have_key_events -->
141
309
  <!-- svelte-ignore a11y_no_static_element_interactions -->
@@ -144,23 +312,51 @@
144
312
  tabindex={-1}
145
313
  aria-disabled={item.disabled || undefined}
146
314
  onclick={() => selectItem(item)}
147
- onpointerenter={() => { if (!item.disabled) highlighted = index; }}
148
- onpointerleave={() => { highlighted = -1; }}
315
+ onpointerenter={() => {
316
+ if (!item.disabled) highlighted = index;
317
+ }}
318
+ onpointerleave={() => {
319
+ highlighted = -1;
320
+ }}
149
321
  class={[
150
- 'flex cursor-pointer items-center justify-between gap-4 rounded-lg px-2.5 py-2 text-sm font-medium transition-colors',
322
+ 'flex cursor-pointer items-start justify-between gap-3 rounded-lg px-2.5 py-2 text-sm font-medium transition-colors',
151
323
  item.disabled && 'cursor-not-allowed opacity-40',
152
324
  highlighted === index && !item.disabled && 'bg-surface-overlay',
153
325
  item.destructive ? 'text-red-600 dark:text-red-400' : 'text-primary'
154
326
  ]}
155
327
  >
156
- <span class="truncate">{item.label}</span>
328
+ <span class="min-w-0">
329
+ <span class="block truncate">{item.label}</span>
330
+ {#if item.description}
331
+ <span class="block truncate text-[11px] font-normal text-muted">{item.description}</span>
332
+ {/if}
333
+ </span>
157
334
  {#if item.shortcut}
158
- <kbd class="shrink-0 rounded border border-border bg-surface-overlay px-1.5 py-0.5 text-[10px] font-mono text-secondary">
335
+ <kbd
336
+ class="mt-0.5 shrink-0 rounded border border-border bg-surface-overlay px-1.5 py-0.5 font-mono text-[10px] text-secondary"
337
+ >
159
338
  {item.shortcut}
160
339
  </kbd>
161
340
  {/if}
162
341
  </div>
163
342
  {/if}
343
+ {:else}
344
+ <p class="px-3 py-6 text-center text-xs text-muted">No matches</p>
164
345
  {/each}
165
346
  </div>
166
- {/if}
347
+ </div>
348
+
349
+ <style>
350
+ /* UA popover defaults to inset:0 — position via top/left only.
351
+ Tailwind `flex` overrides UA display:none — hide until open. */
352
+ .context-menu-popover {
353
+ position: fixed;
354
+ }
355
+ .context-menu-popover:not(:popover-open) {
356
+ display: none !important;
357
+ }
358
+ .context-menu-popover:popover-open {
359
+ inset: unset;
360
+ display: flex;
361
+ }
362
+ </style>
@@ -5,14 +5,30 @@ export interface ContextMenuItem {
5
5
  disabled?: boolean;
6
6
  destructive?: boolean;
7
7
  separator?: boolean;
8
+ /** Non-interactive section header (category title). */
9
+ header?: boolean;
8
10
  shortcut?: string;
11
+ /** Group label — items sharing a category are shown under one header. */
12
+ category?: string;
13
+ description?: string;
14
+ }
15
+ export interface ContextMenuAnchor {
16
+ x: number;
17
+ y: number;
9
18
  }
10
19
  interface ContextMenuProps {
11
20
  items?: ContextMenuItem[];
12
21
  open?: boolean;
22
+ /** Screen coordinates for the menu (clientX / clientY). */
23
+ anchor?: ContextMenuAnchor | null;
24
+ /** Show a search field and filter items by label / description / category. */
25
+ searchable?: boolean;
26
+ searchPlaceholder?: string;
27
+ class?: string;
13
28
  children?: Snippet;
14
29
  onselect?: (id: string, item: ContextMenuItem) => void;
30
+ onclose?: () => void;
15
31
  }
16
- declare const ContextMenu: import("svelte").Component<ContextMenuProps, {}, "open">;
32
+ declare const ContextMenu: import("svelte").Component<ContextMenuProps, {}, "open" | "anchor">;
17
33
  type ContextMenu = ReturnType<typeof ContextMenu>;
18
34
  export default ContextMenu;
@@ -25,6 +25,6 @@ interface DateTimePickerProps {
25
25
  value: string;
26
26
  }) => void;
27
27
  }
28
- declare const DateTimePicker: import("svelte").Component<DateTimePickerProps, {}, "value" | "time" | "date" | "open">;
28
+ declare const DateTimePicker: import("svelte").Component<DateTimePickerProps, {}, "date" | "value" | "time" | "open">;
29
29
  type DateTimePicker = ReturnType<typeof DateTimePicker>;
30
30
  export default DateTimePicker;
@@ -0,0 +1,9 @@
1
+ import type { StoryObj } from '@storybook/svelte';
2
+ declare const meta: {
3
+ title: string;
4
+ component: import("svelte").Component<Record<string, never>, {}, "">;
5
+ tags: string[];
6
+ };
7
+ export default meta;
8
+ type Story = StoryObj<typeof meta>;
9
+ export declare const Default: Story;
@@ -0,0 +1,8 @@
1
+ import ExpressionEditorStory from './ExpressionEditorStory.svelte';
2
+ const meta = {
3
+ title: 'Molecules/ExpressionEditor',
4
+ component: ExpressionEditorStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};
@@ -0,0 +1,56 @@
1
+ <script lang="ts">
2
+ import CodeEditor from '../CodeEditor/CodeEditor.svelte';
3
+ import Chip from '../../atoms/Chip/Chip.svelte';
4
+
5
+ interface ExpressionEditorProps {
6
+ value?: string;
7
+ fields?: string[];
8
+ placeholder?: string;
9
+ error?: string;
10
+ validate?: (value: string) => string | null;
11
+ class?: string;
12
+ onchange?: (value: string) => void;
13
+ }
14
+
15
+ let {
16
+ value = $bindable(''),
17
+ fields = [],
18
+ placeholder = 'e.g. price * quantity',
19
+ error = '',
20
+ validate,
21
+ class: className = '',
22
+ onchange
23
+ }: ExpressionEditorProps = $props();
24
+
25
+ const validationError = $derived(validate?.(value) ?? error ?? '');
26
+
27
+ function insertField(field: string) {
28
+ const needsSpace = value.length > 0 && !/\s$/.test(value);
29
+ value = `${value}${needsSpace ? ' ' : ''}${field}`;
30
+ onchange?.(value);
31
+ }
32
+ </script>
33
+
34
+ <div class={['flex flex-col gap-2', className]} data-expression-editor>
35
+ {#if fields.length}
36
+ <div class="flex flex-wrap gap-1">
37
+ {#each fields as field (field)}
38
+ <button type="button" onclick={() => insertField(field)}>
39
+ <Chip size="sm" variant="default">{field}</Chip>
40
+ </button>
41
+ {/each}
42
+ </div>
43
+ {/if}
44
+ <CodeEditor
45
+ bind:value
46
+ language="js"
47
+ {placeholder}
48
+ showLineNumbers={false}
49
+ minHeight={72}
50
+ onchange={onchange}
51
+ class="rounded-xl"
52
+ />
53
+ {#if validationError}
54
+ <p class="text-xs text-red-600">{validationError}</p>
55
+ {/if}
56
+ </div>
@@ -0,0 +1,12 @@
1
+ interface ExpressionEditorProps {
2
+ value?: string;
3
+ fields?: string[];
4
+ placeholder?: string;
5
+ error?: string;
6
+ validate?: (value: string) => string | null;
7
+ class?: string;
8
+ onchange?: (value: string) => void;
9
+ }
10
+ declare const ExpressionEditor: import("svelte").Component<ExpressionEditorProps, {}, "value">;
11
+ type ExpressionEditor = ReturnType<typeof ExpressionEditor>;
12
+ export default ExpressionEditor;
@@ -0,0 +1,12 @@
1
+ <script lang="ts">
2
+ import ExpressionEditor from './ExpressionEditor.svelte';
3
+ let value = $state('price * quantity');
4
+ </script>
5
+
6
+ <div class="mx-auto max-w-lg p-4">
7
+ <ExpressionEditor
8
+ bind:value
9
+ fields={['price', 'quantity', 'discount', 'tax']}
10
+ validate={(v) => (!v.trim() ? 'Expression required' : null)}
11
+ />
12
+ </div>
@@ -0,0 +1,3 @@
1
+ declare const ExpressionEditorStory: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type ExpressionEditorStory = ReturnType<typeof ExpressionEditorStory>;
3
+ export default ExpressionEditorStory;
@@ -0,0 +1,9 @@
1
+ import type { StoryObj } from '@storybook/svelte';
2
+ declare const meta: {
3
+ title: string;
4
+ component: import("svelte").Component<Record<string, never>, {}, "">;
5
+ tags: string[];
6
+ };
7
+ export default meta;
8
+ type Story = StoryObj<typeof meta>;
9
+ export declare const Default: Story;
@@ -0,0 +1,8 @@
1
+ import FilterListStory from './FilterListStory.svelte';
2
+ const meta = {
3
+ title: 'Molecules/FilterList',
4
+ component: FilterListStory,
5
+ tags: ['autodocs']
6
+ };
7
+ export default meta;
8
+ export const Default = {};
@@ -0,0 +1,101 @@
1
+ <script lang="ts">
2
+ import Chip from '../../atoms/Chip/Chip.svelte';
3
+ import Button from '../../atoms/Button/Button.svelte';
4
+ import {
5
+ emptyFilterGroup,
6
+ type AdvancedFilterGroup,
7
+ type FilterFieldDef
8
+ } from '../../../utils/advancedFilters.js';
9
+ import {
10
+ groupToFilterItems,
11
+ groupToQueryString,
12
+ removeRuleFromGroup
13
+ } from '../../../utils/queryBridge.js';
14
+
15
+ interface FilterListProps {
16
+ fields?: FilterFieldDef[];
17
+ query?: AdvancedFilterGroup;
18
+ /** Optional QueryBar string mirror */
19
+ queryString?: string;
20
+ emptyLabel?: string;
21
+ clearAllLabel?: string;
22
+ showQueryString?: boolean;
23
+ class?: string;
24
+ onchange?: (query: AdvancedFilterGroup) => void;
25
+ onclear?: (ruleId: string) => void;
26
+ onclearAll?: () => void;
27
+ onquerystring?: (value: string) => void;
28
+ }
29
+
30
+ let {
31
+ fields = [],
32
+ query = $bindable(emptyFilterGroup()),
33
+ queryString = $bindable(''),
34
+ emptyLabel = 'No active filters',
35
+ clearAllLabel = 'Clear all',
36
+ showQueryString = false,
37
+ class: className = '',
38
+ onchange,
39
+ onclear,
40
+ onclearAll,
41
+ onquerystring
42
+ }: FilterListProps = $props();
43
+
44
+ const items = $derived(groupToFilterItems(query, fields));
45
+
46
+ function syncString(next: AdvancedFilterGroup) {
47
+ const s = groupToQueryString(next, fields);
48
+ queryString = s;
49
+ onquerystring?.(s);
50
+ }
51
+
52
+ function remove(id: string) {
53
+ query = removeRuleFromGroup(query, id);
54
+ syncString(query);
55
+ onchange?.(query);
56
+ onclear?.(id);
57
+ }
58
+
59
+ function clearAll() {
60
+ query = emptyFilterGroup(query.combinator);
61
+ syncString(query);
62
+ onchange?.(query);
63
+ onclearAll?.();
64
+ }
65
+
66
+ </script>
67
+
68
+ <div
69
+ class={['flex flex-col gap-2', className]}
70
+ role="group"
71
+ aria-label="Active filters"
72
+ data-filter-list
73
+ >
74
+ {#if items.length === 0}
75
+ <p class="text-xs text-muted">{emptyLabel}</p>
76
+ {:else}
77
+ <div class="flex flex-wrap items-center gap-1.5">
78
+ {#each items as item (item.id)}
79
+ <span class="inline-flex items-center gap-1">
80
+ <Chip
81
+ size="sm"
82
+ variant="primary"
83
+ dismissible
84
+ ondismiss={() => remove(item.id)}
85
+ >
86
+ {item.label}
87
+ </Chip>
88
+ </span>
89
+ {/each}
90
+ {#if items.length > 0}
91
+ <Button variant="ghost" size="sm" onclick={clearAll}>{clearAllLabel}</Button>
92
+ {/if}
93
+ </div>
94
+ {/if}
95
+
96
+ {#if showQueryString && queryString}
97
+ <code class="block truncate rounded-lg bg-surface-overlay px-2 py-1 font-mono text-[11px] text-muted">
98
+ {queryString}
99
+ </code>
100
+ {/if}
101
+ </div>
@@ -0,0 +1,18 @@
1
+ import { type AdvancedFilterGroup, type FilterFieldDef } from '../../../utils/advancedFilters.js';
2
+ interface FilterListProps {
3
+ fields?: FilterFieldDef[];
4
+ query?: AdvancedFilterGroup;
5
+ /** Optional QueryBar string mirror */
6
+ queryString?: string;
7
+ emptyLabel?: string;
8
+ clearAllLabel?: string;
9
+ showQueryString?: boolean;
10
+ class?: string;
11
+ onchange?: (query: AdvancedFilterGroup) => void;
12
+ onclear?: (ruleId: string) => void;
13
+ onclearAll?: () => void;
14
+ onquerystring?: (value: string) => void;
15
+ }
16
+ declare const FilterList: import("svelte").Component<FilterListProps, {}, "query" | "queryString">;
17
+ type FilterList = ReturnType<typeof FilterList>;
18
+ export default FilterList;