@r2digisolutions/components 0.1.7 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/atoms/IconButton/IconButton.svelte +1 -1
- package/dist/components/atoms/MediaKindIcon/MediaKindIcon.stories.js +8 -0
- package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte +122 -0
- package/dist/components/atoms/MediaKindIcon/MediaKindIcon.svelte.d.ts +11 -0
- package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte +12 -0
- package/dist/components/atoms/MediaKindIcon/MediaKindIconStory.svelte.d.ts +18 -0
- package/dist/components/atoms/PanKnob/PanKnob.stories.d.ts +9 -0
- package/dist/components/atoms/PanKnob/PanKnob.stories.js +8 -0
- package/dist/components/atoms/PanKnob/PanKnob.svelte +218 -0
- package/dist/components/atoms/PanKnob/PanKnob.svelte.d.ts +19 -0
- package/dist/components/atoms/PanKnob/PanKnobStory.svelte +15 -0
- package/dist/components/atoms/PanKnob/PanKnobStory.svelte.d.ts +3 -0
- package/dist/components/atoms/Playhead/Playhead.stories.js +8 -0
- package/dist/components/atoms/Playhead/Playhead.svelte +59 -0
- package/dist/components/atoms/Playhead/Playhead.svelte.d.ts +13 -0
- package/dist/components/atoms/Playhead/PlayheadStory.svelte +9 -0
- package/dist/components/atoms/Playhead/PlayheadStory.svelte.d.ts +18 -0
- package/dist/components/atoms/TimeRuler/TimeRuler.stories.js +8 -0
- package/dist/components/atoms/TimeRuler/TimeRuler.svelte +58 -0
- package/dist/components/atoms/TimeRuler/TimeRuler.svelte.d.ts +10 -0
- package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte +7 -0
- package/dist/components/atoms/TimeRuler/TimeRulerStory.svelte.d.ts +18 -0
- package/dist/components/atoms/Tooltip/Tooltip.svelte +1 -1
- package/dist/components/atoms/TrimHandle/TrimHandle.stories.js +8 -0
- package/dist/components/atoms/TrimHandle/TrimHandle.svelte +63 -0
- package/dist/components/atoms/TrimHandle/TrimHandle.svelte.d.ts +12 -0
- package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte +11 -0
- package/dist/components/atoms/TrimHandle/TrimHandleStory.svelte.d.ts +18 -0
- package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.d.ts +9 -0
- package/dist/components/molecules/AiAssistPanel/AiAssistPanel.stories.js +8 -0
- package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte +102 -0
- package/dist/components/molecules/AiAssistPanel/AiAssistPanel.svelte.d.ts +20 -0
- package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte +34 -0
- package/dist/components/molecules/AiAssistPanel/AiAssistPanelStory.svelte.d.ts +3 -0
- package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte +97 -61
- package/dist/components/molecules/BulkActionBar/BulkActionBar.svelte.d.ts +2 -0
- package/dist/components/molecules/BulkEditPanel/BulkEditPanel.stories.js +8 -0
- package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte +117 -0
- package/dist/components/molecules/BulkEditPanel/BulkEditPanel.svelte.d.ts +23 -0
- package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte +18 -0
- package/dist/components/molecules/BulkEditPanel/BulkEditPanelStory.svelte.d.ts +18 -0
- package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.stories.js +8 -0
- package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte +858 -0
- package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanel.svelte.d.ts +43 -0
- package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte +7 -0
- package/dist/components/molecules/CanvasElementsPanel/CanvasElementsPanelStory.svelte.d.ts +18 -0
- package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.d.ts +9 -0
- package/dist/components/molecules/CanvasInspector/CanvasInspector.stories.js +8 -0
- package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte +1140 -0
- package/dist/components/molecules/CanvasInspector/CanvasInspector.svelte.d.ts +28 -0
- package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte +20 -0
- package/dist/components/molecules/CanvasInspector/CanvasInspectorStory.svelte.d.ts +3 -0
- package/dist/components/molecules/ColorPicker/ColorPicker.svelte +1 -1
- package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.d.ts +9 -0
- package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.stories.js +8 -0
- package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte +108 -0
- package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenu.svelte.d.ts +18 -0
- package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte +15 -0
- package/dist/components/molecules/ColumnVisibilityMenu/ColumnVisibilityMenuStory.svelte.d.ts +3 -0
- package/dist/components/molecules/ConflictResolver/ConflictResolver.stories.js +8 -0
- package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte +73 -0
- package/dist/components/molecules/ConflictResolver/ConflictResolver.svelte.d.ts +16 -0
- package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte +11 -0
- package/dist/components/molecules/ConflictResolver/ConflictResolverStory.svelte.d.ts +18 -0
- package/dist/components/molecules/ContextMenu/ContextMenu.svelte +204 -60
- package/dist/components/molecules/ContextMenu/ContextMenu.svelte.d.ts +9 -0
- package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.d.ts +9 -0
- package/dist/components/molecules/ExpressionEditor/ExpressionEditor.stories.js +8 -0
- package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte +56 -0
- package/dist/components/molecules/ExpressionEditor/ExpressionEditor.svelte.d.ts +12 -0
- package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte +12 -0
- package/dist/components/molecules/ExpressionEditor/ExpressionEditorStory.svelte.d.ts +3 -0
- package/dist/components/molecules/FilterList/FilterList.stories.d.ts +9 -0
- package/dist/components/molecules/FilterList/FilterList.stories.js +8 -0
- package/dist/components/molecules/FilterList/FilterList.svelte +101 -0
- package/dist/components/molecules/FilterList/FilterList.svelte.d.ts +18 -0
- package/dist/components/molecules/FilterList/FilterListStory.svelte +31 -0
- package/dist/components/molecules/FilterList/FilterListStory.svelte.d.ts +3 -0
- package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.d.ts +9 -0
- package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.stories.js +8 -0
- package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte +94 -0
- package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowser.svelte.d.ts +15 -0
- package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte +18 -0
- package/dist/components/molecules/MediaAssetBrowser/MediaAssetBrowserStory.svelte.d.ts +3 -0
- package/dist/components/molecules/MediaAssetCard/MediaAssetCard.stories.js +8 -0
- package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte +50 -0
- package/dist/components/molecules/MediaAssetCard/MediaAssetCard.svelte.d.ts +11 -0
- package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte +13 -0
- package/dist/components/molecules/MediaAssetCard/MediaAssetCardStory.svelte.d.ts +18 -0
- package/dist/components/molecules/MediaLayerItem/MediaLayerItem.stories.js +8 -0
- package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte +380 -0
- package/dist/components/molecules/MediaLayerItem/MediaLayerItem.svelte.d.ts +33 -0
- package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte +14 -0
- package/dist/components/molecules/MediaLayerItem/MediaLayerItemStory.svelte.d.ts +18 -0
- package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.d.ts +9 -0
- package/dist/components/molecules/MediaLayerList/MediaLayerList.stories.js +8 -0
- package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte +399 -0
- package/dist/components/molecules/MediaLayerList/MediaLayerList.svelte.d.ts +37 -0
- package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte +24 -0
- package/dist/components/molecules/MediaLayerList/MediaLayerListStory.svelte.d.ts +3 -0
- package/dist/components/molecules/MediaStage/MediaStage.stories.d.ts +9 -0
- package/dist/components/molecules/MediaStage/MediaStage.stories.js +8 -0
- package/dist/components/molecules/MediaStage/MediaStage.svelte +1498 -0
- package/dist/components/molecules/MediaStage/MediaStage.svelte.d.ts +45 -0
- package/dist/components/molecules/MediaStage/MediaStageStory.svelte +35 -0
- package/dist/components/molecules/MediaStage/MediaStageStory.svelte.d.ts +3 -0
- package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.d.ts +9 -0
- package/dist/components/molecules/MediaTimeline/MediaTimeline.stories.js +8 -0
- package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte +131 -0
- package/dist/components/molecules/MediaTimeline/MediaTimeline.svelte.d.ts +19 -0
- package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte +20 -0
- package/dist/components/molecules/MediaTimeline/MediaTimelineStory.svelte.d.ts +3 -0
- package/dist/components/molecules/MixerChannel/MixerChannel.stories.d.ts +9 -0
- package/dist/components/molecules/MixerChannel/MixerChannel.stories.js +8 -0
- package/dist/components/molecules/MixerChannel/MixerChannel.svelte +92 -0
- package/dist/components/molecules/MixerChannel/MixerChannel.svelte.d.ts +11 -0
- package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte +13 -0
- package/dist/components/molecules/MixerChannel/MixerChannelStory.svelte.d.ts +3 -0
- package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte +454 -0
- package/dist/components/molecules/NodeGraph/GraphBlueprintNode.svelte.d.ts +8 -0
- package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte +26 -0
- package/dist/components/molecules/NodeGraph/GraphFlowBridge.svelte.d.ts +22 -0
- package/dist/components/molecules/NodeGraph/NodeGraph.stories.d.ts +12 -0
- package/dist/components/molecules/NodeGraph/NodeGraph.stories.js +9 -0
- package/dist/components/molecules/NodeGraph/NodeGraph.svelte +1409 -0
- package/dist/components/molecules/NodeGraph/NodeGraph.svelte.d.ts +33 -0
- package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte +90 -0
- package/dist/components/molecules/NodeGraph/NodeGraphStory.svelte.d.ts +3 -0
- package/dist/components/molecules/NodePalette/NodePalette.stories.js +8 -0
- package/dist/components/molecules/NodePalette/NodePalette.svelte +86 -0
- package/dist/components/molecules/NodePalette/NodePalette.svelte.d.ts +11 -0
- package/dist/components/molecules/NodePalette/NodePaletteStory.svelte +11 -0
- package/dist/components/molecules/NodePalette/NodePaletteStory.svelte.d.ts +18 -0
- package/dist/components/molecules/Poll/Poll.stories.d.ts +1 -1
- package/dist/components/molecules/ProgramMonitor/ProgramMonitor.stories.js +8 -0
- package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte +72 -0
- package/dist/components/molecules/ProgramMonitor/ProgramMonitor.svelte.d.ts +12 -0
- package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte +16 -0
- package/dist/components/molecules/ProgramMonitor/ProgramMonitorStory.svelte.d.ts +18 -0
- package/dist/components/molecules/PropertyField/PropertyField.svelte +57 -3
- package/dist/components/molecules/PropertyField/PropertyField.svelte.d.ts +10 -0
- package/dist/components/molecules/PropertyField/PropertyFieldStory.svelte +21 -0
- package/dist/components/molecules/PropertyGroup/PropertyGroup.svelte +1 -1
- package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.d.ts +9 -0
- package/dist/components/molecules/QueryBuilder/QueryBuilder.stories.js +8 -0
- package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte +52 -0
- package/dist/components/molecules/QueryBuilder/QueryBuilder.svelte.d.ts +18 -0
- package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte +62 -0
- package/dist/components/molecules/QueryBuilder/QueryBuilderStory.svelte.d.ts +3 -0
- package/dist/components/molecules/RelationPicker/RelationPicker.stories.d.ts +9 -0
- package/dist/components/molecules/RelationPicker/RelationPicker.stories.js +8 -0
- package/dist/components/molecules/RelationPicker/RelationPicker.svelte +180 -0
- package/dist/components/molecules/RelationPicker/RelationPicker.svelte.d.ts +24 -0
- package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte +16 -0
- package/dist/components/molecules/RelationPicker/RelationPickerStory.svelte.d.ts +3 -0
- package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.d.ts +9 -0
- package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.stories.js +8 -0
- package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte +154 -0
- package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilder.svelte.d.ts +12 -0
- package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte +16 -0
- package/dist/components/molecules/SchemaFieldBuilder/SchemaFieldBuilderStory.svelte.d.ts +3 -0
- package/dist/components/molecules/SecretField/SecretField.stories.d.ts +9 -0
- package/dist/components/molecules/SecretField/SecretField.stories.js +8 -0
- package/dist/components/molecules/SecretField/SecretField.svelte +58 -0
- package/dist/components/molecules/SecretField/SecretField.svelte.d.ts +15 -0
- package/dist/components/molecules/SecretField/SecretFieldStory.svelte +8 -0
- package/dist/components/molecules/SecretField/SecretFieldStory.svelte.d.ts +3 -0
- package/dist/components/molecules/SplitPane/SplitPane.svelte +96 -37
- package/dist/components/molecules/SplitPane/SplitPane.svelte.d.ts +10 -2
- package/dist/components/molecules/TableToolbar/TableToolbar.svelte.d.ts +1 -1
- package/dist/components/molecules/Terminal/Terminal.stories.js +20 -0
- package/dist/components/molecules/Terminal/Terminal.svelte +238 -0
- package/dist/components/molecules/Terminal/Terminal.svelte.d.ts +19 -0
- package/dist/components/molecules/Terminal/TerminalStory.svelte +47 -0
- package/dist/components/molecules/Terminal/TerminalStory.svelte.d.ts +6 -0
- package/dist/components/molecules/TimelineClip/TimelineClip.stories.js +8 -0
- package/dist/components/molecules/TimelineClip/TimelineClip.svelte +116 -0
- package/dist/components/molecules/TimelineClip/TimelineClip.svelte.d.ts +15 -0
- package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte +18 -0
- package/dist/components/molecules/TimelineClip/TimelineClipStory.svelte.d.ts +18 -0
- package/dist/components/molecules/TimelineTrack/TimelineTrack.stories.js +8 -0
- package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte +56 -0
- package/dist/components/molecules/TimelineTrack/TimelineTrack.svelte.d.ts +16 -0
- package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte +35 -0
- package/dist/components/molecules/TimelineTrack/TimelineTrackStory.svelte.d.ts +18 -0
- package/dist/components/molecules/TraceWaterfall/TraceWaterfall.stories.js +8 -0
- package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte +158 -0
- package/dist/components/molecules/TraceWaterfall/TraceWaterfall.svelte.d.ts +18 -0
- package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte +55 -0
- package/dist/components/molecules/TraceWaterfall/TraceWaterfallStory.svelte.d.ts +18 -0
- package/dist/components/molecules/TrackHeader/TrackHeader.stories.d.ts +9 -0
- package/dist/components/molecules/TrackHeader/TrackHeader.stories.js +8 -0
- package/dist/components/molecules/TrackHeader/TrackHeader.svelte +54 -0
- package/dist/components/molecules/TrackHeader/TrackHeader.svelte.d.ts +9 -0
- package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte +10 -0
- package/dist/components/molecules/TrackHeader/TrackHeaderStory.svelte.d.ts +3 -0
- package/dist/components/molecules/TransportControls/TransportControls.stories.d.ts +9 -0
- package/dist/components/molecules/TransportControls/TransportControls.stories.js +8 -0
- package/dist/components/molecules/TransportControls/TransportControls.svelte +53 -0
- package/dist/components/molecules/TransportControls/TransportControls.svelte.d.ts +12 -0
- package/dist/components/molecules/TransportControls/TransportControlsStory.svelte +18 -0
- package/dist/components/molecules/TransportControls/TransportControlsStory.svelte.d.ts +3 -0
- package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.stories.js +8 -0
- package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte +117 -0
- package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanel.svelte.d.ts +20 -0
- package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte +36 -0
- package/dist/components/molecules/VersionHistoryPanel/VersionHistoryPanelStory.svelte.d.ts +18 -0
- package/dist/components/molecules/VideoPlayer/VideoPlayer.stories.d.ts +1 -1
- package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.d.ts +9 -0
- package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.stories.js +8 -0
- package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte +59 -0
- package/dist/components/molecules/VideoTrackHeader/VideoTrackHeader.svelte.d.ts +9 -0
- package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte +10 -0
- package/dist/components/molecules/VideoTrackHeader/VideoTrackHeaderStory.svelte.d.ts +3 -0
- package/dist/components/molecules/WaveformRegion/WaveformRegion.stories.js +8 -0
- package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte +82 -0
- package/dist/components/molecules/WaveformRegion/WaveformRegion.svelte.d.ts +13 -0
- package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte +17 -0
- package/dist/components/molecules/WaveformRegion/WaveformRegionStory.svelte.d.ts +18 -0
- package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte +13 -4
- package/dist/components/molecules/WidgetCanvas/WidgetCanvas.svelte.d.ts +3 -1
- package/dist/components/molecules/WidgetCanvas/widgetCanvasContext.d.ts +2 -0
- package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte +206 -37
- package/dist/components/molecules/WidgetFrame/WidgetFrame.svelte.d.ts +31 -0
- package/dist/components/organisms/AudioEditor/AudioEditor.stories.d.ts +12 -0
- package/dist/components/organisms/AudioEditor/AudioEditor.stories.js +9 -0
- package/dist/components/organisms/AudioEditor/AudioEditor.svelte +273 -0
- package/dist/components/organisms/AudioEditor/AudioEditor.svelte.d.ts +13 -0
- package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte +10 -0
- package/dist/components/organisms/AudioEditor/AudioEditorStory.svelte.d.ts +3 -0
- package/dist/components/organisms/BlogEditor/BlogEditor.stories.d.ts +12 -0
- package/dist/components/organisms/BlogEditor/BlogEditor.stories.js +9 -0
- package/dist/components/organisms/BlogEditor/BlogEditor.svelte +1208 -0
- package/dist/components/organisms/BlogEditor/BlogEditor.svelte.d.ts +16 -0
- package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte +144 -0
- package/dist/components/organisms/BlogEditor/BlogEditorStory.svelte.d.ts +3 -0
- package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte +28 -0
- package/dist/components/organisms/BlogEditor/DemoBlogCard.svelte.d.ts +10 -0
- package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte +34 -0
- package/dist/components/organisms/BlogEditor/DemoBlogStats.svelte.d.ts +11 -0
- package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte +13 -0
- package/dist/components/organisms/BlogEditor/DemoBlogWidget.svelte.d.ts +8 -0
- package/dist/components/organisms/BlogRenderer/BlogRenderer.stories.js +8 -0
- package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte +469 -0
- package/dist/components/organisms/BlogRenderer/BlogRenderer.svelte.d.ts +14 -0
- package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte +20 -0
- package/dist/components/organisms/BlogRenderer/BlogRendererStory.svelte.d.ts +18 -0
- package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.d.ts +12 -0
- package/dist/components/organisms/BlueprintEditor/BlueprintEditor.stories.js +9 -0
- package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte +1012 -0
- package/dist/components/organisms/BlueprintEditor/BlueprintEditor.svelte.d.ts +16 -0
- package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte +76 -0
- package/dist/components/organisms/BlueprintEditor/BlueprintEditorStory.svelte.d.ts +3 -0
- package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.d.ts +12 -0
- package/dist/components/organisms/CanvasEditor/CanvasEditor.stories.js +9 -0
- package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte +1680 -0
- package/dist/components/organisms/CanvasEditor/CanvasEditor.svelte.d.ts +18 -0
- package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte +329 -0
- package/dist/components/organisms/CanvasEditor/CanvasEditorStory.svelte.d.ts +3 -0
- package/dist/components/organisms/DashboardBuilderPage/DashboardBuilderPage.svelte.d.ts +1 -1
- package/dist/components/organisms/DesktopShell/DesktopShell.svelte.d.ts +1 -1
- package/dist/components/organisms/EditorShell/EditorShell.svelte +123 -28
- package/dist/components/organisms/EditorShell/EditorShell.svelte.d.ts +21 -1
- package/dist/components/organisms/FileUploader/FileUploader.svelte +77 -15
- package/dist/components/organisms/FileUploader/FileUploader.svelte.d.ts +11 -0
- package/dist/components/organisms/ImportWizard/ImportWizard.stories.js +8 -0
- package/dist/components/organisms/ImportWizard/ImportWizard.svelte +209 -0
- package/dist/components/organisms/ImportWizard/ImportWizard.svelte.d.ts +22 -0
- package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte +16 -0
- package/dist/components/organisms/ImportWizard/ImportWizardStory.svelte.d.ts +18 -0
- package/dist/components/organisms/VideoEditor/VideoEditor.stories.d.ts +12 -0
- package/dist/components/organisms/VideoEditor/VideoEditor.stories.js +9 -0
- package/dist/components/organisms/VideoEditor/VideoEditor.svelte +308 -0
- package/dist/components/organisms/VideoEditor/VideoEditor.svelte.d.ts +13 -0
- package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte +10 -0
- package/dist/components/organisms/VideoEditor/VideoEditorStory.svelte.d.ts +3 -0
- package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.d.ts +12 -0
- package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.stories.js +9 -0
- package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte +22 -0
- package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplate.svelte.d.ts +13 -0
- package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte +8 -0
- package/dist/components/templates/AudioEditorTemplate/AudioEditorTemplateStory.svelte.d.ts +3 -0
- package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.d.ts +12 -0
- package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.stories.js +9 -0
- package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte +32 -0
- package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplate.svelte.d.ts +17 -0
- package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte +21 -0
- package/dist/components/templates/CanvasEditorTemplate/CanvasEditorTemplateStory.svelte.d.ts +3 -0
- package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.d.ts +12 -0
- package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.stories.js +9 -0
- package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte +22 -0
- package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplate.svelte.d.ts +13 -0
- package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte +8 -0
- package/dist/components/templates/VideoEditorTemplate/VideoEditorTemplateStory.svelte.d.ts +3 -0
- package/dist/index.d.ts +83 -1
- package/dist/index.js +60 -0
- package/dist/types/xyflow-svelte.d.ts +62 -0
- package/dist/utils/audioProject.d.ts +19 -0
- package/dist/utils/audioProject.js +70 -0
- package/dist/utils/blogDocument.d.ts +175 -0
- package/dist/utils/blogDocument.js +220 -0
- package/dist/utils/blueprintRuntime.d.ts +34 -0
- package/dist/utils/blueprintRuntime.js +289 -0
- package/dist/utils/canvasDocument.d.ts +239 -0
- package/dist/utils/canvasDocument.js +443 -0
- package/dist/utils/canvasExport.d.ts +10 -0
- package/dist/utils/canvasExport.js +469 -0
- package/dist/utils/canvasHierarchy.d.ts +189 -0
- package/dist/utils/canvasHierarchy.js +674 -0
- package/dist/utils/canvasHistory.d.ts +19 -0
- package/dist/utils/canvasHistory.js +48 -0
- package/dist/utils/canvasWidget.d.ts +81 -0
- package/dist/utils/canvasWidget.js +597 -0
- package/dist/utils/mediaTime.d.ts +16 -0
- package/dist/utils/mediaTime.js +57 -0
- package/dist/utils/mediaTracks.d.ts +61 -0
- package/dist/utils/mediaTracks.js +102 -0
- package/dist/utils/nodeGraph.d.ts +354 -0
- package/dist/utils/nodeGraph.js +1453 -0
- package/dist/utils/queryBridge.d.ts +18 -0
- package/dist/utils/queryBridge.js +118 -0
- package/dist/utils/videoSequence.d.ts +13 -0
- package/dist/utils/videoSequence.js +63 -0
- package/package.json +5 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onDestroy } from 'svelte';
|
|
3
3
|
|
|
4
|
-
type FileKind = 'image' | 'pdf' | 'doc' | 'other';
|
|
4
|
+
type FileKind = 'image' | 'video' | 'audio' | 'pdf' | 'doc' | 'other';
|
|
5
5
|
type UploaderVariant = 'multiple' | 'single' | 'avatar';
|
|
6
6
|
type UploaderView = 'list' | 'grid';
|
|
7
7
|
|
|
@@ -22,10 +22,21 @@
|
|
|
22
22
|
variant?: UploaderVariant;
|
|
23
23
|
view?: UploaderView;
|
|
24
24
|
showViewToggle?: boolean;
|
|
25
|
+
/** When false, only the dropzone is shown (parent owns the file list). */
|
|
26
|
+
showFileList?: boolean;
|
|
25
27
|
maxSizeMb?: number;
|
|
26
28
|
disabled?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* External preview URL for `single` / `avatar` when no File is selected yet
|
|
31
|
+
* (e.g. existing remote image in an editor inspector).
|
|
32
|
+
*/
|
|
33
|
+
src?: string;
|
|
34
|
+
/** Display name when using `src` without a File */
|
|
35
|
+
srcName?: string;
|
|
27
36
|
class?: string;
|
|
28
37
|
onchange?: (files: File[]) => void;
|
|
38
|
+
/** Fired when the user clears the current file / src preview */
|
|
39
|
+
onclear?: () => void;
|
|
29
40
|
}
|
|
30
41
|
|
|
31
42
|
let {
|
|
@@ -36,10 +47,14 @@
|
|
|
36
47
|
variant = 'multiple',
|
|
37
48
|
view = $bindable('list'),
|
|
38
49
|
showViewToggle = true,
|
|
50
|
+
showFileList = true,
|
|
39
51
|
maxSizeMb = 10,
|
|
40
52
|
disabled = false,
|
|
53
|
+
src = '',
|
|
54
|
+
srcName = '',
|
|
41
55
|
class: className = '',
|
|
42
|
-
onchange
|
|
56
|
+
onchange,
|
|
57
|
+
onclear
|
|
43
58
|
}: FileUploaderProps = $props();
|
|
44
59
|
|
|
45
60
|
let isDragging = $state(false);
|
|
@@ -51,6 +66,13 @@
|
|
|
51
66
|
const isMultiple = $derived(variant === 'multiple');
|
|
52
67
|
const hasFile = $derived(fileList.length > 0);
|
|
53
68
|
const primaryFile = $derived(fileList[0] as FileItem | undefined);
|
|
69
|
+
const externalSrc = $derived(src?.trim() || '');
|
|
70
|
+
const showSinglePreview = $derived(
|
|
71
|
+
variant === 'single' && (!!primaryFile || !!externalSrc)
|
|
72
|
+
);
|
|
73
|
+
const singlePreviewUrl = $derived(primaryFile?.previewUrl || externalSrc);
|
|
74
|
+
const singlePreviewName = $derived(primaryFile?.name || srcName || 'Media');
|
|
75
|
+
const singlePreviewMeta = $derived(primaryFile?.sizeFormatted || '');
|
|
54
76
|
|
|
55
77
|
const labelId = $derived(`${id}-label`);
|
|
56
78
|
const helperId = $derived(`${id}-helper`);
|
|
@@ -61,6 +83,13 @@
|
|
|
61
83
|
variant === 'avatar' && (!accept || accept === '*') ? 'image/*' : accept
|
|
62
84
|
);
|
|
63
85
|
|
|
86
|
+
const singleIsVideo = $derived(
|
|
87
|
+
primaryFile?.kind === 'video' ||
|
|
88
|
+
(!primaryFile &&
|
|
89
|
+
!!externalSrc &&
|
|
90
|
+
(resolvedAccept.includes('video') || /\.(mp4|webm|mov|m4v)(\?|$)/i.test(externalSrc)))
|
|
91
|
+
);
|
|
92
|
+
|
|
64
93
|
function formatBytes(bytes: number): string {
|
|
65
94
|
if (bytes === 0) return '0 B';
|
|
66
95
|
const k = 1024;
|
|
@@ -71,6 +100,8 @@
|
|
|
71
100
|
|
|
72
101
|
function getFileKind(file: File): FileKind {
|
|
73
102
|
if (file.type.startsWith('image/')) return 'image';
|
|
103
|
+
if (file.type.startsWith('video/')) return 'video';
|
|
104
|
+
if (file.type.startsWith('audio/')) return 'audio';
|
|
74
105
|
if (file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf')) return 'pdf';
|
|
75
106
|
if (
|
|
76
107
|
file.type.includes('document') ||
|
|
@@ -86,6 +117,8 @@
|
|
|
86
117
|
if (kind === 'pdf') return 'PDF';
|
|
87
118
|
if (kind === 'doc') return 'DOC';
|
|
88
119
|
if (kind === 'image') return 'IMG';
|
|
120
|
+
if (kind === 'video') return 'VID';
|
|
121
|
+
if (kind === 'audio') return 'AUD';
|
|
89
122
|
return 'FILE';
|
|
90
123
|
}
|
|
91
124
|
|
|
@@ -93,6 +126,8 @@
|
|
|
93
126
|
if (kind === 'pdf') return 'bg-red-50 text-red-600 dark:bg-red-950/50 dark:text-red-300';
|
|
94
127
|
if (kind === 'doc') return 'bg-sky-50 text-sky-700 dark:bg-sky-950/50 dark:text-sky-300';
|
|
95
128
|
if (kind === 'image') return 'bg-brand-50 text-brand-700 dark:bg-brand-950/50 dark:text-brand-300';
|
|
129
|
+
if (kind === 'video') return 'bg-violet-50 text-violet-700 dark:bg-violet-950/50 dark:text-violet-300';
|
|
130
|
+
if (kind === 'audio') return 'bg-emerald-50 text-emerald-700 dark:bg-emerald-950/50 dark:text-emerald-300';
|
|
96
131
|
return 'bg-surface-overlay text-secondary';
|
|
97
132
|
}
|
|
98
133
|
|
|
@@ -141,13 +176,14 @@
|
|
|
141
176
|
}
|
|
142
177
|
|
|
143
178
|
const kind = getFileKind(file);
|
|
179
|
+
const needsUrl = kind === 'image' || kind === 'video' || kind === 'audio';
|
|
144
180
|
nextItems.push({
|
|
145
181
|
file,
|
|
146
182
|
id: `${file.name}-${file.size}-${file.lastModified}-${Math.random().toString(36).slice(2, 7)}`,
|
|
147
183
|
name: file.name,
|
|
148
184
|
sizeFormatted: formatBytes(file.size),
|
|
149
185
|
kind,
|
|
150
|
-
previewUrl:
|
|
186
|
+
previewUrl: needsUrl ? URL.createObjectURL(file) : undefined
|
|
151
187
|
});
|
|
152
188
|
}
|
|
153
189
|
|
|
@@ -172,6 +208,10 @@
|
|
|
172
208
|
}
|
|
173
209
|
|
|
174
210
|
onchange?.(fileList.map((item) => item.file));
|
|
211
|
+
if (!showFileList && isMultiple) {
|
|
212
|
+
revokePreviews(fileList);
|
|
213
|
+
fileList = [];
|
|
214
|
+
}
|
|
175
215
|
if (fileInputNode) fileInputNode.value = '';
|
|
176
216
|
}
|
|
177
217
|
|
|
@@ -181,6 +221,17 @@
|
|
|
181
221
|
fileList = fileList.filter((item) => item.id !== id);
|
|
182
222
|
errorMessage = '';
|
|
183
223
|
onchange?.(fileList.map((item) => item.file));
|
|
224
|
+
if (fileList.length === 0) onclear?.();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function clearSingle() {
|
|
228
|
+
if (primaryFile) {
|
|
229
|
+
removeFile(primaryFile.id);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
errorMessage = '';
|
|
233
|
+
onchange?.([]);
|
|
234
|
+
onclear?.();
|
|
184
235
|
}
|
|
185
236
|
|
|
186
237
|
function clearAll() {
|
|
@@ -516,7 +567,7 @@
|
|
|
516
567
|
</div>
|
|
517
568
|
|
|
518
569
|
<!-- Single variant: preview card with edit -->
|
|
519
|
-
{:else if
|
|
570
|
+
{:else if showSinglePreview}
|
|
520
571
|
<div
|
|
521
572
|
class={[
|
|
522
573
|
'overflow-hidden rounded-xl border border-border bg-surface-elevated shadow-sm',
|
|
@@ -530,11 +581,20 @@
|
|
|
530
581
|
aria-labelledby={label ? labelId : undefined}
|
|
531
582
|
>
|
|
532
583
|
<div class="relative aspect-video bg-surface-overlay">
|
|
533
|
-
{#if
|
|
534
|
-
|
|
584
|
+
{#if singlePreviewUrl}
|
|
585
|
+
{#if singleIsVideo}
|
|
586
|
+
<video
|
|
587
|
+
src={singlePreviewUrl}
|
|
588
|
+
class="h-full w-full object-cover"
|
|
589
|
+
muted
|
|
590
|
+
playsinline
|
|
591
|
+
></video>
|
|
592
|
+
{:else}
|
|
593
|
+
<img src={singlePreviewUrl} alt="" class="h-full w-full object-cover" />
|
|
594
|
+
{/if}
|
|
535
595
|
{:else}
|
|
536
596
|
<div class="flex h-full w-full flex-col items-center justify-center gap-2">
|
|
537
|
-
{@render fileBadge(primaryFile
|
|
597
|
+
{@render fileBadge(primaryFile?.kind ?? 'other', 'h-14 w-14 rounded-xl text-xs')}
|
|
538
598
|
</div>
|
|
539
599
|
{/if}
|
|
540
600
|
|
|
@@ -556,9 +616,9 @@
|
|
|
556
616
|
</button>
|
|
557
617
|
<button
|
|
558
618
|
type="button"
|
|
559
|
-
onclick={
|
|
619
|
+
onclick={clearSingle}
|
|
560
620
|
class="inline-flex items-center justify-center rounded-lg bg-white/95 p-1.5 text-secondary shadow-sm backdrop-blur transition hover:bg-white hover:text-red-600 dark:bg-slate-900/95 dark:hover:bg-slate-900 dark:hover:text-red-400"
|
|
561
|
-
aria-label={`Remove ${
|
|
621
|
+
aria-label={`Remove ${singlePreviewName}`}
|
|
562
622
|
>
|
|
563
623
|
<svg class="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
564
624
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
|
|
@@ -570,8 +630,10 @@
|
|
|
570
630
|
|
|
571
631
|
<div class="flex items-center justify-between gap-3 border-t border-border px-4 py-3">
|
|
572
632
|
<div class="min-w-0">
|
|
573
|
-
<p class="truncate text-sm font-medium text-primary">{
|
|
574
|
-
|
|
633
|
+
<p class="truncate text-sm font-medium text-primary">{singlePreviewName}</p>
|
|
634
|
+
{#if singlePreviewMeta}
|
|
635
|
+
<p class="text-xs text-secondary">{singlePreviewMeta}</p>
|
|
636
|
+
{/if}
|
|
575
637
|
</div>
|
|
576
638
|
{#if helperText}
|
|
577
639
|
<p id={helperId} class="shrink-0 text-xs text-secondary">{helperText}</p>
|
|
@@ -579,8 +641,8 @@
|
|
|
579
641
|
</div>
|
|
580
642
|
</div>
|
|
581
643
|
|
|
582
|
-
<!--
|
|
583
|
-
{:else}
|
|
644
|
+
<!-- Dropzone: hide the big one when multiple already has files (compact “add more” below) -->
|
|
645
|
+
{:else if !(isMultiple && hasFile && showFileList)}
|
|
584
646
|
{@render dropzone()}
|
|
585
647
|
{/if}
|
|
586
648
|
|
|
@@ -588,8 +650,8 @@
|
|
|
588
650
|
<p id={errorId} class="text-xs text-red-600 dark:text-red-400" role="alert">{errorMessage}</p>
|
|
589
651
|
{/if}
|
|
590
652
|
|
|
591
|
-
<!-- Multiple file cards -->
|
|
592
|
-
{#if isMultiple && hasFile}
|
|
653
|
+
<!-- Multiple file cards (optional — MediaAssetBrowser owns its own grid) -->
|
|
654
|
+
{#if isMultiple && hasFile && showFileList}
|
|
593
655
|
{#if view === 'grid'}
|
|
594
656
|
<ul class="grid grid-cols-2 gap-2.5 sm:grid-cols-3" aria-label="Selected files">
|
|
595
657
|
{#each fileList as item (item.id)}
|
|
@@ -8,10 +8,21 @@ interface FileUploaderProps {
|
|
|
8
8
|
variant?: UploaderVariant;
|
|
9
9
|
view?: UploaderView;
|
|
10
10
|
showViewToggle?: boolean;
|
|
11
|
+
/** When false, only the dropzone is shown (parent owns the file list). */
|
|
12
|
+
showFileList?: boolean;
|
|
11
13
|
maxSizeMb?: number;
|
|
12
14
|
disabled?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* External preview URL for `single` / `avatar` when no File is selected yet
|
|
17
|
+
* (e.g. existing remote image in an editor inspector).
|
|
18
|
+
*/
|
|
19
|
+
src?: string;
|
|
20
|
+
/** Display name when using `src` without a File */
|
|
21
|
+
srcName?: string;
|
|
13
22
|
class?: string;
|
|
14
23
|
onchange?: (files: File[]) => void;
|
|
24
|
+
/** Fired when the user clears the current file / src preview */
|
|
25
|
+
onclear?: () => void;
|
|
15
26
|
}
|
|
16
27
|
declare const FileUploader: import("svelte").Component<FileUploaderProps, {}, "view">;
|
|
17
28
|
type FileUploader = ReturnType<typeof FileUploader>;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Wizard from '../Wizard/Wizard.svelte';
|
|
3
|
+
import DropZone from '../../molecules/DropZone/DropZone.svelte';
|
|
4
|
+
import Select from '../../molecules/Select/Select.svelte';
|
|
5
|
+
import Button from '../../atoms/Button/Button.svelte';
|
|
6
|
+
import type { StepItem } from '../../molecules/Stepper/Stepper.svelte';
|
|
7
|
+
|
|
8
|
+
export interface ImportColumn {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ImportMapping {
|
|
14
|
+
source: string;
|
|
15
|
+
target: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface ImportResult {
|
|
19
|
+
rows: Record<string, string>[];
|
|
20
|
+
headers: string[];
|
|
21
|
+
mapping: ImportMapping[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface ImportWizardProps {
|
|
25
|
+
columns?: ImportColumn[];
|
|
26
|
+
class?: string;
|
|
27
|
+
onimport?: (result: ImportResult) => void;
|
|
28
|
+
oncancel?: () => void;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let {
|
|
32
|
+
columns = [],
|
|
33
|
+
class: className = '',
|
|
34
|
+
onimport,
|
|
35
|
+
oncancel
|
|
36
|
+
}: ImportWizardProps = $props();
|
|
37
|
+
|
|
38
|
+
const steps: StepItem[] = [
|
|
39
|
+
{ id: 'upload', label: 'Upload', description: 'CSV or TSV file' },
|
|
40
|
+
{ id: 'map', label: 'Map columns', description: 'Match fields' },
|
|
41
|
+
{ id: 'confirm', label: 'Confirm', description: 'Review & import' }
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
let current = $state(0);
|
|
45
|
+
let files = $state<File[]>([]);
|
|
46
|
+
let headers = $state<string[]>([]);
|
|
47
|
+
let rows = $state<Record<string, string>[]>([]);
|
|
48
|
+
let mapping = $state<ImportMapping[]>([]);
|
|
49
|
+
let parseError = $state('');
|
|
50
|
+
|
|
51
|
+
function parseCsv(text: string): { headers: string[]; rows: Record<string, string>[] } {
|
|
52
|
+
const lines = text
|
|
53
|
+
.replace(/^\uFEFF/, '')
|
|
54
|
+
.split(/\r?\n/)
|
|
55
|
+
.filter((l) => l.trim().length);
|
|
56
|
+
if (!lines.length) return { headers: [], rows: [] };
|
|
57
|
+
const delim = lines[0].includes('\t') ? '\t' : ',';
|
|
58
|
+
const split = (line: string) =>
|
|
59
|
+
line.split(delim).map((c) => c.replace(/^"|"$/g, '').trim());
|
|
60
|
+
const hdrs = split(lines[0]);
|
|
61
|
+
const parsed = lines.slice(1).map((line) => {
|
|
62
|
+
const cells = split(line);
|
|
63
|
+
const row: Record<string, string> = {};
|
|
64
|
+
hdrs.forEach((h, i) => {
|
|
65
|
+
row[h] = cells[i] ?? '';
|
|
66
|
+
});
|
|
67
|
+
return row;
|
|
68
|
+
});
|
|
69
|
+
return { headers: hdrs, rows: parsed };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function loadFile(list: File[]) {
|
|
73
|
+
files = list;
|
|
74
|
+
parseError = '';
|
|
75
|
+
const file = list[0];
|
|
76
|
+
if (!file) {
|
|
77
|
+
headers = [];
|
|
78
|
+
rows = [];
|
|
79
|
+
mapping = [];
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const text = await file.text();
|
|
84
|
+
const parsed = parseCsv(text);
|
|
85
|
+
headers = parsed.headers;
|
|
86
|
+
rows = parsed.rows;
|
|
87
|
+
mapping = headers.map((h) => {
|
|
88
|
+
const match = columns.find(
|
|
89
|
+
(c) => c.id === h || c.label.toLowerCase() === h.toLowerCase()
|
|
90
|
+
);
|
|
91
|
+
return { source: h, target: match?.id ?? '' };
|
|
92
|
+
});
|
|
93
|
+
} catch {
|
|
94
|
+
parseError = 'Could not parse file';
|
|
95
|
+
headers = [];
|
|
96
|
+
rows = [];
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function setTarget(source: string, target: string) {
|
|
101
|
+
mapping = mapping.map((m) => (m.source === source ? { ...m, target } : m));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function mappedPreview(): Record<string, string>[] {
|
|
105
|
+
return rows.slice(0, 5).map((row) => {
|
|
106
|
+
const out: Record<string, string> = {};
|
|
107
|
+
for (const m of mapping) {
|
|
108
|
+
if (!m.target) continue;
|
|
109
|
+
out[m.target] = row[m.source] ?? '';
|
|
110
|
+
}
|
|
111
|
+
return out;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function finish() {
|
|
116
|
+
onimport?.({ rows, headers, mapping: mapping.filter((m) => m.target) });
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const canNext = $derived(
|
|
120
|
+
current === 0 ? headers.length > 0 && !parseError : current === 1 ? mapping.some((m) => m.target) : true
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
const targetOptions = $derived([
|
|
124
|
+
{ value: '', label: '— skip —' },
|
|
125
|
+
...columns.map((c) => ({ value: c.id, label: c.label }))
|
|
126
|
+
]);
|
|
127
|
+
</script>
|
|
128
|
+
|
|
129
|
+
<div class={['w-full max-w-2xl', className]} data-import-wizard>
|
|
130
|
+
<Wizard
|
|
131
|
+
{steps}
|
|
132
|
+
bind:current
|
|
133
|
+
{canNext}
|
|
134
|
+
finishLabel="Import"
|
|
135
|
+
eyebrow="Import"
|
|
136
|
+
onfinish={finish}
|
|
137
|
+
onback={() => {
|
|
138
|
+
if (current === 0) oncancel?.();
|
|
139
|
+
}}
|
|
140
|
+
>
|
|
141
|
+
{#snippet children(step)}
|
|
142
|
+
{#if step === 0}
|
|
143
|
+
<div class="flex flex-col gap-3">
|
|
144
|
+
<DropZone
|
|
145
|
+
bind:files
|
|
146
|
+
multiple={false}
|
|
147
|
+
accept=".csv,.tsv,text/csv,text/tab-separated-values"
|
|
148
|
+
label="Drop CSV / TSV here"
|
|
149
|
+
hint="or click to browse"
|
|
150
|
+
onchange={loadFile}
|
|
151
|
+
ondropfiles={loadFile}
|
|
152
|
+
/>
|
|
153
|
+
{#if parseError}
|
|
154
|
+
<p class="text-sm text-red-600">{parseError}</p>
|
|
155
|
+
{:else if headers.length}
|
|
156
|
+
<p class="text-xs text-muted">
|
|
157
|
+
Detected {headers.length} columns · {rows.length} rows
|
|
158
|
+
</p>
|
|
159
|
+
{/if}
|
|
160
|
+
</div>
|
|
161
|
+
{:else if step === 1}
|
|
162
|
+
<div class="flex flex-col gap-2">
|
|
163
|
+
{#each mapping as m (m.source)}
|
|
164
|
+
<div class="grid grid-cols-[1fr_auto_1fr] items-center gap-2">
|
|
165
|
+
<code class="truncate rounded-lg bg-surface-overlay px-2 py-1.5 text-xs">{m.source}</code>
|
|
166
|
+
<span class="text-xs text-muted">→</span>
|
|
167
|
+
<Select
|
|
168
|
+
value={m.target}
|
|
169
|
+
options={targetOptions}
|
|
170
|
+
onchange={(v) => setTarget(m.source, v)}
|
|
171
|
+
size="sm"
|
|
172
|
+
/>
|
|
173
|
+
</div>
|
|
174
|
+
{/each}
|
|
175
|
+
</div>
|
|
176
|
+
{:else}
|
|
177
|
+
<div class="flex flex-col gap-3">
|
|
178
|
+
<p class="text-sm text-secondary">
|
|
179
|
+
Ready to import <strong>{rows.length}</strong> rows with
|
|
180
|
+
<strong>{mapping.filter((m) => m.target).length}</strong> mapped fields.
|
|
181
|
+
</p>
|
|
182
|
+
<div class="overflow-auto rounded-xl border border-border">
|
|
183
|
+
<table class="min-w-full text-left text-xs">
|
|
184
|
+
<thead class="bg-surface-overlay text-muted">
|
|
185
|
+
<tr>
|
|
186
|
+
{#each mapping.filter((m) => m.target) as m (m.target)}
|
|
187
|
+
<th class="px-2 py-1.5 font-medium">{m.target}</th>
|
|
188
|
+
{/each}
|
|
189
|
+
</tr>
|
|
190
|
+
</thead>
|
|
191
|
+
<tbody>
|
|
192
|
+
{#each mappedPreview() as row, i (i)}
|
|
193
|
+
<tr class="border-t border-border">
|
|
194
|
+
{#each mapping.filter((m) => m.target) as m (m.target)}
|
|
195
|
+
<td class="px-2 py-1.5 text-primary">{row[m.target]}</td>
|
|
196
|
+
{/each}
|
|
197
|
+
</tr>
|
|
198
|
+
{/each}
|
|
199
|
+
</tbody>
|
|
200
|
+
</table>
|
|
201
|
+
</div>
|
|
202
|
+
{#if oncancel}
|
|
203
|
+
<Button variant="ghost" size="sm" onclick={() => oncancel?.()}>Cancel</Button>
|
|
204
|
+
{/if}
|
|
205
|
+
</div>
|
|
206
|
+
{/if}
|
|
207
|
+
{/snippet}
|
|
208
|
+
</Wizard>
|
|
209
|
+
</div>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface ImportColumn {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ImportMapping {
|
|
6
|
+
source: string;
|
|
7
|
+
target: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ImportResult {
|
|
10
|
+
rows: Record<string, string>[];
|
|
11
|
+
headers: string[];
|
|
12
|
+
mapping: ImportMapping[];
|
|
13
|
+
}
|
|
14
|
+
interface ImportWizardProps {
|
|
15
|
+
columns?: ImportColumn[];
|
|
16
|
+
class?: string;
|
|
17
|
+
onimport?: (result: ImportResult) => void;
|
|
18
|
+
oncancel?: () => void;
|
|
19
|
+
}
|
|
20
|
+
declare const ImportWizard: import("svelte").Component<ImportWizardProps, {}, "">;
|
|
21
|
+
type ImportWizard = ReturnType<typeof ImportWizard>;
|
|
22
|
+
export default ImportWizard;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import ImportWizard from './ImportWizard.svelte';
|
|
3
|
+
|
|
4
|
+
const columns = [
|
|
5
|
+
{ id: 'name', label: 'Name' },
|
|
6
|
+
{ id: 'email', label: 'Email' },
|
|
7
|
+
{ id: 'role', label: 'Role' }
|
|
8
|
+
];
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<div class="p-6">
|
|
12
|
+
<ImportWizard
|
|
13
|
+
{columns}
|
|
14
|
+
onimport={(r) => console.log('import', r)}
|
|
15
|
+
/>
|
|
16
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const ImportWizardStory: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type ImportWizardStory = InstanceType<typeof ImportWizardStory>;
|
|
18
|
+
export default ImportWizardStory;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/svelte';
|
|
2
|
+
declare const meta: {
|
|
3
|
+
title: string;
|
|
4
|
+
component: import("svelte").Component<Record<string, never>, {}, "">;
|
|
5
|
+
tags: string[];
|
|
6
|
+
parameters: {
|
|
7
|
+
layout: string;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
export default meta;
|
|
11
|
+
type Story = StoryObj<typeof meta>;
|
|
12
|
+
export declare const Default: Story;
|