dishui 0.0.64 → 0.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +10 -11
- package/dist/chart.js +12 -46
- package/dist/code-editor.js +16 -43
- package/dist/components/Badge/index.js +11 -13
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.js +62 -86
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/index.d.ts +87 -0
- package/dist/components/Card/index.js +178 -44
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Chart/Chart.js +25 -25
- package/dist/components/Chart/Chart.js.map +1 -1
- package/dist/components/Checkbox/index.js +57 -63
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/ChoicePicker/index.d.ts +44 -0
- package/dist/components/ChoicePicker/index.js +81 -0
- package/dist/components/ChoicePicker/index.js.map +1 -0
- package/dist/components/Column/index.d.ts +28 -0
- package/dist/components/Column/index.js +30 -0
- package/dist/components/Column/index.js.map +1 -0
- package/dist/components/DateTimeInput/index.d.ts +44 -0
- package/dist/components/DateTimeInput/index.js +48 -0
- package/dist/components/DateTimeInput/index.js.map +1 -0
- package/dist/components/Demo/index.js +107 -107
- package/dist/components/Demo/index.js.map +1 -1
- package/dist/components/Divider/index.d.ts +20 -0
- package/dist/components/Divider/index.js +30 -0
- package/dist/components/Divider/index.js.map +1 -0
- package/dist/components/EmptyState/index.d.ts +4 -1
- package/dist/components/EmptyState/index.js +24 -24
- package/dist/components/EmptyState/index.js.map +1 -1
- package/dist/components/FileUploader/DropZone.js +134 -136
- package/dist/components/FileUploader/DropZone.js.map +1 -1
- package/dist/components/FileUploader/FileItem.js +159 -163
- package/dist/components/FileUploader/FileItem.js.map +1 -1
- package/dist/components/FileUploader/FileUploader.js +126 -127
- package/dist/components/FileUploader/FileUploader.js.map +1 -1
- package/dist/components/FileUploader/UploadQueue.js +62 -62
- package/dist/components/FileUploader/UploadQueue.js.map +1 -1
- package/dist/components/FloatWindow/index.d.ts +28 -0
- package/dist/components/GridLayout/index.d.ts +42 -0
- package/dist/components/Icon/index.d.ts +24 -0
- package/dist/components/Icon/index.js +26 -0
- package/dist/components/Icon/index.js.map +1 -0
- package/dist/components/Image/index.d.ts +33 -0
- package/dist/components/Image/index.js +44 -0
- package/dist/components/Image/index.js.map +1 -0
- package/dist/components/Input/index.js +196 -197
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Label/index.js +62 -73
- package/dist/components/Label/index.js.map +1 -1
- package/dist/components/Layout/index.js +134 -139
- package/dist/components/Layout/index.js.map +1 -1
- package/dist/components/List/index.js +45 -43
- package/dist/components/List/index.js.map +1 -1
- package/dist/components/Markdown/Markdown.js +106 -103
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Markdown/codeThemes.js +24 -33
- package/dist/components/Markdown/codeThemes.js.map +1 -1
- package/dist/components/Markdown/markdownComponents.js +203 -208
- package/dist/components/Markdown/markdownComponents.js.map +1 -1
- package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
- package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
- package/dist/components/Markdown/useMarkdownSource.js +46 -46
- package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
- package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
- package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
- package/dist/components/Markdown/useMermaidRenderer.js +41 -42
- package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
- package/dist/components/Modal/index.d.ts +7 -3
- package/dist/components/Modal/index.js +82 -70
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/MultipleChoice/index.d.ts +44 -0
- package/dist/components/MultipleChoice/index.js +52 -0
- package/dist/components/MultipleChoice/index.js.map +1 -0
- package/dist/components/Notification/index.d.ts +17 -0
- package/dist/components/Page/index.d.ts +58 -0
- package/dist/components/Page/index.js +43 -0
- package/dist/components/Page/index.js.map +1 -0
- package/dist/components/PageHeader/index.js +28 -28
- package/dist/components/PageHeader/index.js.map +1 -1
- package/dist/components/ProtectedRoute/index.js +8 -9
- package/dist/components/ProtectedRoute/index.js.map +1 -1
- package/dist/components/Row/index.d.ts +28 -0
- package/dist/components/Row/index.js +30 -0
- package/dist/components/Row/index.js.map +1 -0
- package/dist/components/Select/index.js +251 -257
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/SidebarToggleButton/index.js +56 -59
- package/dist/components/SidebarToggleButton/index.js.map +1 -1
- package/dist/components/Slider/index.d.ts +39 -0
- package/dist/components/Slider/index.js +52 -0
- package/dist/components/Slider/index.js.map +1 -0
- package/dist/components/StatCard/index.d.ts +31 -1
- package/dist/components/StatCard/index.js +189 -58
- package/dist/components/StatCard/index.js.map +1 -1
- package/dist/components/Switch/index.d.ts +34 -0
- package/dist/components/Switch/index.js +55 -0
- package/dist/components/Switch/index.js.map +1 -0
- package/dist/components/Tab/index.d.ts +40 -0
- package/dist/components/Table/index.js +109 -103
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Tabs/index.d.ts +19 -5
- package/dist/components/Tabs/index.js +30 -21
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Text/index.d.ts +43 -0
- package/dist/components/Text/index.js +55 -0
- package/dist/components/Text/index.js.map +1 -0
- package/dist/components/Tooltip/index.d.ts +23 -0
- package/dist/components/Tooltip/index.js +34 -0
- package/dist/components/Tooltip/index.js.map +1 -0
- package/dist/components/Tree/Tree.js +205 -205
- package/dist/components/Tree/Tree.js.map +1 -1
- package/dist/components/pro/ArticleContextMenu/index.js +86 -87
- package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
- package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
- package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
- package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
- package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
- package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
- package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
- package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
- package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
- package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
- package/dist/components/pro/Calendar/index.d.ts +7 -0
- package/dist/components/pro/Calendar/types.d.ts +151 -0
- package/dist/components/pro/Calendar/utils.d.ts +94 -0
- package/dist/components/pro/Chat/Chat.d.ts +6 -0
- package/dist/components/pro/Chat/index.d.ts +2 -0
- package/dist/components/pro/Chat/types.d.ts +84 -0
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -320
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -221
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
- package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
- package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
- package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
- package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
- package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/index.js +7 -15
- package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
- package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/python.js +4 -40
- package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
- package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
- package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
- package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
- package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
- package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/themes.js +513 -483
- package/dist/components/pro/CodeEditor/themes.js.map +1 -1
- package/dist/components/pro/CodeEditor/types.d.ts +1 -1
- package/dist/components/pro/CodeEditor/utils.js +171 -175
- package/dist/components/pro/CodeEditor/utils.js.map +1 -1
- package/dist/components/pro/DataTable/DataTable.js +305 -305
- package/dist/components/pro/DataTable/DataTable.js.map +1 -1
- package/dist/components/pro/DataTable/Filters.js +299 -314
- package/dist/components/pro/DataTable/Filters.js.map +1 -1
- package/dist/components/pro/DataTable/PivotPanel.js +203 -204
- package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
- package/dist/components/pro/DataTable/PivotView.js +142 -141
- package/dist/components/pro/DataTable/PivotView.js.map +1 -1
- package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
- package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
- package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
- package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
- package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
- package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableBody.js +93 -94
- package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
- package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
- package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
- package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
- package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
- package/dist/components/pro/DataTable/extension.js +5 -5
- package/dist/components/pro/DataTable/extension.js.map +1 -1
- package/dist/components/pro/DataTable/pivotEngine.js +84 -92
- package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
- package/dist/components/pro/DataTable/pivotExtension.js +93 -93
- package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/DataTable/tanstack-table.js +45 -62
- package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
- package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
- package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
- package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
- package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
- package/dist/components/pro/DataTable/utils.js +156 -168
- package/dist/components/pro/DataTable/utils.js.map +1 -1
- package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
- package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
- package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
- package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
- package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileIcon.js +190 -190
- package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
- package/dist/components/pro/FileExplorer/GridView.js +100 -100
- package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
- package/dist/components/pro/FileExplorer/ListView.js +209 -209
- package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
- package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
- package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
- package/dist/components/pro/Flow/Flow.js +920 -946
- package/dist/components/pro/Flow/Flow.js.map +1 -1
- package/dist/components/pro/Flow/FlowCanvas.js +1626 -1663
- package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
- package/dist/components/pro/Flow/archify/build.js +85 -94
- package/dist/components/pro/Flow/archify/build.js.map +1 -1
- package/dist/components/pro/Flow/archify/convert.js +512 -519
- package/dist/components/pro/Flow/archify/convert.js.map +1 -1
- package/dist/components/pro/Flow/archify/palette.js +87 -104
- package/dist/components/pro/Flow/archify/palette.js.map +1 -1
- package/dist/components/pro/Flow/archify/presets.js +34 -37
- package/dist/components/pro/Flow/archify/presets.js.map +1 -1
- package/dist/components/pro/Flow/archify/spec.js +7 -7
- package/dist/components/pro/Flow/archify/spec.js.map +1 -1
- package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
- package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
- package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
- package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
- package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
- package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
- package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
- package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
- package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
- package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
- package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
- package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
- package/dist/components/pro/Flow/constants.js +266 -278
- package/dist/components/pro/Flow/constants.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
- package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowContext.js +60 -61
- package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
- package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
- package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
- package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
- package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
- package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
- package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
- package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
- package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
- package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
- package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
- package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
- package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
- package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
- package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -182
- package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
- package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
- package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
- package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
- package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
- package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
- package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
- package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
- package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
- package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
- package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
- package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
- package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
- package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
- package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
- package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
- package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
- package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -222
- package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
- package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
- package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
- package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
- package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
- package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
- package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
- package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
- package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
- package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
- package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
- package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
- package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
- package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/shapes.js +556 -591
- package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
- package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
- package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
- package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
- package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
- package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
- package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
- package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
- package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
- package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
- package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
- package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
- package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
- package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
- package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
- package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
- package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
- package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -244
- package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/PresentationMode.js +137 -138
- package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
- package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
- package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
- package/dist/components/pro/Flow/panels/ShapePalette.js +557 -567
- package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
- package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
- package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
- package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
- package/dist/components/pro/Flow/types.js +26 -26
- package/dist/components/pro/Flow/types.js.map +1 -1
- package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
- package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
- package/dist/components/pro/Flow/utils/gradient.js +55 -55
- package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
- package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
- package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
- package/dist/components/pro/Flow/utils/themeColor.js +185 -195
- package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
- package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
- package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
- package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
- package/dist/components/pro/Gantt/index.d.ts +6 -0
- package/dist/components/pro/Gantt/types.d.ts +478 -0
- package/dist/components/pro/Gantt/utils.d.ts +124 -0
- package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
- package/dist/components/pro/Resizable/index.d.ts +2 -0
- package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
- package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
- package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
- package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
- package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
- package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
- package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
- package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
- package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
- package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
- package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
- package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
- package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
- package/dist/components/pro/RichTextEditor/types.js +75 -75
- package/dist/components/pro/RichTextEditor/types.js.map +1 -1
- package/dist/contexts/AppContext.d.ts +1 -1
- package/dist/contexts/AppContext.js +216 -221
- package/dist/contexts/AppContext.js.map +1 -1
- package/dist/data-table.js +15 -41
- package/dist/data-table.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/flow.js +27 -83
- package/dist/hooks/useClickOutside.js +18 -18
- package/dist/hooks/useClickOutside.js.map +1 -1
- package/dist/hooks/useContainerElement.js +9 -9
- package/dist/hooks/useContainerElement.js.map +1 -1
- package/dist/hooks/useControllableState.js +33 -35
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useCopyToClipboard.js +16 -16
- package/dist/hooks/useCopyToClipboard.js.map +1 -1
- package/dist/hooks/useDebounce.js +14 -14
- package/dist/hooks/useDebounce.js.map +1 -1
- package/dist/hooks/useDraggable.js +50 -50
- package/dist/hooks/useDraggable.js.map +1 -1
- package/dist/hooks/useTableColumns.js +39 -42
- package/dist/hooks/useTableColumns.js.map +1 -1
- package/dist/hooks/useTableData.js +67 -68
- package/dist/hooks/useTableData.js.map +1 -1
- package/dist/index-nostyled.d.ts +8 -0
- package/dist/index.d.ts +29 -1
- package/dist/index.js +106 -236
- package/dist/layouts/MainLayout.js +56 -56
- package/dist/layouts/MainLayout.js.map +1 -1
- package/dist/layouts/Navbar.js +214 -214
- package/dist/layouts/Navbar.js.map +1 -1
- package/dist/layouts/Sidebar.js +184 -165
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/layouts/headbar/Headbar.js +25 -25
- package/dist/layouts/headbar/Headbar.js.map +1 -1
- package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
- package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarSearch.js +120 -120
- package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarTitle.js +26 -26
- package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
- package/dist/lite.js +9 -24
- package/dist/markdown.js +4 -9
- package/dist/pages/components/Calendar/index.d.ts +3 -0
- package/dist/pages/components/Calendar/index.en.d.ts +3 -0
- package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
- package/dist/pages/components/Chat/index.d.ts +3 -0
- package/dist/pages/components/Chat/index.en.d.ts +3 -0
- package/dist/pages/components/Chat/index.zh.d.ts +3 -0
- package/dist/pages/components/FloatWindow/index.d.ts +3 -0
- package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
- package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
- package/dist/pages/components/Gantt/index.d.ts +3 -0
- package/dist/pages/components/Gantt/index.en.d.ts +3 -0
- package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
- package/dist/pages/components/GridLayout/index.d.ts +3 -0
- package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
- package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
- package/dist/pages/components/Notification/index.d.ts +3 -0
- package/dist/pages/components/Notification/index.en.d.ts +3 -0
- package/dist/pages/components/Notification/index.zh.d.ts +3 -0
- package/dist/pages/components/Resizable/index.d.ts +3 -0
- package/dist/pages/components/Resizable/index.en.d.ts +3 -0
- package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
- package/dist/pages/components/Tab/index.d.ts +3 -0
- package/dist/pages/components/Tab/index.en.d.ts +3 -0
- package/dist/pages/components/Tab/index.zh.d.ts +3 -0
- package/dist/styles/themeStyles.js +87 -86
- package/dist/styles/themeStyles.js.map +1 -1
- package/dist/utils/cn.d.ts +13 -0
- package/dist/utils/cn.js +16 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/i18n.js +690 -602
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/menu.js +94 -94
- package/dist/utils/menu.js.map +1 -1
- package/dist/utils/rehype-code-meta.js +14 -14
- package/dist/utils/rehype-code-meta.js.map +1 -1
- package/dist/utils/remark-code-meta.js +9 -9
- package/dist/utils/remark-code-meta.js.map +1 -1
- package/dist/utils/routerBuilder.js +59 -58
- package/dist/utils/routerBuilder.js.map +1 -1
- package/dist/utils/selection.js +28 -29
- package/dist/utils/selection.js.map +1 -1
- package/dist/utils/themes.js +275 -255
- package/dist/utils/themes.js.map +1 -1
- package/package.json +23 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/components/pro/DataTable/utils.ts"],"sourcesContent":["import React from 'react';\nimport { ColumnDef, Row, SortingFn, SortingFnOption } from './tanstack-table';\n\n/**\n * 列选项类型:在标准 v9 `ColumnDef` 基础上,额外兼容 v8 命名的 `sortingFn`\n * (会在 `createColumn` 内部归一化为 v9 的 `sortFn`)。\n */\nexport type ColumnOptions<T extends object> = Partial<ColumnDef<T>> & {\n /** @deprecated 请使用 v9 的 `sortFn`。为向后兼容保留,内部会归一化为 `sortFn`。 */\n sortingFn?: SortingFnOption<T> | SortingFn<T>;\n};\n\n/** 将 v8 命名的 `sortingFn` 归一化为 v9 的 `sortFn`。 */\nfunction normalizeColumn<T extends object>(col: ColumnOptions<T>): ColumnDef<T> {\n if (col && 'sortingFn' in col && col.sortingFn != null) {\n const { sortingFn, ...rest } = col as ColumnOptions<T> & { sortFn?: unknown };\n return { sortFn: sortingFn, ...rest } as ColumnDef<T>;\n }\n return col as ColumnDef<T>;\n}\n\n// 创建DataTable列的辅助函数\nexport function createColumn<T extends object>(\n accessorKeyOrOptions: keyof T | string | ColumnOptions<T>,\n headerOrNone?: string,\n options: ColumnOptions<T> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式:\n // 1. createColumn(accessorKey, header, options)\n // 2. createColumn({ accessorKey, header, ...options })\n if (typeof accessorKeyOrOptions === 'object') {\n // 使用对象形式的参数\n return normalizeColumn(accessorKeyOrOptions);\n } else {\n // 使用传统的参数形式\n return normalizeColumn({\n accessorKey: String(accessorKeyOrOptions),\n header: headerOrNone || String(accessorKeyOrOptions),\n ...options,\n });\n }\n}\n\n// 创建计算列的辅助函数\nexport function createComputedColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n accessorFnOrNone?: (row: T) => any,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数\n return idOrOptions as ColumnDef<T>;\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n accessorFn: accessorFnOrNone,\n ...options,\n };\n }\n}\n\n// 创建操作列的辅助函数\nexport function createActionColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n cellOrNone?: (props: { row: Row<T> }) => React.ReactNode,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数,并确保enableSorting默认为false\n return {\n enableSorting: false,\n ...idOrOptions as ColumnDef<T>\n };\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n cell: cellOrNone,\n enableSorting: false,\n ...options,\n };\n }\n}\n\n// 创建选择列的辅助函数\nexport function createSelectionColumn<T extends object>(\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n const defaults = {\n id: 'selection',\n header: ({ table }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: table.getIsAllRowsSelected(),\n onChange: table.getToggleAllRowsSelectedHandler(),\n className: \"checkbox checkbox-sm\"\n }),\n cell: ({ row }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: row.getIsSelected(),\n onChange: row.getToggleSelectedHandler(),\n className: \"checkbox checkbox-sm\",\n onClick: (e: React.MouseEvent) => e.stopPropagation()\n }),\n enableSorting: false,\n };\n\n // 强制类型转换为ColumnDef<T>,因为我们确保提供了必要的id属性\n return { ...defaults, ...options } as ColumnDef<T>;\n}\n\n// 数字排序函数,支持null和undefined\nexport const numericSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 尝试将字符串转换为数字\n const numA = typeof valueA === 'string' ? parseFloat(valueA) : Number(valueA);\n const numB = typeof valueB === 'string' ? parseFloat(valueB) : Number(valueB);\n \n if (Number.isNaN(numA) && Number.isNaN(numB)) return 0;\n if (Number.isNaN(numA)) return -1;\n if (Number.isNaN(numB)) return 1;\n \n return numA - numB;\n};\n\n// 日期排序函数,支持不同的日期格式\nexport const dateSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 将值转换为Date对象\n const dateA = valueA instanceof Date ? valueA : new Date(String(valueA));\n const dateB = valueB instanceof Date ? valueB : new Date(String(valueB));\n \n // 处理无效日期\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) return 0;\n if (isNaN(dateA.getTime())) return -1;\n if (isNaN(dateB.getTime())) return 1;\n \n return dateA.getTime() - dateB.getTime();\n};\n\n// 字符串排序函数,支持本地化比较和大小写不敏感\nexport const stringSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 转换为字符串并进行本地化比较\n const strA = String(valueA).toLowerCase();\n const strB = String(valueB).toLowerCase();\n \n return strA.localeCompare(strB);\n};\n\n// 定义树状数据行的接口,包含深度信息\nexport interface TreeDataRow {\n __depth?: number;\n __id?: string;\n __parentId?: string;\n __hasChildren?: boolean;\n __isExpanded?: boolean;\n __childCount?: number;\n [key: string]: any;\n}\n\n// 树状结构排序函数 - 只对最外层的父项数据进行排序\nexport const treeSort = <T extends TreeDataRow>(\n sortFn: SortingFn<T>,\n subDataKey: string\n): SortingFn<T> => {\n return (rowA, rowB, columnId) => {\n const valueA = rowA.original;\n const valueB = rowB.original;\n \n // 检查是否为子项\n const depthA = valueA.__depth !== undefined ? valueA.__depth : 0;\n const depthB = valueB.__depth !== undefined ? valueB.__depth : 0;\n \n // 如果两行深度不同,保持原来的顺序\n // 这意味着子项将总是跟随其父项\n if (depthA !== depthB) {\n return 0;\n }\n \n // 如果两行都是顶层(depth=0),使用传入的排序函数\n if (depthA === 0 && depthB === 0) {\n return sortFn(rowA, rowB, columnId);\n }\n \n // 对于相同深度的非顶层行,保持它们相对顺序不变\n return 0;\n };\n};\n\n// 将对象数组转换为SelectFilter的选项格式\nexport function createSelectOptions<T>(\n items: T[], \n labelField: keyof T, \n valueField: keyof T = labelField\n) {\n return items.map(item => ({\n label: String(item[labelField]),\n value: String(item[valueField]),\n }));\n}\n\n// 从数据中提取唯一值作为SelectFilter的选项\nexport function extractUniqueOptions<T>(\n data: T[], \n field: keyof T\n) {\n const uniqueValues = new Set<any>();\n \n data.forEach(item => {\n if (item[field] != null) {\n uniqueValues.add(item[field]);\n }\n });\n \n return Array.from(uniqueValues).map(value => ({\n label: String(value),\n value: String(value)\n }));\n}\n\n// 默认的列筛选函数\nexport const defaultFilterFunctions = {\n // 文本筛选\n text: (row: any, columnId: string, filterValue: string) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return String(value).toLowerCase().includes(filterValue.toLowerCase());\n },\n \n // 范围筛选\n range: (row: any, columnId: string, filterValue: [number | undefined, number | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const numValue = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(numValue)) return false;\n \n const [min, max] = filterValue;\n if (min !== undefined && numValue < min) return false;\n if (max !== undefined && numValue > max) return false;\n \n return true;\n },\n \n // 日期范围筛选\n dateRange: (row: any, columnId: string, filterValue: [string | undefined, string | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const dateValue = value instanceof Date ? value : new Date(value);\n if (isNaN(dateValue.getTime())) return false;\n \n const [startDate, endDate] = filterValue;\n \n if (startDate) {\n const start = new Date(startDate);\n start.setHours(0, 0, 0, 0);\n if (dateValue < start) return false;\n }\n \n if (endDate) {\n const end = new Date(endDate);\n end.setHours(23, 59, 59, 999);\n if (dateValue > end) return false;\n }\n \n return true;\n },\n \n // 布尔值筛选\n boolean: (row: any, columnId: string, filterValue: boolean) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return value === filterValue;\n },\n \n // 多选筛选\n multiSelect: (row: any, columnId: string, filterValue: string[]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return filterValue.includes(String(value));\n }\n};\n\nexport default {\n createColumn,\n createComputedColumn,\n createActionColumn,\n createSelectionColumn,\n numericSort,\n dateSort,\n stringSort,\n treeSort,\n createSelectOptions,\n extractUniqueOptions,\n defaultFilterFunctions\n}; "],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/components/pro/DataTable/utils.ts"],"sourcesContent":["import React from 'react';\nimport { ColumnDef, Row, SortingFn, SortingFnOption } from './tanstack-table';\n\n/**\n * 列选项类型:在标准 v9 `ColumnDef` 基础上,额外兼容 v8 命名的 `sortingFn`\n * (会在 `createColumn` 内部归一化为 v9 的 `sortFn`)。\n */\nexport type ColumnOptions<T extends object> = Partial<ColumnDef<T>> & {\n /** @deprecated 请使用 v9 的 `sortFn`。为向后兼容保留,内部会归一化为 `sortFn`。 */\n sortingFn?: SortingFnOption<T> | SortingFn<T>;\n};\n\n/** 将 v8 命名的 `sortingFn` 归一化为 v9 的 `sortFn`。 */\nfunction normalizeColumn<T extends object>(col: ColumnOptions<T>): ColumnDef<T> {\n if (col && 'sortingFn' in col && col.sortingFn != null) {\n const { sortingFn, ...rest } = col as ColumnOptions<T> & { sortFn?: unknown };\n return { sortFn: sortingFn, ...rest } as ColumnDef<T>;\n }\n return col as ColumnDef<T>;\n}\n\n// 创建DataTable列的辅助函数\nexport function createColumn<T extends object>(\n accessorKeyOrOptions: keyof T | string | ColumnOptions<T>,\n headerOrNone?: string,\n options: ColumnOptions<T> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式:\n // 1. createColumn(accessorKey, header, options)\n // 2. createColumn({ accessorKey, header, ...options })\n if (typeof accessorKeyOrOptions === 'object') {\n // 使用对象形式的参数\n return normalizeColumn(accessorKeyOrOptions);\n } else {\n // 使用传统的参数形式\n return normalizeColumn({\n accessorKey: String(accessorKeyOrOptions),\n header: headerOrNone || String(accessorKeyOrOptions),\n ...options,\n });\n }\n}\n\n// 创建计算列的辅助函数\nexport function createComputedColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n accessorFnOrNone?: (row: T) => any,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数\n return idOrOptions as ColumnDef<T>;\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n accessorFn: accessorFnOrNone,\n ...options,\n };\n }\n}\n\n// 创建操作列的辅助函数\nexport function createActionColumn<T extends object>(\n idOrOptions: string | Partial<ColumnDef<T>>,\n headerOrNone?: string,\n cellOrNone?: (props: { row: Row<T> }) => React.ReactNode,\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n // 检查参数类型,支持两种调用方式\n if (typeof idOrOptions === 'object') {\n // 使用对象形式的参数,并确保enableSorting默认为false\n return {\n enableSorting: false,\n ...idOrOptions as ColumnDef<T>\n };\n } else {\n // 使用传统的参数形式\n return {\n id: idOrOptions,\n header: headerOrNone || idOrOptions,\n cell: cellOrNone,\n enableSorting: false,\n ...options,\n };\n }\n}\n\n// 创建选择列的辅助函数\nexport function createSelectionColumn<T extends object>(\n options: Partial<ColumnDef<T>> = {}\n): ColumnDef<T> {\n const defaults = {\n id: 'selection',\n header: ({ table }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: table.getIsAllRowsSelected(),\n onChange: table.getToggleAllRowsSelectedHandler(),\n className: \"checkbox checkbox-sm\"\n }),\n cell: ({ row }: any) => \n React.createElement('input', {\n type: \"checkbox\",\n checked: row.getIsSelected(),\n onChange: row.getToggleSelectedHandler(),\n className: \"checkbox checkbox-sm\",\n onClick: (e: React.MouseEvent) => e.stopPropagation()\n }),\n enableSorting: false,\n };\n\n // 强制类型转换为ColumnDef<T>,因为我们确保提供了必要的id属性\n return { ...defaults, ...options } as ColumnDef<T>;\n}\n\n// 数字排序函数,支持null和undefined\nexport const numericSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 尝试将字符串转换为数字\n const numA = typeof valueA === 'string' ? parseFloat(valueA) : Number(valueA);\n const numB = typeof valueB === 'string' ? parseFloat(valueB) : Number(valueB);\n \n if (Number.isNaN(numA) && Number.isNaN(numB)) return 0;\n if (Number.isNaN(numA)) return -1;\n if (Number.isNaN(numB)) return 1;\n \n return numA - numB;\n};\n\n// 日期排序函数,支持不同的日期格式\nexport const dateSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 将值转换为Date对象\n const dateA = valueA instanceof Date ? valueA : new Date(String(valueA));\n const dateB = valueB instanceof Date ? valueB : new Date(String(valueB));\n \n // 处理无效日期\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) return 0;\n if (isNaN(dateA.getTime())) return -1;\n if (isNaN(dateB.getTime())) return 1;\n \n return dateA.getTime() - dateB.getTime();\n};\n\n// 字符串排序函数,支持本地化比较和大小写不敏感\nexport const stringSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = rowA.getValue(columnId);\n const valueB = rowB.getValue(columnId);\n \n // 处理null或undefined值\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n \n // 转换为字符串并进行本地化比较\n const strA = String(valueA).toLowerCase();\n const strB = String(valueB).toLowerCase();\n \n return strA.localeCompare(strB);\n};\n\n// 定义树状数据行的接口,包含深度信息\nexport interface TreeDataRow {\n __depth?: number;\n __id?: string;\n __parentId?: string;\n __hasChildren?: boolean;\n __isExpanded?: boolean;\n __childCount?: number;\n [key: string]: any;\n}\n\n// 树状结构排序函数 - 只对最外层的父项数据进行排序\nexport const treeSort = <T extends TreeDataRow>(\n sortFn: SortingFn<T>,\n subDataKey: string\n): SortingFn<T> => {\n return (rowA, rowB, columnId) => {\n const valueA = rowA.original;\n const valueB = rowB.original;\n \n // 检查是否为子项\n const depthA = valueA.__depth !== undefined ? valueA.__depth : 0;\n const depthB = valueB.__depth !== undefined ? valueB.__depth : 0;\n \n // 如果两行深度不同,保持原来的顺序\n // 这意味着子项将总是跟随其父项\n if (depthA !== depthB) {\n return 0;\n }\n \n // 如果两行都是顶层(depth=0),使用传入的排序函数\n if (depthA === 0 && depthB === 0) {\n return sortFn(rowA, rowB, columnId);\n }\n \n // 对于相同深度的非顶层行,保持它们相对顺序不变\n return 0;\n };\n};\n\n// 将对象数组转换为SelectFilter的选项格式\nexport function createSelectOptions<T>(\n items: T[], \n labelField: keyof T, \n valueField: keyof T = labelField\n) {\n return items.map(item => ({\n label: String(item[labelField]),\n value: String(item[valueField]),\n }));\n}\n\n// 从数据中提取唯一值作为SelectFilter的选项\nexport function extractUniqueOptions<T>(\n data: T[], \n field: keyof T\n) {\n const uniqueValues = new Set<any>();\n \n data.forEach(item => {\n if (item[field] != null) {\n uniqueValues.add(item[field]);\n }\n });\n \n return Array.from(uniqueValues).map(value => ({\n label: String(value),\n value: String(value)\n }));\n}\n\n// 默认的列筛选函数\nexport const defaultFilterFunctions = {\n // 文本筛选\n text: (row: any, columnId: string, filterValue: string) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return String(value).toLowerCase().includes(filterValue.toLowerCase());\n },\n \n // 范围筛选\n range: (row: any, columnId: string, filterValue: [number | undefined, number | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const numValue = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(numValue)) return false;\n \n const [min, max] = filterValue;\n if (min !== undefined && numValue < min) return false;\n if (max !== undefined && numValue > max) return false;\n \n return true;\n },\n \n // 日期范围筛选\n dateRange: (row: any, columnId: string, filterValue: [string | undefined, string | undefined]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n \n const dateValue = value instanceof Date ? value : new Date(value);\n if (isNaN(dateValue.getTime())) return false;\n \n const [startDate, endDate] = filterValue;\n \n if (startDate) {\n const start = new Date(startDate);\n start.setHours(0, 0, 0, 0);\n if (dateValue < start) return false;\n }\n \n if (endDate) {\n const end = new Date(endDate);\n end.setHours(23, 59, 59, 999);\n if (dateValue > end) return false;\n }\n \n return true;\n },\n \n // 布尔值筛选\n boolean: (row: any, columnId: string, filterValue: boolean) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return value === filterValue;\n },\n \n // 多选筛选\n multiSelect: (row: any, columnId: string, filterValue: string[]) => {\n const value = row.getValue(columnId);\n if (value == null) return false;\n return filterValue.includes(String(value));\n }\n};\n\nexport default {\n createColumn,\n createComputedColumn,\n createActionColumn,\n createSelectionColumn,\n numericSort,\n dateSort,\n stringSort,\n treeSort,\n createSelectOptions,\n extractUniqueOptions,\n defaultFilterFunctions\n}; "],"mappings":"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"}
|
|
@@ -1,185 +1,185 @@
|
|
|
1
|
-
import { useClickOutside as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { jsx as
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
1
|
+
import { useClickOutside as e } from "../../../hooks/useClickOutside.js";
|
|
2
|
+
import t from "../../Tree/Tree.js";
|
|
3
|
+
import n, { useCallback as r, useEffect as i, useRef as a, useState as o } from "react";
|
|
4
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/pro/FileExplorer/Breadcrumb.tsx
|
|
6
|
+
var l = { root: "Root" }, u = () => /* @__PURE__ */ s("svg", {
|
|
7
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
8
|
+
className: "h-4 w-4",
|
|
9
|
+
fill: "none",
|
|
10
|
+
viewBox: "0 0 24 24",
|
|
11
|
+
stroke: "currentColor",
|
|
12
|
+
strokeWidth: 2,
|
|
13
|
+
children: /* @__PURE__ */ s("path", {
|
|
14
|
+
strokeLinecap: "round",
|
|
15
|
+
strokeLinejoin: "round",
|
|
16
|
+
d: "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
|
|
17
|
+
})
|
|
18
|
+
}), d = () => /* @__PURE__ */ s("svg", {
|
|
19
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
20
|
+
className: "h-3 w-3",
|
|
21
|
+
fill: "none",
|
|
22
|
+
viewBox: "0 0 24 24",
|
|
23
|
+
stroke: "currentColor",
|
|
24
|
+
strokeWidth: 2,
|
|
25
|
+
children: /* @__PURE__ */ s("path", {
|
|
26
|
+
strokeLinecap: "round",
|
|
27
|
+
strokeLinejoin: "round",
|
|
28
|
+
d: "M9 5l7 7-7 7"
|
|
29
|
+
})
|
|
30
|
+
}), f = () => /* @__PURE__ */ s("svg", {
|
|
31
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
32
|
+
className: "h-4 w-4 text-blue-500 opacity-80",
|
|
33
|
+
viewBox: "0 0 20 20",
|
|
34
|
+
fill: "currentColor",
|
|
35
|
+
children: /* @__PURE__ */ s("path", { d: "M2 6a2 2 0 012-2h4l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6z" })
|
|
36
|
+
}), p = () => /* @__PURE__ */ s("svg", {
|
|
37
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
38
|
+
className: "h-4 w-4 text-gray-500 opacity-80",
|
|
39
|
+
viewBox: "0 0 20 20",
|
|
40
|
+
fill: "currentColor",
|
|
41
|
+
children: /* @__PURE__ */ s("path", {
|
|
42
|
+
fillRule: "evenodd",
|
|
43
|
+
d: "M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z",
|
|
44
|
+
clipRule: "evenodd"
|
|
45
|
+
})
|
|
46
|
+
}), m = ({ path: e, adapter: n, onNavigate: a }) => {
|
|
47
|
+
let [c, l] = o([]), [u, d] = o(!1), m = r(async (e) => {
|
|
48
|
+
try {
|
|
49
|
+
return (await n.list(e)).sort((e, t) => e.type === t.type ? String(e.name).localeCompare(String(t.name)) : e.type === "folder" ? -1 : 1).map((e) => ({
|
|
50
|
+
id: e.path,
|
|
51
|
+
label: e.name,
|
|
52
|
+
icon: e.type === "folder" ? /* @__PURE__ */ s(f, {}) : /* @__PURE__ */ s(p, {}),
|
|
53
|
+
meta: { type: e.type },
|
|
54
|
+
children: e.type === "folder" ? [{
|
|
55
|
+
id: `${e.path}/_dummy`,
|
|
56
|
+
label: "Loading..."
|
|
57
|
+
}] : void 0
|
|
58
|
+
}));
|
|
59
|
+
} catch {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}, [n]);
|
|
63
|
+
i(() => {
|
|
64
|
+
let t = !0;
|
|
65
|
+
return d(!0), m(e).then((e) => {
|
|
66
|
+
t && (l(e), d(!1));
|
|
67
|
+
}), () => {
|
|
68
|
+
t = !1;
|
|
69
|
+
};
|
|
70
|
+
}, [e, m]);
|
|
71
|
+
let h = r(async (e, t) => {
|
|
72
|
+
if (!t) return;
|
|
73
|
+
let n = String(e), r = (e, t) => {
|
|
74
|
+
for (let n of e) {
|
|
75
|
+
if (n.id === t) return n;
|
|
76
|
+
if (n.children) {
|
|
77
|
+
let e = r(n.children, t);
|
|
78
|
+
if (e) return e;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}, i = r(c, n);
|
|
83
|
+
if (i && i.children?.length === 1 && String(i.children[0].id).endsWith("_dummy")) {
|
|
84
|
+
let e = await m(n);
|
|
85
|
+
l((t) => {
|
|
86
|
+
let r = (t) => t.map((t) => t.id === n ? {
|
|
87
|
+
...t,
|
|
88
|
+
children: e
|
|
89
|
+
} : t.children ? {
|
|
90
|
+
...t,
|
|
91
|
+
children: r(t.children)
|
|
92
|
+
} : t);
|
|
93
|
+
return r(t);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}, [c, m]), g = r((e) => {
|
|
97
|
+
String(e.id).endsWith("_dummy") || e.meta?.type !== "file" && a(String(e.id));
|
|
98
|
+
}, [a]);
|
|
99
|
+
return u ? /* @__PURE__ */ s("div", {
|
|
100
|
+
className: "px-4 py-3 w-48 text-center text-xs opacity-50",
|
|
101
|
+
children: "Loading..."
|
|
102
|
+
}) : c.length === 0 ? /* @__PURE__ */ s("div", {
|
|
103
|
+
className: "px-4 py-3 w-48 text-center text-xs opacity-50",
|
|
104
|
+
children: "Empty Folder"
|
|
105
|
+
}) : /* @__PURE__ */ s("div", {
|
|
106
|
+
className: "p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]",
|
|
107
|
+
children: /* @__PURE__ */ s(t, {
|
|
108
|
+
data: c,
|
|
109
|
+
onNodeClick: g,
|
|
110
|
+
onNodeToggle: h,
|
|
111
|
+
showSearch: !1,
|
|
112
|
+
showExpandAll: !1,
|
|
113
|
+
showLine: !1,
|
|
114
|
+
showIcon: !0,
|
|
115
|
+
showCount: !1,
|
|
116
|
+
className: "!bg-transparent !border-none !p-1 shadow-none overflow-visible",
|
|
117
|
+
indent: 12
|
|
118
|
+
})
|
|
119
|
+
});
|
|
120
|
+
}, h = ({ path: t, adapter: n, onNavigate: r }) => {
|
|
121
|
+
let [i, l] = o(!1), u = a(null);
|
|
122
|
+
return e(u, () => l(!1), i), /* @__PURE__ */ c("div", {
|
|
123
|
+
className: "relative flex items-center",
|
|
124
|
+
ref: u,
|
|
125
|
+
children: [n ? /* @__PURE__ */ s("button", {
|
|
126
|
+
className: `btn btn-ghost btn-xs px-0.5 mx-0.5 min-h-0 h-5 rounded hover:bg-base-200 transition-colors ${i ? "bg-base-200" : "opacity-50"}`,
|
|
127
|
+
onClick: (e) => {
|
|
128
|
+
e.stopPropagation(), l(!i);
|
|
129
|
+
},
|
|
130
|
+
children: /* @__PURE__ */ s(d, {})
|
|
131
|
+
}) : /* @__PURE__ */ s("span", {
|
|
132
|
+
className: "opacity-40 mx-1",
|
|
133
|
+
children: /* @__PURE__ */ s(d, {})
|
|
134
|
+
}), i && n && /* @__PURE__ */ s("div", {
|
|
135
|
+
className: "absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]",
|
|
136
|
+
onClick: (e) => e.stopPropagation(),
|
|
137
|
+
children: /* @__PURE__ */ s(m, {
|
|
138
|
+
path: t,
|
|
139
|
+
adapter: n,
|
|
140
|
+
onNavigate: (e) => {
|
|
141
|
+
r(e), l(!1);
|
|
142
|
+
}
|
|
143
|
+
})
|
|
144
|
+
})]
|
|
145
|
+
});
|
|
145
146
|
};
|
|
146
|
-
function
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
147
|
+
function g(e) {
|
|
148
|
+
let t = e.split("/").filter(Boolean), n = [];
|
|
149
|
+
for (let e = 0; e < t.length; e++) n.push({
|
|
150
|
+
label: t[e],
|
|
151
|
+
path: "/" + t.slice(0, e + 1).join("/"),
|
|
152
|
+
basePath: e === 0 ? "/" : "/" + t.slice(0, e).join("/")
|
|
153
|
+
});
|
|
154
|
+
return n;
|
|
154
155
|
}
|
|
155
|
-
var
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
};
|
|
181
|
-
export {
|
|
182
|
-
F as Breadcrumb
|
|
156
|
+
var _ = ({ path: e, labels: t, adapter: r, onNavigate: i }) => {
|
|
157
|
+
let a = {
|
|
158
|
+
...l,
|
|
159
|
+
...t
|
|
160
|
+
}, o = g(e), d = o.length === 0;
|
|
161
|
+
return /* @__PURE__ */ c("nav", {
|
|
162
|
+
className: "flex items-center text-sm overflow-x-visible py-2 px-1 gap-0.5 min-h-[36px]",
|
|
163
|
+
children: [/* @__PURE__ */ c("button", {
|
|
164
|
+
className: `btn btn-ghost btn-xs gap-1 flex-shrink-0 ${d ? "font-semibold" : ""}`,
|
|
165
|
+
onClick: () => i("/"),
|
|
166
|
+
children: [/* @__PURE__ */ s(u, {}), a.root]
|
|
167
|
+
}), o.map((e, t) => {
|
|
168
|
+
let a = t === o.length - 1;
|
|
169
|
+
return /* @__PURE__ */ c(n.Fragment, { children: [/* @__PURE__ */ s(h, {
|
|
170
|
+
path: e.basePath,
|
|
171
|
+
adapter: r,
|
|
172
|
+
onNavigate: i
|
|
173
|
+
}), /* @__PURE__ */ s("button", {
|
|
174
|
+
className: `btn btn-ghost btn-xs flex-shrink-0 truncate max-w-[160px] ${a ? "font-semibold" : ""}`,
|
|
175
|
+
onClick: () => i(e.path),
|
|
176
|
+
disabled: a,
|
|
177
|
+
children: e.label
|
|
178
|
+
})] }, e.path);
|
|
179
|
+
})]
|
|
180
|
+
});
|
|
183
181
|
};
|
|
182
|
+
//#endregion
|
|
183
|
+
export { _ as Breadcrumb };
|
|
184
184
|
|
|
185
185
|
//# sourceMappingURL=Breadcrumb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumb.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/Breadcrumb.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { BreadcrumbProps } from './types';\nimport { useClickOutside } from '../../../hooks/useClickOutside';\nimport { Tree, TreeNode } from '../../Tree';\n\nconst defaultLabels = {\n root: 'Root',\n};\n\nconst HomeIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst FolderIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-blue-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M2 6a2 2 0 012-2h4l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6z\" />\n </svg>\n);\n\nconst DocumentIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-gray-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst BreadcrumbDropTree: React.FC<{\n path: string;\n adapter: any;\n onNavigate: (path: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [treeData, setTreeData] = useState<TreeNode[]>([]);\n const [loading, setLoading] = useState(false);\n\n const loadPath = useCallback(async (dirPath: string): Promise<TreeNode[]> => {\n try {\n const entries = await adapter.list(dirPath);\n return entries\n .sort((a: any, b: any) => {\n if (a.type !== b.type) return a.type === 'folder' ? -1 : 1;\n return String(a.name).localeCompare(String(b.name));\n })\n .map((e: any) => ({\n id: e.path,\n label: e.name,\n icon: e.type === 'folder' ? <FolderIcon /> : <DocumentIcon />,\n meta: { type: e.type },\n children: e.type === 'folder' ? [{ id: `${e.path}/_dummy`, label: 'Loading...' }] : undefined\n }));\n } catch (e) {\n return [];\n }\n }, [adapter]);\n\n useEffect(() => {\n let mounted = true;\n setLoading(true);\n loadPath(path).then(nodes => {\n if (mounted) {\n setTreeData(nodes);\n setLoading(false);\n }\n });\n return () => { mounted = false; };\n }, [path, loadPath]);\n\n const handleToggle = useCallback(async (nodeId: string | number, expanded: boolean) => {\n if (!expanded) return;\n const idStr = String(nodeId);\n\n const findNode = (nodes: TreeNode[], targetId: string): TreeNode | null => {\n for (const n of nodes) {\n if (n.id === targetId) return n;\n if (n.children) {\n const found = findNode(n.children, targetId);\n if (found) return found;\n }\n }\n return null;\n };\n\n const node = findNode(treeData, idStr);\n if (node && node.children?.length === 1 && String(node.children[0].id).endsWith('_dummy')) {\n const childrenNodes = await loadPath(idStr);\n setTreeData(prev => {\n const updateNodes = (nodes: TreeNode[]): TreeNode[] => {\n return nodes.map(n => {\n if (n.id === idStr) {\n return { ...n, children: childrenNodes };\n }\n if (n.children) return { ...n, children: updateNodes(n.children) };\n return n;\n });\n };\n return updateNodes(prev);\n });\n }\n }, [treeData, loadPath]);\n\n const handleClick = useCallback((node: TreeNode) => {\n if (String(node.id).endsWith('_dummy')) return;\n if (node.meta?.type === 'file') return;\n onNavigate(String(node.id));\n }, [onNavigate]);\n\n if (loading) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Loading...</div>;\n if (treeData.length === 0) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Empty Folder</div>;\n\n return (\n <div className=\"p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]\">\n <Tree\n data={treeData}\n onNodeClick={handleClick}\n onNodeToggle={handleToggle}\n showSearch={false}\n showExpandAll={false}\n showLine={false}\n showIcon={true}\n showCount={false}\n className=\"!bg-transparent !border-none !p-1 shadow-none overflow-visible\"\n indent={12}\n />\n </div>\n );\n};\n\nconst ChevronDrop: React.FC<{\n path: string;\n adapter?: any;\n onNavigate: (p: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useClickOutside(ref, () => setOpen(false), open);\n\n return (\n <div className=\"relative flex items-center\" ref={ref}>\n {adapter ? (\n <button\n className={`btn btn-ghost btn-xs px-0.5 mx-0.5 min-h-0 h-5 rounded hover:bg-base-200 transition-colors ${open ? 'bg-base-200' : 'opacity-50'}`}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(!open);\n }}\n >\n <ChevronIcon />\n </button>\n ) : (\n <span className=\"opacity-40 mx-1\"><ChevronIcon /></span>\n )}\n\n {open && adapter && (\n <div\n className=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]\"\n onClick={(e) => e.stopPropagation()}\n >\n <BreadcrumbDropTree\n path={path}\n adapter={adapter}\n onNavigate={(p) => {\n onNavigate(p);\n setOpen(false);\n }}\n />\n </div>\n )}\n </div>\n );\n};\n\n/** Split a path like \"/a/b/c\" into breadcrumb segments */\nfunction pathSegments(path: string): { label: string; path: string; basePath: string }[] {\n const parts = path.split('/').filter(Boolean);\n const segments: { label: string; path: string; basePath: string }[] = [];\n for (let i = 0; i < parts.length; i++) {\n segments.push({\n label: parts[i],\n path: '/' + parts.slice(0, i + 1).join('/'),\n basePath: i === 0 ? '/' : '/' + parts.slice(0, i).join('/')\n });\n }\n return segments;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n path,\n labels: userLabels,\n adapter,\n onNavigate,\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n const segments = pathSegments(path);\n const isRoot = segments.length === 0;\n\n return (\n <nav className=\"flex items-center text-sm overflow-x-visible py-2 px-1 gap-0.5 min-h-[36px]\">\n <button\n className={`btn btn-ghost btn-xs gap-1 flex-shrink-0 ${isRoot ? 'font-semibold' : ''}`}\n onClick={() => onNavigate('/')}\n >\n <HomeIcon />\n {labels.root}\n </button>\n\n {segments.map((seg, idx) => {\n const isLast = idx === segments.length - 1;\n return (\n <React.Fragment key={seg.path}>\n <ChevronDrop path={seg.basePath} adapter={adapter} onNavigate={onNavigate} />\n <button\n className={`btn btn-ghost btn-xs flex-shrink-0 truncate max-w-[160px] ${isLast ? 'font-semibold' : ''}`}\n onClick={() => onNavigate(seg.path)}\n disabled={isLast}\n >\n {seg.label}\n </button>\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Breadcrumb.js","names":[],"sources":["../../../../src/components/pro/FileExplorer/Breadcrumb.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { BreadcrumbProps } from './types';\nimport { useClickOutside } from '../../../hooks/useClickOutside';\nimport { Tree, TreeNode } from '../../Tree';\n\nconst defaultLabels = {\n root: 'Root',\n};\n\nconst HomeIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\" />\n </svg>\n);\n\nconst ChevronIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst FolderIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-blue-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M2 6a2 2 0 012-2h4l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V6z\" />\n </svg>\n);\n\nconst DocumentIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 text-gray-500 opacity-80\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M4 4a2 2 0 012-2h4.586A2 2 0 0112 2.586L15.414 6A2 2 0 0116 7.414V16a2 2 0 01-2 2H6a2 2 0 01-2-2V4zm2 6a1 1 0 011-1h6a1 1 0 110 2H7a1 1 0 01-1-1zm1 3a1 1 0 100 2h6a1 1 0 100-2H7z\" clipRule=\"evenodd\" />\n </svg>\n);\n\nconst BreadcrumbDropTree: React.FC<{\n path: string;\n adapter: any;\n onNavigate: (path: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [treeData, setTreeData] = useState<TreeNode[]>([]);\n const [loading, setLoading] = useState(false);\n\n const loadPath = useCallback(async (dirPath: string): Promise<TreeNode[]> => {\n try {\n const entries = await adapter.list(dirPath);\n return entries\n .sort((a: any, b: any) => {\n if (a.type !== b.type) return a.type === 'folder' ? -1 : 1;\n return String(a.name).localeCompare(String(b.name));\n })\n .map((e: any) => ({\n id: e.path,\n label: e.name,\n icon: e.type === 'folder' ? <FolderIcon /> : <DocumentIcon />,\n meta: { type: e.type },\n children: e.type === 'folder' ? [{ id: `${e.path}/_dummy`, label: 'Loading...' }] : undefined\n }));\n } catch (e) {\n return [];\n }\n }, [adapter]);\n\n useEffect(() => {\n let mounted = true;\n setLoading(true);\n loadPath(path).then(nodes => {\n if (mounted) {\n setTreeData(nodes);\n setLoading(false);\n }\n });\n return () => { mounted = false; };\n }, [path, loadPath]);\n\n const handleToggle = useCallback(async (nodeId: string | number, expanded: boolean) => {\n if (!expanded) return;\n const idStr = String(nodeId);\n\n const findNode = (nodes: TreeNode[], targetId: string): TreeNode | null => {\n for (const n of nodes) {\n if (n.id === targetId) return n;\n if (n.children) {\n const found = findNode(n.children, targetId);\n if (found) return found;\n }\n }\n return null;\n };\n\n const node = findNode(treeData, idStr);\n if (node && node.children?.length === 1 && String(node.children[0].id).endsWith('_dummy')) {\n const childrenNodes = await loadPath(idStr);\n setTreeData(prev => {\n const updateNodes = (nodes: TreeNode[]): TreeNode[] => {\n return nodes.map(n => {\n if (n.id === idStr) {\n return { ...n, children: childrenNodes };\n }\n if (n.children) return { ...n, children: updateNodes(n.children) };\n return n;\n });\n };\n return updateNodes(prev);\n });\n }\n }, [treeData, loadPath]);\n\n const handleClick = useCallback((node: TreeNode) => {\n if (String(node.id).endsWith('_dummy')) return;\n if (node.meta?.type === 'file') return;\n onNavigate(String(node.id));\n }, [onNavigate]);\n\n if (loading) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Loading...</div>;\n if (treeData.length === 0) return <div className=\"px-4 py-3 w-48 text-center text-xs opacity-50\">Empty Folder</div>;\n\n return (\n <div className=\"p-1 w-64 max-h-[300px] overflow-y-auto sm:min-w-[200px] max-w-[80vw]\">\n <Tree\n data={treeData}\n onNodeClick={handleClick}\n onNodeToggle={handleToggle}\n showSearch={false}\n showExpandAll={false}\n showLine={false}\n showIcon={true}\n showCount={false}\n className=\"!bg-transparent !border-none !p-1 shadow-none overflow-visible\"\n indent={12}\n />\n </div>\n );\n};\n\nconst ChevronDrop: React.FC<{\n path: string;\n adapter?: any;\n onNavigate: (p: string) => void;\n}> = ({ path, adapter, onNavigate }) => {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useClickOutside(ref, () => setOpen(false), open);\n\n return (\n <div className=\"relative flex items-center\" ref={ref}>\n {adapter ? (\n <button\n className={`btn btn-ghost btn-xs px-0.5 mx-0.5 min-h-0 h-5 rounded hover:bg-base-200 transition-colors ${open ? 'bg-base-200' : 'opacity-50'}`}\n onClick={(e) => {\n e.stopPropagation();\n setOpen(!open);\n }}\n >\n <ChevronIcon />\n </button>\n ) : (\n <span className=\"opacity-40 mx-1\"><ChevronIcon /></span>\n )}\n\n {open && adapter && (\n <div\n className=\"absolute top-full left-1/2 -translate-x-1/2 mt-1 bg-base-100 shadow-2xl border border-base-200 rounded-xl z-[9999]\"\n onClick={(e) => e.stopPropagation()}\n >\n <BreadcrumbDropTree\n path={path}\n adapter={adapter}\n onNavigate={(p) => {\n onNavigate(p);\n setOpen(false);\n }}\n />\n </div>\n )}\n </div>\n );\n};\n\n/** Split a path like \"/a/b/c\" into breadcrumb segments */\nfunction pathSegments(path: string): { label: string; path: string; basePath: string }[] {\n const parts = path.split('/').filter(Boolean);\n const segments: { label: string; path: string; basePath: string }[] = [];\n for (let i = 0; i < parts.length; i++) {\n segments.push({\n label: parts[i],\n path: '/' + parts.slice(0, i + 1).join('/'),\n basePath: i === 0 ? '/' : '/' + parts.slice(0, i).join('/')\n });\n }\n return segments;\n}\n\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\n path,\n labels: userLabels,\n adapter,\n onNavigate,\n}) => {\n const labels = { ...defaultLabels, ...userLabels };\n const segments = pathSegments(path);\n const isRoot = segments.length === 0;\n\n return (\n <nav className=\"flex items-center text-sm overflow-x-visible py-2 px-1 gap-0.5 min-h-[36px]\">\n <button\n className={`btn btn-ghost btn-xs gap-1 flex-shrink-0 ${isRoot ? 'font-semibold' : ''}`}\n onClick={() => onNavigate('/')}\n >\n <HomeIcon />\n {labels.root}\n </button>\n\n {segments.map((seg, idx) => {\n const isLast = idx === segments.length - 1;\n return (\n <React.Fragment key={seg.path}>\n <ChevronDrop path={seg.basePath} adapter={adapter} onNavigate={onNavigate} />\n <button\n className={`btn btn-ghost btn-xs flex-shrink-0 truncate max-w-[160px] ${isLast ? 'font-semibold' : ''}`}\n onClick={() => onNavigate(seg.path)}\n disabled={isLast}\n >\n {seg.label}\n </button>\n </React.Fragment>\n );\n })}\n </nav>\n );\n};\n"],"mappings":"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"}
|