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
package/dist/flow.js
CHANGED
|
@@ -1,83 +1,27 @@
|
|
|
1
|
-
import { BORDER_STYLE_OPTIONS as
|
|
2
|
-
import { FlowProvider as
|
|
3
|
-
import { FlowUIProvider as
|
|
4
|
-
import { FlowAIProvider as
|
|
5
|
-
import { SVG_ICON_CATEGORIES as
|
|
6
|
-
import
|
|
7
|
-
import { isArchifySpec as
|
|
8
|
-
import { ARCHIFY_BG as
|
|
9
|
-
import { archifyToFlowDocument as
|
|
10
|
-
import { ARCHIFY_COMPONENT_LABELS as
|
|
11
|
-
import { downloadDataURL as
|
|
12
|
-
import { useLayoutActions as
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import { FLOW_NODE_TYPES as
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import { AIPanelContent as
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import { useClipboard as
|
|
22
|
-
import
|
|
23
|
-
import { useNodeMutations as
|
|
24
|
-
import { useEdgeMutations as
|
|
25
|
-
import { useLineMutations as
|
|
26
|
-
import { useSelection as
|
|
27
|
-
export {
|
|
28
|
-
_o as AIPanelContent,
|
|
29
|
-
g as ARCHIFY_BG,
|
|
30
|
-
V as ARCHIFY_COMPONENT_LABELS,
|
|
31
|
-
j as ARCHIFY_COMPONENT_ORDER,
|
|
32
|
-
G as ARCHIFY_GRID,
|
|
33
|
-
r as BORDER_STYLE_OPTIONS,
|
|
34
|
-
no as Breadcrumb,
|
|
35
|
-
M as COMPONENT_STYLES,
|
|
36
|
-
lo as ContextMenu,
|
|
37
|
-
t as DASH_DENSITY_OPTIONS,
|
|
38
|
-
m as DEFAULT_EDGE_DATA,
|
|
39
|
-
e as DEFAULT_NODE_DATA,
|
|
40
|
-
i as EDGE_LINE_STYLE_OPTIONS,
|
|
41
|
-
p as EDGE_MARKER_OPTIONS,
|
|
42
|
-
E as EDGE_TYPE_OPTIONS,
|
|
43
|
-
eo as FLOW_NODE_TYPES,
|
|
44
|
-
No as Flow,
|
|
45
|
-
P as FlowAIProvider,
|
|
46
|
-
I as FlowProvider,
|
|
47
|
-
$ as FlowToolbar,
|
|
48
|
-
a as FlowUIProvider,
|
|
49
|
-
oo as FlowZoomControls,
|
|
50
|
-
T as GRADIENT_DIRECTION_OPTIONS,
|
|
51
|
-
po as InspectorPanel,
|
|
52
|
-
To as OutlinePanel,
|
|
53
|
-
S as PALETTE_ITEMS,
|
|
54
|
-
w as ProjectTitle,
|
|
55
|
-
_ as ROOT_CANVAS_ID,
|
|
56
|
-
v as STATE_STYLES,
|
|
57
|
-
D as SVG_ICON_CATEGORIES,
|
|
58
|
-
to as ShapePalette,
|
|
59
|
-
k as archifyStylePatch,
|
|
60
|
-
U as archifyToFlowDocument,
|
|
61
|
-
C as buildSvgMarkup,
|
|
62
|
-
h as componentStyle,
|
|
63
|
-
f as createEmptyDocument,
|
|
64
|
-
Z as downloadDataURL,
|
|
65
|
-
q as exportCanvasToPNG,
|
|
66
|
-
F as getAllSvgIcons,
|
|
67
|
-
c as getSvgIcon,
|
|
68
|
-
R as getSvgIconsByCategory,
|
|
69
|
-
K as inferComponentType,
|
|
70
|
-
d as isArchifySpec,
|
|
71
|
-
x as stateStyle,
|
|
72
|
-
ao as useClipboard,
|
|
73
|
-
Do as useEdgeMutations,
|
|
74
|
-
s as useFlowAI,
|
|
75
|
-
l as useFlowContext,
|
|
76
|
-
z as useFlowImportExport,
|
|
77
|
-
A as useFlowUI,
|
|
78
|
-
Q as useLayoutActions,
|
|
79
|
-
Fo as useLineMutations,
|
|
80
|
-
so as useNodeMutations,
|
|
81
|
-
Ro as useSelection,
|
|
82
|
-
B as variantEdgeStyle
|
|
83
|
-
};
|
|
1
|
+
import { BORDER_STYLE_OPTIONS as e, DASH_DENSITY_OPTIONS as t, DEFAULT_EDGE_DATA as n, DEFAULT_NODE_DATA as r, EDGE_LINE_STYLE_OPTIONS as i, EDGE_MARKER_OPTIONS as a, EDGE_TYPE_OPTIONS as o, GRADIENT_DIRECTION_OPTIONS as s, PALETTE_ITEMS as c, ROOT_CANVAS_ID as l, createEmptyDocument as u } from "./components/pro/Flow/constants.js";
|
|
2
|
+
import { FlowProvider as d, useFlowContext as f } from "./components/pro/Flow/context/FlowContext.js";
|
|
3
|
+
import { FlowUIProvider as p, useFlowUI as m } from "./components/pro/Flow/context/FlowUIContext.js";
|
|
4
|
+
import { FlowAIProvider as h, useFlowAI as g } from "./components/pro/Flow/context/FlowAIContext.js";
|
|
5
|
+
import { SVG_ICON_CATEGORIES as _, buildSvgMarkup as v, getAllSvgIcons as y, getSvgIcon as b, getSvgIconsByCategory as x } from "./components/pro/Flow/nodes/svgIcons.js";
|
|
6
|
+
import S from "./components/pro/Flow/panels/ProjectTitle.js";
|
|
7
|
+
import { isArchifySpec as C } from "./components/pro/Flow/archify/spec.js";
|
|
8
|
+
import { ARCHIFY_BG as w, ARCHIFY_GRID as T, COMPONENT_STYLES as E, STATE_STYLES as D, componentStyle as O, stateStyle as k, variantEdgeStyle as A } from "./components/pro/Flow/archify/palette.js";
|
|
9
|
+
import { archifyToFlowDocument as j } from "./components/pro/Flow/archify/convert.js";
|
|
10
|
+
import { ARCHIFY_COMPONENT_LABELS as M, ARCHIFY_COMPONENT_ORDER as N, archifyStylePatch as P, inferComponentType as F } from "./components/pro/Flow/archify/presets.js";
|
|
11
|
+
import { downloadDataURL as I, exportCanvasToPNG as L, useFlowImportExport as R } from "./components/pro/Flow/hooks/useFlowImportExport.js";
|
|
12
|
+
import { useLayoutActions as z } from "./components/pro/Flow/hooks/useLayoutActions.js";
|
|
13
|
+
import B, { FlowZoomControls as V } from "./components/pro/Flow/panels/FlowToolbar.js";
|
|
14
|
+
import H from "./components/pro/Flow/panels/ShapePalette.js";
|
|
15
|
+
import { FLOW_NODE_TYPES as U } from "./components/pro/Flow/types.js";
|
|
16
|
+
import W from "./components/pro/Flow/panels/InspectorPanel.js";
|
|
17
|
+
import G from "./components/pro/Flow/panels/OutlinePanel.js";
|
|
18
|
+
import { AIPanelContent as K } from "./components/pro/Flow/panels/AIPanel.js";
|
|
19
|
+
import q from "./components/pro/Flow/panels/Breadcrumb.js";
|
|
20
|
+
import J from "./components/pro/Flow/panels/ContextMenu.js";
|
|
21
|
+
import { useClipboard as Y } from "./components/pro/Flow/hooks/useClipboard.js";
|
|
22
|
+
import X from "./components/pro/Flow/Flow.js";
|
|
23
|
+
import { useNodeMutations as Z } from "./components/pro/Flow/hooks/useNodeMutations.js";
|
|
24
|
+
import { useEdgeMutations as Q } from "./components/pro/Flow/hooks/useEdgeMutations.js";
|
|
25
|
+
import { useLineMutations as $ } from "./components/pro/Flow/hooks/useLineMutations.js";
|
|
26
|
+
import { useSelection as ee } from "./components/pro/Flow/hooks/useSelection.js";
|
|
27
|
+
export { K as AIPanelContent, w as ARCHIFY_BG, M as ARCHIFY_COMPONENT_LABELS, N as ARCHIFY_COMPONENT_ORDER, T as ARCHIFY_GRID, e as BORDER_STYLE_OPTIONS, q as Breadcrumb, E as COMPONENT_STYLES, J as ContextMenu, t as DASH_DENSITY_OPTIONS, n as DEFAULT_EDGE_DATA, r as DEFAULT_NODE_DATA, i as EDGE_LINE_STYLE_OPTIONS, a as EDGE_MARKER_OPTIONS, o as EDGE_TYPE_OPTIONS, U as FLOW_NODE_TYPES, X as Flow, h as FlowAIProvider, d as FlowProvider, B as FlowToolbar, p as FlowUIProvider, V as FlowZoomControls, s as GRADIENT_DIRECTION_OPTIONS, W as InspectorPanel, G as OutlinePanel, c as PALETTE_ITEMS, S as ProjectTitle, l as ROOT_CANVAS_ID, D as STATE_STYLES, _ as SVG_ICON_CATEGORIES, H as ShapePalette, P as archifyStylePatch, j as archifyToFlowDocument, v as buildSvgMarkup, O as componentStyle, u as createEmptyDocument, I as downloadDataURL, L as exportCanvasToPNG, y as getAllSvgIcons, b as getSvgIcon, x as getSvgIconsByCategory, F as inferComponentType, C as isArchifySpec, k as stateStyle, Y as useClipboard, Q as useEdgeMutations, g as useFlowAI, f as useFlowContext, R as useFlowImportExport, m as useFlowUI, z as useLayoutActions, $ as useLineMutations, Z as useNodeMutations, ee as useSelection, A as variantEdgeStyle };
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { useEffect as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { useEffect as e } from "react";
|
|
2
|
+
//#region src/hooks/useClickOutside.ts
|
|
3
|
+
function t(t, n, r = !0) {
|
|
4
|
+
e(() => {
|
|
5
|
+
if (!r) return;
|
|
6
|
+
let e = (e) => {
|
|
7
|
+
t.current && !t.current.contains(e.target) && n();
|
|
8
|
+
};
|
|
9
|
+
return document.addEventListener("mousedown", e), () => {
|
|
10
|
+
document.removeEventListener("mousedown", e);
|
|
11
|
+
};
|
|
12
|
+
}, [
|
|
13
|
+
t,
|
|
14
|
+
n,
|
|
15
|
+
r
|
|
16
|
+
]);
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
18
|
+
//#endregion
|
|
19
|
+
export { t as useClickOutside };
|
|
20
20
|
|
|
21
21
|
//# sourceMappingURL=useClickOutside.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClickOutside.js","names":[],"sources":["../../src/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect, RefObject } from 'react';\n\n/**\n * 监听元素外部点击事件的 Hook\n *\n * @param ref - 需要检测外部点击的元素 ref\n * @param onClickOutside - 外部点击时的回调函数\n * @param enabled - 是否启用监听(默认 true)\n *\n * @example\n * ```tsx\n * const ref = useRef<HTMLDivElement>(null);\n * useClickOutside(ref, () => setIsOpen(false), isOpen);\n * ```\n */\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null>,\n onClickOutside: () => void,\n enabled: boolean = true\n): void {\n useEffect(() => {\n if (!enabled) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n onClickOutside();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [ref, onClickOutside, enabled]);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useClickOutside.js","names":[],"sources":["../../src/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect, RefObject } from 'react';\n\n/**\n * 监听元素外部点击事件的 Hook\n *\n * @param ref - 需要检测外部点击的元素 ref\n * @param onClickOutside - 外部点击时的回调函数\n * @param enabled - 是否启用监听(默认 true)\n *\n * @example\n * ```tsx\n * const ref = useRef<HTMLDivElement>(null);\n * useClickOutside(ref, () => setIsOpen(false), isOpen);\n * ```\n */\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null>,\n onClickOutside: () => void,\n enabled: boolean = true\n): void {\n useEffect(() => {\n if (!enabled) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n onClickOutside();\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [ref, onClickOutside, enabled]);\n}\n"],"mappings":";;AAeA,SAAgB,EACZ,GACA,GACA,IAAmB,IACf;CACJ,QAAgB;EACZ,IAAI,CAAC,GAAS;EAEd,IAAM,KAAsB,MAAkB;GAC1C,AAAI,EAAI,WAAW,CAAC,EAAI,QAAQ,SAAS,EAAE,MAAc,KACrD,EAAe;EAEvB;EAGA,OADA,SAAS,iBAAiB,aAAa,CAAkB,SAC5C;GACT,SAAS,oBAAoB,aAAa,CAAkB;EAChE;CACJ,GAAG;EAAC;EAAK;EAAgB;CAAO,CAAC;AACrC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { useEffect as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { useEffect as e, useState as t } from "react";
|
|
2
|
+
//#region src/hooks/useContainerElement.ts
|
|
3
|
+
function n(n, r) {
|
|
4
|
+
let [i, a] = t(null);
|
|
5
|
+
return e(() => {
|
|
6
|
+
r?.current ? a(r.current) : a(n ? document.getElementById(n) : null);
|
|
7
|
+
}, [n, r]), i;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { n as useContainerElement };
|
|
11
11
|
|
|
12
12
|
//# sourceMappingURL=useContainerElement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContainerElement.js","names":[],"sources":["../../src/hooks/useContainerElement.ts"],"sourcesContent":["import { useState, useEffect, RefObject } from 'react';\n\n/**\n * 通过 ref 或 DOM id 解析容器元素的 Hook\n *\n * 统一了 ArticleControl 和 ArticleContextMenu 中重复的容器解析逻辑。\n * 使用 useState 和 useEffect 确保能在初次渲染后正确获取到 ref.current。\n *\n * @param targetId - 容器元素的 DOM id\n * @param targetRef - 容器元素的 React ref\n * @returns 解析到的 HTMLElement 或 null\n */\nexport function useContainerElement(\n targetId?: string,\n targetRef?: RefObject<HTMLElement | HTMLDivElement | null>\n): HTMLElement | null {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (targetRef?.current) {\n setContainer(targetRef.current);\n } else if (targetId) {\n setContainer(document.getElementById(targetId));\n } else {\n setContainer(null);\n }\n }, [targetId, targetRef]);\n\n return container;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useContainerElement.js","names":[],"sources":["../../src/hooks/useContainerElement.ts"],"sourcesContent":["import { useState, useEffect, RefObject } from 'react';\n\n/**\n * 通过 ref 或 DOM id 解析容器元素的 Hook\n *\n * 统一了 ArticleControl 和 ArticleContextMenu 中重复的容器解析逻辑。\n * 使用 useState 和 useEffect 确保能在初次渲染后正确获取到 ref.current。\n *\n * @param targetId - 容器元素的 DOM id\n * @param targetRef - 容器元素的 React ref\n * @returns 解析到的 HTMLElement 或 null\n */\nexport function useContainerElement(\n targetId?: string,\n targetRef?: RefObject<HTMLElement | HTMLDivElement | null>\n): HTMLElement | null {\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (targetRef?.current) {\n setContainer(targetRef.current);\n } else if (targetId) {\n setContainer(document.getElementById(targetId));\n } else {\n setContainer(null);\n }\n }, [targetId, targetRef]);\n\n return container;\n}\n"],"mappings":";;AAYA,SAAgB,EACZ,GACA,GACkB;CAClB,IAAM,CAAC,GAAW,KAAgB,EAA6B,IAAI;CAYnE,OAVA,QAAgB;EACZ,AAAI,GAAW,UACX,EAAa,EAAU,OAAO,IAE9B,EADO,IACM,SAAS,eAAe,CAAQ,IAEhC,IAAI;CAEzB,GAAG,CAAC,GAAU,CAAS,CAAC,GAEjB;AACX"}
|
|
@@ -1,39 +1,37 @@
|
|
|
1
|
-
import { useCallback as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { useCallback as e, useEffect as t, useRef as n, useState as r } from "react";
|
|
2
|
+
//#region src/hooks/useControllableState.ts
|
|
3
|
+
function i(i, a, o = (e, t) => e === t) {
|
|
4
|
+
let [s, c] = r(i), l = n(a);
|
|
5
|
+
l.current = a;
|
|
6
|
+
let u = n(i), d = n(0), f = n(0);
|
|
7
|
+
o(u.current, i) || (u.current = i, c(i));
|
|
8
|
+
let p = e((e) => {
|
|
9
|
+
d.current++, c(e);
|
|
10
|
+
}, []), m = n(!0);
|
|
11
|
+
return t(() => {
|
|
12
|
+
if (m.current) {
|
|
13
|
+
m.current = !1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
d.current !== f.current && (f.current = d.current, l.current?.(s));
|
|
17
|
+
}, [s]), [s, p];
|
|
17
18
|
}
|
|
18
|
-
function a(e,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return !0;
|
|
19
|
+
function a(e, t) {
|
|
20
|
+
if (Object.is(e, t)) return !0;
|
|
21
|
+
if (typeof e != "object" || !e || typeof t != "object" || !t) return !1;
|
|
22
|
+
let n = Array.isArray(e), r = Array.isArray(t);
|
|
23
|
+
if (n !== r) return !1;
|
|
24
|
+
if (n && r) {
|
|
25
|
+
if (e.length !== t.length) return !1;
|
|
26
|
+
for (let n = 0; n < e.length; n++) if (!a(e[n], t[n])) return !1;
|
|
27
|
+
return !0;
|
|
28
|
+
}
|
|
29
|
+
let i = Object.keys(e), o = Object.keys(t);
|
|
30
|
+
if (i.length !== o.length) return !1;
|
|
31
|
+
for (let n of i) if (!Object.prototype.hasOwnProperty.call(t, n) || !a(e[n], t[n])) return !1;
|
|
32
|
+
return !0;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
g as useControllableState
|
|
37
|
-
};
|
|
34
|
+
//#endregion
|
|
35
|
+
export { a as deepEqual, i as useControllableState };
|
|
38
36
|
|
|
39
37
|
//# sourceMappingURL=useControllableState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useControllableState.js","names":[],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["import { useState, useRef, useCallback, useEffect } from 'react';\n\n/**\n * A hook for managing controllable state that can be either controlled (by parent via props)\n * or uncontrolled (managed internally). Handles bidirectional sync between external props\n * and internal state without causing infinite loops.\n *\n * Key design decisions:\n * - Returns the raw useState setter → always stable reference, safe for useMemo deps\n * - Uses a version counter to distinguish internal vs external state changes\n * - onChange is called via useEffect (not inside state updater) for React safety\n * - onChangeRef avoids stale closures for the onChange callback\n *\n * @param externalValue - The value from props (controlled mode when onChange is provided)\n * @param onChange - Optional callback to notify parent of internal state changes\n * @param isEqual - Optional equality check (defaults to reference equality)\n * @returns [currentValue, setValue] - The current value and a stable setter\n */\nexport function useControllableState<T>(\n externalValue: T,\n onChange?: (value: T) => void,\n isEqual: (a: T, b: T) => boolean = (a, b) => a === b\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const [internalValue, setInternalValue] = useState<T>(externalValue);\n\n // Always-current ref for onChange to avoid stale closures\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Track external value to detect parent-driven changes\n const prevExternalRef = useRef<T>(externalValue);\n\n // Version counter: incremented only by internal (user-driven) changes\n const internalVersionRef = useRef(0);\n const notifiedVersionRef = useRef(0);\n\n // Sync external → internal (during render, no extra render cycle)\n if (!isEqual(prevExternalRef.current, externalValue)) {\n prevExternalRef.current = externalValue;\n setInternalValue(externalValue);\n }\n\n // Wrap setter to track internal changes via version counter\n const setValue = useCallback(\n (updater: React.SetStateAction<T>) => {\n internalVersionRef.current++;\n setInternalValue(updater);\n },\n []\n );\n\n // Notify parent only when value changed from an internal action (not external sync)\n const isFirstRenderRef = useRef(true);\n useEffect(() => {\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n return;\n }\n if (internalVersionRef.current !== notifiedVersionRef.current) {\n notifiedVersionRef.current = internalVersionRef.current;\n onChangeRef.current?.(internalValue);\n }\n }, [internalValue]);\n\n return [internalValue, setValue];\n}\n\n/**\n * Structural deep equality for the plain values used by DataTable state\n * (arrays, plain objects, primitives). Avoids the overhead and edge cases of\n * `JSON.stringify` (key ordering, `undefined`, functions) that the previous\n * implementation relied on.\n */\nexport function deepEqual<T>(a: T, b: T): boolean {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\n return false;\n }\n\n const aIsArray = Array.isArray(a);\n const bIsArray = Array.isArray(b);\n if (aIsArray !== bIsArray) return false;\n\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n const aKeys = Object.keys(a as Record<string, unknown>);\n const bKeys = Object.keys(b as Record<string, unknown>);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])) {\n return false;\n }\n }\n return true;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useControllableState.js","names":[],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["import { useState, useRef, useCallback, useEffect } from 'react';\n\n/**\n * A hook for managing controllable state that can be either controlled (by parent via props)\n * or uncontrolled (managed internally). Handles bidirectional sync between external props\n * and internal state without causing infinite loops.\n *\n * Key design decisions:\n * - Returns the raw useState setter → always stable reference, safe for useMemo deps\n * - Uses a version counter to distinguish internal vs external state changes\n * - onChange is called via useEffect (not inside state updater) for React safety\n * - onChangeRef avoids stale closures for the onChange callback\n *\n * @param externalValue - The value from props (controlled mode when onChange is provided)\n * @param onChange - Optional callback to notify parent of internal state changes\n * @param isEqual - Optional equality check (defaults to reference equality)\n * @returns [currentValue, setValue] - The current value and a stable setter\n */\nexport function useControllableState<T>(\n externalValue: T,\n onChange?: (value: T) => void,\n isEqual: (a: T, b: T) => boolean = (a, b) => a === b\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const [internalValue, setInternalValue] = useState<T>(externalValue);\n\n // Always-current ref for onChange to avoid stale closures\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Track external value to detect parent-driven changes\n const prevExternalRef = useRef<T>(externalValue);\n\n // Version counter: incremented only by internal (user-driven) changes\n const internalVersionRef = useRef(0);\n const notifiedVersionRef = useRef(0);\n\n // Sync external → internal (during render, no extra render cycle)\n if (!isEqual(prevExternalRef.current, externalValue)) {\n prevExternalRef.current = externalValue;\n setInternalValue(externalValue);\n }\n\n // Wrap setter to track internal changes via version counter\n const setValue = useCallback(\n (updater: React.SetStateAction<T>) => {\n internalVersionRef.current++;\n setInternalValue(updater);\n },\n []\n );\n\n // Notify parent only when value changed from an internal action (not external sync)\n const isFirstRenderRef = useRef(true);\n useEffect(() => {\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n return;\n }\n if (internalVersionRef.current !== notifiedVersionRef.current) {\n notifiedVersionRef.current = internalVersionRef.current;\n onChangeRef.current?.(internalValue);\n }\n }, [internalValue]);\n\n return [internalValue, setValue];\n}\n\n/**\n * Structural deep equality for the plain values used by DataTable state\n * (arrays, plain objects, primitives). Avoids the overhead and edge cases of\n * `JSON.stringify` (key ordering, `undefined`, functions) that the previous\n * implementation relied on.\n */\nexport function deepEqual<T>(a: T, b: T): boolean {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) {\n return false;\n }\n\n const aIsArray = Array.isArray(a);\n const bIsArray = Array.isArray(b);\n if (aIsArray !== bIsArray) return false;\n\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n\n const aKeys = Object.keys(a as Record<string, unknown>);\n const bKeys = Object.keys(b as Record<string, unknown>);\n if (aKeys.length !== bKeys.length) return false;\n for (const key of aKeys) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (!deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])) {\n return false;\n }\n }\n return true;\n}\n"],"mappings":";;AAkBA,SAAgB,EACZ,GACA,GACA,KAAoC,GAAG,MAAM,MAAM,GACP;CAC5C,IAAM,CAAC,GAAe,KAAoB,EAAY,CAAa,GAG7D,IAAc,EAAO,CAAQ;CACnC,EAAY,UAAU;CAGtB,IAAM,IAAkB,EAAU,CAAa,GAGzC,IAAqB,EAAO,CAAC,GAC7B,IAAqB,EAAO,CAAC;CAGnC,AAAK,EAAQ,EAAgB,SAAS,CAAa,MAC/C,EAAgB,UAAU,GAC1B,EAAiB,CAAa;CAIlC,IAAM,IAAW,GACZ,MAAqC;EAElC,AADA,EAAmB,WACnB,EAAiB,CAAO;CAC5B,GACA,CAAC,CACL,GAGM,IAAmB,EAAO,EAAI;CAYpC,OAXA,QAAgB;EACZ,IAAI,EAAiB,SAAS;GAC1B,EAAiB,UAAU;GAC3B;EACJ;EACA,AAAI,EAAmB,YAAY,EAAmB,YAClD,EAAmB,UAAU,EAAmB,SAChD,EAAY,UAAU,CAAa;CAE3C,GAAG,CAAC,CAAa,CAAC,GAEX,CAAC,GAAe,CAAQ;AACnC;AAQA,SAAgB,EAAa,GAAM,GAAe;CAC9C,IAAI,OAAO,GAAG,GAAG,CAAC,GAAG,OAAO;CAC5B,IAAI,OAAO,KAAM,aAAY,KAAc,OAAO,KAAM,aAAY,GAChE,OAAO;CAGX,IAAM,IAAW,MAAM,QAAQ,CAAC,GAC1B,IAAW,MAAM,QAAQ,CAAC;CAChC,IAAI,MAAa,GAAU,OAAO;CAElC,IAAI,KAAY,GAAU;EACtB,IAAI,EAAE,WAAW,EAAE,QAAQ,OAAO;EAClC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAC1B,IAAI,CAAC,EAAU,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO;EAEvC,OAAO;CACX;CAEA,IAAM,IAAQ,OAAO,KAAK,CAA4B,GAChD,IAAQ,OAAO,KAAK,CAA4B;CACtD,IAAI,EAAM,WAAW,EAAM,QAAQ,OAAO;CAC1C,KAAK,IAAM,KAAO,GAEd,IADI,CAAC,OAAO,UAAU,eAAe,KAAK,GAAG,CAAG,KAC5C,CAAC,EAAW,EAA8B,IAAO,EAA8B,EAAI,GACnF,OAAO;CAGf,OAAO;AACX"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { useCallback as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { useCallback as e, useState as t } from "react";
|
|
2
|
+
//#region src/hooks/useCopyToClipboard.ts
|
|
3
|
+
function n(n = 2e3) {
|
|
4
|
+
let [r, i] = t(!1);
|
|
5
|
+
return {
|
|
6
|
+
copied: r,
|
|
7
|
+
copy: e(async (e) => {
|
|
8
|
+
try {
|
|
9
|
+
await navigator.clipboard.writeText(e), i(!0), setTimeout(() => i(!1), n);
|
|
10
|
+
} catch (e) {
|
|
11
|
+
console.error("Failed to copy to clipboard:", e);
|
|
12
|
+
}
|
|
13
|
+
}, [n])
|
|
14
|
+
};
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
16
|
+
//#endregion
|
|
17
|
+
export { n as useCopyToClipboard };
|
|
18
18
|
|
|
19
19
|
//# sourceMappingURL=useCopyToClipboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCopyToClipboard.js","names":[],"sources":["../../src/hooks/useCopyToClipboard.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\n/**\n * 复制到剪贴板的 Hook,带有自动重置的反馈状态\n *\n * @param resetDelay - 复制成功后 `copied` 状态重置的延迟(毫秒),默认 2000\n * @returns `{ copied, copy }` — `copied` 为当前复制反馈状态,`copy` 为触发复制的函数\n *\n * @example\n * ```tsx\n * const { copied, copy } = useCopyToClipboard();\n * <button onClick={() => copy(text)}>\n * {copied ? '已复制' : '复制'}\n * </button>\n * ```\n */\nexport function useCopyToClipboard(resetDelay: number = 2000) {\n const [copied, setCopied] = useState(false);\n\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), resetDelay);\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n },\n [resetDelay]\n );\n\n return { copied, copy };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCopyToClipboard.js","names":[],"sources":["../../src/hooks/useCopyToClipboard.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\n/**\n * 复制到剪贴板的 Hook,带有自动重置的反馈状态\n *\n * @param resetDelay - 复制成功后 `copied` 状态重置的延迟(毫秒),默认 2000\n * @returns `{ copied, copy }` — `copied` 为当前复制反馈状态,`copy` 为触发复制的函数\n *\n * @example\n * ```tsx\n * const { copied, copy } = useCopyToClipboard();\n * <button onClick={() => copy(text)}>\n * {copied ? '已复制' : '复制'}\n * </button>\n * ```\n */\nexport function useCopyToClipboard(resetDelay: number = 2000) {\n const [copied, setCopied] = useState(false);\n\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), resetDelay);\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n },\n [resetDelay]\n );\n\n return { copied, copy };\n}\n"],"mappings":";;AAgBA,SAAgB,EAAmB,IAAqB,KAAM;CAC1D,IAAM,CAAC,GAAQ,KAAa,EAAS,EAAK;CAe1C,OAAO;EAAE;EAAQ,MAbJ,EACT,OAAO,MAAiB;GACpB,IAAI;IAGA,AAFA,MAAM,UAAU,UAAU,UAAU,CAAI,GACxC,EAAU,EAAI,GACd,iBAAiB,EAAU,EAAK,GAAG,CAAU;GACjD,SAAS,GAAK;IACV,QAAQ,MAAM,gCAAgC,CAAG;GACrD;EACJ,GACA,CAAC,CAAU,CAGE;CAAK;AAC1B"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { useEffect as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { useEffect as e, useState as t } from "react";
|
|
2
|
+
//#region src/hooks/useDebounce.ts
|
|
3
|
+
function n(n, r) {
|
|
4
|
+
let [i, a] = t(n);
|
|
5
|
+
return e(() => {
|
|
6
|
+
let e = setTimeout(() => {
|
|
7
|
+
a(n);
|
|
8
|
+
}, r);
|
|
9
|
+
return () => {
|
|
10
|
+
clearTimeout(e);
|
|
11
|
+
};
|
|
12
|
+
}, [n, r]), i;
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
14
|
+
//#endregion
|
|
15
|
+
export { n as useDebounce };
|
|
16
16
|
|
|
17
17
|
//# sourceMappingURL=useDebounce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDebounce.js","names":[],"sources":["../../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\n/**\n * A hook that returns a debounced value.\n * @param value The value to debounce.\n * @param delay The delay in milliseconds.\n * @returns The debounced value.\n */\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDebounce.js","names":[],"sources":["../../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\n/**\n * A hook that returns a debounced value.\n * @param value The value to debounce.\n * @param delay The delay in milliseconds.\n * @returns The debounced value.\n */\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n"],"mappings":";;AAQA,SAAgB,EAAe,GAAU,GAAkB;CACvD,IAAM,CAAC,GAAgB,KAAqB,EAAY,CAAK;CAY7D,OAVA,QAAgB;EACZ,IAAM,IAAU,iBAAiB;GAC7B,EAAkB,CAAK;EAC3B,GAAG,CAAK;EAER,aAAa;GACT,aAAa,CAAO;EACxB;CACJ,GAAG,CAAC,GAAO,CAAK,CAAC,GAEV;AACX"}
|
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import { useCallback as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { useCallback as e, useEffect as t, useState as n } from "react";
|
|
2
|
+
//#region src/hooks/useDraggable.ts
|
|
3
|
+
function r({ initialPosition: r, boundarySize: i = {
|
|
4
|
+
width: 0,
|
|
5
|
+
height: 0
|
|
5
6
|
} }) {
|
|
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
|
-
|
|
7
|
+
let [a, o] = n(r), [s, c] = n(!1), [l, u] = n({
|
|
8
|
+
x: 0,
|
|
9
|
+
y: 0
|
|
10
|
+
}), d = e((e) => {
|
|
11
|
+
e.target.closest(".toc-item, .toc-search, input") || (c(!0), u({
|
|
12
|
+
x: e.clientX - a.x,
|
|
13
|
+
y: e.clientY - a.y
|
|
14
|
+
}));
|
|
15
|
+
}, [a]), f = e((e) => {
|
|
16
|
+
if (e.target.closest(".toc-item, .toc-search, input")) return;
|
|
17
|
+
let t = e.touches[0];
|
|
18
|
+
c(!0), u({
|
|
19
|
+
x: t.clientX - a.x,
|
|
20
|
+
y: t.clientY - a.y
|
|
21
|
+
});
|
|
22
|
+
}, [a]);
|
|
23
|
+
return t(() => {
|
|
24
|
+
if (!s) return;
|
|
25
|
+
let e = (e, t) => {
|
|
26
|
+
let n = Math.max(0, Math.min(window.innerWidth - i.width, e - l.x)), r = Math.max(0, Math.min(window.innerHeight - i.height, t - l.y));
|
|
27
|
+
o({
|
|
28
|
+
x: n,
|
|
29
|
+
y: r
|
|
30
|
+
});
|
|
31
|
+
}, t = (t) => e(t.clientX, t.clientY), n = (t) => {
|
|
32
|
+
t.preventDefault();
|
|
33
|
+
let n = t.touches[0];
|
|
34
|
+
e(n.clientX, n.clientY);
|
|
35
|
+
}, r = () => c(!1);
|
|
36
|
+
return document.addEventListener("mousemove", t), document.addEventListener("mouseup", r), document.addEventListener("touchmove", n, { passive: !1 }), document.addEventListener("touchend", r), () => {
|
|
37
|
+
document.removeEventListener("mousemove", t), document.removeEventListener("mouseup", r), document.removeEventListener("touchmove", n), document.removeEventListener("touchend", r);
|
|
38
|
+
};
|
|
39
|
+
}, [
|
|
40
|
+
s,
|
|
41
|
+
l,
|
|
42
|
+
i.width,
|
|
43
|
+
i.height
|
|
44
|
+
]), {
|
|
45
|
+
position: a,
|
|
46
|
+
isDragging: s,
|
|
47
|
+
handleMouseDown: d,
|
|
48
|
+
handleTouchStart: f
|
|
49
|
+
};
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
};
|
|
51
|
+
//#endregion
|
|
52
|
+
export { r as useDraggable };
|
|
53
53
|
|
|
54
54
|
//# sourceMappingURL=useDraggable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.js","names":[],"sources":["../../src/hooks/useDraggable.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\n\nexport interface DraggableOptions {\n /** 初始位置 */\n initialPosition: { x: number; y: number };\n /** 拖拽对象尺寸,用于边界约束 */\n boundarySize?: { width: number; height: number };\n}\n\nexport interface DraggableResult {\n /** 当前位置 */\n position: { x: number; y: number };\n /** 是否正在拖拽 */\n isDragging: boolean;\n /** 鼠标按下事件处理器(绑定到可拖拽元素) */\n handleMouseDown: (e: React.MouseEvent) => void;\n /** 触摸开始事件处理器(绑定到可拖拽元素) */\n handleTouchStart: (e: React.TouchEvent) => void;\n}\n\n/**\n * 可拖拽定位的 Hook\n *\n * 提取自 ArticleControl 组件的拖拽逻辑,支持鼠标和触摸操作,\n * 并自动进行视口边界约束。\n *\n * @example\n * ```tsx\n * const { position, isDragging, handleMouseDown, handleTouchStart } = useDraggable({\n * initialPosition: { x: 100, y: 100 },\n * boundarySize: { width: 280, height: 60 },\n * });\n *\n * <div\n * style={{ left: position.x, top: position.y, cursor: isDragging ? 'grabbing' : 'grab' }}\n * onMouseDown={handleMouseDown}\n * onTouchStart={handleTouchStart}\n * />\n * ```\n */\nexport function useDraggable({\n initialPosition,\n boundarySize = { width: 0, height: 0 },\n}: DraggableOptions): DraggableResult {\n const [position, setPosition] = useState(initialPosition);\n const [isDragging, setIsDragging] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n // 不在可交互子元素上拖动\n if ((e.target as HTMLElement).closest('.toc-item, .toc-search, input')) return;\n setIsDragging(true);\n setDragOffset({\n x: e.clientX - position.x,\n y: e.clientY - position.y,\n });\n },\n [position]\n );\n\n const handleTouchStart = useCallback(\n (e: React.TouchEvent) => {\n if ((e.target as HTMLElement).closest('.toc-item, .toc-search, input')) return;\n const touch = e.touches[0];\n setIsDragging(true);\n setDragOffset({\n x: touch.clientX - position.x,\n y: touch.clientY - position.y,\n });\n },\n [position]\n );\n\n useEffect(() => {\n if (!isDragging) return;\n\n const clamp = (clientX: number, clientY: number) => {\n const newX = Math.max(\n 0,\n Math.min(window.innerWidth - boundarySize.width, clientX - dragOffset.x)\n );\n const newY = Math.max(\n 0,\n Math.min(window.innerHeight - boundarySize.height, clientY - dragOffset.y)\n );\n setPosition({ x: newX, y: newY });\n };\n\n const handleMouseMove = (e: MouseEvent) => clamp(e.clientX, e.clientY);\n const handleTouchMove = (e: TouchEvent) => {\n e.preventDefault();\n const touch = e.touches[0];\n clamp(touch.clientX, touch.clientY);\n };\n const stop = () => setIsDragging(false);\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', stop);\n document.addEventListener('touchmove', handleTouchMove, { passive: false });\n document.addEventListener('touchend', stop);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', stop);\n document.removeEventListener('touchmove', handleTouchMove);\n document.removeEventListener('touchend', stop);\n };\n }, [isDragging, dragOffset, boundarySize.width, boundarySize.height]);\n\n return { position, isDragging, handleMouseDown, handleTouchStart };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDraggable.js","names":[],"sources":["../../src/hooks/useDraggable.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\n\nexport interface DraggableOptions {\n /** 初始位置 */\n initialPosition: { x: number; y: number };\n /** 拖拽对象尺寸,用于边界约束 */\n boundarySize?: { width: number; height: number };\n}\n\nexport interface DraggableResult {\n /** 当前位置 */\n position: { x: number; y: number };\n /** 是否正在拖拽 */\n isDragging: boolean;\n /** 鼠标按下事件处理器(绑定到可拖拽元素) */\n handleMouseDown: (e: React.MouseEvent) => void;\n /** 触摸开始事件处理器(绑定到可拖拽元素) */\n handleTouchStart: (e: React.TouchEvent) => void;\n}\n\n/**\n * 可拖拽定位的 Hook\n *\n * 提取自 ArticleControl 组件的拖拽逻辑,支持鼠标和触摸操作,\n * 并自动进行视口边界约束。\n *\n * @example\n * ```tsx\n * const { position, isDragging, handleMouseDown, handleTouchStart } = useDraggable({\n * initialPosition: { x: 100, y: 100 },\n * boundarySize: { width: 280, height: 60 },\n * });\n *\n * <div\n * style={{ left: position.x, top: position.y, cursor: isDragging ? 'grabbing' : 'grab' }}\n * onMouseDown={handleMouseDown}\n * onTouchStart={handleTouchStart}\n * />\n * ```\n */\nexport function useDraggable({\n initialPosition,\n boundarySize = { width: 0, height: 0 },\n}: DraggableOptions): DraggableResult {\n const [position, setPosition] = useState(initialPosition);\n const [isDragging, setIsDragging] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n // 不在可交互子元素上拖动\n if ((e.target as HTMLElement).closest('.toc-item, .toc-search, input')) return;\n setIsDragging(true);\n setDragOffset({\n x: e.clientX - position.x,\n y: e.clientY - position.y,\n });\n },\n [position]\n );\n\n const handleTouchStart = useCallback(\n (e: React.TouchEvent) => {\n if ((e.target as HTMLElement).closest('.toc-item, .toc-search, input')) return;\n const touch = e.touches[0];\n setIsDragging(true);\n setDragOffset({\n x: touch.clientX - position.x,\n y: touch.clientY - position.y,\n });\n },\n [position]\n );\n\n useEffect(() => {\n if (!isDragging) return;\n\n const clamp = (clientX: number, clientY: number) => {\n const newX = Math.max(\n 0,\n Math.min(window.innerWidth - boundarySize.width, clientX - dragOffset.x)\n );\n const newY = Math.max(\n 0,\n Math.min(window.innerHeight - boundarySize.height, clientY - dragOffset.y)\n );\n setPosition({ x: newX, y: newY });\n };\n\n const handleMouseMove = (e: MouseEvent) => clamp(e.clientX, e.clientY);\n const handleTouchMove = (e: TouchEvent) => {\n e.preventDefault();\n const touch = e.touches[0];\n clamp(touch.clientX, touch.clientY);\n };\n const stop = () => setIsDragging(false);\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', stop);\n document.addEventListener('touchmove', handleTouchMove, { passive: false });\n document.addEventListener('touchend', stop);\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', stop);\n document.removeEventListener('touchmove', handleTouchMove);\n document.removeEventListener('touchend', stop);\n };\n }, [isDragging, dragOffset, boundarySize.width, boundarySize.height]);\n\n return { position, isDragging, handleMouseDown, handleTouchStart };\n}\n"],"mappings":";;AAwCA,SAAgB,EAAa,EACzB,oBACA,kBAAe;CAAE,OAAO;CAAG,QAAQ;AAAE,KACH;CAClC,IAAM,CAAC,GAAU,KAAe,EAAS,CAAe,GAClD,CAAC,GAAY,KAAiB,EAAS,EAAK,GAC5C,CAAC,GAAY,KAAiB,EAAS;EAAE,GAAG;EAAG,GAAG;CAAE,CAAC,GAErD,IAAkB,GACnB,MAAwB;EAEhB,EAAE,OAAuB,QAAQ,+BAA+B,MACrE,EAAc,EAAI,GAClB,EAAc;GACV,GAAG,EAAE,UAAU,EAAS;GACxB,GAAG,EAAE,UAAU,EAAS;EAC5B,CAAC;CACL,GACA,CAAC,CAAQ,CACb,GAEM,IAAmB,GACpB,MAAwB;EACrB,IAAK,EAAE,OAAuB,QAAQ,+BAA+B,GAAG;EACxE,IAAM,IAAQ,EAAE,QAAQ;EAExB,AADA,EAAc,EAAI,GAClB,EAAc;GACV,GAAG,EAAM,UAAU,EAAS;GAC5B,GAAG,EAAM,UAAU,EAAS;EAChC,CAAC;CACL,GACA,CAAC,CAAQ,CACb;CAsCA,OApCA,QAAgB;EACZ,IAAI,CAAC,GAAY;EAEjB,IAAM,KAAS,GAAiB,MAAoB;GAChD,IAAM,IAAO,KAAK,IACd,GACA,KAAK,IAAI,OAAO,aAAa,EAAa,OAAO,IAAU,EAAW,CAAC,CAC3E,GACM,IAAO,KAAK,IACd,GACA,KAAK,IAAI,OAAO,cAAc,EAAa,QAAQ,IAAU,EAAW,CAAC,CAC7E;GACA,EAAY;IAAE,GAAG;IAAM,GAAG;GAAK,CAAC;EACpC,GAEM,KAAmB,MAAkB,EAAM,EAAE,SAAS,EAAE,OAAO,GAC/D,KAAmB,MAAkB;GACvC,EAAE,eAAe;GACjB,IAAM,IAAQ,EAAE,QAAQ;GACxB,EAAM,EAAM,SAAS,EAAM,OAAO;EACtC,GACM,UAAa,EAAc,EAAK;EAOtC,OALA,SAAS,iBAAiB,aAAa,CAAe,GACtD,SAAS,iBAAiB,WAAW,CAAI,GACzC,SAAS,iBAAiB,aAAa,GAAiB,EAAE,SAAS,GAAM,CAAC,GAC1E,SAAS,iBAAiB,YAAY,CAAI,SAE7B;GAIT,AAHA,SAAS,oBAAoB,aAAa,CAAe,GACzD,SAAS,oBAAoB,WAAW,CAAI,GAC5C,SAAS,oBAAoB,aAAa,CAAe,GACzD,SAAS,oBAAoB,YAAY,CAAI;EACjD;CACJ,GAAG;EAAC;EAAY;EAAY,EAAa;EAAO,EAAa;CAAM,CAAC,GAE7D;EAAE;EAAU;EAAY;EAAiB;CAAiB;AACrE"}
|