dishui 0.0.64 → 0.0.66
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/_virtual/_rolldown/runtime.js +10 -11
- package/dist/chart.js +12 -46
- package/dist/code-editor.js +16 -43
- package/dist/components/Badge/index.js +11 -13
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.js +62 -86
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/index.d.ts +87 -0
- package/dist/components/Card/index.js +178 -44
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Chart/Chart.js +25 -25
- package/dist/components/Chart/Chart.js.map +1 -1
- package/dist/components/Checkbox/index.js +57 -63
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/ChoicePicker/index.d.ts +44 -0
- package/dist/components/ChoicePicker/index.js +81 -0
- package/dist/components/ChoicePicker/index.js.map +1 -0
- package/dist/components/Column/index.d.ts +28 -0
- package/dist/components/Column/index.js +30 -0
- package/dist/components/Column/index.js.map +1 -0
- package/dist/components/DateTimeInput/index.d.ts +44 -0
- package/dist/components/DateTimeInput/index.js +48 -0
- package/dist/components/DateTimeInput/index.js.map +1 -0
- package/dist/components/Demo/index.js +107 -107
- package/dist/components/Demo/index.js.map +1 -1
- package/dist/components/Divider/index.d.ts +20 -0
- package/dist/components/Divider/index.js +30 -0
- package/dist/components/Divider/index.js.map +1 -0
- package/dist/components/EmptyState/index.d.ts +4 -1
- package/dist/components/EmptyState/index.js +24 -24
- package/dist/components/EmptyState/index.js.map +1 -1
- package/dist/components/FileUploader/DropZone.js +134 -136
- package/dist/components/FileUploader/DropZone.js.map +1 -1
- package/dist/components/FileUploader/FileItem.js +159 -163
- package/dist/components/FileUploader/FileItem.js.map +1 -1
- package/dist/components/FileUploader/FileUploader.js +126 -127
- package/dist/components/FileUploader/FileUploader.js.map +1 -1
- package/dist/components/FileUploader/UploadQueue.js +62 -62
- package/dist/components/FileUploader/UploadQueue.js.map +1 -1
- package/dist/components/FloatWindow/index.d.ts +28 -0
- package/dist/components/GridLayout/index.d.ts +42 -0
- package/dist/components/Icon/index.d.ts +24 -0
- package/dist/components/Icon/index.js +26 -0
- package/dist/components/Icon/index.js.map +1 -0
- package/dist/components/Image/index.d.ts +33 -0
- package/dist/components/Image/index.js +44 -0
- package/dist/components/Image/index.js.map +1 -0
- package/dist/components/Input/index.js +196 -197
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Label/index.js +62 -73
- package/dist/components/Label/index.js.map +1 -1
- package/dist/components/Layout/index.js +134 -139
- package/dist/components/Layout/index.js.map +1 -1
- package/dist/components/List/index.js +45 -43
- package/dist/components/List/index.js.map +1 -1
- package/dist/components/Markdown/Markdown.js +106 -103
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Markdown/codeThemes.js +24 -33
- package/dist/components/Markdown/codeThemes.js.map +1 -1
- package/dist/components/Markdown/markdownComponents.js +203 -208
- package/dist/components/Markdown/markdownComponents.js.map +1 -1
- package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
- package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
- package/dist/components/Markdown/useMarkdownSource.js +46 -46
- package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
- package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
- package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
- package/dist/components/Markdown/useMermaidRenderer.js +41 -42
- package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
- package/dist/components/Modal/index.d.ts +7 -3
- package/dist/components/Modal/index.js +82 -70
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/MultipleChoice/index.d.ts +44 -0
- package/dist/components/MultipleChoice/index.js +52 -0
- package/dist/components/MultipleChoice/index.js.map +1 -0
- package/dist/components/Notification/index.d.ts +17 -0
- package/dist/components/Page/index.d.ts +58 -0
- package/dist/components/Page/index.js +43 -0
- package/dist/components/Page/index.js.map +1 -0
- package/dist/components/PageHeader/index.js +28 -28
- package/dist/components/PageHeader/index.js.map +1 -1
- package/dist/components/ProtectedRoute/index.js +8 -9
- package/dist/components/ProtectedRoute/index.js.map +1 -1
- package/dist/components/Row/index.d.ts +28 -0
- package/dist/components/Row/index.js +30 -0
- package/dist/components/Row/index.js.map +1 -0
- package/dist/components/Select/index.js +251 -257
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/SidebarToggleButton/index.js +56 -59
- package/dist/components/SidebarToggleButton/index.js.map +1 -1
- package/dist/components/Slider/index.d.ts +39 -0
- package/dist/components/Slider/index.js +52 -0
- package/dist/components/Slider/index.js.map +1 -0
- package/dist/components/StatCard/index.d.ts +31 -1
- package/dist/components/StatCard/index.js +189 -58
- package/dist/components/StatCard/index.js.map +1 -1
- package/dist/components/Switch/index.d.ts +34 -0
- package/dist/components/Switch/index.js +55 -0
- package/dist/components/Switch/index.js.map +1 -0
- package/dist/components/Tab/index.d.ts +40 -0
- package/dist/components/Table/index.js +109 -103
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Tabs/index.d.ts +19 -5
- package/dist/components/Tabs/index.js +30 -21
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Text/index.d.ts +43 -0
- package/dist/components/Text/index.js +55 -0
- package/dist/components/Text/index.js.map +1 -0
- package/dist/components/Tooltip/index.d.ts +23 -0
- package/dist/components/Tooltip/index.js +34 -0
- package/dist/components/Tooltip/index.js.map +1 -0
- package/dist/components/Tree/Tree.js +205 -205
- package/dist/components/Tree/Tree.js.map +1 -1
- package/dist/components/pro/ArticleContextMenu/index.js +86 -87
- package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
- package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
- package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
- package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
- package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
- package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
- package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
- package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
- package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
- package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
- package/dist/components/pro/Calendar/index.d.ts +7 -0
- package/dist/components/pro/Calendar/types.d.ts +151 -0
- package/dist/components/pro/Calendar/utils.d.ts +94 -0
- package/dist/components/pro/Chat/Chat.d.ts +6 -0
- package/dist/components/pro/Chat/index.d.ts +2 -0
- package/dist/components/pro/Chat/types.d.ts +84 -0
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -320
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -221
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
- package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
- package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
- package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
- package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
- package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/index.js +7 -15
- package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
- package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/python.js +4 -40
- package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
- package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
- package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
- package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
- package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
- package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/themes.js +513 -483
- package/dist/components/pro/CodeEditor/themes.js.map +1 -1
- package/dist/components/pro/CodeEditor/types.d.ts +1 -1
- package/dist/components/pro/CodeEditor/utils.js +171 -175
- package/dist/components/pro/CodeEditor/utils.js.map +1 -1
- package/dist/components/pro/DataTable/DataTable.js +305 -305
- package/dist/components/pro/DataTable/DataTable.js.map +1 -1
- package/dist/components/pro/DataTable/Filters.js +299 -314
- package/dist/components/pro/DataTable/Filters.js.map +1 -1
- package/dist/components/pro/DataTable/PivotPanel.js +203 -204
- package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
- package/dist/components/pro/DataTable/PivotView.js +142 -141
- package/dist/components/pro/DataTable/PivotView.js.map +1 -1
- package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
- package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
- package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
- package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
- package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
- package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableBody.js +93 -94
- package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
- package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
- package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
- package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
- package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
- package/dist/components/pro/DataTable/extension.js +5 -5
- package/dist/components/pro/DataTable/extension.js.map +1 -1
- package/dist/components/pro/DataTable/pivotEngine.js +84 -92
- package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
- package/dist/components/pro/DataTable/pivotExtension.js +93 -93
- package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/DataTable/tanstack-table.js +45 -62
- package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
- package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
- package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
- package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
- package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
- package/dist/components/pro/DataTable/utils.js +156 -168
- package/dist/components/pro/DataTable/utils.js.map +1 -1
- package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
- package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
- package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
- package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
- package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileIcon.js +190 -190
- package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
- package/dist/components/pro/FileExplorer/GridView.js +100 -100
- package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
- package/dist/components/pro/FileExplorer/ListView.js +209 -209
- package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
- package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
- package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
- package/dist/components/pro/Flow/Flow.js +920 -946
- package/dist/components/pro/Flow/Flow.js.map +1 -1
- package/dist/components/pro/Flow/FlowCanvas.js +1626 -1663
- package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
- package/dist/components/pro/Flow/archify/build.js +85 -94
- package/dist/components/pro/Flow/archify/build.js.map +1 -1
- package/dist/components/pro/Flow/archify/convert.js +512 -519
- package/dist/components/pro/Flow/archify/convert.js.map +1 -1
- package/dist/components/pro/Flow/archify/palette.js +87 -104
- package/dist/components/pro/Flow/archify/palette.js.map +1 -1
- package/dist/components/pro/Flow/archify/presets.js +34 -37
- package/dist/components/pro/Flow/archify/presets.js.map +1 -1
- package/dist/components/pro/Flow/archify/spec.js +7 -7
- package/dist/components/pro/Flow/archify/spec.js.map +1 -1
- package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
- package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
- package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
- package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
- package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
- package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
- package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
- package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
- package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
- package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
- package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
- package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
- package/dist/components/pro/Flow/constants.js +266 -278
- package/dist/components/pro/Flow/constants.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
- package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowContext.js +60 -61
- package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
- package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
- package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
- package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
- package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
- package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
- package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
- package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
- package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
- package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
- package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
- package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
- package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
- package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
- package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -182
- package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
- package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
- package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
- package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
- package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
- package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
- package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
- package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
- package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
- package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
- package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
- package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
- package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
- package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
- package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
- package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
- package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
- package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -222
- package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
- package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
- package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
- package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
- package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
- package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
- package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
- package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
- package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
- package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
- package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
- package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
- package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
- package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/shapes.js +556 -591
- package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
- package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
- package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
- package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
- package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
- package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
- package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
- package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
- package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
- package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
- package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
- package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
- package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
- package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
- package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
- package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
- package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
- package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -244
- package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/PresentationMode.js +137 -138
- package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
- package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
- package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
- package/dist/components/pro/Flow/panels/ShapePalette.js +557 -567
- package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
- package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
- package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
- package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
- package/dist/components/pro/Flow/types.js +26 -26
- package/dist/components/pro/Flow/types.js.map +1 -1
- package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
- package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
- package/dist/components/pro/Flow/utils/gradient.js +55 -55
- package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
- package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
- package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
- package/dist/components/pro/Flow/utils/themeColor.js +185 -195
- package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
- package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
- package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
- package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
- package/dist/components/pro/Gantt/index.d.ts +6 -0
- package/dist/components/pro/Gantt/types.d.ts +478 -0
- package/dist/components/pro/Gantt/utils.d.ts +124 -0
- package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
- package/dist/components/pro/Resizable/index.d.ts +2 -0
- package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
- package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
- package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
- package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
- package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
- package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
- package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
- package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
- package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
- package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
- package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
- package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
- package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
- package/dist/components/pro/RichTextEditor/types.js +75 -75
- package/dist/components/pro/RichTextEditor/types.js.map +1 -1
- package/dist/contexts/AppContext.d.ts +1 -1
- package/dist/contexts/AppContext.js +216 -221
- package/dist/contexts/AppContext.js.map +1 -1
- package/dist/data-table.js +15 -41
- package/dist/data-table.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/flow.js +27 -83
- package/dist/hooks/useClickOutside.js +18 -18
- package/dist/hooks/useClickOutside.js.map +1 -1
- package/dist/hooks/useContainerElement.js +9 -9
- package/dist/hooks/useContainerElement.js.map +1 -1
- package/dist/hooks/useControllableState.js +33 -35
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useCopyToClipboard.js +16 -16
- package/dist/hooks/useCopyToClipboard.js.map +1 -1
- package/dist/hooks/useDebounce.js +14 -14
- package/dist/hooks/useDebounce.js.map +1 -1
- package/dist/hooks/useDraggable.js +50 -50
- package/dist/hooks/useDraggable.js.map +1 -1
- package/dist/hooks/useTableColumns.js +39 -42
- package/dist/hooks/useTableColumns.js.map +1 -1
- package/dist/hooks/useTableData.js +67 -68
- package/dist/hooks/useTableData.js.map +1 -1
- package/dist/index-nostyled.d.ts +8 -0
- package/dist/index.d.ts +29 -1
- package/dist/index.js +106 -236
- package/dist/layouts/MainLayout.js +56 -56
- package/dist/layouts/MainLayout.js.map +1 -1
- package/dist/layouts/Navbar.js +214 -214
- package/dist/layouts/Navbar.js.map +1 -1
- package/dist/layouts/Sidebar.js +184 -165
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/layouts/headbar/Headbar.js +25 -25
- package/dist/layouts/headbar/Headbar.js.map +1 -1
- package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
- package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarSearch.js +120 -120
- package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarTitle.js +26 -26
- package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
- package/dist/lite.js +9 -24
- package/dist/markdown.js +4 -9
- package/dist/pages/components/Calendar/index.d.ts +3 -0
- package/dist/pages/components/Calendar/index.en.d.ts +3 -0
- package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
- package/dist/pages/components/Chat/index.d.ts +3 -0
- package/dist/pages/components/Chat/index.en.d.ts +3 -0
- package/dist/pages/components/Chat/index.zh.d.ts +3 -0
- package/dist/pages/components/FloatWindow/index.d.ts +3 -0
- package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
- package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
- package/dist/pages/components/Gantt/index.d.ts +3 -0
- package/dist/pages/components/Gantt/index.en.d.ts +3 -0
- package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
- package/dist/pages/components/GridLayout/index.d.ts +3 -0
- package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
- package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
- package/dist/pages/components/Notification/index.d.ts +3 -0
- package/dist/pages/components/Notification/index.en.d.ts +3 -0
- package/dist/pages/components/Notification/index.zh.d.ts +3 -0
- package/dist/pages/components/Resizable/index.d.ts +3 -0
- package/dist/pages/components/Resizable/index.en.d.ts +3 -0
- package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
- package/dist/pages/components/Tab/index.d.ts +3 -0
- package/dist/pages/components/Tab/index.en.d.ts +3 -0
- package/dist/pages/components/Tab/index.zh.d.ts +3 -0
- package/dist/styles/themeStyles.js +87 -86
- package/dist/styles/themeStyles.js.map +1 -1
- package/dist/utils/cn.d.ts +13 -0
- package/dist/utils/cn.js +16 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/i18n.js +690 -602
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/menu.js +94 -94
- package/dist/utils/menu.js.map +1 -1
- package/dist/utils/rehype-code-meta.js +14 -14
- package/dist/utils/rehype-code-meta.js.map +1 -1
- package/dist/utils/remark-code-meta.js +9 -9
- package/dist/utils/remark-code-meta.js.map +1 -1
- package/dist/utils/routerBuilder.js +59 -58
- package/dist/utils/routerBuilder.js.map +1 -1
- package/dist/utils/selection.js +28 -29
- package/dist/utils/selection.js.map +1 -1
- package/dist/utils/themes.js +275 -255
- package/dist/utils/themes.js.map +1 -1
- package/package.json +23 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClipboard.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useClipboard.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\nimport { generateId } from '../nodes/nodeUtils';\nimport type { FlowNode, FlowEdge, FlowLine } from '../types';\n\ninterface ClipboardData {\n nodes: FlowNode[];\n edges: FlowEdge[];\n lines: FlowLine[];\n}\n\n/**\n * Copy/paste/cut for selected flow elements.\n * Uses internal clipboard (not system clipboard) for structured data.\n */\nexport function useClipboard() {\n const { currentCanvas, selection, setDoc, currentCanvasId, setSelection } = useFlowContext();\n const clipboardRef = useRef<ClipboardData | null>(null);\n\n const copy = useCallback(() => {\n const nodes = currentCanvas.nodes.filter(n => selection.nodeIds.has(n.id));\n const edges = currentCanvas.edges.filter(e => selection.edgeIds.has(e.id));\n const lines = currentCanvas.lines.filter(l => selection.lineIds.has(l.id));\n\n // Also include edges that connect selected nodes\n const nodeIds = new Set(nodes.map(n => n.id));\n const connectedEdges = currentCanvas.edges.filter(\n e => nodeIds.has(e.source) && nodeIds.has(e.target) && !selection.edgeIds.has(e.id),\n );\n\n clipboardRef.current = {\n nodes: [...nodes],\n edges: [...edges, ...connectedEdges],\n lines: [...lines],\n };\n }, [currentCanvas, selection]);\n\n const cut = useCallback(() => {\n copy();\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.filter(n => !selection.nodeIds.has(n.id)),\n edges: canvas.edges.filter(e =>\n !selection.edgeIds.has(e.id) &&\n !selection.nodeIds.has(e.source) &&\n !selection.nodeIds.has(e.target),\n ),\n lines: canvas.lines.filter(l => !selection.lineIds.has(l.id)),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [copy, setDoc, currentCanvasId, selection, setSelection]);\n\n const paste = useCallback((offsetX = 20, offsetY = 20) => {\n const cb = clipboardRef.current;\n if (!cb) return;\n\n const idMap = new Map<string, string>();\n const newNodes: FlowNode[] = cb.nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return {\n ...n,\n id: newId,\n position: { x: n.position.x + offsetX, y: n.position.y + offsetY },\n data: { ...n.data },\n };\n });\n\n const newEdges: FlowEdge[] = cb.edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = cb.lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [setDoc, currentCanvasId, setSelection]);\n\n const hasClipboard = clipboardRef.current !== null;\n\n /**\n * Duplicate the current selection in place (Cmd/Ctrl+D). Unlike copy+paste\n * this does NOT touch the clipboard, so a prior copy stays intact. Clones the\n * selected nodes (plus edges wholly between them) and lines with a small\n * offset, then selects the clones.\n */\n const duplicate = useCallback((\n offsetX = 24,\n offsetY = 24,\n targets?: { nodeIds?: Set<string>; edgeIds?: Set<string>; lineIds?: Set<string> },\n ) => {\n const nodeSel = targets?.nodeIds ?? selection.nodeIds;\n const edgeSel = targets?.edgeIds ?? selection.edgeIds;\n const lineSel = targets?.lineIds ?? selection.lineIds;\n const nodes = currentCanvas.nodes.filter(n => nodeSel.has(n.id));\n const lines = currentCanvas.lines.filter(l => lineSel.has(l.id));\n const nodeIdSet = new Set(nodes.map(n => n.id));\n const edges = currentCanvas.edges.filter(e =>\n edgeSel.has(e.id) ||\n (nodeIdSet.has(e.source) && nodeIdSet.has(e.target)),\n );\n if (nodes.length === 0 && lines.length === 0 && edges.length === 0) return;\n\n const idMap = new Map<string, string>();\n // Assign fresh ids to nodes first so intra-selection edges can be remapped.\n const newNodes: FlowNode[] = nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return { ...n, id: newId, position: { x: n.position.x + offsetX, y: n.position.y + offsetY }, data: { ...n.data } };\n });\n // Re-parent cloned children onto cloned groups when both were duplicated.\n for (const n of newNodes) {\n if (n.parentId && idMap.has(n.parentId)) n.parentId = idMap.get(n.parentId);\n }\n\n const newEdges: FlowEdge[] = edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [currentCanvas, selection, setDoc, currentCanvasId, setSelection]);\n\n return { copy, cut, paste, duplicate, hasClipboard };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useClipboard.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useClipboard.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\nimport { generateId } from '../nodes/nodeUtils';\nimport type { FlowNode, FlowEdge, FlowLine } from '../types';\n\ninterface ClipboardData {\n nodes: FlowNode[];\n edges: FlowEdge[];\n lines: FlowLine[];\n}\n\n/**\n * Copy/paste/cut for selected flow elements.\n * Uses internal clipboard (not system clipboard) for structured data.\n */\nexport function useClipboard() {\n const { currentCanvas, selection, setDoc, currentCanvasId, setSelection } = useFlowContext();\n const clipboardRef = useRef<ClipboardData | null>(null);\n\n const copy = useCallback(() => {\n const nodes = currentCanvas.nodes.filter(n => selection.nodeIds.has(n.id));\n const edges = currentCanvas.edges.filter(e => selection.edgeIds.has(e.id));\n const lines = currentCanvas.lines.filter(l => selection.lineIds.has(l.id));\n\n // Also include edges that connect selected nodes\n const nodeIds = new Set(nodes.map(n => n.id));\n const connectedEdges = currentCanvas.edges.filter(\n e => nodeIds.has(e.source) && nodeIds.has(e.target) && !selection.edgeIds.has(e.id),\n );\n\n clipboardRef.current = {\n nodes: [...nodes],\n edges: [...edges, ...connectedEdges],\n lines: [...lines],\n };\n }, [currentCanvas, selection]);\n\n const cut = useCallback(() => {\n copy();\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes.filter(n => !selection.nodeIds.has(n.id)),\n edges: canvas.edges.filter(e =>\n !selection.edgeIds.has(e.id) &&\n !selection.nodeIds.has(e.source) &&\n !selection.nodeIds.has(e.target),\n ),\n lines: canvas.lines.filter(l => !selection.lineIds.has(l.id)),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [copy, setDoc, currentCanvasId, selection, setSelection]);\n\n const paste = useCallback((offsetX = 20, offsetY = 20) => {\n const cb = clipboardRef.current;\n if (!cb) return;\n\n const idMap = new Map<string, string>();\n const newNodes: FlowNode[] = cb.nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return {\n ...n,\n id: newId,\n position: { x: n.position.x + offsetX, y: n.position.y + offsetY },\n data: { ...n.data },\n };\n });\n\n const newEdges: FlowEdge[] = cb.edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = cb.lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [setDoc, currentCanvasId, setSelection]);\n\n const hasClipboard = clipboardRef.current !== null;\n\n /**\n * Duplicate the current selection in place (Cmd/Ctrl+D). Unlike copy+paste\n * this does NOT touch the clipboard, so a prior copy stays intact. Clones the\n * selected nodes (plus edges wholly between them) and lines with a small\n * offset, then selects the clones.\n */\n const duplicate = useCallback((\n offsetX = 24,\n offsetY = 24,\n targets?: { nodeIds?: Set<string>; edgeIds?: Set<string>; lineIds?: Set<string> },\n ) => {\n const nodeSel = targets?.nodeIds ?? selection.nodeIds;\n const edgeSel = targets?.edgeIds ?? selection.edgeIds;\n const lineSel = targets?.lineIds ?? selection.lineIds;\n const nodes = currentCanvas.nodes.filter(n => nodeSel.has(n.id));\n const lines = currentCanvas.lines.filter(l => lineSel.has(l.id));\n const nodeIdSet = new Set(nodes.map(n => n.id));\n const edges = currentCanvas.edges.filter(e =>\n edgeSel.has(e.id) ||\n (nodeIdSet.has(e.source) && nodeIdSet.has(e.target)),\n );\n if (nodes.length === 0 && lines.length === 0 && edges.length === 0) return;\n\n const idMap = new Map<string, string>();\n // Assign fresh ids to nodes first so intra-selection edges can be remapped.\n const newNodes: FlowNode[] = nodes.map(n => {\n const newId = generateId('node');\n idMap.set(n.id, newId);\n return { ...n, id: newId, position: { x: n.position.x + offsetX, y: n.position.y + offsetY }, data: { ...n.data } };\n });\n // Re-parent cloned children onto cloned groups when both were duplicated.\n for (const n of newNodes) {\n if (n.parentId && idMap.has(n.parentId)) n.parentId = idMap.get(n.parentId);\n }\n\n const newEdges: FlowEdge[] = edges\n .filter(e => idMap.has(e.source) && idMap.has(e.target))\n .map(e => ({\n ...e,\n id: generateId('edge'),\n source: idMap.get(e.source)!,\n target: idMap.get(e.target)!,\n data: { ...e.data },\n }));\n\n const newLines: FlowLine[] = lines.map(l => ({\n ...l,\n id: generateId('line'),\n points: l.points.map(p => ({ x: p.x + offsetX, y: p.y + offsetY })),\n }));\n\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: [...canvas.nodes, ...newNodes],\n edges: [...canvas.edges, ...newEdges],\n lines: [...canvas.lines, ...newLines],\n },\n },\n };\n });\n\n setSelection({\n nodeIds: new Set(newNodes.map(n => n.id)),\n edgeIds: new Set(newEdges.map(e => e.id)),\n lineIds: new Set(newLines.map(l => l.id)),\n });\n }, [currentCanvas, selection, setDoc, currentCanvasId, setSelection]);\n\n return { copy, cut, paste, duplicate, hasClipboard };\n}\n"],"mappings":"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"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { useEffect as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { useEffect as e, useState as t } from "react";
|
|
2
|
+
//#region src/components/pro/Flow/hooks/useCompactMode.ts
|
|
3
|
+
function n(n, r = 768) {
|
|
4
|
+
let [i, a] = t(!1);
|
|
5
|
+
return e(() => {
|
|
6
|
+
let e = n.current;
|
|
7
|
+
if (!e) return;
|
|
8
|
+
let t = () => {
|
|
9
|
+
let t = e.clientWidth;
|
|
10
|
+
t > 0 && a(t < r);
|
|
11
|
+
};
|
|
12
|
+
t();
|
|
13
|
+
let i = new ResizeObserver(t);
|
|
14
|
+
return i.observe(e), () => i.disconnect();
|
|
15
|
+
}, [n, r]), i;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { n as useCompactMode };
|
|
19
19
|
|
|
20
20
|
//# sourceMappingURL=useCompactMode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCompactMode.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useCompactMode.ts"],"sourcesContent":["import { useEffect, useState, type RefObject } from 'react';\n\n/**\n * Container-width based small-screen (\"compact\") detection.\n *\n * Uses a ResizeObserver on the Flow root element rather than\n * `window.matchMedia`, so the mode follows the space the component actually\n * gets: a phone (narrow container) switches to the compact layout, while the\n * same component embedded in a narrow column on a desktop page does too.\n *\n * In compact mode the Flow editor hides the left/right panel docks and instead\n * offers a single panel switcher at the top with full-screen panels.\n */\nexport function useCompactMode(ref: RefObject<HTMLElement | null>, breakpoint = 768): boolean {\n const [compact, setCompact] = useState(false);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const update = () => {\n const w = el.clientWidth;\n if (w > 0) setCompact(w < breakpoint);\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, breakpoint]);\n\n return compact;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCompactMode.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useCompactMode.ts"],"sourcesContent":["import { useEffect, useState, type RefObject } from 'react';\n\n/**\n * Container-width based small-screen (\"compact\") detection.\n *\n * Uses a ResizeObserver on the Flow root element rather than\n * `window.matchMedia`, so the mode follows the space the component actually\n * gets: a phone (narrow container) switches to the compact layout, while the\n * same component embedded in a narrow column on a desktop page does too.\n *\n * In compact mode the Flow editor hides the left/right panel docks and instead\n * offers a single panel switcher at the top with full-screen panels.\n */\nexport function useCompactMode(ref: RefObject<HTMLElement | null>, breakpoint = 768): boolean {\n const [compact, setCompact] = useState(false);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const update = () => {\n const w = el.clientWidth;\n if (w > 0) setCompact(w < breakpoint);\n };\n update();\n const ro = new ResizeObserver(update);\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref, breakpoint]);\n\n return compact;\n}\n"],"mappings":";;AAaA,SAAgB,EAAe,GAAoC,IAAa,KAAc;CAC5F,IAAM,CAAC,GAAS,KAAc,EAAS,EAAK;CAe5C,OAbA,QAAgB;EACd,IAAM,IAAK,EAAI;EACf,IAAI,CAAC,GAAI;EACT,IAAM,UAAe;GACnB,IAAM,IAAI,EAAG;GACb,AAAI,IAAI,KAAG,EAAW,IAAI,CAAU;EACtC;EACA,EAAO;EACP,IAAM,IAAK,IAAI,eAAe,CAAM;EAEpC,OADA,EAAG,QAAQ,CAAE,SACA,EAAG,WAAW;CAC7B,GAAG,CAAC,GAAK,CAAU,CAAC,GAEb;AACT"}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { useFlowContext as
|
|
2
|
-
import { useCallback as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
import { useFlowContext as e } from "../context/FlowContext.js";
|
|
2
|
+
import { useCallback as t } from "react";
|
|
3
|
+
//#region src/components/pro/Flow/hooks/useDeleteSelection.ts
|
|
4
|
+
function n() {
|
|
5
|
+
let { selection: n, setSelection: r, setDoc: i, currentCanvasId: a } = e();
|
|
6
|
+
return t(() => {
|
|
7
|
+
let { nodeIds: e, edgeIds: t, lineIds: o } = n;
|
|
8
|
+
(e.size !== 0 || t.size !== 0 || o.size !== 0) && (e.size > 1 && !window.confirm(`确定要删除选中的 ${e.size} 个节点吗?`) || (i((n) => {
|
|
9
|
+
let r = n.canvases[a];
|
|
10
|
+
return r ? {
|
|
11
|
+
...n,
|
|
12
|
+
canvases: {
|
|
13
|
+
...n.canvases,
|
|
14
|
+
[a]: {
|
|
15
|
+
...r,
|
|
16
|
+
nodes: r.nodes.filter((t) => !e.has(t.id)).map((t) => t.parentId && e.has(t.parentId) ? {
|
|
17
|
+
...t,
|
|
18
|
+
parentId: void 0
|
|
19
|
+
} : t),
|
|
20
|
+
edges: r.edges.filter((n) => !t.has(n.id) && !e.has(n.source) && !e.has(n.target)),
|
|
21
|
+
lines: r.lines.filter((e) => !o.has(e.id)).map((t) => t.parentId && e.has(t.parentId) ? {
|
|
22
|
+
...t,
|
|
23
|
+
parentId: void 0
|
|
24
|
+
} : t)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
} : n;
|
|
28
|
+
}), r({
|
|
29
|
+
nodeIds: /* @__PURE__ */ new Set(),
|
|
30
|
+
edgeIds: /* @__PURE__ */ new Set(),
|
|
31
|
+
lineIds: /* @__PURE__ */ new Set()
|
|
32
|
+
})));
|
|
33
|
+
}, [
|
|
34
|
+
n,
|
|
35
|
+
i,
|
|
36
|
+
a,
|
|
37
|
+
r
|
|
38
|
+
]);
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
40
|
+
//#endregion
|
|
41
|
+
export { n as useDeleteSelection };
|
|
42
42
|
|
|
43
43
|
//# sourceMappingURL=useDeleteSelection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDeleteSelection.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDeleteSelection.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\n\n/**\n * Delete everything selected on the current canvas (nodes, edges, lines).\n *\n * Shared by the Delete/Backspace keyboard shortcut and the on-canvas delete\n * button, so touch devices (no keyboard) get exactly the same behavior,\n * including the multi-node confirmation prompt.\n */\nexport function useDeleteSelection() {\n const { selection, setSelection, setDoc, currentCanvasId } = useFlowContext();\n\n return useCallback(() => {\n const { nodeIds, edgeIds, lineIds } = selection;\n if (nodeIds.size === 0 && edgeIds.size === 0 && lineIds.size === 0) return;\n if (nodeIds.size > 1 && !window.confirm(`确定要删除选中的 ${nodeIds.size} 个节点吗?`)) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes\n .filter(n => !nodeIds.has(n.id))\n .map(n => n.parentId && nodeIds.has(n.parentId) ? { ...n, parentId: undefined } : n),\n edges: canvas.edges.filter(e =>\n !edgeIds.has(e.id) && !nodeIds.has(e.source) && !nodeIds.has(e.target),\n ),\n lines: canvas.lines\n .filter(l => !lineIds.has(l.id))\n .map(l => l.parentId && nodeIds.has(l.parentId) ? { ...l, parentId: undefined } : l),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [selection, setDoc, currentCanvasId, setSelection]);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDeleteSelection.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDeleteSelection.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useFlowContext } from '../context/FlowContext';\n\n/**\n * Delete everything selected on the current canvas (nodes, edges, lines).\n *\n * Shared by the Delete/Backspace keyboard shortcut and the on-canvas delete\n * button, so touch devices (no keyboard) get exactly the same behavior,\n * including the multi-node confirmation prompt.\n */\nexport function useDeleteSelection() {\n const { selection, setSelection, setDoc, currentCanvasId } = useFlowContext();\n\n return useCallback(() => {\n const { nodeIds, edgeIds, lineIds } = selection;\n if (nodeIds.size === 0 && edgeIds.size === 0 && lineIds.size === 0) return;\n if (nodeIds.size > 1 && !window.confirm(`确定要删除选中的 ${nodeIds.size} 个节点吗?`)) return;\n setDoc(prev => {\n const canvas = prev.canvases[currentCanvasId];\n if (!canvas) return prev;\n return {\n ...prev,\n canvases: {\n ...prev.canvases,\n [currentCanvasId]: {\n ...canvas,\n nodes: canvas.nodes\n .filter(n => !nodeIds.has(n.id))\n .map(n => n.parentId && nodeIds.has(n.parentId) ? { ...n, parentId: undefined } : n),\n edges: canvas.edges.filter(e =>\n !edgeIds.has(e.id) && !nodeIds.has(e.source) && !nodeIds.has(e.target),\n ),\n lines: canvas.lines\n .filter(l => !lineIds.has(l.id))\n .map(l => l.parentId && nodeIds.has(l.parentId) ? { ...l, parentId: undefined } : l),\n },\n },\n };\n });\n setSelection({ nodeIds: new Set(), edgeIds: new Set(), lineIds: new Set() });\n }, [selection, setDoc, currentCanvasId, setSelection]);\n}\n"],"mappings":";;;AAUA,SAAgB,IAAqB;CACnC,IAAM,EAAE,cAAW,iBAAc,WAAQ,uBAAoB,EAAe;CAE5E,OAAO,QAAkB;EACvB,IAAM,EAAE,YAAS,YAAS,eAAY;EAClC,GAAQ,SAAS,KAAK,EAAQ,SAAS,KAAK,EAAQ,SAAS,OAC7D,EAAQ,OAAO,KAAK,CAAC,OAAO,QAAQ,YAAY,EAAQ,KAAK,OAAO,MACxE,GAAO,MAAQ;GACb,IAAM,IAAS,EAAK,SAAS;GAE7B,OADK,IACE;IACL,GAAG;IACH,UAAU;KACR,GAAG,EAAK;MACP,IAAkB;MACjB,GAAG;MACH,OAAO,EAAO,MACX,QAAO,MAAK,CAAC,EAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAC/B,KAAI,MAAK,EAAE,YAAY,EAAQ,IAAI,EAAE,QAAQ,IAAI;OAAE,GAAG;OAAG,UAAU,KAAA;MAAU,IAAI,CAAC;MACrF,OAAO,EAAO,MAAM,QAAO,MACzB,CAAC,EAAQ,IAAI,EAAE,EAAE,KAAK,CAAC,EAAQ,IAAI,EAAE,MAAM,KAAK,CAAC,EAAQ,IAAI,EAAE,MAAM,CACvE;MACA,OAAO,EAAO,MACX,QAAO,MAAK,CAAC,EAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAC/B,KAAI,MAAK,EAAE,YAAY,EAAQ,IAAI,EAAE,QAAQ,IAAI;OAAE,GAAG;OAAG,UAAU,KAAA;MAAU,IAAI,CAAC;KACvF;IACF;GACF,IAlBoB;EAmBtB,CAAC,GACD,EAAa;GAAE,yBAAS,IAAI,IAAI;GAAG,yBAAS,IAAI,IAAI;GAAG,yBAAS,IAAI,IAAI;EAAE,CAAC;CAC7E,GAAG;EAAC;EAAW;EAAQ;EAAiB;CAAY,CAAC;AACvD"}
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import { useCallback as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
1
|
+
import { useCallback as e, useRef as t, useState as n } from "react";
|
|
2
|
+
//#region src/components/pro/Flow/hooks/useDraggablePanel.ts
|
|
3
|
+
function r({ onDropDock: r, onDragHintChange: i, edgeZone: a = 72 } = {}) {
|
|
4
|
+
let [o, s] = n(null), c = t(null), l = t(null), u = e(() => {
|
|
5
|
+
l.current && (l.current = null, i?.(null));
|
|
6
|
+
}, [i]), d = e((e) => {
|
|
7
|
+
let t = e.currentTarget.closest("[data-flow-panel]");
|
|
8
|
+
if (!t) return;
|
|
9
|
+
e.preventDefault(), e.stopPropagation(), e.target.setPointerCapture(e.pointerId);
|
|
10
|
+
let n = t.getBoundingClientRect(), r = t.offsetParent?.getBoundingClientRect() ?? {
|
|
11
|
+
left: 0,
|
|
12
|
+
top: 0
|
|
13
|
+
};
|
|
14
|
+
c.current = {
|
|
15
|
+
startX: e.clientX,
|
|
16
|
+
startY: e.clientY,
|
|
17
|
+
originX: n.left - r.left,
|
|
18
|
+
originY: n.top - r.top,
|
|
19
|
+
width: n.width,
|
|
20
|
+
parentWidth: t.offsetParent?.clientWidth ?? n.left - r.left + n.width
|
|
21
|
+
};
|
|
22
|
+
}, []), f = e((e) => {
|
|
23
|
+
if (!c.current) return;
|
|
24
|
+
let t = e.clientX - c.current.startX, n = e.clientY - c.current.startY, r = c.current.originX + t;
|
|
25
|
+
s({
|
|
26
|
+
x: r,
|
|
27
|
+
y: c.current.originY + n
|
|
28
|
+
});
|
|
29
|
+
let o = r + c.current.width / 2, u = o < a ? "left" : o > c.current.parentWidth - a ? "right" : null;
|
|
30
|
+
u !== l.current && (l.current = u, i?.(u));
|
|
31
|
+
}, [a, i]), p = e(() => {
|
|
32
|
+
let e = l.current;
|
|
33
|
+
u(), c.current = null, e && (r?.(e), s(null));
|
|
34
|
+
}, [u, r]);
|
|
35
|
+
return {
|
|
36
|
+
panelStyle: o ? {
|
|
37
|
+
position: "absolute",
|
|
38
|
+
left: o.x,
|
|
39
|
+
top: o.y,
|
|
40
|
+
right: "auto",
|
|
41
|
+
bottom: "auto"
|
|
42
|
+
} : void 0,
|
|
43
|
+
handleProps: {
|
|
44
|
+
onPointerDown: d,
|
|
45
|
+
onPointerMove: f,
|
|
46
|
+
onPointerUp: p
|
|
47
|
+
},
|
|
48
|
+
resetPosition: () => s(null)
|
|
49
|
+
};
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { r as useDraggablePanel };
|
|
53
53
|
|
|
54
54
|
//# sourceMappingURL=useDraggablePanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggablePanel.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDraggablePanel.ts"],"sourcesContent":["import { useState, useRef, useCallback, type PointerEvent as ReactPointerEvent } from 'react';\n\nexport interface PanelPosition {\n x: number;\n y: number;\n}\n\nexport type PanelDropSide = 'left' | 'right';\n\nexport interface DraggablePanelOptions {\n /** Called on pointer-up when the floating panel was dropped over a dock edge. */\n onDropDock?: (side: PanelDropSide) => void;\n /** Notified while dragging so the workspace can highlight the hovered dock. */\n onDragHintChange?: (side: PanelDropSide | null) => void;\n /** Width (px) of the drop zone along each edge of the workspace. */\n edgeZone?: number;\n}\n\ninterface DragState {\n startX: number;\n startY: number;\n originX: number;\n originY: number;\n width: number;\n parentWidth: number;\n}\n\n/**\n * Enables free-position dragging for overlay panels. Returns a position\n * override (null = use default CSS) and a set of props to spread onto the\n * panel's drag handle element.\n *\n * When `onDropDock` is provided, dropping the panel within `edgeZone` of the\n * workspace's left/right edge attaches it to that dock: the hovered edge is\n * reported via `onDragHintChange` during the drag (so the workspace can\n * highlight a drop zone) and the position resets on drop so the panel snaps\n * into its dock slot.\n */\nexport function useDraggablePanel({ onDropDock, onDragHintChange, edgeZone = 72 }: DraggablePanelOptions = {}) {\n const [pos, setPos] = useState<PanelPosition | null>(null);\n const dragState = useRef<DragState | null>(null);\n const hintRef = useRef<PanelDropSide | null>(null);\n\n const clearHint = useCallback(() => {\n if (hintRef.current) {\n hintRef.current = null;\n onDragHintChange?.(null);\n }\n }, [onDragHintChange]);\n\n const onPointerDown = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n const el = (e.currentTarget as HTMLElement).closest('[data-flow-panel]') as HTMLElement | null;\n if (!el) return;\n e.preventDefault();\n e.stopPropagation();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n const rect = el.getBoundingClientRect();\n const parentRect = el.offsetParent?.getBoundingClientRect() ?? { left: 0, top: 0 };\n dragState.current = {\n startX: e.clientX,\n startY: e.clientY,\n originX: rect.left - parentRect.left,\n originY: rect.top - parentRect.top,\n width: rect.width,\n parentWidth: el.offsetParent?.clientWidth ?? rect.left - parentRect.left + rect.width,\n };\n }, []);\n\n const onPointerMove = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n if (!dragState.current) return;\n const dx = e.clientX - dragState.current.startX;\n const dy = e.clientY - dragState.current.startY;\n const x = dragState.current.originX + dx;\n setPos({ x, y: dragState.current.originY + dy });\n // Dock affinity: the panel's center hovering a workspace edge highlights\n // that dock as the drop target.\n const centerX = x + dragState.current.width / 2;\n const next: PanelDropSide | null =\n centerX < edgeZone ? 'left'\n : centerX > dragState.current.parentWidth - edgeZone ? 'right'\n : null;\n if (next !== hintRef.current) {\n hintRef.current = next;\n onDragHintChange?.(next);\n }\n }, [edgeZone, onDragHintChange]);\n\n const onPointerUp = useCallback(() => {\n const hint = hintRef.current;\n clearHint();\n dragState.current = null;\n if (hint) {\n onDropDock?.(hint);\n setPos(null); // snap back into the dock slot\n }\n }, [clearHint, onDropDock]);\n\n const style: React.CSSProperties | undefined = pos\n ? { position: 'absolute', left: pos.x, top: pos.y, right: 'auto', bottom: 'auto' }\n : undefined;\n\n return {\n panelStyle: style,\n handleProps: { onPointerDown, onPointerMove, onPointerUp },\n resetPosition: () => setPos(null),\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDraggablePanel.js","names":[],"sources":["../../../../../src/components/pro/Flow/hooks/useDraggablePanel.ts"],"sourcesContent":["import { useState, useRef, useCallback, type PointerEvent as ReactPointerEvent } from 'react';\n\nexport interface PanelPosition {\n x: number;\n y: number;\n}\n\nexport type PanelDropSide = 'left' | 'right';\n\nexport interface DraggablePanelOptions {\n /** Called on pointer-up when the floating panel was dropped over a dock edge. */\n onDropDock?: (side: PanelDropSide) => void;\n /** Notified while dragging so the workspace can highlight the hovered dock. */\n onDragHintChange?: (side: PanelDropSide | null) => void;\n /** Width (px) of the drop zone along each edge of the workspace. */\n edgeZone?: number;\n}\n\ninterface DragState {\n startX: number;\n startY: number;\n originX: number;\n originY: number;\n width: number;\n parentWidth: number;\n}\n\n/**\n * Enables free-position dragging for overlay panels. Returns a position\n * override (null = use default CSS) and a set of props to spread onto the\n * panel's drag handle element.\n *\n * When `onDropDock` is provided, dropping the panel within `edgeZone` of the\n * workspace's left/right edge attaches it to that dock: the hovered edge is\n * reported via `onDragHintChange` during the drag (so the workspace can\n * highlight a drop zone) and the position resets on drop so the panel snaps\n * into its dock slot.\n */\nexport function useDraggablePanel({ onDropDock, onDragHintChange, edgeZone = 72 }: DraggablePanelOptions = {}) {\n const [pos, setPos] = useState<PanelPosition | null>(null);\n const dragState = useRef<DragState | null>(null);\n const hintRef = useRef<PanelDropSide | null>(null);\n\n const clearHint = useCallback(() => {\n if (hintRef.current) {\n hintRef.current = null;\n onDragHintChange?.(null);\n }\n }, [onDragHintChange]);\n\n const onPointerDown = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n const el = (e.currentTarget as HTMLElement).closest('[data-flow-panel]') as HTMLElement | null;\n if (!el) return;\n e.preventDefault();\n e.stopPropagation();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n const rect = el.getBoundingClientRect();\n const parentRect = el.offsetParent?.getBoundingClientRect() ?? { left: 0, top: 0 };\n dragState.current = {\n startX: e.clientX,\n startY: e.clientY,\n originX: rect.left - parentRect.left,\n originY: rect.top - parentRect.top,\n width: rect.width,\n parentWidth: el.offsetParent?.clientWidth ?? rect.left - parentRect.left + rect.width,\n };\n }, []);\n\n const onPointerMove = useCallback((e: ReactPointerEvent<HTMLElement>) => {\n if (!dragState.current) return;\n const dx = e.clientX - dragState.current.startX;\n const dy = e.clientY - dragState.current.startY;\n const x = dragState.current.originX + dx;\n setPos({ x, y: dragState.current.originY + dy });\n // Dock affinity: the panel's center hovering a workspace edge highlights\n // that dock as the drop target.\n const centerX = x + dragState.current.width / 2;\n const next: PanelDropSide | null =\n centerX < edgeZone ? 'left'\n : centerX > dragState.current.parentWidth - edgeZone ? 'right'\n : null;\n if (next !== hintRef.current) {\n hintRef.current = next;\n onDragHintChange?.(next);\n }\n }, [edgeZone, onDragHintChange]);\n\n const onPointerUp = useCallback(() => {\n const hint = hintRef.current;\n clearHint();\n dragState.current = null;\n if (hint) {\n onDropDock?.(hint);\n setPos(null); // snap back into the dock slot\n }\n }, [clearHint, onDropDock]);\n\n const style: React.CSSProperties | undefined = pos\n ? { position: 'absolute', left: pos.x, top: pos.y, right: 'auto', bottom: 'auto' }\n : undefined;\n\n return {\n panelStyle: style,\n handleProps: { onPointerDown, onPointerMove, onPointerUp },\n resetPosition: () => setPos(null),\n };\n}\n"],"mappings":";;AAsCA,SAAgB,EAAkB,EAAE,eAAY,qBAAkB,cAAW,OAA8B,CAAC,GAAG;CAC7G,IAAM,CAAC,GAAK,KAAU,EAA+B,IAAI,GACnD,IAAY,EAAyB,IAAI,GACzC,IAAU,EAA6B,IAAI,GAE3C,IAAY,QAAkB;EAClC,AAAI,EAAQ,YACV,EAAQ,UAAU,MAClB,IAAmB,IAAI;CAE3B,GAAG,CAAC,CAAgB,CAAC,GAEf,IAAgB,GAAa,MAAsC;EACvE,IAAM,IAAM,EAAE,cAA8B,QAAQ,mBAAmB;EACvE,IAAI,CAAC,GAAI;EAGT,AAFA,EAAE,eAAe,GACjB,EAAE,gBAAgB,GAClB,EAAG,OAAuB,kBAAkB,EAAE,SAAS;EACvD,IAAM,IAAO,EAAG,sBAAsB,GAChC,IAAa,EAAG,cAAc,sBAAsB,KAAK;GAAE,MAAM;GAAG,KAAK;EAAE;EACjF,EAAU,UAAU;GAClB,QAAQ,EAAE;GACV,QAAQ,EAAE;GACV,SAAS,EAAK,OAAO,EAAW;GAChC,SAAS,EAAK,MAAM,EAAW;GAC/B,OAAO,EAAK;GACZ,aAAa,EAAG,cAAc,eAAe,EAAK,OAAO,EAAW,OAAO,EAAK;EAClF;CACF,GAAG,CAAC,CAAC,GAEC,IAAgB,GAAa,MAAsC;EACvE,IAAI,CAAC,EAAU,SAAS;EACxB,IAAM,IAAK,EAAE,UAAU,EAAU,QAAQ,QACnC,IAAK,EAAE,UAAU,EAAU,QAAQ,QACnC,IAAI,EAAU,QAAQ,UAAU;EACtC,EAAO;GAAE;GAAG,GAAG,EAAU,QAAQ,UAAU;EAAG,CAAC;EAG/C,IAAM,IAAU,IAAI,EAAU,QAAQ,QAAQ,GACxC,IACJ,IAAU,IAAW,SACnB,IAAU,EAAU,QAAQ,cAAc,IAAW,UACrD;EACJ,AAAI,MAAS,EAAQ,YACnB,EAAQ,UAAU,GAClB,IAAmB,CAAI;CAE3B,GAAG,CAAC,GAAU,CAAgB,CAAC,GAEzB,IAAc,QAAkB;EACpC,IAAM,IAAO,EAAQ;EAGrB,AAFA,EAAU,GACV,EAAU,UAAU,MAChB,MACF,IAAa,CAAI,GACjB,EAAO,IAAI;CAEf,GAAG,CAAC,GAAW,CAAU,CAAC;CAM1B,OAAO;EACL,YAL6C,IAC3C;GAAE,UAAU;GAAY,MAAM,EAAI;GAAG,KAAK,EAAI;GAAG,OAAO;GAAQ,QAAQ;EAAO,IAC/E,KAAA;EAIF,aAAa;GAAE;GAAe;GAAe;EAAY;EACzD,qBAAqB,EAAO,IAAI;CAClC;AACF"}
|