dishui 0.0.65 → 0.0.67
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/Accordion/index.d.ts +39 -0
- package/dist/components/Accordion/index.js +70 -0
- package/dist/components/Accordion/index.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +48 -0
- package/dist/components/Avatar/index.js +71 -0
- package/dist/components/Avatar/index.js.map +1 -0
- package/dist/components/Badge/index.js +10 -15
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.js +62 -89
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/index.d.ts +142 -0
- package/dist/components/Card/index.js +368 -69
- 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 -65
- 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.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 +26 -0
- package/dist/components/Icon/index.js +27 -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 -74
- 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 -58
- package/dist/components/List/index.js.map +1 -1
- package/dist/components/Markdown/Markdown.js +106 -107
- 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.js +82 -82
- 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 +1 -1
- package/dist/components/Page/index.js +40 -71
- package/dist/components/Page/index.js.map +1 -1
- 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 -254
- 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/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 -121
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Tabs/index.js +28 -38
- 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 -327
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -224
- 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 -306
- 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 -144
- 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 +189 -189
- 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 -948
- package/dist/components/pro/Flow/Flow.js.map +1 -1
- package/dist/components/pro/Flow/FlowCanvas.js +1626 -1662
- 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 -180
- 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 -242
- 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 -589
- 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 -248
- package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/PresentationMode.js +137 -140
- 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 -572
- 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 -41
- 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 +31 -3
- package/dist/index.js +106 -241
- 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 -186
- 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 +700 -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 -60
- 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 +19 -6
- package/dist/components/StatCard/index.d.ts +0 -24
- package/dist/components/StatCard/index.js +0 -90
- package/dist/components/StatCard/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PixiApp.js","names":[],"sources":["../../../../../src/components/pro/Flow/canvas/PixiApp.ts"],"sourcesContent":["import { Application, Container } from 'pixi.js';\n\nexport interface PixiAppOptions {\n canvas: HTMLCanvasElement;\n backgroundColor?: number;\n antialias?: boolean;\n resolution?: number;\n autoDensity?: boolean;\n width?: number;\n height?: number;\n}\n\n/**\n * Wraps PixiJS Application lifecycle: init, resize, destroy.\n * The world container holds all flow content and is transformed for pan/zoom.\n */\nexport class PixiApp {\n app: Application;\n world: Container;\n private _destroyed = false;\n private _initialized = false;\n\n constructor() {\n this.app = new Application();\n this.world = new Container({ label: 'world' });\n }\n\n async init(options: PixiAppOptions): Promise<void> {\n if (this._destroyed) return;\n await this.app.init({\n canvas: options.canvas,\n background: options.backgroundColor ?? 0xf8f9fa,\n antialias: options.antialias ?? true,\n resolution: options.resolution ?? (window.devicePixelRatio || 1),\n autoDensity: options.autoDensity ?? true,\n width: options.width,\n height: options.height,\n });\n if (this._destroyed) return;\n this._initialized = true;\n this.app.stage.addChild(this.world);\n this.app.stage.eventMode = 'static';\n this.app.stage.hitArea = this.app.screen;\n }\n\n resize(width: number, height: number): void {\n if (this._destroyed || !this._initialized) return;\n this.app.renderer.resize(width, height);\n this.app.stage.hitArea = this.app.screen;\n }\n\n /** Update the canvas backdrop color (e.g. when the DishUI theme changes). */\n setBackgroundColor(color: number): void {\n if (this._destroyed || !this._initialized) return;\n this.app.renderer.background.color = color;\n }\n\n /**\n * Export the current scene to a PNG data URL.\n *\n * Reading the WebGL canvas directly with `canvas.toDataURL()` returns a black\n * image because PixiJS does not preserve the drawing buffer between frames.\n * The renderer's `extract` plugin re-renders the target into an offscreen\n * canvas, which is the reliable way to snapshot the scene.\n */\n async exportPNG(backgroundColor?: number): Promise<string | null> {\n if (this._destroyed || !this._initialized) return null;\n const renderer = this.app.renderer as unknown as {\n extract?: {\n canvas: (target: unknown) => HTMLCanvasElement | OffscreenCanvas;\n };\n };\n if (!renderer || !renderer.extract) return null;\n\n // Force a fresh render so the extract reflects the latest state.\n this.app.render();\n\n let out: HTMLCanvasElement | OffscreenCanvas;\n try {\n out = renderer.extract.canvas(this.app.stage);\n } catch {\n return null;\n }\n\n const w = (out as HTMLCanvasElement).width;\n const h = (out as HTMLCanvasElement).height;\n if (!w || !h) return null;\n\n // Composite onto an opaque background so transparent areas aren't black.\n const composite = document.createElement('canvas');\n composite.width = w;\n composite.height = h;\n const ctx = composite.getContext('2d');\n if (!ctx) {\n return typeof (out as HTMLCanvasElement).toDataURL === 'function'\n ? (out as HTMLCanvasElement).toDataURL('image/png')\n : null;\n }\n ctx.fillStyle = backgroundColor !== undefined\n ? `#${backgroundColor.toString(16).padStart(6, '0')}`\n : '#ffffff';\n ctx.fillRect(0, 0, w, h);\n ctx.drawImage(out as CanvasImageSource, 0, 0);\n return composite.toDataURL('image/png');\n }\n\n /**\n * Export a specific world-space rectangle to a PNG data URL, cropped exactly\n * to that rectangle (used for per-anchor slide capture).\n *\n * Uses the extract system's `frame` option to render precisely the given\n * region of the `world` container in world coordinates, independent of the\n * current pan/zoom. This guarantees the output is exactly the anchor's\n * framed content — no screen-space cropping or transform juggling.\n */\n async exportRegionPNG(\n rect: { x: number; y: number; w: number; h: number },\n options?: { scale?: number; backgroundColor?: number },\n ): Promise<{ dataUrl: string; width: number; height: number } | null> {\n if (this._destroyed || !this._initialized) return null;\n const { Rectangle } = await import('pixi.js');\n const renderer = this.app.renderer as unknown as {\n extract?: {\n canvas: (options: unknown) => HTMLCanvasElement | OffscreenCanvas;\n };\n };\n if (!renderer || !renderer.extract) return null;\n\n const scale = Math.max(0.1, options?.scale ?? 2);\n\n // Temporarily reset the world transform to identity so the `frame` (given in\n // world coordinates) maps 1:1 to the anchor content, independent of the\n // current pan/zoom. Restored immediately after extraction.\n const prev = {\n x: this.world.position.x,\n y: this.world.position.y,\n sx: this.world.scale.x,\n sy: this.world.scale.y,\n };\n this.world.position.set(0, 0);\n this.world.scale.set(1, 1);\n\n let out: HTMLCanvasElement | OffscreenCanvas;\n try {\n // Fresh render so the extract reflects the latest scene state.\n this.app.render();\n out = renderer.extract.canvas({\n target: this.world,\n // Frame is in the target's LOCAL (world) coordinates.\n frame: new Rectangle(rect.x, rect.y, rect.w, rect.h),\n resolution: scale,\n antialias: true,\n });\n } catch {\n this.world.position.set(prev.x, prev.y);\n this.world.scale.set(prev.sx, prev.sy);\n this.app.render();\n return null;\n }\n\n // Restore the interactive viewport transform immediately.\n this.world.position.set(prev.x, prev.y);\n this.world.scale.set(prev.sx, prev.sy);\n this.app.render();\n\n const w = (out as HTMLCanvasElement).width;\n const h = (out as HTMLCanvasElement).height;\n if (!w || !h) return null;\n\n // Composite onto an opaque background so transparent areas aren't black.\n const composite = document.createElement('canvas');\n composite.width = w;\n composite.height = h;\n const ctx = composite.getContext('2d');\n if (!ctx) {\n const url = typeof (out as HTMLCanvasElement).toDataURL === 'function'\n ? (out as HTMLCanvasElement).toDataURL('image/png')\n : null;\n return url ? { dataUrl: url, width: w, height: h } : null;\n }\n ctx.fillStyle = options?.backgroundColor !== undefined\n ? `#${options.backgroundColor.toString(16).padStart(6, '0')}`\n : '#ffffff';\n ctx.fillRect(0, 0, w, h);\n ctx.drawImage(out as CanvasImageSource, 0, 0);\n return { dataUrl: composite.toDataURL('image/png'), width: w, height: h };\n }\n\n destroy(): void {\n if (this._destroyed) return;\n this._destroyed = true;\n if (!this._initialized) return;\n try {\n this.app.destroy(true, { children: true, texture: true });\n } catch {\n // PixiJS may throw if internal state is partially torn down\n }\n }\n\n get destroyed(): boolean {\n return this._destroyed;\n }\n}\n"],"mappings":";AAgBA,IAAa,IAAb,MAAqB;AAAA,EACnB;AAAA,EACA;AAAA,EACA,aAAqB;AAAA,EACrB,eAAuB;AAAA,EAEvB,cAAc;AACZ,SAAK,MAAM,IAAI,EAAY,GAC3B,KAAK,QAAQ,IAAI,EAAU,EAAE,OAAO,QAAQ,CAAC;AAAA,EAC/C;AAAA,EAEA,MAAM,KAAK,GAAwC;AACjD,IAAI,KAAK,eACT,MAAM,KAAK,IAAI,KAAK;AAAA,MAClB,QAAQ,EAAQ;AAAA,MAChB,YAAY,EAAQ,mBAAmB;AAAA,MACvC,WAAW,EAAQ,aAAa;AAAA,MAChC,YAAY,EAAQ,eAAe,OAAO,oBAAoB;AAAA,MAC9D,aAAa,EAAQ,eAAe;AAAA,MACpC,OAAO,EAAQ;AAAA,MACf,QAAQ,EAAQ;AAAA,IAClB,CAAC,GACG,MAAK,eACT,KAAK,eAAe,IACpB,KAAK,IAAI,MAAM,SAAS,KAAK,KAAK,GAClC,KAAK,IAAI,MAAM,YAAY,UAC3B,KAAK,IAAI,MAAM,UAAU,KAAK,IAAI;AAAA,EACpC;AAAA,EAEA,OAAO,GAAe,GAAsB;AAC1C,IAAI,KAAK,cAAc,CAAC,KAAK,iBAC7B,KAAK,IAAI,SAAS,OAAO,GAAO,CAAM,GACtC,KAAK,IAAI,MAAM,UAAU,KAAK,IAAI;AAAA,EACpC;AAAA,EAGA,mBAAmB,GAAqB;AACtC,IAAI,KAAK,cAAc,CAAC,KAAK,iBAC7B,KAAK,IAAI,SAAS,WAAW,QAAQ;AAAA,EACvC;AAAA,EAUA,MAAM,UAAU,GAAkD;AAChE,QAAI,KAAK,cAAc,CAAC,KAAK,aAAc,QAAO;AAClD,UAAM,IAAW,KAAK,IAAI;AAK1B,QAAI,CAAC,KAAY,CAAC,EAAS,QAAS,QAAO;AAG3C,SAAK,IAAI,OAAO;AAEhB,QAAI;AACJ,QAAI;AACF,MAAA,IAAM,EAAS,QAAQ,OAAO,KAAK,IAAI,KAAK;AAAA,IAC9C,QAAQ;AACN,aAAO;AAAA,IACT;AAEA,UAAM,IAAK,EAA0B,OAC/B,IAAK,EAA0B;AACrC,QAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AAGrB,UAAM,IAAY,SAAS,cAAc,QAAQ;AACjD,IAAA,EAAU,QAAQ,GAClB,EAAU,SAAS;AACnB,UAAM,IAAM,EAAU,WAAW,IAAI;AACrC,WAAK,KAKL,EAAI,YAAY,MAAoB,SAChC,IAAI,EAAgB,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAA,KAChD,WACJ,EAAI,SAAS,GAAG,GAAG,GAAG,CAAC,GACvB,EAAI,UAAU,GAA0B,GAAG,CAAC,GACrC,EAAU,UAAU,WAAW,KAT7B,OAAQ,EAA0B,aAAc,aAClD,EAA0B,UAAU,WAAW,IAChD;AAAA,EAQR;AAAA,EAWA,MAAM,gBACJ,GACA,GACoE;AACpE,QAAI,KAAK,cAAc,CAAC,KAAK,aAAc,QAAO;AAClD,UAAM,EAAE,WAAA,EAAA,IAAc,MAAM,OAAO,SAAA,GAC7B,IAAW,KAAK,IAAI;AAK1B,QAAI,CAAC,KAAY,CAAC,EAAS,QAAS,QAAO;AAE3C,UAAM,IAAQ,KAAK,IAAI,KAAK,GAAS,SAAS,CAAC,GAKzC,IAAO;AAAA,MACX,GAAG,KAAK,MAAM,SAAS;AAAA,MACvB,GAAG,KAAK,MAAM,SAAS;AAAA,MACvB,IAAI,KAAK,MAAM,MAAM;AAAA,MACrB,IAAI,KAAK,MAAM,MAAM;AAAA,IACvB;AACA,SAAK,MAAM,SAAS,IAAI,GAAG,CAAC,GAC5B,KAAK,MAAM,MAAM,IAAI,GAAG,CAAC;AAEzB,QAAI;AACJ,QAAI;AAEF,WAAK,IAAI,OAAO,GAChB,IAAM,EAAS,QAAQ,OAAO;AAAA,QAC5B,QAAQ,KAAK;AAAA,QAEb,OAAO,IAAI,EAAU,EAAK,GAAG,EAAK,GAAG,EAAK,GAAG,EAAK,CAAC;AAAA,QACnD,YAAY;AAAA,QACZ,WAAW;AAAA,MACb,CAAC;AAAA,IACH,QAAQ;AACN,kBAAK,MAAM,SAAS,IAAI,EAAK,GAAG,EAAK,CAAC,GACtC,KAAK,MAAM,MAAM,IAAI,EAAK,IAAI,EAAK,EAAE,GACrC,KAAK,IAAI,OAAO,GACT;AAAA,IACT;AAGA,SAAK,MAAM,SAAS,IAAI,EAAK,GAAG,EAAK,CAAC,GACtC,KAAK,MAAM,MAAM,IAAI,EAAK,IAAI,EAAK,EAAE,GACrC,KAAK,IAAI,OAAO;AAEhB,UAAM,IAAK,EAA0B,OAC/B,IAAK,EAA0B;AACrC,QAAI,CAAC,KAAK,CAAC,EAAG,QAAO;AAGrB,UAAM,IAAY,SAAS,cAAc,QAAQ;AACjD,IAAA,EAAU,QAAQ,GAClB,EAAU,SAAS;AACnB,UAAM,IAAM,EAAU,WAAW,IAAI;AACrC,QAAI,CAAC,GAAK;AACR,YAAM,IAAM,OAAQ,EAA0B,aAAc,aACvD,EAA0B,UAAU,WAAW,IAChD;AACJ,aAAO,IAAM;AAAA,QAAE,SAAS;AAAA,QAAK,OAAO;AAAA,QAAG,QAAQ;AAAA,MAAE,IAAI;AAAA,IACvD;AACA,WAAA,EAAI,YAAY,GAAS,oBAAoB,SACzC,IAAI,EAAQ,gBAAgB,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAA,KACxD,WACJ,EAAI,SAAS,GAAG,GAAG,GAAG,CAAC,GACvB,EAAI,UAAU,GAA0B,GAAG,CAAC,GACrC;AAAA,MAAE,SAAS,EAAU,UAAU,WAAW;AAAA,MAAG,OAAO;AAAA,MAAG,QAAQ;AAAA,IAAE;AAAA,EAC1E;AAAA,EAEA,UAAgB;AACd,QAAI,MAAK,eACT,KAAK,aAAa,IACd,EAAC,KAAK;AACV,UAAI;AACF,aAAK,IAAI,QAAQ,IAAM;AAAA,UAAE,UAAU;AAAA,UAAM,SAAS;AAAA,QAAK,CAAC;AAAA,MAC1D,QAAQ;AAAA,MAER;AAAA,EACF;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AACF"}
|
|
1
|
+
{"version":3,"file":"PixiApp.js","names":[],"sources":["../../../../../src/components/pro/Flow/canvas/PixiApp.ts"],"sourcesContent":["import { Application, Container } from 'pixi.js';\n\nexport interface PixiAppOptions {\n canvas: HTMLCanvasElement;\n backgroundColor?: number;\n antialias?: boolean;\n resolution?: number;\n autoDensity?: boolean;\n width?: number;\n height?: number;\n}\n\n/**\n * Wraps PixiJS Application lifecycle: init, resize, destroy.\n * The world container holds all flow content and is transformed for pan/zoom.\n */\nexport class PixiApp {\n app: Application;\n world: Container;\n private _destroyed = false;\n private _initialized = false;\n\n constructor() {\n this.app = new Application();\n this.world = new Container({ label: 'world' });\n }\n\n async init(options: PixiAppOptions): Promise<void> {\n if (this._destroyed) return;\n await this.app.init({\n canvas: options.canvas,\n background: options.backgroundColor ?? 0xf8f9fa,\n antialias: options.antialias ?? true,\n resolution: options.resolution ?? (window.devicePixelRatio || 1),\n autoDensity: options.autoDensity ?? true,\n width: options.width,\n height: options.height,\n });\n if (this._destroyed) return;\n this._initialized = true;\n this.app.stage.addChild(this.world);\n this.app.stage.eventMode = 'static';\n this.app.stage.hitArea = this.app.screen;\n }\n\n resize(width: number, height: number): void {\n if (this._destroyed || !this._initialized) return;\n this.app.renderer.resize(width, height);\n this.app.stage.hitArea = this.app.screen;\n }\n\n /** Update the canvas backdrop color (e.g. when the DishUI theme changes). */\n setBackgroundColor(color: number): void {\n if (this._destroyed || !this._initialized) return;\n this.app.renderer.background.color = color;\n }\n\n /**\n * Export the current scene to a PNG data URL.\n *\n * Reading the WebGL canvas directly with `canvas.toDataURL()` returns a black\n * image because PixiJS does not preserve the drawing buffer between frames.\n * The renderer's `extract` plugin re-renders the target into an offscreen\n * canvas, which is the reliable way to snapshot the scene.\n */\n async exportPNG(backgroundColor?: number): Promise<string | null> {\n if (this._destroyed || !this._initialized) return null;\n const renderer = this.app.renderer as unknown as {\n extract?: {\n canvas: (target: unknown) => HTMLCanvasElement | OffscreenCanvas;\n };\n };\n if (!renderer || !renderer.extract) return null;\n\n // Force a fresh render so the extract reflects the latest state.\n this.app.render();\n\n let out: HTMLCanvasElement | OffscreenCanvas;\n try {\n out = renderer.extract.canvas(this.app.stage);\n } catch {\n return null;\n }\n\n const w = (out as HTMLCanvasElement).width;\n const h = (out as HTMLCanvasElement).height;\n if (!w || !h) return null;\n\n // Composite onto an opaque background so transparent areas aren't black.\n const composite = document.createElement('canvas');\n composite.width = w;\n composite.height = h;\n const ctx = composite.getContext('2d');\n if (!ctx) {\n return typeof (out as HTMLCanvasElement).toDataURL === 'function'\n ? (out as HTMLCanvasElement).toDataURL('image/png')\n : null;\n }\n ctx.fillStyle = backgroundColor !== undefined\n ? `#${backgroundColor.toString(16).padStart(6, '0')}`\n : '#ffffff';\n ctx.fillRect(0, 0, w, h);\n ctx.drawImage(out as CanvasImageSource, 0, 0);\n return composite.toDataURL('image/png');\n }\n\n /**\n * Export a specific world-space rectangle to a PNG data URL, cropped exactly\n * to that rectangle (used for per-anchor slide capture).\n *\n * Uses the extract system's `frame` option to render precisely the given\n * region of the `world` container in world coordinates, independent of the\n * current pan/zoom. This guarantees the output is exactly the anchor's\n * framed content — no screen-space cropping or transform juggling.\n */\n async exportRegionPNG(\n rect: { x: number; y: number; w: number; h: number },\n options?: { scale?: number; backgroundColor?: number },\n ): Promise<{ dataUrl: string; width: number; height: number } | null> {\n if (this._destroyed || !this._initialized) return null;\n const { Rectangle } = await import('pixi.js');\n const renderer = this.app.renderer as unknown as {\n extract?: {\n canvas: (options: unknown) => HTMLCanvasElement | OffscreenCanvas;\n };\n };\n if (!renderer || !renderer.extract) return null;\n\n const scale = Math.max(0.1, options?.scale ?? 2);\n\n // Temporarily reset the world transform to identity so the `frame` (given in\n // world coordinates) maps 1:1 to the anchor content, independent of the\n // current pan/zoom. Restored immediately after extraction.\n const prev = {\n x: this.world.position.x,\n y: this.world.position.y,\n sx: this.world.scale.x,\n sy: this.world.scale.y,\n };\n this.world.position.set(0, 0);\n this.world.scale.set(1, 1);\n\n let out: HTMLCanvasElement | OffscreenCanvas;\n try {\n // Fresh render so the extract reflects the latest scene state.\n this.app.render();\n out = renderer.extract.canvas({\n target: this.world,\n // Frame is in the target's LOCAL (world) coordinates.\n frame: new Rectangle(rect.x, rect.y, rect.w, rect.h),\n resolution: scale,\n antialias: true,\n });\n } catch {\n this.world.position.set(prev.x, prev.y);\n this.world.scale.set(prev.sx, prev.sy);\n this.app.render();\n return null;\n }\n\n // Restore the interactive viewport transform immediately.\n this.world.position.set(prev.x, prev.y);\n this.world.scale.set(prev.sx, prev.sy);\n this.app.render();\n\n const w = (out as HTMLCanvasElement).width;\n const h = (out as HTMLCanvasElement).height;\n if (!w || !h) return null;\n\n // Composite onto an opaque background so transparent areas aren't black.\n const composite = document.createElement('canvas');\n composite.width = w;\n composite.height = h;\n const ctx = composite.getContext('2d');\n if (!ctx) {\n const url = typeof (out as HTMLCanvasElement).toDataURL === 'function'\n ? (out as HTMLCanvasElement).toDataURL('image/png')\n : null;\n return url ? { dataUrl: url, width: w, height: h } : null;\n }\n ctx.fillStyle = options?.backgroundColor !== undefined\n ? `#${options.backgroundColor.toString(16).padStart(6, '0')}`\n : '#ffffff';\n ctx.fillRect(0, 0, w, h);\n ctx.drawImage(out as CanvasImageSource, 0, 0);\n return { dataUrl: composite.toDataURL('image/png'), width: w, height: h };\n }\n\n destroy(): void {\n if (this._destroyed) return;\n this._destroyed = true;\n if (!this._initialized) return;\n // 先销毁舞台子树:此时渲染器的纹理池仍存活,Text.destroy() 才能把\n // 纹理安全归还到池中。若先销毁渲染器,后续 Text.unload 会向已清空的\n // 池归还纹理,触发 \"Cannot read properties of undefined (reading 'push')\"\n // (TexturePool.returnTexture)。随后 React 卸载 FlowCanvas 子树时对\n // 已销毁对象的二次 destroy() 也会因池被清空而崩溃。\n try {\n this.app.stage.destroy({ children: true, texture: true });\n } catch {\n // ignore partial teardown issues\n }\n try {\n this.app.destroy(false);\n } catch {\n // PixiJS may throw if internal state is partially torn down\n }\n }\n\n get destroyed(): boolean {\n return this._destroyed;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import { Graphics 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
|
-
export {
|
|
38
|
-
h as SelectionOverlay
|
|
1
|
+
import { Graphics as e } from "pixi.js";
|
|
2
|
+
//#region src/components/pro/Flow/canvas/SelectionOverlay.ts
|
|
3
|
+
var t = class {
|
|
4
|
+
marquee;
|
|
5
|
+
rings;
|
|
6
|
+
constructor(t) {
|
|
7
|
+
this.marquee = new e(), this.marquee.label = "marquee", this.marquee.visible = !1, t.addChild(this.marquee), this.rings = new e(), this.rings.label = "selection-rings", t.addChild(this.rings);
|
|
8
|
+
}
|
|
9
|
+
showMarquee(e, t, n, r) {
|
|
10
|
+
let i = this.marquee;
|
|
11
|
+
i.clear(), i.rect(e, t, n, r).fill({
|
|
12
|
+
color: 3900150,
|
|
13
|
+
alpha: .08
|
|
14
|
+
}).stroke({
|
|
15
|
+
color: 3900150,
|
|
16
|
+
width: 1,
|
|
17
|
+
alpha: .5
|
|
18
|
+
}), i.visible = !0;
|
|
19
|
+
}
|
|
20
|
+
hideMarquee() {
|
|
21
|
+
this.marquee.visible = !1, this.marquee.clear();
|
|
22
|
+
}
|
|
23
|
+
drawRings(e) {
|
|
24
|
+
let t = this.rings;
|
|
25
|
+
t.clear();
|
|
26
|
+
for (let n of e) t.rect(n.x - 2, n.y - 2, n.w + 4, n.h + 4).stroke({
|
|
27
|
+
color: 3900150,
|
|
28
|
+
width: 1.5
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
clearRings() {
|
|
32
|
+
this.rings.clear();
|
|
33
|
+
}
|
|
34
|
+
destroy() {
|
|
35
|
+
this.marquee.destroy(), this.rings.destroy();
|
|
36
|
+
}
|
|
39
37
|
};
|
|
38
|
+
//#endregion
|
|
39
|
+
export { t as SelectionOverlay };
|
|
40
40
|
|
|
41
41
|
//# sourceMappingURL=SelectionOverlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionOverlay.js","names":[],"sources":["../../../../../src/components/pro/Flow/canvas/SelectionOverlay.ts"],"sourcesContent":["import { Graphics, Container } from 'pixi.js';\n\n/**\n * Renders marquee selection rectangle and node selection rings.\n */\nexport class SelectionOverlay {\n private marquee: Graphics;\n private rings: Graphics;\n\n constructor(stage: Container) {\n this.marquee = new Graphics();\n this.marquee.label = 'marquee';\n this.marquee.visible = false;\n stage.addChild(this.marquee);\n\n this.rings = new Graphics();\n this.rings.label = 'selection-rings';\n stage.addChild(this.rings);\n }\n\n showMarquee(x: number, y: number, w: number, h: number): void {\n const m = this.marquee;\n m.clear();\n m.rect(x, y, w, h)\n .fill({ color: 0x3b82f6, alpha: 0.08 })\n .stroke({ color: 0x3b82f6, width: 1, alpha: 0.5 });\n m.visible = true;\n }\n\n hideMarquee(): void {\n this.marquee.visible = false;\n this.marquee.clear();\n }\n\n drawRings(rects: Array<{ x: number; y: number; w: number; h: number }>): void {\n const g = this.rings;\n g.clear();\n for (const r of rects) {\n g.rect(r.x - 2, r.y - 2, r.w + 4, r.h + 4)\n .stroke({ color: 0x3b82f6, width: 1.5 });\n }\n }\n\n clearRings(): void {\n this.rings.clear();\n }\n\n destroy(): void {\n this.marquee.destroy();\n this.rings.destroy();\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"SelectionOverlay.js","names":[],"sources":["../../../../../src/components/pro/Flow/canvas/SelectionOverlay.ts"],"sourcesContent":["import { Graphics, Container } from 'pixi.js';\n\n/**\n * Renders marquee selection rectangle and node selection rings.\n */\nexport class SelectionOverlay {\n private marquee: Graphics;\n private rings: Graphics;\n\n constructor(stage: Container) {\n this.marquee = new Graphics();\n this.marquee.label = 'marquee';\n this.marquee.visible = false;\n stage.addChild(this.marquee);\n\n this.rings = new Graphics();\n this.rings.label = 'selection-rings';\n stage.addChild(this.rings);\n }\n\n showMarquee(x: number, y: number, w: number, h: number): void {\n const m = this.marquee;\n m.clear();\n m.rect(x, y, w, h)\n .fill({ color: 0x3b82f6, alpha: 0.08 })\n .stroke({ color: 0x3b82f6, width: 1, alpha: 0.5 });\n m.visible = true;\n }\n\n hideMarquee(): void {\n this.marquee.visible = false;\n this.marquee.clear();\n }\n\n drawRings(rects: Array<{ x: number; y: number; w: number; h: number }>): void {\n const g = this.rings;\n g.clear();\n for (const r of rects) {\n g.rect(r.x - 2, r.y - 2, r.w + 4, r.h + 4)\n .stroke({ color: 0x3b82f6, width: 1.5 });\n }\n }\n\n clearRings(): void {\n this.rings.clear();\n }\n\n destroy(): void {\n this.marquee.destroy();\n this.rings.destroy();\n }\n}\n"],"mappings":";;AAKA,IAAa,IAAb,MAA8B;CAC5B;CACA;CAEA,YAAY,GAAkB;EAQ5B,AAPA,KAAK,UAAU,IAAI,EAAS,GAC5B,KAAK,QAAQ,QAAQ,WACrB,KAAK,QAAQ,UAAU,IACvB,EAAM,SAAS,KAAK,OAAO,GAE3B,KAAK,QAAQ,IAAI,EAAS,GAC1B,KAAK,MAAM,QAAQ,mBACnB,EAAM,SAAS,KAAK,KAAK;CAC3B;CAEA,YAAY,GAAW,GAAW,GAAW,GAAiB;EAC5D,IAAM,IAAI,KAAK;EAKf,AAJA,EAAE,MAAM,GACR,EAAE,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CACf,KAAK;GAAE,OAAO;GAAU,OAAO;EAAK,CAAC,CAAC,CACtC,OAAO;GAAE,OAAO;GAAU,OAAO;GAAG,OAAO;EAAI,CAAC,GACnD,EAAE,UAAU;CACd;CAEA,cAAoB;EAElB,AADA,KAAK,QAAQ,UAAU,IACvB,KAAK,QAAQ,MAAM;CACrB;CAEA,UAAU,GAAoE;EAC5E,IAAM,IAAI,KAAK;EACf,EAAE,MAAM;EACR,KAAK,IAAM,KAAK,GACd,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CACvC,OAAO;GAAE,OAAO;GAAU,OAAO;EAAI,CAAC;CAE7C;CAEA,aAAmB;EACjB,KAAK,MAAM,MAAM;CACnB;CAEA,UAAgB;EAEd,AADA,KAAK,QAAQ,QAAQ,GACrB,KAAK,MAAM,QAAQ;CACrB;AACF"}
|
|
@@ -1,120 +1,120 @@
|
|
|
1
|
-
import { MIN_ZOOM 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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
export {
|
|
117
|
-
d as ViewportManager
|
|
1
|
+
import { MIN_ZOOM as e } from "../constants.js";
|
|
2
|
+
//#region src/components/pro/Flow/canvas/ViewportContainer.ts
|
|
3
|
+
var t = class {
|
|
4
|
+
world;
|
|
5
|
+
stage;
|
|
6
|
+
_state = {
|
|
7
|
+
x: 0,
|
|
8
|
+
y: 0,
|
|
9
|
+
zoom: 1
|
|
10
|
+
};
|
|
11
|
+
onChange;
|
|
12
|
+
_panning = !1;
|
|
13
|
+
_panStart = {
|
|
14
|
+
x: 0,
|
|
15
|
+
y: 0
|
|
16
|
+
};
|
|
17
|
+
_worldStart = {
|
|
18
|
+
x: 0,
|
|
19
|
+
y: 0
|
|
20
|
+
};
|
|
21
|
+
_spaceHeld = !1;
|
|
22
|
+
_rightPanning = !1;
|
|
23
|
+
_rightPanMoved = !1;
|
|
24
|
+
multiTouchActive = !1;
|
|
25
|
+
constructor(e, t, n) {
|
|
26
|
+
this.world = e, this.stage = t, this.onChange = n, this._bindStageEvents(), this._bindKeyEvents();
|
|
27
|
+
}
|
|
28
|
+
get state() {
|
|
29
|
+
return { ...this._state };
|
|
30
|
+
}
|
|
31
|
+
setState(t) {
|
|
32
|
+
let n = t.x === void 0 ? this._state.x : t.x, r = t.y === void 0 ? this._state.y : t.y, i = t.zoom === void 0 ? this._state.zoom : Math.max(e, Math.min(4, t.zoom));
|
|
33
|
+
(n !== this._state.x || r !== this._state.y || i !== this._state.zoom) && (this._state.x = n, this._state.y = r, this._state.zoom = i, this._applyTransform());
|
|
34
|
+
}
|
|
35
|
+
startPan(e, t) {
|
|
36
|
+
this._panning = !0, this._panStart = {
|
|
37
|
+
x: e,
|
|
38
|
+
y: t
|
|
39
|
+
}, this._worldStart = {
|
|
40
|
+
x: this._state.x,
|
|
41
|
+
y: this._state.y
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
cancelPan() {
|
|
45
|
+
this._panning = !1, this._rightPanning = !1;
|
|
46
|
+
}
|
|
47
|
+
animateTo(e, t = 300) {
|
|
48
|
+
let n = { ...this._state }, r = performance.now(), i = () => {
|
|
49
|
+
let a = performance.now() - r, o = Math.min(1, a / t), s = o < .5 ? 2 * o * o : 1 - (-2 * o + 2) ** 2 / 2;
|
|
50
|
+
this._state.x = n.x + (e.x - n.x) * s, this._state.y = n.y + (e.y - n.y) * s, this._state.zoom = n.zoom + (e.zoom - n.zoom) * s, this._applyTransform(), o < 1 && requestAnimationFrame(i);
|
|
51
|
+
};
|
|
52
|
+
requestAnimationFrame(i);
|
|
53
|
+
}
|
|
54
|
+
screenToWorld(e, t) {
|
|
55
|
+
return {
|
|
56
|
+
x: (e - this._state.x) / this._state.zoom,
|
|
57
|
+
y: (t - this._state.y) / this._state.zoom
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
worldToScreen(e, t) {
|
|
61
|
+
return {
|
|
62
|
+
x: e * this._state.zoom + this._state.x,
|
|
63
|
+
y: t * this._state.zoom + this._state.y
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
_applyTransform() {
|
|
67
|
+
this.world.position.set(this._state.x, this._state.y), this.world.scale.set(this._state.zoom), this.onChange?.(this.state);
|
|
68
|
+
}
|
|
69
|
+
_bindStageEvents() {
|
|
70
|
+
this.stage.on("pointerdown", this._onPointerDown, this), this.stage.on("pointermove", this._onPointerMove, this), this.stage.on("pointerup", this._onPointerUp, this), this.stage.on("pointerupoutside", this._onPointerUp, this);
|
|
71
|
+
}
|
|
72
|
+
_bindKeyEvents() {
|
|
73
|
+
this._handleKeyDown = this._handleKeyDown.bind(this), this._handleKeyUp = this._handleKeyUp.bind(this), window.addEventListener("keydown", this._handleKeyDown), window.addEventListener("keyup", this._handleKeyUp);
|
|
74
|
+
}
|
|
75
|
+
_handleKeyDown(e) {
|
|
76
|
+
e.code === "Space" && (this._spaceHeld = !0);
|
|
77
|
+
}
|
|
78
|
+
_handleKeyUp(e) {
|
|
79
|
+
e.code === "Space" && (this._spaceHeld = !1, this._panning = !1);
|
|
80
|
+
}
|
|
81
|
+
zoomAt(t, n, r) {
|
|
82
|
+
let i = this._state.zoom, a = Math.max(e, Math.min(4, i * r));
|
|
83
|
+
a !== i && (this._state.x = t - (t - this._state.x) * (a / i), this._state.y = n - (n - this._state.y) * (a / i), this._state.zoom = a, this._applyTransform());
|
|
84
|
+
}
|
|
85
|
+
_onPointerDown = (e) => {
|
|
86
|
+
if (this.multiTouchActive) return;
|
|
87
|
+
let t = e.button === 1, n = e.button === 2;
|
|
88
|
+
(t || n || this._spaceHeld) && (this._panning = !0, this._rightPanning = n, this._rightPanMoved = !1, this._panStart = {
|
|
89
|
+
x: e.global.x,
|
|
90
|
+
y: e.global.y
|
|
91
|
+
}, this._worldStart = {
|
|
92
|
+
x: this._state.x,
|
|
93
|
+
y: this._state.y
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
_onPointerMove = (e) => {
|
|
97
|
+
if (!this._panning || this.multiTouchActive) return;
|
|
98
|
+
let t = e.global.x - this._panStart.x, n = e.global.y - this._panStart.y;
|
|
99
|
+
this._rightPanning && (Math.abs(t) > 3 || Math.abs(n) > 3) && (this._rightPanMoved = !0), this._state.x = this._worldStart.x + t, this._state.y = this._worldStart.y + n, this._applyTransform();
|
|
100
|
+
};
|
|
101
|
+
_onPointerUp = () => {
|
|
102
|
+
this._panning = !1, this._rightPanning = !1;
|
|
103
|
+
};
|
|
104
|
+
get isPanning() {
|
|
105
|
+
return this._panning;
|
|
106
|
+
}
|
|
107
|
+
get isSpaceHeld() {
|
|
108
|
+
return this._spaceHeld;
|
|
109
|
+
}
|
|
110
|
+
get didRightPan() {
|
|
111
|
+
return this._rightPanMoved;
|
|
112
|
+
}
|
|
113
|
+
destroy() {
|
|
114
|
+
window.removeEventListener("keydown", this._handleKeyDown), window.removeEventListener("keyup", this._handleKeyUp), this.stage.off("pointerdown", this._onPointerDown, this), this.stage.off("pointermove", this._onPointerMove, this), this.stage.off("pointerup", this._onPointerUp, this), this.stage.off("pointerupoutside", this._onPointerUp, this);
|
|
115
|
+
}
|
|
118
116
|
};
|
|
117
|
+
//#endregion
|
|
118
|
+
export { t as ViewportManager };
|
|
119
119
|
|
|
120
120
|
//# sourceMappingURL=ViewportContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewportContainer.js","names":[],"sources":["../../../../../src/components/pro/Flow/canvas/ViewportContainer.ts"],"sourcesContent":["import { Container, FederatedPointerEvent } from 'pixi.js';\nimport { MIN_ZOOM, MAX_ZOOM } from '../constants';\nimport type { ViewportState } from '../types';\n\nexport type ViewportChangeCallback = (state: ViewportState) => void;\n\n/**\n * Manages pan/zoom on the world container.\n * Listens for wheel (zoom) and middle-click / space+drag (pan).\n */\nexport class ViewportManager {\n private world: Container;\n private stage: Container;\n private _state: ViewportState = { x: 0, y: 0, zoom: 1 };\n private onChange?: ViewportChangeCallback;\n\n private _panning = false;\n private _panStart = { x: 0, y: 0 };\n private _worldStart = { x: 0, y: 0 };\n private _spaceHeld = false;\n /** True while a pan was triggered by the right mouse button. */\n private _rightPanning = false;\n /** Whether the current right-button pan actually moved (used to suppress the context menu). */\n private _rightPanMoved = false;\n /** True while a multi-touch gesture (pinch zoom / two-finger pan) is active.\n * Set by FlowCanvas's native touch handlers; while set, pointer-driven\n * interactions (marquee, node drag, tap-to-place) must be suppressed. */\n multiTouchActive = false;\n\n constructor(world: Container, stage: Container, onChange?: ViewportChangeCallback) {\n this.world = world;\n this.stage = stage;\n this.onChange = onChange;\n this._bindStageEvents();\n this._bindKeyEvents();\n }\n\n get state(): ViewportState {\n return { ...this._state };\n }\n\n setState(s: Partial<ViewportState>): void {\n const nx = s.x !== undefined ? s.x : this._state.x;\n const ny = s.y !== undefined ? s.y : this._state.y;\n const nz = s.zoom !== undefined\n ? Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, s.zoom))\n : this._state.zoom;\n // Skip if nothing actually changed — avoids a needless onChange emit that\n // could feed back into React state and cause viewport jitter.\n if (nx === this._state.x && ny === this._state.y && nz === this._state.zoom) return;\n this._state.x = nx;\n this._state.y = ny;\n this._state.zoom = nz;\n this._applyTransform();\n }\n\n /** Start a pan from an external trigger (e.g. pan tool mode) */\n startPan(sx: number, sy: number): void {\n this._panning = true;\n this._panStart = { x: sx, y: sy };\n this._worldStart = { x: this._state.x, y: this._state.y };\n }\n\n /** Abort any in-progress pan (used when a multi-touch gesture takes over). */\n cancelPan(): void {\n this._panning = false;\n this._rightPanning = false;\n }\n\n /** Smoothly animate to a target state */\n animateTo(target: ViewportState, duration = 300): void {\n const start = { ...this._state };\n const startTime = performance.now();\n const tick = () => {\n const elapsed = performance.now() - startTime;\n const t = Math.min(1, elapsed / duration);\n const ease = t < 0.5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2;\n this._state.x = start.x + (target.x - start.x) * ease;\n this._state.y = start.y + (target.y - start.y) * ease;\n this._state.zoom = start.zoom + (target.zoom - start.zoom) * ease;\n this._applyTransform();\n if (t < 1) requestAnimationFrame(tick);\n };\n requestAnimationFrame(tick);\n }\n\n /** Convert screen coords to world coords */\n screenToWorld(sx: number, sy: number): { x: number; y: number } {\n return {\n x: (sx - this._state.x) / this._state.zoom,\n y: (sy - this._state.y) / this._state.zoom,\n };\n }\n\n /** Convert world coords to screen coords */\n worldToScreen(wx: number, wy: number): { x: number; y: number } {\n return {\n x: wx * this._state.zoom + this._state.x,\n y: wy * this._state.zoom + this._state.y,\n };\n }\n\n private _applyTransform(): void {\n this.world.position.set(this._state.x, this._state.y);\n this.world.scale.set(this._state.zoom);\n this.onChange?.(this.state);\n }\n\n private _bindStageEvents(): void {\n // NOTE: wheel/zoom is handled by a native, non-passive DOM listener in\n // FlowCanvas (see `zoomAt`) so it can call preventDefault() and stop the\n // browser's Ctrl/Cmd+wheel page zoom. Pixi's federated wheel event cannot\n // reliably prevent that native gesture.\n this.stage.on('pointerdown', this._onPointerDown, this);\n this.stage.on('pointermove', this._onPointerMove, this);\n this.stage.on('pointerup', this._onPointerUp, this);\n this.stage.on('pointerupoutside', this._onPointerUp, this);\n }\n\n private _bindKeyEvents(): void {\n this._handleKeyDown = this._handleKeyDown.bind(this);\n this._handleKeyUp = this._handleKeyUp.bind(this);\n window.addEventListener('keydown', this._handleKeyDown);\n window.addEventListener('keyup', this._handleKeyUp);\n }\n\n private _handleKeyDown(e: KeyboardEvent): void {\n if (e.code === 'Space') this._spaceHeld = true;\n }\n\n private _handleKeyUp(e: KeyboardEvent): void {\n if (e.code === 'Space') {\n this._spaceHeld = false;\n this._panning = false;\n }\n }\n\n /**\n * Zoom by a multiplicative factor around a screen-space anchor point.\n * Driven by a native wheel listener so the browser page zoom can be blocked.\n */\n zoomAt(sx: number, sy: number, factor: number): void {\n const oldZoom = this._state.zoom;\n const newZoom = Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, oldZoom * factor));\n if (newZoom === oldZoom) return;\n this._state.x = sx - (sx - this._state.x) * (newZoom / oldZoom);\n this._state.y = sy - (sy - this._state.y) * (newZoom / oldZoom);\n this._state.zoom = newZoom;\n this._applyTransform();\n }\n\n private _onPointerDown = (e: FederatedPointerEvent): void => {\n if (this.multiTouchActive) return;\n const isMiddle = e.button === 1;\n const isRight = e.button === 2;\n if (isMiddle || isRight || this._spaceHeld) {\n this._panning = true;\n this._rightPanning = isRight;\n this._rightPanMoved = false;\n this._panStart = { x: e.global.x, y: e.global.y };\n this._worldStart = { x: this._state.x, y: this._state.y };\n }\n };\n\n private _onPointerMove = (e: FederatedPointerEvent): void => {\n if (!this._panning || this.multiTouchActive) return;\n const dx = e.global.x - this._panStart.x;\n const dy = e.global.y - this._panStart.y;\n // Mark a right-button pan as \"moved\" once it passes a small threshold so\n // that a plain right-click (no drag) still opens the context menu.\n if (this._rightPanning && (Math.abs(dx) > 3 || Math.abs(dy) > 3)) {\n this._rightPanMoved = true;\n }\n this._state.x = this._worldStart.x + dx;\n this._state.y = this._worldStart.y + dy;\n this._applyTransform();\n };\n\n private _onPointerUp = (): void => {\n this._panning = false;\n this._rightPanning = false;\n };\n\n get isPanning(): boolean {\n return this._panning;\n }\n\n get isSpaceHeld(): boolean {\n return this._spaceHeld;\n }\n\n /**\n * Whether the most recent right-button interaction was a pan drag (moved past\n * the threshold). Consumers use this to suppress the context menu after a\n * right-drag pan. The flag resets on the next pointer down.\n */\n get didRightPan(): boolean {\n return this._rightPanMoved;\n }\n\n destroy(): void {\n window.removeEventListener('keydown', this._handleKeyDown);\n window.removeEventListener('keyup', this._handleKeyUp);\n this.stage.off('pointerdown', this._onPointerDown, this);\n this.stage.off('pointermove', this._onPointerMove, this);\n this.stage.off('pointerup', this._onPointerUp, this);\n this.stage.off('pointerupoutside', this._onPointerUp, this);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ViewportContainer.js","names":[],"sources":["../../../../../src/components/pro/Flow/canvas/ViewportContainer.ts"],"sourcesContent":["import { Container, FederatedPointerEvent } from 'pixi.js';\nimport { MIN_ZOOM, MAX_ZOOM } from '../constants';\nimport type { ViewportState } from '../types';\n\nexport type ViewportChangeCallback = (state: ViewportState) => void;\n\n/**\n * Manages pan/zoom on the world container.\n * Listens for wheel (zoom) and middle-click / space+drag (pan).\n */\nexport class ViewportManager {\n private world: Container;\n private stage: Container;\n private _state: ViewportState = { x: 0, y: 0, zoom: 1 };\n private onChange?: ViewportChangeCallback;\n\n private _panning = false;\n private _panStart = { x: 0, y: 0 };\n private _worldStart = { x: 0, y: 0 };\n private _spaceHeld = false;\n /** True while a pan was triggered by the right mouse button. */\n private _rightPanning = false;\n /** Whether the current right-button pan actually moved (used to suppress the context menu). */\n private _rightPanMoved = false;\n /** True while a multi-touch gesture (pinch zoom / two-finger pan) is active.\n * Set by FlowCanvas's native touch handlers; while set, pointer-driven\n * interactions (marquee, node drag, tap-to-place) must be suppressed. */\n multiTouchActive = false;\n\n constructor(world: Container, stage: Container, onChange?: ViewportChangeCallback) {\n this.world = world;\n this.stage = stage;\n this.onChange = onChange;\n this._bindStageEvents();\n this._bindKeyEvents();\n }\n\n get state(): ViewportState {\n return { ...this._state };\n }\n\n setState(s: Partial<ViewportState>): void {\n const nx = s.x !== undefined ? s.x : this._state.x;\n const ny = s.y !== undefined ? s.y : this._state.y;\n const nz = s.zoom !== undefined\n ? Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, s.zoom))\n : this._state.zoom;\n // Skip if nothing actually changed — avoids a needless onChange emit that\n // could feed back into React state and cause viewport jitter.\n if (nx === this._state.x && ny === this._state.y && nz === this._state.zoom) return;\n this._state.x = nx;\n this._state.y = ny;\n this._state.zoom = nz;\n this._applyTransform();\n }\n\n /** Start a pan from an external trigger (e.g. pan tool mode) */\n startPan(sx: number, sy: number): void {\n this._panning = true;\n this._panStart = { x: sx, y: sy };\n this._worldStart = { x: this._state.x, y: this._state.y };\n }\n\n /** Abort any in-progress pan (used when a multi-touch gesture takes over). */\n cancelPan(): void {\n this._panning = false;\n this._rightPanning = false;\n }\n\n /** Smoothly animate to a target state */\n animateTo(target: ViewportState, duration = 300): void {\n const start = { ...this._state };\n const startTime = performance.now();\n const tick = () => {\n const elapsed = performance.now() - startTime;\n const t = Math.min(1, elapsed / duration);\n const ease = t < 0.5 ? 2 * t * t : 1 - (-2 * t + 2) ** 2 / 2;\n this._state.x = start.x + (target.x - start.x) * ease;\n this._state.y = start.y + (target.y - start.y) * ease;\n this._state.zoom = start.zoom + (target.zoom - start.zoom) * ease;\n this._applyTransform();\n if (t < 1) requestAnimationFrame(tick);\n };\n requestAnimationFrame(tick);\n }\n\n /** Convert screen coords to world coords */\n screenToWorld(sx: number, sy: number): { x: number; y: number } {\n return {\n x: (sx - this._state.x) / this._state.zoom,\n y: (sy - this._state.y) / this._state.zoom,\n };\n }\n\n /** Convert world coords to screen coords */\n worldToScreen(wx: number, wy: number): { x: number; y: number } {\n return {\n x: wx * this._state.zoom + this._state.x,\n y: wy * this._state.zoom + this._state.y,\n };\n }\n\n private _applyTransform(): void {\n this.world.position.set(this._state.x, this._state.y);\n this.world.scale.set(this._state.zoom);\n this.onChange?.(this.state);\n }\n\n private _bindStageEvents(): void {\n // NOTE: wheel/zoom is handled by a native, non-passive DOM listener in\n // FlowCanvas (see `zoomAt`) so it can call preventDefault() and stop the\n // browser's Ctrl/Cmd+wheel page zoom. Pixi's federated wheel event cannot\n // reliably prevent that native gesture.\n this.stage.on('pointerdown', this._onPointerDown, this);\n this.stage.on('pointermove', this._onPointerMove, this);\n this.stage.on('pointerup', this._onPointerUp, this);\n this.stage.on('pointerupoutside', this._onPointerUp, this);\n }\n\n private _bindKeyEvents(): void {\n this._handleKeyDown = this._handleKeyDown.bind(this);\n this._handleKeyUp = this._handleKeyUp.bind(this);\n window.addEventListener('keydown', this._handleKeyDown);\n window.addEventListener('keyup', this._handleKeyUp);\n }\n\n private _handleKeyDown(e: KeyboardEvent): void {\n if (e.code === 'Space') this._spaceHeld = true;\n }\n\n private _handleKeyUp(e: KeyboardEvent): void {\n if (e.code === 'Space') {\n this._spaceHeld = false;\n this._panning = false;\n }\n }\n\n /**\n * Zoom by a multiplicative factor around a screen-space anchor point.\n * Driven by a native wheel listener so the browser page zoom can be blocked.\n */\n zoomAt(sx: number, sy: number, factor: number): void {\n const oldZoom = this._state.zoom;\n const newZoom = Math.max(MIN_ZOOM, Math.min(MAX_ZOOM, oldZoom * factor));\n if (newZoom === oldZoom) return;\n this._state.x = sx - (sx - this._state.x) * (newZoom / oldZoom);\n this._state.y = sy - (sy - this._state.y) * (newZoom / oldZoom);\n this._state.zoom = newZoom;\n this._applyTransform();\n }\n\n private _onPointerDown = (e: FederatedPointerEvent): void => {\n if (this.multiTouchActive) return;\n const isMiddle = e.button === 1;\n const isRight = e.button === 2;\n if (isMiddle || isRight || this._spaceHeld) {\n this._panning = true;\n this._rightPanning = isRight;\n this._rightPanMoved = false;\n this._panStart = { x: e.global.x, y: e.global.y };\n this._worldStart = { x: this._state.x, y: this._state.y };\n }\n };\n\n private _onPointerMove = (e: FederatedPointerEvent): void => {\n if (!this._panning || this.multiTouchActive) return;\n const dx = e.global.x - this._panStart.x;\n const dy = e.global.y - this._panStart.y;\n // Mark a right-button pan as \"moved\" once it passes a small threshold so\n // that a plain right-click (no drag) still opens the context menu.\n if (this._rightPanning && (Math.abs(dx) > 3 || Math.abs(dy) > 3)) {\n this._rightPanMoved = true;\n }\n this._state.x = this._worldStart.x + dx;\n this._state.y = this._worldStart.y + dy;\n this._applyTransform();\n };\n\n private _onPointerUp = (): void => {\n this._panning = false;\n this._rightPanning = false;\n };\n\n get isPanning(): boolean {\n return this._panning;\n }\n\n get isSpaceHeld(): boolean {\n return this._spaceHeld;\n }\n\n /**\n * Whether the most recent right-button interaction was a pan drag (moved past\n * the threshold). Consumers use this to suppress the context menu after a\n * right-drag pan. The flag resets on the next pointer down.\n */\n get didRightPan(): boolean {\n return this._rightPanMoved;\n }\n\n destroy(): void {\n window.removeEventListener('keydown', this._handleKeyDown);\n window.removeEventListener('keyup', this._handleKeyUp);\n this.stage.off('pointerdown', this._onPointerDown, this);\n this.stage.off('pointermove', this._onPointerMove, this);\n this.stage.off('pointerup', this._onPointerUp, this);\n this.stage.off('pointerupoutside', this._onPointerUp, this);\n }\n}\n"],"mappings":"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"}
|