dishui 0.0.106 → 0.0.110
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/.release-verified.json +3 -2
- package/dist/components/Accordion/index.js.map +1 -1
- package/dist/components/Avatar/index.js.map +1 -1
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/ButtonMenu/index.js.map +1 -1
- package/dist/components/Card/Metric2.js.map +1 -1
- package/dist/components/Card/Ticket2.js.map +1 -1
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Chart/Chart.js.map +1 -1
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/ChoicePicker/index.js.map +1 -1
- package/dist/components/Column/index.js.map +1 -1
- package/dist/components/ConfirmDialog/index.js.map +1 -1
- package/dist/components/DateTimeInput/index.js.map +1 -1
- package/dist/components/Demo/index.js.map +1 -1
- package/dist/components/Demo/source.js.map +1 -1
- package/dist/components/Divider/index.js.map +1 -1
- package/dist/components/EmptyState/index.js.map +1 -1
- package/dist/components/Field/index.js.map +1 -1
- package/dist/components/FileUploader/DropZone.js.map +1 -1
- package/dist/components/FileUploader/FileItem.js.map +1 -1
- package/dist/components/FileUploader/FileUploader.js.map +1 -1
- package/dist/components/FileUploader/UploadQueue.js.map +1 -1
- package/dist/components/GroupButton/index.js.map +1 -1
- package/dist/components/GroupedTable/index.js.map +1 -1
- package/dist/components/Icon/index.js.map +1 -1
- package/dist/components/Image/index.js.map +1 -1
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Label/index.js.map +1 -1
- package/dist/components/Layout/index.js.map +1 -1
- package/dist/components/LayoutSuite/DashboardSuite.js.map +1 -1
- package/dist/components/LayoutSuite/index.js.map +1 -1
- package/dist/components/List/index.js.map +1 -1
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Markdown/codeThemes.js.map +1 -1
- package/dist/components/Markdown/markdownComponents.js.map +1 -1
- package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
- package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
- package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
- package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
- package/dist/components/Modal/focusScope.js.map +1 -1
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/MultipleChoice/index.js.map +1 -1
- package/dist/components/NavigationList/index.js.map +1 -1
- package/dist/components/Page/Float2.js.map +1 -1
- package/dist/components/Page/index.js.map +1 -1
- package/dist/components/Page/resize2.js.map +1 -1
- package/dist/components/PageHeader/index.js.map +1 -1
- package/dist/components/PagePanel/index.js.map +1 -1
- package/dist/components/ProtectedRoute/index.js.map +1 -1
- package/dist/components/Resizable/ResizeGrip.js.map +1 -1
- package/dist/components/Resizable/index.js.map +1 -1
- package/dist/components/Resizable/useResize.js.map +1 -1
- package/dist/components/Row/index.js.map +1 -1
- package/dist/components/Section/index.js.map +1 -1
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/SidebarToggleButton/index.js.map +1 -1
- package/dist/components/Skeleton/index.js.map +1 -1
- package/dist/components/Slider/index.js.map +1 -1
- package/dist/components/Switch/index.js.map +1 -1
- package/dist/components/Tab/index.js.map +1 -1
- package/dist/components/Table/index.js.map +1 -1
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Tabs/tabNavigation.js.map +1 -1
- package/dist/components/Text/index.js.map +1 -1
- package/dist/components/Textarea/index.js.map +1 -1
- package/dist/components/Tooltip/index.js.map +1 -1
- package/dist/components/Tree/Tree.js.map +1 -1
- package/dist/components/ai/AgentChat/index.js.map +1 -1
- package/dist/components/ai/AgentRunCard/index.js.map +1 -1
- package/dist/components/ai/AgentScreen/index.js.map +1 -1
- package/dist/components/ai/ApprovalCard/index.js.map +1 -1
- package/dist/components/ai/CodeView/index.js.map +1 -1
- package/dist/components/ai/CommandSearch/index.js.map +1 -1
- package/dist/components/ai/ContextCards/index.js.map +1 -1
- package/dist/components/ai/DiffTable/index.js.map +1 -1
- package/dist/components/ai/FilterTable/index.js.map +1 -1
- package/dist/components/ai/FineTuneCard/index.js.map +1 -1
- package/dist/components/ai/InsightCards/index.js.map +1 -1
- package/dist/components/ai/IssueCard/index.js.map +1 -1
- package/dist/components/ai/LoadingState/index.js.map +1 -1
- package/dist/components/ai/PromptBar/index.js.map +1 -1
- package/dist/components/ai/RecommendationCard/index.js.map +1 -1
- package/dist/components/ai/RecordsTable/index.js.map +1 -1
- package/dist/components/ai/SelectionActions/index.js.map +1 -1
- package/dist/components/ai/StateFlow/index.js.map +1 -1
- package/dist/components/ai/StreamingText/index.js.map +1 -1
- package/dist/components/ai/TaskRows/index.js.map +1 -1
- package/dist/components/ai/Thinking/index.js.map +1 -1
- package/dist/components/ai/ToolChips/index.js.map +1 -1
- package/dist/components/ai/shared.js.map +1 -1
- package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
- package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
- package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
- package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
- package/dist/components/pro/Calendar/Calendar.js +165 -160
- package/dist/components/pro/Calendar/Calendar.js.map +1 -1
- package/dist/components/pro/Calendar/hooks/useCalendarDrag.js.map +1 -1
- package/dist/components/pro/Calendar/hooks/useCalendarState.js +31 -31
- package/dist/components/pro/Calendar/hooks/useCalendarState.js.map +1 -1
- package/dist/components/pro/Calendar/utils.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
- package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
- package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
- package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
- package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +65 -59
- package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
- package/dist/components/pro/CodeEditor/themes.js.map +1 -1
- package/dist/components/pro/CodeEditor/utils.js.map +1 -1
- package/dist/components/pro/DataTable/DataTable.js.map +1 -1
- package/dist/components/pro/DataTable/Filters.js.map +1 -1
- package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
- package/dist/components/pro/DataTable/PivotView.js.map +1 -1
- package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
- package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
- package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
- package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
- package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
- package/dist/components/pro/DataTable/extension.js.map +1 -1
- package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
- package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
- package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
- package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
- package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
- package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
- package/dist/components/pro/DataTable/useDataTableModel.js +119 -104
- package/dist/components/pro/DataTable/useDataTableModel.js.map +1 -1
- package/dist/components/pro/DataTable/utils.js.map +1 -1
- package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
- package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
- package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
- package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
- package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
- package/dist/components/pro/Flow/Flow.js.map +1 -1
- package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
- package/dist/components/pro/Flow/archify/build.js.map +1 -1
- package/dist/components/pro/Flow/archify/convert.js.map +1 -1
- package/dist/components/pro/Flow/archify/palette.js.map +1 -1
- package/dist/components/pro/Flow/archify/presets.js.map +1 -1
- package/dist/components/pro/Flow/archify/spec.js.map +1 -1
- package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
- package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
- package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
- package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
- package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
- package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
- package/dist/components/pro/Flow/constants.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
- package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
- package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
- package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
- package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
- package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
- package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
- package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
- package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
- package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
- package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
- package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
- package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
- package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
- package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
- package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
- package/dist/components/pro/Flow/nodes/chartGeometryBudget.js.map +1 -1
- package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/demandRender.js.map +1 -1
- package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
- package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
- package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
- package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
- package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
- package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
- package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
- package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
- package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
- package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
- package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
- package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
- package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
- package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
- package/dist/components/pro/Flow/types.js.map +1 -1
- package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
- package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
- package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
- package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
- package/dist/components/pro/Gantt/Gantt.js.map +1 -1
- package/dist/components/pro/Gantt/hooks/useGanttDrag.js.map +1 -1
- package/dist/components/pro/Gantt/hooks/useGanttState.js +79 -71
- package/dist/components/pro/Gantt/hooks/useGanttState.js.map +1 -1
- package/dist/components/pro/Gantt/utils.js.map +1 -1
- package/dist/components/pro/Kanban/Kanban.js.map +1 -1
- package/dist/components/pro/Kanban/Swimlanes.js.map +1 -1
- package/dist/components/pro/Kanban/useKanbanDrag.js.map +1 -1
- package/dist/components/pro/Kanban/utils.js.map +1 -1
- package/dist/components/pro/RichTextEditor/AIRewrite.d.ts +1 -0
- package/dist/components/pro/RichTextEditor/AIRewrite.js +109 -88
- package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
- package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
- package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
- package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/RichTextEditor.js +133 -132
- package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
- package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/ResizableImage.js.map +1 -1
- package/dist/components/pro/RichTextEditor/extensions/legacyMermaid.js.map +1 -1
- package/dist/components/pro/RichTextEditor/types.d.ts +2 -0
- package/dist/components/pro/RichTextEditor/types.js.map +1 -1
- package/dist/components/pro/Sprite/Molly/animations.d.ts +6 -0
- package/dist/components/pro/Sprite/Molly/animations.js +52 -0
- package/dist/components/pro/Sprite/Molly/animations.js.map +1 -0
- package/dist/components/pro/Sprite/Molly/events.d.ts +2 -0
- package/dist/components/pro/Sprite/Molly/events.js +46 -0
- package/dist/components/pro/Sprite/Molly/events.js.map +1 -0
- package/dist/components/pro/Sprite/Molly/index.d.ts +1 -0
- package/dist/components/pro/Sprite/Molly/index.js +12 -0
- package/dist/components/pro/Sprite/Molly/index.js.map +1 -0
- package/dist/components/pro/Sprite/Molly/legFlexion.d.ts +3 -0
- package/dist/components/pro/Sprite/Molly/legFlexion.js +48 -0
- package/dist/components/pro/Sprite/Molly/legFlexion.js.map +1 -0
- package/dist/components/pro/Sprite/Molly/locomotion.d.ts +4 -0
- package/dist/components/pro/Sprite/Molly/locomotion.js +51 -0
- package/dist/components/pro/Sprite/Molly/locomotion.js.map +1 -0
- package/dist/components/pro/Sprite/Molly/model.d.ts +23 -0
- package/dist/components/pro/Sprite/Molly/model.js +614 -0
- package/dist/components/pro/Sprite/Molly/model.js.map +1 -0
- package/dist/components/pro/Sprite/Molly/rig.d.ts +25 -0
- package/dist/components/pro/Sprite/Molly/rig.js +102 -0
- package/dist/components/pro/Sprite/Molly/rig.js.map +1 -0
- package/dist/components/pro/Sprite/Ruby/animations.d.ts +6 -0
- package/dist/components/pro/Sprite/Ruby/animations.js +58 -0
- package/dist/components/pro/Sprite/Ruby/animations.js.map +1 -0
- package/dist/components/pro/Sprite/Ruby/events.d.ts +2 -0
- package/dist/components/pro/Sprite/Ruby/events.js +46 -0
- package/dist/components/pro/Sprite/Ruby/events.js.map +1 -0
- package/dist/components/pro/Sprite/Ruby/index.d.ts +1 -0
- package/dist/components/pro/Sprite/Ruby/index.js +12 -0
- package/dist/components/pro/Sprite/Ruby/index.js.map +1 -0
- package/dist/components/pro/Sprite/Ruby/locomotion.d.ts +4 -0
- package/dist/components/pro/Sprite/Ruby/locomotion.js +41 -0
- package/dist/components/pro/Sprite/Ruby/locomotion.js.map +1 -0
- package/dist/components/pro/Sprite/Ruby/model.d.ts +23 -0
- package/dist/components/pro/Sprite/Ruby/model.js +605 -0
- package/dist/components/pro/Sprite/Ruby/model.js.map +1 -0
- package/dist/components/pro/Sprite/Ruby/rig.d.ts +26 -0
- package/dist/components/pro/Sprite/Ruby/rig.js +112 -0
- package/dist/components/pro/Sprite/Ruby/rig.js.map +1 -0
- package/dist/components/pro/Sprite/Sprite.d.ts +23 -0
- package/dist/components/pro/Sprite/Sprite2.js +224 -0
- package/dist/components/pro/Sprite/Sprite2.js.map +1 -0
- package/dist/components/pro/Sprite/actions.d.ts +3 -0
- package/dist/components/pro/Sprite/actions.js +16 -0
- package/dist/components/pro/Sprite/actions.js.map +1 -0
- package/dist/components/pro/Sprite/createSpriteScene.d.ts +4 -0
- package/dist/components/pro/Sprite/createSpriteScene.js +14 -0
- package/dist/components/pro/Sprite/createSpriteScene.js.map +1 -0
- package/dist/components/pro/Sprite/index.d.ts +4 -0
- package/dist/components/pro/Sprite/shared/animation.d.ts +33 -0
- package/dist/components/pro/Sprite/shared/animation.js +39 -0
- package/dist/components/pro/Sprite/shared/animation.js.map +1 -0
- package/dist/components/pro/Sprite/shared/createSpriteStage.d.ts +14 -0
- package/dist/components/pro/Sprite/shared/createSpriteStage.js +127 -0
- package/dist/components/pro/Sprite/shared/createSpriteStage.js.map +1 -0
- package/dist/components/pro/Sprite/shared/events.d.ts +5 -0
- package/dist/components/pro/Sprite/shared/events.js +21 -0
- package/dist/components/pro/Sprite/shared/events.js.map +1 -0
- package/dist/components/pro/Sprite/shared/face.d.ts +15 -0
- package/dist/components/pro/Sprite/shared/face.js +33 -0
- package/dist/components/pro/Sprite/shared/face.js.map +1 -0
- package/dist/components/pro/Sprite/shared/faceSurface.d.ts +6 -0
- package/dist/components/pro/Sprite/shared/faceSurface.js +66 -0
- package/dist/components/pro/Sprite/shared/faceSurface.js.map +1 -0
- package/dist/components/pro/Sprite/shared/gait.d.ts +5 -0
- package/dist/components/pro/Sprite/shared/gait.js +19 -0
- package/dist/components/pro/Sprite/shared/gait.js.map +1 -0
- package/dist/components/pro/Sprite/shared/geometry.d.ts +8 -0
- package/dist/components/pro/Sprite/shared/geometry.js +59 -0
- package/dist/components/pro/Sprite/shared/geometry.js.map +1 -0
- package/dist/components/pro/Sprite/shared/magicEffect.d.ts +27 -0
- package/dist/components/pro/Sprite/shared/magicEffect.js +61 -0
- package/dist/components/pro/Sprite/shared/magicEffect.js.map +1 -0
- package/dist/components/pro/Sprite/shared/playback.d.ts +8 -0
- package/dist/components/pro/Sprite/shared/playback.js +74 -0
- package/dist/components/pro/Sprite/shared/playback.js.map +1 -0
- package/dist/components/pro/Sprite/shared/rig.d.ts +6 -0
- package/dist/components/pro/Sprite/shared/rig.js +48 -0
- package/dist/components/pro/Sprite/shared/rig.js.map +1 -0
- package/dist/components/pro/Sprite/shared/scene.d.ts +9 -0
- package/dist/components/pro/Sprite/shared/scene.js +21 -0
- package/dist/components/pro/Sprite/shared/scene.js.map +1 -0
- package/dist/components/pro/Sprite/shared/sculptor.d.ts +14 -0
- package/dist/components/pro/Sprite/shared/sculptor.js +78 -0
- package/dist/components/pro/Sprite/shared/sculptor.js.map +1 -0
- package/dist/components/pro/Sprite/shared/speechBubble.d.ts +15 -0
- package/dist/components/pro/Sprite/shared/speechBubble.js +129 -0
- package/dist/components/pro/Sprite/shared/speechBubble.js.map +1 -0
- package/dist/components/pro/Sprite/types.d.ts +40 -0
- package/dist/contexts/AppContext.js.map +1 -1
- package/dist/contexts/authentication.js.map +1 -1
- package/dist/data-table.js +3 -3
- package/dist/data-table.js.map +1 -1
- package/dist/dishui.css +1 -1
- package/dist/hooks/useClickOutside.js.map +1 -1
- package/dist/hooks/useContainerElement.js.map +1 -1
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useCopyToClipboard.js.map +1 -1
- package/dist/hooks/useDebounce.js.map +1 -1
- package/dist/hooks/useDraggable.js.map +1 -1
- package/dist/hooks/useTableColumns.js.map +1 -1
- package/dist/hooks/useTableData.js.map +1 -1
- package/dist/index-nostyled.d.ts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +116 -115
- package/dist/layouts/MainLayout.js.map +1 -1
- package/dist/layouts/Navbar.js.map +1 -1
- package/dist/layouts/Sidebar.js.map +1 -1
- package/dist/layouts/headbar/Headbar.js.map +1 -1
- package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
- package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
- package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
- package/dist/sprite.js +2 -0
- package/dist/styles/themeStyles.js.map +1 -1
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/flexLayout.js.map +1 -1
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/menu.js.map +1 -1
- package/dist/utils/rehype-code-meta.js.map +1 -1
- package/dist/utils/remark-code-meta.js.map +1 -1
- package/dist/utils/routerBuilder.js.map +1 -1
- package/dist/utils/safeStorage.js.map +1 -1
- package/dist/utils/selection.js +29 -20
- package/dist/utils/selection.js.map +1 -1
- package/dist/utils/themes.js.map +1 -1
- package/package.json +15 -11
|
@@ -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":";;AAeA,
|
|
1
|
+
{"version":3,"file":"useClickOutside.js","names":["useClickOutside","enabled","handleClickOutside","ref","onClickOutside"],"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,SAAgBA,EACZ,GACA,GACA,IAAmB,IACf;CACJ,QAAgB;EACZ,IAAI,CAACC,GAAS;EAEd,IAAMC,KAAsB,MAAkB;GAC1C,AAAIC,EAAI,WAAW,CAACA,EAAI,QAAQ,SAAS,EAAE,MAAc,KACrDC,EAAe;EAEvB;EAGA,OADA,SAAS,iBAAiB,aAAaF,CAAkB,SAC5C;GACT,SAAS,oBAAoB,aAAaA,CAAkB;EAChE;CACJ,GAAG;EAACC;EAAKC;EAAgBH;CAAO,CAAC;AACrC"}
|
|
@@ -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":";;AAYA,
|
|
1
|
+
{"version":3,"file":"useContainerElement.js","names":["useContainerElement","container","setContainer","useState","useEffect","targetRef","targetId"],"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,SAAgBA,EACZ,GACA,GACkB;CAClB,IAAM,CAACC,GAAWC,KAAgBC,EAA6B,IAAI;CAYnE,OAVAC,QAAgB;EACZ,AAAIC,GAAW,UACXH,EAAaG,EAAU,OAAO,IAE9BH,EADOI,IACM,SAAS,eAAeA,CAAQ,IAEhC,IAAI;CAEzB,GAAG,CAACA,GAAUD,CAAS,CAAC,GAEjBJ;AACX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useControllableState.js","names":[],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["import { useState, useRef, useCallback, useLayoutEffect } from 'react';\n\n/**\n * A defined externalValue is strictly controlled, even without onChange (read-only).\n * undefined opts into internal state; defaultValue is read only on mount.\n * onChange reports distinct setter requests synchronously, never prop updates.\n * Controlled functional updates use the last committed prop, not a pending request.\n * Do not switch modes: switching back resumes the retained internal state.\n */\nexport function useControllableState<T>(\n externalValue: T,\n onChange?: (value: T) => void,\n isEqual?: (a: T, b: T) => boolean,\n): [T, React.Dispatch<React.SetStateAction<T>>];\nexport function useControllableState<T>(\n externalValue: T | undefined,\n onChange: ((value: T) => void) | undefined,\n isEqual: ((a: T, b: T) => boolean) | undefined,\n defaultValue: T,\n): [T, React.Dispatch<React.SetStateAction<T>>];\nexport function useControllableState<T>(\n externalValue: T | undefined,\n onChange?: (value: T) => void,\n isEqual: (a: T, b: T) => boolean = Object.is,\n defaultValue?: T,\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const [internalValue, setInternalValue] = useState<T>(() =>\n externalValue !== undefined ? externalValue : defaultValue as T,\n );\n const controlled = externalValue !== undefined;\n const value = controlled ? externalValue : internalValue;\n const committed = useRef({ value, controlled, onChange, isEqual });\n\n // Abandoned renders must not publish props/callbacks to the stable setter.\n useLayoutEffect(() => {\n committed.current = { value, controlled, onChange, isEqual };\n });\n\n const setValue = useCallback((updater: React.SetStateAction<T>) => {\n const current = committed.current;\n const next = typeof updater === 'function'\n ? (updater as (previous: T) => T)(current.value)\n : updater;\n if (current.isEqual(current.value, next)) return;\n if (!current.controlled) {\n // Resolve outside React's updater so batched requests compose without\n // replaying notifications in StrictMode.\n committed.current = { ...current, value: next };\n setInternalValue(() => next);\n }\n current.onChange?.(next);\n }, []);\n\n return [value, 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":";;AAoBA,
|
|
1
|
+
{"version":3,"file":"useControllableState.js","names":["useControllableState","internalValue","setInternalValue","useState","externalValue","defaultValue","controlled","value","committed","useRef","useLayoutEffect","useCallback","current","next","updater","deepEqual","a","b","aIsArray","bIsArray","i","aKeys","bKeys","key"],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["import { useState, useRef, useCallback, useLayoutEffect } from 'react';\n\n/**\n * A defined externalValue is strictly controlled, even without onChange (read-only).\n * undefined opts into internal state; defaultValue is read only on mount.\n * onChange reports distinct setter requests synchronously, never prop updates.\n * Controlled functional updates use the last committed prop, not a pending request.\n * Do not switch modes: switching back resumes the retained internal state.\n */\nexport function useControllableState<T>(\n externalValue: T,\n onChange?: (value: T) => void,\n isEqual?: (a: T, b: T) => boolean,\n): [T, React.Dispatch<React.SetStateAction<T>>];\nexport function useControllableState<T>(\n externalValue: T | undefined,\n onChange: ((value: T) => void) | undefined,\n isEqual: ((a: T, b: T) => boolean) | undefined,\n defaultValue: T,\n): [T, React.Dispatch<React.SetStateAction<T>>];\nexport function useControllableState<T>(\n externalValue: T | undefined,\n onChange?: (value: T) => void,\n isEqual: (a: T, b: T) => boolean = Object.is,\n defaultValue?: T,\n): [T, React.Dispatch<React.SetStateAction<T>>] {\n const [internalValue, setInternalValue] = useState<T>(() =>\n externalValue !== undefined ? externalValue : defaultValue as T,\n );\n const controlled = externalValue !== undefined;\n const value = controlled ? externalValue : internalValue;\n const committed = useRef({ value, controlled, onChange, isEqual });\n\n // Abandoned renders must not publish props/callbacks to the stable setter.\n useLayoutEffect(() => {\n committed.current = { value, controlled, onChange, isEqual };\n });\n\n const setValue = useCallback((updater: React.SetStateAction<T>) => {\n const current = committed.current;\n const next = typeof updater === 'function'\n ? (updater as (previous: T) => T)(current.value)\n : updater;\n if (current.isEqual(current.value, next)) return;\n if (!current.controlled) {\n // Resolve outside React's updater so batched requests compose without\n // replaying notifications in StrictMode.\n committed.current = { ...current, value: next };\n setInternalValue(() => next);\n }\n current.onChange?.(next);\n }, []);\n\n return [value, 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":";;AAoBA,SAAgBA,EACZ,GACA,GACA,IAAmC,OAAO,IAC1C,GAC4C;CAC5C,IAAM,CAACC,GAAeC,KAAoBC,QACtCC,MAAkB,KAAA,IAA4BC,IAAhBD,CAClC,GACME,IAAaF,MAAkB,KAAA,GAC/BG,IAAQD,IAAaF,IAAgBH,GACrCO,IAAYC,EAAO;EAAE;EAAO;EAAY;EAAU;CAAQ,CAAC;CAsBjE,OAnBAC,QAAsB;EAClB,EAAU,UAAU;GAAE;GAAO;GAAY;GAAU;EAAQ;CAC/D,CAAC,GAiBM,CAACH,GAfSI,GAAa,MAAqC;EAC/D,IAAMC,IAAUJ,EAAU,SACpBK,IAAO,OAAOC,KAAY,aACzBA,EAA+BF,EAAQ,KAAK,IAC7CE;EACN,AAAIF,EAAQ,QAAQA,EAAQ,OAAOC,CAAI,MAClCD,EAAQ,eAGT,EAAU,UAAU;GAAE,GAAGA;GAAS,OAAOC;EAAK,GAC9CX,QAAuBW,CAAI,IAE/BD,EAAQ,WAAWC,CAAI;CAC3B,GAAG,CAAC,CAEW,CAAQ;AAC3B;AAQA,SAAgBE,EAAa,GAAM,GAAe;CAC9C,IAAI,OAAO,GAAGC,GAAGC,CAAC,GAAG,OAAO;CAC5B,IAAI,OAAOD,KAAM,aAAYA,KAAc,OAAOC,KAAM,aAAYA,GAChE,OAAO;CAGX,IAAMC,IAAW,MAAM,QAAQF,CAAC,GAC1BG,IAAW,MAAM,QAAQF,CAAC;CAChC,IAAIC,MAAaC,GAAU,OAAO;CAElC,IAAID,KAAYC,GAAU;EACtB,IAAIH,EAAE,WAAWC,EAAE,QAAQ,OAAO;EAClC,KAAK,IAAIG,IAAI,GAAGA,IAAIJ,EAAE,QAAQ,KAC1B,IAAI,CAACD,EAAUC,EAAEI,IAAIH,EAAEG,EAAE,GAAG,OAAO;EAEvC,OAAO;CACX;CAEA,IAAMC,IAAQ,OAAO,KAAKL,CAA4B,GAChDM,IAAQ,OAAO,KAAKL,CAA4B;CACtD,IAAII,EAAM,WAAWC,EAAM,QAAQ,OAAO;CAC1C,KAAK,IAAMC,KAAOF,GAEd,IADI,CAAC,OAAO,UAAU,eAAe,KAAKJ,GAAGM,CAAG,KAC5C,CAACR,EAAWC,EAA8BO,IAAON,EAA8BM,EAAI,GACnF,OAAO;CAGf,OAAO;AACX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCopyToClipboard.js","names":[],"sources":["../../src/hooks/useCopyToClipboard.ts"],"sourcesContent":["import { useState, useCallback, useEffect, useRef } from 'react';\n\n/**\n * 复制到剪贴板的 Hook,带有自动重置的反馈状态\n *\n * @param resetDelay - 复制成功后 `copied` 状态重置的延迟(毫秒),默认 2000\n * @returns `{ copied, error, 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 const [error, setError] = useState<Error | null>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const request = useRef(0);\n\n useEffect(() => () => {\n clearTimeout(timer.current);\n request.current += 1;\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n const currentRequest = ++request.current;\n clearTimeout(timer.current);\n setCopied(false);\n setError(null);\n try {\n if (typeof navigator === 'undefined' || !navigator.clipboard?.writeText) {\n throw new Error('Clipboard access requires a supported browser and a secure context.');\n }\n await navigator.clipboard.writeText(text);\n if (currentRequest !== request.current) return;\n setCopied(true);\n timer.current = setTimeout(() => setCopied(false), resetDelay);\n } catch (err) {\n if (currentRequest !== request.current) return;\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n },\n [resetDelay]\n );\n\n return { copied, error, copy };\n}\n"],"mappings":";;AAgBA,
|
|
1
|
+
{"version":3,"file":"useCopyToClipboard.js","names":["useCopyToClipboard","copied","setCopied","useState","error","setError","timer","useRef","request","useEffect","useCallback","currentRequest","text","resetDelay","err"],"sources":["../../src/hooks/useCopyToClipboard.ts"],"sourcesContent":["import { useState, useCallback, useEffect, useRef } from 'react';\n\n/**\n * 复制到剪贴板的 Hook,带有自动重置的反馈状态\n *\n * @param resetDelay - 复制成功后 `copied` 状态重置的延迟(毫秒),默认 2000\n * @returns `{ copied, error, 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 const [error, setError] = useState<Error | null>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const request = useRef(0);\n\n useEffect(() => () => {\n clearTimeout(timer.current);\n request.current += 1;\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n const currentRequest = ++request.current;\n clearTimeout(timer.current);\n setCopied(false);\n setError(null);\n try {\n if (typeof navigator === 'undefined' || !navigator.clipboard?.writeText) {\n throw new Error('Clipboard access requires a supported browser and a secure context.');\n }\n await navigator.clipboard.writeText(text);\n if (currentRequest !== request.current) return;\n setCopied(true);\n timer.current = setTimeout(() => setCopied(false), resetDelay);\n } catch (err) {\n if (currentRequest !== request.current) return;\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n },\n [resetDelay]\n );\n\n return { copied, error, copy };\n}\n"],"mappings":";;AAgBA,SAAgBA,EAAmB,IAAqB,KAAM;CAC1D,IAAM,CAACC,GAAQC,KAAaC,EAAS,EAAK,GACpC,CAACC,GAAOC,KAAYF,EAAuB,IAAI,GAC/CG,IAAQC,EAAkD,KAAA,CAAS,GACnEC,IAAUD,EAAO,CAAC;CA6BxB,OA3BAE,cAAsB;EAElB,AADA,aAAaH,EAAM,OAAO,GAC1B,EAAQ,WAAW;CACvB,GAAG,CAAC,CAAC,GAwBE;EAAE;EAAQ;EAAO,MAtBXI,EACT,OAAO,MAAiB;GACpB,IAAMC,IAAiB,EAAEH,EAAQ;GAGjC,AAFA,aAAaF,EAAM,OAAO,GAC1BJ,EAAU,EAAK,GACfG,EAAS,IAAI;GACb,IAAI;IACA,IAAI,OAAO,YAAc,OAAe,CAAC,UAAU,WAAW,WAC1D,MAAU,MAAM,qEAAqE;IAGzF,IADA,MAAM,UAAU,UAAU,UAAUO,CAAI,GACpCD,MAAmBH,EAAQ,SAAS;IAExC,AADAN,EAAU,EAAI,GACd,EAAM,UAAU,iBAAiBA,EAAU,EAAK,GAAGW,CAAU;GACjE,SAASC,GAAK;IACV,IAAIH,MAAmBH,EAAQ,SAAS;IACxC,EAASM,aAAe,QAAQA,IAAU,MAAM,OAAOA,CAAG,CAAC,CAAC;GAChE;EACJ,GACA,CAACD,CAAU,CAGS;CAAK;AACjC"}
|
|
@@ -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":";;AAQA,
|
|
1
|
+
{"version":3,"file":"useDebounce.js","names":["useDebounce","debouncedValue","setDebouncedValue","useState","value","useEffect","handler","delay"],"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,SAAgBA,EAAe,GAAU,GAAkB;CACvD,IAAM,CAACC,GAAgBC,KAAqBC,EAAYC,CAAK;CAY7D,OAVAC,QAAgB;EACZ,IAAMC,IAAU,iBAAiB;GAC7B,EAAkBF,CAAK;EAC3B,GAAGG,CAAK;EAER,aAAa;GACT,aAAaD,CAAO;EACxB;CACJ,GAAG,CAACF,GAAOG,CAAK,CAAC,GAEVN;AACX"}
|
|
@@ -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":";;AAwCA,
|
|
1
|
+
{"version":3,"file":"useDraggable.js","names":["useDraggable","position","setPosition","useState","initialPosition","isDragging","setIsDragging","dragOffset","setDragOffset","handleMouseDown","useCallback","handleTouchStart","touch","useEffect","clamp","newX","boundarySize","clientX","newY","clientY","handleMouseMove","e","handleTouchMove","stop"],"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,SAAgBA,EAAa,EACzB,oBACA,kBAAe;CAAE,OAAO;CAAG,QAAQ;AAAE,KACH;CAClC,IAAM,CAACC,GAAUC,KAAeC,EAASC,CAAe,GAClD,CAACC,GAAYC,KAAiBH,EAAS,EAAK,GAC5C,CAACI,GAAYC,KAAiBL,EAAS;EAAE,GAAG;EAAG,GAAG;CAAE,CAAC,GAErDM,IAAkBC,GACnB,MAAwB;EAErB,AAAK,EAAE,OAAuB,QAAQ,+BAA+B,MACrEJ,EAAc,EAAI,GAClBE,EAAc;GACV,GAAG,EAAE,UAAUP,EAAS;GACxB,GAAG,EAAE,UAAUA,EAAS;EAC5B,CAAC;CACL,GACA,CAACA,CAAQ,CACb,GAEMU,IAAmBD,GACpB,MAAwB;EACrB,IAAK,EAAE,OAAuB,QAAQ,+BAA+B,GAAG;EACxE,IAAME,IAAQ,EAAE,QAAQ;EAExB,AADAN,EAAc,EAAI,GAClBE,EAAc;GACV,GAAGI,EAAM,UAAUX,EAAS;GAC5B,GAAGW,EAAM,UAAUX,EAAS;EAChC,CAAC;CACL,GACA,CAACA,CAAQ,CACb;CAsCA,OApCAY,QAAgB;EACZ,IAAI,CAACR,GAAY;EAEjB,IAAMS,KAAS,GAAiB,MAAoB;GAChD,IAAMC,IAAO,KAAK,IACd,GACA,KAAK,IAAI,OAAO,aAAaC,EAAa,OAAOC,IAAUV,EAAW,CAAC,CAC3E,GACMW,IAAO,KAAK,IACd,GACA,KAAK,IAAI,OAAO,cAAcF,EAAa,QAAQG,IAAUZ,EAAW,CAAC,CAC7E;GACA,EAAY;IAAE,GAAGQ;IAAM,GAAGG;GAAK,CAAC;EACpC,GAEME,KAAmB,MAAkBN,EAAMO,EAAE,SAASA,EAAE,OAAO,GAC/DC,KAAmB,MAAkB;GACvC,EAAE,eAAe;GACjB,IAAMV,IAAQS,EAAE,QAAQ;GACxB,EAAMT,EAAM,SAASA,EAAM,OAAO;EACtC,GACMW,UAAajB,EAAc,EAAK;EAOtC,OALA,SAAS,iBAAiB,aAAac,CAAe,GACtD,SAAS,iBAAiB,WAAWG,CAAI,GACzC,SAAS,iBAAiB,aAAaD,GAAiB,EAAE,SAAS,GAAM,CAAC,GAC1E,SAAS,iBAAiB,YAAYC,CAAI,SAE7B;GAIT,AAHA,SAAS,oBAAoB,aAAaH,CAAe,GACzD,SAAS,oBAAoB,WAAWG,CAAI,GAC5C,SAAS,oBAAoB,aAAaD,CAAe,GACzD,SAAS,oBAAoB,YAAYC,CAAI;EACjD;CACJ,GAAG;EAAClB;EAAYE;EAAYS,EAAa;EAAOA,EAAa;CAAM,CAAC,GAE7D;EAAE;EAAU;EAAY;EAAiB;CAAiB;AACrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableColumns.js","names":[],"sources":["../../src/hooks/useTableColumns.ts"],"sourcesContent":["import { useMemo, ReactNode } from 'react';\nimport { ColumnDef, Row, SortingFn } from '../components/pro/DataTable/tanstack-table';\nimport {\n createColumn,\n createComputedColumn,\n createActionColumn,\n createSelectionColumn,\n numericSort,\n dateSort,\n} from '../components/pro/DataTable/utils';\n\n/**\n * 列筛选配置\n */\nexport interface ColumnFilterConfig {\n /** 筛选类型 */\n type: 'text' | 'select' | 'number' | 'dateRange';\n /** 下拉选项(仅 select 类型使用) */\n options?: { value: string; label: string }[];\n}\n\n/**\n * 列配置项(JSON 驱动)\n */\nexport interface ColumnConfig<T extends object = any> {\n /** 字段名 / accessorKey。特殊值: '_selection' 自动创建选择列 */\n key: string;\n /** 列标题 */\n header: string;\n /**\n * 列类型\n * - 'text' 普通文本列(默认)\n * - 'number' 数值列,自动使用 numericSort\n * - 'date' 日期列,自动使用 dateSort\n * - 'computed' 计算列,需提供 accessorFn\n * - 'action' 操作列,禁用排序\n * - 'selection' 选择列(含全选复选框)\n */\n type?: 'text' | 'number' | 'date' | 'computed' | 'action' | 'selection';\n /** 是否可排序,默认 true(action/selection 默认 false) */\n sortable?: boolean;\n /** 自定义单元格渲染 */\n cell?: ((info: any) => ReactNode) | ((props: { row: Row<T> }) => ReactNode);\n /** 筛选配置 */\n filter?: ColumnFilterConfig;\n /** 列宽 */\n width?: number;\n /** 最小列宽 */\n minWidth?: number;\n /** 最大列宽 */\n maxWidth?: number;\n /** 计算列的 accessorFn(仅 type='computed' 时使用) */\n accessorFn?: (row: T) => any;\n /** 自定义排序函数 */\n sortingFn?: SortingFn<any>;\n /** 任意额外选项,会被合并到最终 ColumnDef 中 */\n extra?: Partial<ColumnDef<T, any>>;\n}\n\n/**\n * 将单个 ColumnConfig 转换为 ColumnDef\n */\nfunction buildColumnDef<T extends object>(config: ColumnConfig<T>): ColumnDef<T, any> {\n const { key, header, type = 'text', sortable, cell, filter, width, minWidth, maxWidth, accessorFn, sortingFn, extra } = config;\n\n // 选择列\n if (type === 'selection') {\n return createSelectionColumn<T>(extra);\n }\n\n // 操作列\n if (type === 'action') {\n return createActionColumn<T>({\n id: key.startsWith('_') ? 'actions' : key,\n header,\n cell: cell as any,\n ...(width !== undefined ? { size: width } : {}),\n ...(minWidth !== undefined ? { minSize: minWidth } : {}),\n ...(maxWidth !== undefined ? { maxSize: maxWidth } : {}),\n ...extra,\n });\n }\n\n // 构建 meta(筛选信息)\n const meta: Record<string, any> = {};\n if (filter) {\n meta.filterType = filter.type;\n if (filter.options) {\n meta.filterOptions = filter.options;\n }\n }\n\n // 自动选择排序函数\n let resolvedSortingFn: SortingFn<any> | undefined = sortingFn;\n if (!resolvedSortingFn) {\n switch (type) {\n case 'number':\n resolvedSortingFn = numericSort;\n break;\n case 'date':\n resolvedSortingFn = dateSort;\n break;\n // 'text' 和 'computed' 使用默认排序\n }\n }\n\n // 基础选项(v9:使用 sortFn)\n const baseOptions: Partial<ColumnDef<T, any>> = {\n ...(cell !== undefined ? { cell: cell as any } : {}),\n ...(resolvedSortingFn ? { sortFn: resolvedSortingFn } : {}),\n ...(sortable === false ? { enableSorting: false } : {}),\n ...(Object.keys(meta).length > 0 ? { meta } : {}),\n ...(width !== undefined ? { size: width } : {}),\n ...(minWidth !== undefined ? { minSize: minWidth } : {}),\n ...(maxWidth !== undefined ? { maxSize: maxWidth } : {}),\n ...extra,\n };\n\n // 计算列\n if (type === 'computed') {\n return createComputedColumn<T>(\n key.startsWith('_') ? key.slice(1) : key,\n header,\n accessorFn,\n baseOptions\n );\n }\n\n // 普通列 / number / date\n return createColumn<T>(key, header, baseOptions);\n}\n\n/**\n * useTableColumns - 通过 JSON 配置数组快速创建 DataTable 列定义\n *\n * @example\n * ```tsx\n * const columns = useTableColumns<Order>([\n * { key: '_selection', type: 'selection', header: '' },\n * { key: 'orderNumber', header: '订单编号', filter: { type: 'text' } },\n * { key: 'total', header: '总金额', type: 'number',\n * cell: info => `¥${info.getValue<number>().toFixed(2)}`,\n * filter: { type: 'number' } },\n * { key: '_actions', type: 'action', header: '操作',\n * cell: ({ row }) => <button>查看</button> }\n * ]);\n * ```\n *\n * @param configs - 列配置数组;按引用跟踪更新。需要缓存时由调用方用 useMemo 稳定配置。\n * @param deps - 额外依赖项,不能代替 configs;每次渲染保持依赖项数量不变。\n */\nexport function useTableColumns<T extends object>(\n configs: ColumnConfig<T>[],\n deps: readonly unknown[] = []\n): ColumnDef<T, any>[] {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => configs.map(buildColumnDef), [configs, ...deps]);\n}\n\nexport default useTableColumns;\n"],"mappings":";;;AA8DA,
|
|
1
|
+
{"version":3,"file":"useTableColumns.js","names":["buildColumnDef","config","type","createSelectionColumn","extra","createActionColumn","key","width","minWidth","maxWidth","meta","filter","resolvedSortingFn","sortingFn","numericSort","dateSort","baseOptions","cell","sortable","createComputedColumn","header","accessorFn","createColumn","useTableColumns","useMemo","configs","deps"],"sources":["../../src/hooks/useTableColumns.ts"],"sourcesContent":["import { useMemo, ReactNode } from 'react';\nimport { ColumnDef, Row, SortingFn } from '../components/pro/DataTable/tanstack-table';\nimport {\n createColumn,\n createComputedColumn,\n createActionColumn,\n createSelectionColumn,\n numericSort,\n dateSort,\n} from '../components/pro/DataTable/utils';\n\n/**\n * 列筛选配置\n */\nexport interface ColumnFilterConfig {\n /** 筛选类型 */\n type: 'text' | 'select' | 'number' | 'dateRange';\n /** 下拉选项(仅 select 类型使用) */\n options?: { value: string; label: string }[];\n}\n\n/**\n * 列配置项(JSON 驱动)\n */\nexport interface ColumnConfig<T extends object = any> {\n /** 字段名 / accessorKey。特殊值: '_selection' 自动创建选择列 */\n key: string;\n /** 列标题 */\n header: string;\n /**\n * 列类型\n * - 'text' 普通文本列(默认)\n * - 'number' 数值列,自动使用 numericSort\n * - 'date' 日期列,自动使用 dateSort\n * - 'computed' 计算列,需提供 accessorFn\n * - 'action' 操作列,禁用排序\n * - 'selection' 选择列(含全选复选框)\n */\n type?: 'text' | 'number' | 'date' | 'computed' | 'action' | 'selection';\n /** 是否可排序,默认 true(action/selection 默认 false) */\n sortable?: boolean;\n /** 自定义单元格渲染 */\n cell?: ((info: any) => ReactNode) | ((props: { row: Row<T> }) => ReactNode);\n /** 筛选配置 */\n filter?: ColumnFilterConfig;\n /** 列宽 */\n width?: number;\n /** 最小列宽 */\n minWidth?: number;\n /** 最大列宽 */\n maxWidth?: number;\n /** 计算列的 accessorFn(仅 type='computed' 时使用) */\n accessorFn?: (row: T) => any;\n /** 自定义排序函数 */\n sortingFn?: SortingFn<any>;\n /** 任意额外选项,会被合并到最终 ColumnDef 中 */\n extra?: Partial<ColumnDef<T, any>>;\n}\n\n/**\n * 将单个 ColumnConfig 转换为 ColumnDef\n */\nfunction buildColumnDef<T extends object>(config: ColumnConfig<T>): ColumnDef<T, any> {\n const { key, header, type = 'text', sortable, cell, filter, width, minWidth, maxWidth, accessorFn, sortingFn, extra } = config;\n\n // 选择列\n if (type === 'selection') {\n return createSelectionColumn<T>(extra);\n }\n\n // 操作列\n if (type === 'action') {\n return createActionColumn<T>({\n id: key.startsWith('_') ? 'actions' : key,\n header,\n cell: cell as any,\n ...(width !== undefined ? { size: width } : {}),\n ...(minWidth !== undefined ? { minSize: minWidth } : {}),\n ...(maxWidth !== undefined ? { maxSize: maxWidth } : {}),\n ...extra,\n });\n }\n\n // 构建 meta(筛选信息)\n const meta: Record<string, any> = {};\n if (filter) {\n meta.filterType = filter.type;\n if (filter.options) {\n meta.filterOptions = filter.options;\n }\n }\n\n // 自动选择排序函数\n let resolvedSortingFn: SortingFn<any> | undefined = sortingFn;\n if (!resolvedSortingFn) {\n switch (type) {\n case 'number':\n resolvedSortingFn = numericSort;\n break;\n case 'date':\n resolvedSortingFn = dateSort;\n break;\n // 'text' 和 'computed' 使用默认排序\n }\n }\n\n // 基础选项(v9:使用 sortFn)\n const baseOptions: Partial<ColumnDef<T, any>> = {\n ...(cell !== undefined ? { cell: cell as any } : {}),\n ...(resolvedSortingFn ? { sortFn: resolvedSortingFn } : {}),\n ...(sortable === false ? { enableSorting: false } : {}),\n ...(Object.keys(meta).length > 0 ? { meta } : {}),\n ...(width !== undefined ? { size: width } : {}),\n ...(minWidth !== undefined ? { minSize: minWidth } : {}),\n ...(maxWidth !== undefined ? { maxSize: maxWidth } : {}),\n ...extra,\n };\n\n // 计算列\n if (type === 'computed') {\n return createComputedColumn<T>(\n key.startsWith('_') ? key.slice(1) : key,\n header,\n accessorFn,\n baseOptions\n );\n }\n\n // 普通列 / number / date\n return createColumn<T>(key, header, baseOptions);\n}\n\n/**\n * useTableColumns - 通过 JSON 配置数组快速创建 DataTable 列定义\n *\n * @example\n * ```tsx\n * const columns = useTableColumns<Order>([\n * { key: '_selection', type: 'selection', header: '' },\n * { key: 'orderNumber', header: '订单编号', filter: { type: 'text' } },\n * { key: 'total', header: '总金额', type: 'number',\n * cell: info => `¥${info.getValue<number>().toFixed(2)}`,\n * filter: { type: 'number' } },\n * { key: '_actions', type: 'action', header: '操作',\n * cell: ({ row }) => <button>查看</button> }\n * ]);\n * ```\n *\n * @param configs - 列配置数组;按引用跟踪更新。需要缓存时由调用方用 useMemo 稳定配置。\n * @param deps - 额外依赖项,不能代替 configs;每次渲染保持依赖项数量不变。\n */\nexport function useTableColumns<T extends object>(\n configs: ColumnConfig<T>[],\n deps: readonly unknown[] = []\n): ColumnDef<T, any>[] {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => configs.map(buildColumnDef), [configs, ...deps]);\n}\n\nexport default useTableColumns;\n"],"mappings":";;;AA8DA,SAASA,EAAiC,GAA4C;CAClF,IAAM,EAAE,QAAK,WAAQ,UAAO,QAAQ,aAAU,SAAM,WAAQ,UAAO,aAAU,aAAU,eAAY,cAAW,aAAUC;CAGxH,IAAIC,MAAS,aACT,OAAOC,EAAyBC,CAAK;CAIzC,IAAIF,MAAS,UACT,OAAOG,EAAsB;EACzB,IAAIC,EAAI,WAAW,GAAG,IAAI,YAAYA;EACtC;EACM;EACN,GAAIC,MAAU,KAAA,IAA8B,CAAC,IAAnB,EAAE,MAAMA,EAAM;EACxC,GAAIC,MAAa,KAAA,IAAoC,CAAC,IAAzB,EAAE,SAASA,EAAS;EACjD,GAAIC,MAAa,KAAA,IAAoC,CAAC,IAAzB,EAAE,SAASA,EAAS;EACjD,GAAGL;CACP,CAAC;CAIL,IAAMM,IAA4B,CAAC;CACnC,AAAIC,MACA,EAAK,aAAaA,EAAO,MACrBA,EAAO,YACP,EAAK,gBAAgBA,EAAO;CAKpC,IAAIC,IAAgDC;CACpD,IAAI,CAACD,GACD,QAAQV,GAAR;EACI,KAAK;GACD,IAAoBY;GACpB;EACJ,KAAK,QACD,IAAoBC;CAG5B;CAIJ,IAAMC,IAA0C;EAC5C,GAAIC,MAAS,KAAA,IAAoC,CAAC,IAAzB,EAAQ,QAAY;EAC7C,GAAIL,IAAoB,EAAE,QAAQA,EAAkB,IAAI,CAAC;EACzD,GAAIM,MAAa,KAAQ,EAAE,eAAe,GAAM,IAAI,CAAC;EACrD,GAAI,OAAO,KAAKR,CAAI,CAAC,CAAC,SAAS,IAAI,EAAE,QAAK,IAAI,CAAC;EAC/C,GAAIH,MAAU,KAAA,IAA8B,CAAC,IAAnB,EAAE,MAAMA,EAAM;EACxC,GAAIC,MAAa,KAAA,IAAoC,CAAC,IAAzB,EAAE,SAASA,EAAS;EACjD,GAAIC,MAAa,KAAA,IAAoC,CAAC,IAAzB,EAAE,SAASA,EAAS;EACjD,GAAGL;CACP;CAaA,OAVIF,MAAS,aACFiB,EACHb,EAAI,WAAW,GAAG,IAAIA,EAAI,MAAM,CAAC,IAAIA,GACrCc,GACAC,GACAL,CACJ,IAIGM,EAAgBhB,GAAKc,GAAQJ,CAAW;AACnD;AAqBA,SAAgBO,EACZ,GACA,IAA2B,CAAC,GACT;CAEnB,OAAOC,QAAcC,EAAQ,IAAIzB,CAAc,GAAG,CAACyB,GAAS,GAAGC,CAAI,CAAC;AACxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableData.js","names":[],"sources":["../../src/hooks/useTableData.ts"],"sourcesContent":["import { useState, useMemo, useCallback } from 'react';\nimport {\n ColumnFiltersState,\n SortingState,\n RowSelectionState,\n} from '../components/pro/DataTable/tanstack-table';\n\n/**\n * useTableData 配置项\n */\nexport interface UseTableDataOptions<T extends object> {\n /** 原始数据数组。未提供 getRowId 时使用此数组的索引作为 ID;重排、插删或刷新数据时应提供稳定业务 ID。 */\n data: T[];\n /** 初始排序状态 */\n initialSort?: SortingState;\n /** 初始筛选状态 */\n initialFilters?: ColumnFiltersState;\n /** 初始每页行数,默认 10 */\n initialPageSize?: number;\n /** 自定义筛选函数(有筛选条件时执行)。提供后 tableProps.manualFiltering=true,避免 DataTable 二次过滤。 */\n filterFn?: (item: T, filters: ColumnFiltersState) => boolean;\n /** 获取唯一行 ID;index 是筛选前原始 data 的索引,而不是 tableData 的索引。 */\n getRowId?: (row: T, index: number) => string;\n}\n\n/**\n * useTableData 返回值\n */\nexport interface UseTableDataReturn<T extends object> {\n // 数据\n /** 经过筛选后的数据(如果提供了 filterFn) */\n tableData: T[];\n /** 是否由此 Hook 负责筛选;同时包含在 tableProps 中。 */\n manualFiltering: boolean;\n\n // 排序\n sorting: SortingState;\n onSortingChange: (sorting: SortingState) => void;\n\n // 筛选\n columnFilters: ColumnFiltersState;\n onColumnFiltersChange: (\n filters: ColumnFiltersState | ((prev: ColumnFiltersState) => ColumnFiltersState)\n ) => void;\n\n // 分页\n pageIndex: number;\n pageSize: number;\n /** Math.ceil(tableData.length / pageSize)。提供 filterFn 时是自定义筛选后的页数;\n * 未提供时仅是原始数据页数,不包含 DataTable 的内置筛选(此 Hook 没有 columns,无法精确计算)。\n * 内置筛选后的实际页数以 DataTable 的 table.getPageCount() 为准,不要将此值当作服务端总页数传入。\n */\n pageCount: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n\n // 选择\n selectedRows: RowSelectionState;\n onRowSelectionChange: (selection: RowSelectionState) => void;\n /** tableData 中选中的行,按输入顺序返回;自定义筛选隐藏的选中 ID 保留在 selectedRows,但不在此数组中。 */\n selectedData: T[];\n\n /**\n * 合并好的 props,可直接展开到 <DataTable>\n * @example <DataTable columns={columns} {...tableProps} />\n */\n tableProps: {\n data: T[];\n sortingState: SortingState;\n onSortingChange: (sorting: SortingState) => void;\n columnFilters: ColumnFiltersState;\n onColumnFiltersChange: (\n filters: ColumnFiltersState | ((prev: ColumnFiltersState) => ColumnFiltersState)\n ) => void;\n pageIndex: number;\n pageSize: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n selectedRows: RowSelectionState;\n onRowSelectionChange: (selection: RowSelectionState) => void;\n getRowId?: (row: T, index: number) => string;\n enableSorting: boolean;\n enableFiltering: boolean;\n manualFiltering: boolean;\n enablePagination: boolean;\n enableSelection: boolean;\n };\n}\n\n/**\n * useTableData - 封装 DataTable 的数据状态管理\n *\n * 将排序、筛选、分页、选择等状态统一管理,\n * 返回的 `tableProps` 可以直接展开到 `<DataTable>` 上。\n *\n * @example\n * ```tsx\n * const { tableProps, selectedData } = useTableData({\n * data: orders,\n * initialSort: [{ id: 'orderDate', desc: true }],\n * initialPageSize: 5,\n * });\n *\n * <DataTable columns={columns} {...tableProps} />\n * ```\n */\nexport function useTableData<T extends object>(\n options: UseTableDataOptions<T>\n): UseTableDataReturn<T> {\n const {\n data,\n initialSort = [],\n initialFilters = [],\n initialPageSize = 10,\n filterFn,\n getRowId,\n } = options;\n\n // ─── 排序 ───\n const [sorting, setSorting] = useState<SortingState>(initialSort);\n\n // ─── 筛选 ───\n const [columnFilters, setColumnFiltersRaw] = useState<ColumnFiltersState>(initialFilters);\n\n // ─── 分页 ───\n const [pageIndex, setPageIndex] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n\n // ─── 选择 ───\n const [selectedRows, setSelectedRows] = useState<RowSelectionState>({});\n\n const onSortingChange = useCallback((next: SortingState) => {\n setPageIndex(0);\n setSorting(next);\n }, []);\n\n // ─── 当筛选变化时重置到第一页 ───\n const onColumnFiltersChange = useCallback(\n (updater: ColumnFiltersState | ((prev: ColumnFiltersState) => ColumnFiltersState)) => {\n setPageIndex(0);\n setColumnFiltersRaw(updater);\n },\n []\n );\n\n // ─── 分页回调 ───\n const onPageChange = useCallback((page: number) => {\n setPageIndex(page);\n }, []);\n\n const onPageSizeChange = useCallback((size: number) => {\n setPageSize(size);\n setPageIndex(0);\n }, []);\n\n // Keep source indexes alongside rows, rather than mapping object identities:\n // the same object can appear at multiple positions in the input array.\n const { tableData, sourceIndexes } = useMemo(() => {\n if (!filterFn || columnFilters.length === 0) {\n return { tableData: data, sourceIndexes: data.map((_, index) => index) };\n }\n const tableData: T[] = [];\n const sourceIndexes: number[] = [];\n data.forEach((item, index) => {\n if (filterFn(item, columnFilters)) {\n tableData.push(item);\n sourceIndexes.push(index);\n }\n });\n return { tableData, sourceIndexes };\n }, [data, columnFilters, filterFn]);\n const manualFiltering = Boolean(filterFn);\n const resolveRowId = useCallback((row: T, index: number) => {\n const sourceIndex = sourceIndexes[index] ?? index;\n return getRowId ? getRowId(row, sourceIndex) : String(sourceIndex);\n }, [sourceIndexes, getRowId]);\n\n // ─── 页数 ───\n const pageCount = useMemo(\n () => Math.ceil(tableData.length / pageSize),\n [tableData.length, pageSize]\n );\n\n // ─── 选中数据便捷字段 ───\n const selectedData = useMemo(() =>\n tableData.filter((item, index) => selectedRows[resolveRowId(item, index)]),\n [selectedRows, tableData, resolveRowId]\n );\n\n // ─── 合并 props ───\n const tableProps = useMemo(\n () => ({\n data: tableData,\n sortingState: sorting,\n onSortingChange,\n columnFilters,\n onColumnFiltersChange,\n pageIndex,\n pageSize,\n onPageChange,\n onPageSizeChange,\n selectedRows,\n onRowSelectionChange: setSelectedRows,\n getRowId: resolveRowId,\n enableSorting: true,\n enableFiltering: true,\n manualFiltering,\n enablePagination: true,\n enableSelection: true,\n }),\n [\n tableData,\n sorting,\n onSortingChange,\n columnFilters,\n onColumnFiltersChange,\n pageIndex,\n pageSize,\n onPageChange,\n onPageSizeChange,\n selectedRows,\n resolveRowId,\n manualFiltering,\n ]\n );\n\n return {\n tableData,\n manualFiltering,\n sorting,\n onSortingChange,\n columnFilters,\n onColumnFiltersChange,\n pageIndex,\n pageSize,\n pageCount,\n onPageChange,\n onPageSizeChange,\n selectedRows,\n onRowSelectionChange: setSelectedRows,\n selectedData,\n tableProps,\n };\n}\n\nexport default useTableData;\n"],"mappings":";;AA0GA,
|
|
1
|
+
{"version":3,"file":"useTableData.js","names":["useTableData","options","sorting","setSorting","useState","initialSort","columnFilters","setColumnFiltersRaw","initialFilters","pageIndex","setPageIndex","pageSize","setPageSize","initialPageSize","selectedRows","setSelectedRows","onSortingChange","useCallback","next","onColumnFiltersChange","updater","onPageChange","page","onPageSizeChange","size","useMemo","filterFn","data","index","tableData","sourceIndexes","item","manualFiltering","resolveRowId","sourceIndex","getRowId","row"],"sources":["../../src/hooks/useTableData.ts"],"sourcesContent":["import { useState, useMemo, useCallback } from 'react';\nimport {\n ColumnFiltersState,\n SortingState,\n RowSelectionState,\n} from '../components/pro/DataTable/tanstack-table';\n\n/**\n * useTableData 配置项\n */\nexport interface UseTableDataOptions<T extends object> {\n /** 原始数据数组。未提供 getRowId 时使用此数组的索引作为 ID;重排、插删或刷新数据时应提供稳定业务 ID。 */\n data: T[];\n /** 初始排序状态 */\n initialSort?: SortingState;\n /** 初始筛选状态 */\n initialFilters?: ColumnFiltersState;\n /** 初始每页行数,默认 10 */\n initialPageSize?: number;\n /** 自定义筛选函数(有筛选条件时执行)。提供后 tableProps.manualFiltering=true,避免 DataTable 二次过滤。 */\n filterFn?: (item: T, filters: ColumnFiltersState) => boolean;\n /** 获取唯一行 ID;index 是筛选前原始 data 的索引,而不是 tableData 的索引。 */\n getRowId?: (row: T, index: number) => string;\n}\n\n/**\n * useTableData 返回值\n */\nexport interface UseTableDataReturn<T extends object> {\n // 数据\n /** 经过筛选后的数据(如果提供了 filterFn) */\n tableData: T[];\n /** 是否由此 Hook 负责筛选;同时包含在 tableProps 中。 */\n manualFiltering: boolean;\n\n // 排序\n sorting: SortingState;\n onSortingChange: (sorting: SortingState) => void;\n\n // 筛选\n columnFilters: ColumnFiltersState;\n onColumnFiltersChange: (\n filters: ColumnFiltersState | ((prev: ColumnFiltersState) => ColumnFiltersState)\n ) => void;\n\n // 分页\n pageIndex: number;\n pageSize: number;\n /** Math.ceil(tableData.length / pageSize)。提供 filterFn 时是自定义筛选后的页数;\n * 未提供时仅是原始数据页数,不包含 DataTable 的内置筛选(此 Hook 没有 columns,无法精确计算)。\n * 内置筛选后的实际页数以 DataTable 的 table.getPageCount() 为准,不要将此值当作服务端总页数传入。\n */\n pageCount: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n\n // 选择\n selectedRows: RowSelectionState;\n onRowSelectionChange: (selection: RowSelectionState) => void;\n /** tableData 中选中的行,按输入顺序返回;自定义筛选隐藏的选中 ID 保留在 selectedRows,但不在此数组中。 */\n selectedData: T[];\n\n /**\n * 合并好的 props,可直接展开到 <DataTable>\n * @example <DataTable columns={columns} {...tableProps} />\n */\n tableProps: {\n data: T[];\n sortingState: SortingState;\n onSortingChange: (sorting: SortingState) => void;\n columnFilters: ColumnFiltersState;\n onColumnFiltersChange: (\n filters: ColumnFiltersState | ((prev: ColumnFiltersState) => ColumnFiltersState)\n ) => void;\n pageIndex: number;\n pageSize: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (size: number) => void;\n selectedRows: RowSelectionState;\n onRowSelectionChange: (selection: RowSelectionState) => void;\n getRowId?: (row: T, index: number) => string;\n enableSorting: boolean;\n enableFiltering: boolean;\n manualFiltering: boolean;\n enablePagination: boolean;\n enableSelection: boolean;\n };\n}\n\n/**\n * useTableData - 封装 DataTable 的数据状态管理\n *\n * 将排序、筛选、分页、选择等状态统一管理,\n * 返回的 `tableProps` 可以直接展开到 `<DataTable>` 上。\n *\n * @example\n * ```tsx\n * const { tableProps, selectedData } = useTableData({\n * data: orders,\n * initialSort: [{ id: 'orderDate', desc: true }],\n * initialPageSize: 5,\n * });\n *\n * <DataTable columns={columns} {...tableProps} />\n * ```\n */\nexport function useTableData<T extends object>(\n options: UseTableDataOptions<T>\n): UseTableDataReturn<T> {\n const {\n data,\n initialSort = [],\n initialFilters = [],\n initialPageSize = 10,\n filterFn,\n getRowId,\n } = options;\n\n // ─── 排序 ───\n const [sorting, setSorting] = useState<SortingState>(initialSort);\n\n // ─── 筛选 ───\n const [columnFilters, setColumnFiltersRaw] = useState<ColumnFiltersState>(initialFilters);\n\n // ─── 分页 ───\n const [pageIndex, setPageIndex] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n\n // ─── 选择 ───\n const [selectedRows, setSelectedRows] = useState<RowSelectionState>({});\n\n const onSortingChange = useCallback((next: SortingState) => {\n setPageIndex(0);\n setSorting(next);\n }, []);\n\n // ─── 当筛选变化时重置到第一页 ───\n const onColumnFiltersChange = useCallback(\n (updater: ColumnFiltersState | ((prev: ColumnFiltersState) => ColumnFiltersState)) => {\n setPageIndex(0);\n setColumnFiltersRaw(updater);\n },\n []\n );\n\n // ─── 分页回调 ───\n const onPageChange = useCallback((page: number) => {\n setPageIndex(page);\n }, []);\n\n const onPageSizeChange = useCallback((size: number) => {\n setPageSize(size);\n setPageIndex(0);\n }, []);\n\n // Keep source indexes alongside rows, rather than mapping object identities:\n // the same object can appear at multiple positions in the input array.\n const { tableData, sourceIndexes } = useMemo(() => {\n if (!filterFn || columnFilters.length === 0) {\n return { tableData: data, sourceIndexes: data.map((_, index) => index) };\n }\n const tableData: T[] = [];\n const sourceIndexes: number[] = [];\n data.forEach((item, index) => {\n if (filterFn(item, columnFilters)) {\n tableData.push(item);\n sourceIndexes.push(index);\n }\n });\n return { tableData, sourceIndexes };\n }, [data, columnFilters, filterFn]);\n const manualFiltering = Boolean(filterFn);\n const resolveRowId = useCallback((row: T, index: number) => {\n const sourceIndex = sourceIndexes[index] ?? index;\n return getRowId ? getRowId(row, sourceIndex) : String(sourceIndex);\n }, [sourceIndexes, getRowId]);\n\n // ─── 页数 ───\n const pageCount = useMemo(\n () => Math.ceil(tableData.length / pageSize),\n [tableData.length, pageSize]\n );\n\n // ─── 选中数据便捷字段 ───\n const selectedData = useMemo(() =>\n tableData.filter((item, index) => selectedRows[resolveRowId(item, index)]),\n [selectedRows, tableData, resolveRowId]\n );\n\n // ─── 合并 props ───\n const tableProps = useMemo(\n () => ({\n data: tableData,\n sortingState: sorting,\n onSortingChange,\n columnFilters,\n onColumnFiltersChange,\n pageIndex,\n pageSize,\n onPageChange,\n onPageSizeChange,\n selectedRows,\n onRowSelectionChange: setSelectedRows,\n getRowId: resolveRowId,\n enableSorting: true,\n enableFiltering: true,\n manualFiltering,\n enablePagination: true,\n enableSelection: true,\n }),\n [\n tableData,\n sorting,\n onSortingChange,\n columnFilters,\n onColumnFiltersChange,\n pageIndex,\n pageSize,\n onPageChange,\n onPageSizeChange,\n selectedRows,\n resolveRowId,\n manualFiltering,\n ]\n );\n\n return {\n tableData,\n manualFiltering,\n sorting,\n onSortingChange,\n columnFilters,\n onColumnFiltersChange,\n pageIndex,\n pageSize,\n pageCount,\n onPageChange,\n onPageSizeChange,\n selectedRows,\n onRowSelectionChange: setSelectedRows,\n selectedData,\n tableProps,\n };\n}\n\nexport default useTableData;\n"],"mappings":";;AA0GA,SAAgBA,EACZ,GACqB;CACrB,IAAM,EACF,SACA,iBAAc,CAAC,GACf,oBAAiB,CAAC,GAClB,qBAAkB,IAClB,aACA,gBACAC,GAGE,CAACC,GAASC,KAAcC,EAAuBC,CAAW,GAG1D,CAACC,GAAeC,KAAuBH,EAA6BI,CAAc,GAGlF,CAACC,GAAWC,KAAgBN,EAAS,CAAC,GACtC,CAACO,GAAUC,KAAeR,EAASS,CAAe,GAGlD,CAACC,GAAcC,KAAmBX,EAA4B,CAAC,CAAC,GAEhEY,IAAkBC,GAAa,MAAuB;EAExD,AADAP,EAAa,CAAC,GACdP,EAAWe,CAAI;CACnB,GAAG,CAAC,CAAC,GAGCC,IAAwBF,GACzB,MAAqF;EAElF,AADAP,EAAa,CAAC,GACdH,EAAoBa,CAAO;CAC/B,GACA,CAAC,CACL,GAGMC,IAAeJ,GAAa,MAAiB;EAC/C,EAAaK,CAAI;CACrB,GAAG,CAAC,CAAC,GAECC,IAAmBN,GAAa,MAAiB;EAEnD,AADAL,EAAYY,CAAI,GAChBd,EAAa,CAAC;CAClB,GAAG,CAAC,CAAC,GAIC,EAAE,cAAW,qBAAkBe,QAAc;EAC/C,IAAI,CAACC,KAAYpB,EAAc,WAAW,GACtC,OAAO;GAAE,WAAWqB;GAAM,eAAeA,EAAK,KAAK,GAAG,MAAUC,CAAK;EAAE;EAE3E,IAAMC,IAAiB,CAAC,GAClBC,IAA0B,CAAC;EAOjC,OANAH,EAAK,SAAS,GAAM,MAAU;GAC1B,AAAID,EAASK,GAAMzB,CAAa,MAC5BuB,EAAU,KAAKE,CAAI,GACnBD,EAAc,KAAKF,CAAK;EAEhC,CAAC,GACM;GAAE;GAAW;EAAc;CACtC,GAAG;EAACD;EAAMrB;EAAeoB;CAAQ,CAAC,GAC5BM,IAAkB,EAAQN,GAC1BO,IAAehB,GAAa,GAAQ,MAAkB;EACxD,IAAMiB,IAAcJ,EAAcF,MAAUA;EAC5C,OAAOO,IAAWA,EAASC,GAAKF,CAAW,IAAI,OAAOA,CAAW;CACrE,GAAG,CAACJ,GAAeK,CAAQ,CAAC;CAmD5B,OAAO;EACH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAzDcV,QACR,KAAK,KAAKI,EAAU,SAASlB,CAAQ,GAC3C,CAACkB,EAAU,QAAQlB,CAAQ,CAuD3B;EACA;EACA;EACA;EACA,sBAAsBI;EACtB,cAxDiBU,QACjBI,EAAU,QAAQ,GAAM,MAAUf,EAAamB,EAAaF,GAAMH,CAAK,EAAE,GACzE;GAACd;GAAce;GAAWI;EAAY,CAsDtC;EACA,YAnDeR,SACR;GACH,MAAMI;GACN,cAAc3B;GACd;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,sBAAsBa;GACtB,UAAUkB;GACV,eAAe;GACf,iBAAiB;GACjB;GACA,kBAAkB;GAClB,iBAAiB;EACrB,IACA;GACIJ;GACA3B;GACAc;GACAV;GACAa;GACAV;GACAE;GACAU;GACAE;GACAT;GACAmB;GACAD;EACJ,CAkBA;CACJ;AACJ"}
|
package/dist/index-nostyled.d.ts
CHANGED
|
@@ -50,6 +50,8 @@ export { Tree } from './components/Tree';
|
|
|
50
50
|
export type { TreeNode, TreeProps } from './components/Tree';
|
|
51
51
|
export { default as DataTable, createColumn, createComputedColumn, createActionColumn, createSelectionColumn, numericSort, dateSort, stringSort, treeSort, createSelectOptions, extractUniqueOptions, defaultFilterFunctions, useTableColumns, useTableData, } from './components/pro/DataTable';
|
|
52
52
|
export type { DataTableProps, CellEventHandler, RowEventHandler, ColumnEventHandler, TableEventHandler, FilterPanelProps, TextFilterProps, NumberFilterProps, SelectFilterProps, BooleanFilterProps, DateRangeFilterProps, ColumnDef, ColumnFiltersState, SortingState, VisibilityState, RowSelectionState, PaginationState, ColumnConfig, ColumnFilterConfig, UseTableDataOptions, UseTableDataReturn, } from './components/pro/DataTable';
|
|
53
|
+
export { Sprite } from './components/pro/Sprite';
|
|
54
|
+
export type { SpriteProps, SpriteHandle, SpriteCharacter, SpriteAction } from './components/pro/Sprite';
|
|
53
55
|
export { default as Chart } from './components/Chart';
|
|
54
56
|
export type { ChartProps } from './components/Chart';
|
|
55
57
|
export { default as Demo } from './components/Demo';
|
package/dist/index.d.ts
CHANGED
|
@@ -45,6 +45,8 @@ export type { AdminSuiteProps, MailSuiteProps, WikiSuiteProps, BlogSuiteProps, B
|
|
|
45
45
|
export { default as EmptyState } from './components/EmptyState';
|
|
46
46
|
export { default as Avatar } from './components/Avatar';
|
|
47
47
|
export type { AvatarProps, AvatarShape, AvatarBorderStyle, AvatarNotificationPosition, } from './components/Avatar';
|
|
48
|
+
export { Sprite } from './components/pro/Sprite';
|
|
49
|
+
export type { SpriteProps, SpriteHandle, SpriteCharacter, SpriteAction } from './components/pro/Sprite';
|
|
48
50
|
export { default as Accordion } from './components/Accordion';
|
|
49
51
|
export type { AccordionProps, AccordionItemType } from './components/Accordion';
|
|
50
52
|
export type { EmptyStateProps } from './components/EmptyState';
|
package/dist/index.js
CHANGED
|
@@ -42,118 +42,119 @@ import { DashboardSuite as ae } from "./components/LayoutSuite/DashboardSuite.js
|
|
|
42
42
|
import { AdminSuite as oe, BlankSuite as se, BlogSuite as ce, LayoutSuite as le, MailSuite as ue, WikiSuite as de } from "./components/LayoutSuite/index.js";
|
|
43
43
|
import fe from "./components/EmptyState/index.js";
|
|
44
44
|
import pe from "./components/Avatar/index.js";
|
|
45
|
-
import me from "./components/
|
|
46
|
-
import he from "./components/
|
|
47
|
-
import ge from "./components/
|
|
48
|
-
import _e from "./components/
|
|
49
|
-
import
|
|
50
|
-
import ye from "./components/
|
|
51
|
-
import be from "./components/
|
|
52
|
-
import xe from "./components/
|
|
53
|
-
import Se from "./components/
|
|
54
|
-
import Ce from "./components/
|
|
55
|
-
import we from "./components/
|
|
56
|
-
import Te from "./components/
|
|
57
|
-
import Ee from "./components/
|
|
58
|
-
import De from "./components/
|
|
59
|
-
import Oe from "./
|
|
60
|
-
import ke from "./layouts/headbar/
|
|
61
|
-
import Ae from "./layouts/headbar/
|
|
62
|
-
import je from "./layouts/headbar/
|
|
63
|
-
import
|
|
64
|
-
import Ne from "./
|
|
65
|
-
import
|
|
66
|
-
import ze from "./
|
|
67
|
-
import Be from "./hooks/
|
|
68
|
-
import
|
|
69
|
-
import {
|
|
70
|
-
import {
|
|
71
|
-
import {
|
|
72
|
-
import {
|
|
73
|
-
import {
|
|
74
|
-
import
|
|
75
|
-
import at from "./
|
|
76
|
-
import ot from "./components/
|
|
77
|
-
import st from "./components/
|
|
78
|
-
import ct from "./components/pro/
|
|
79
|
-
import lt from "./components/
|
|
80
|
-
import
|
|
81
|
-
import {
|
|
82
|
-
import {
|
|
83
|
-
import {
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import Ot from "./components/pro/CodeEditor/
|
|
89
|
-
import kt from "./components/pro/CodeEditor/
|
|
90
|
-
import At from "./components/pro/CodeEditor/panels/
|
|
91
|
-
import jt from "./components/pro/CodeEditor/
|
|
92
|
-
import Mt from "./components/pro/CodeEditor/
|
|
93
|
-
import Nt from "./components/pro/CodeEditor/panels/
|
|
94
|
-
import Pt from "./
|
|
95
|
-
import Ft from "./layouts/
|
|
96
|
-
import
|
|
97
|
-
import {
|
|
98
|
-
import {
|
|
99
|
-
import {
|
|
100
|
-
import {
|
|
101
|
-
import {
|
|
102
|
-
import {
|
|
103
|
-
import {
|
|
104
|
-
import {
|
|
105
|
-
import {
|
|
106
|
-
import {
|
|
107
|
-
import {
|
|
108
|
-
import {
|
|
109
|
-
import {
|
|
110
|
-
import {
|
|
111
|
-
import $t from "./components/pro/RichTextEditor/
|
|
112
|
-
import en from "./components/
|
|
113
|
-
import tn from "./components/ai/
|
|
114
|
-
import nn from "./components/
|
|
115
|
-
import
|
|
116
|
-
import an from "./components/pro/RichTextEditor/
|
|
117
|
-
import
|
|
118
|
-
import {
|
|
119
|
-
import {
|
|
120
|
-
import {
|
|
121
|
-
import {
|
|
122
|
-
import Tn from "./components/pro/Flow/
|
|
123
|
-
import En from "./components/pro/Flow/panels/
|
|
124
|
-
import
|
|
125
|
-
import On from "./components/pro/Flow/
|
|
126
|
-
import kn from "./components/pro/Flow/panels/
|
|
127
|
-
import An from "./components/pro/Flow/panels/
|
|
128
|
-
import
|
|
129
|
-
import Mn from "./components/pro/Flow/
|
|
130
|
-
import
|
|
131
|
-
import {
|
|
132
|
-
import {
|
|
133
|
-
import {
|
|
134
|
-
import {
|
|
135
|
-
import {
|
|
136
|
-
import {
|
|
137
|
-
import ar from "./components/pro/Gantt/
|
|
138
|
-
import
|
|
139
|
-
import ur from "./components/pro/Kanban/
|
|
140
|
-
import
|
|
141
|
-
import fr from "./components/pro/Kanban/
|
|
142
|
-
import
|
|
143
|
-
import {
|
|
144
|
-
import {
|
|
145
|
-
import Hr from "./components/pro/Calendar/
|
|
146
|
-
import Ur from "./components/
|
|
147
|
-
import Wr from "./components/ai/
|
|
148
|
-
import Gr from "./components/ai/
|
|
149
|
-
import Kr from "./components/ai/
|
|
150
|
-
import qr from "./components/ai/
|
|
151
|
-
import Jr
|
|
152
|
-
import
|
|
153
|
-
import ti from "./components/ai/
|
|
154
|
-
import ni from "./components/ai/
|
|
155
|
-
import ri from "./components/ai/
|
|
156
|
-
import ii from "./components/ai/
|
|
157
|
-
import ai from "./components/ai/
|
|
158
|
-
import oi from "./components/ai/
|
|
159
|
-
|
|
45
|
+
import { Sprite as me } from "./components/pro/Sprite/Sprite2.js";
|
|
46
|
+
import he from "./components/Accordion/index.js";
|
|
47
|
+
import ge from "./components/Modal/index.js";
|
|
48
|
+
import _e from "./components/ConfirmDialog/index.js";
|
|
49
|
+
import ve from "./components/Tabs/index.js";
|
|
50
|
+
import { Tab as ye } from "./components/Tab/index.js";
|
|
51
|
+
import be from "./components/List/index.js";
|
|
52
|
+
import xe from "./components/Row/index.js";
|
|
53
|
+
import Se from "./components/Column/index.js";
|
|
54
|
+
import Ce from "./components/Image/index.js";
|
|
55
|
+
import we from "./components/Icon/index.js";
|
|
56
|
+
import Te from "./components/Slider/index.js";
|
|
57
|
+
import Ee from "./components/DateTimeInput/index.js";
|
|
58
|
+
import De from "./components/MultipleChoice/index.js";
|
|
59
|
+
import Oe from "./components/ChoicePicker/index.js";
|
|
60
|
+
import ke from "./layouts/headbar/Headbar.js";
|
|
61
|
+
import Ae from "./layouts/headbar/HeadbarTitle.js";
|
|
62
|
+
import je from "./layouts/headbar/HeadbarSearch.js";
|
|
63
|
+
import Me from "./layouts/headbar/HeadbarLangSwitcher.js";
|
|
64
|
+
import { getThemes as Ne } from "./utils/themes.js";
|
|
65
|
+
import Pe from "./layouts/headbar/HeadbarThemeSwitcher.js";
|
|
66
|
+
import { AppLayoutWrapper as Fe, AppProvider as Ie, AppShell as Le, useAppContext as Re, useAuth as ze } from "./contexts/AppContext.js";
|
|
67
|
+
import Be from "./hooks/useTableColumns.js";
|
|
68
|
+
import Ve from "./hooks/useTableData.js";
|
|
69
|
+
import { defineExtension as He } from "./components/pro/DataTable/extension.js";
|
|
70
|
+
import { computePivot as Ue } from "./components/pro/DataTable/pivotEngine.js";
|
|
71
|
+
import { PivotView as We } from "./components/pro/DataTable/PivotView.js";
|
|
72
|
+
import { PivotPanel as Ge } from "./components/pro/DataTable/PivotPanel.js";
|
|
73
|
+
import { usePivotExtension as Ke } from "./components/pro/DataTable/pivotExtension.js";
|
|
74
|
+
import { useRowDetailExtension as qe } from "./components/pro/DataTable/rowDetailExtension.js";
|
|
75
|
+
import Je, { createActionColumn as Ye, createColumn as Xe, createComputedColumn as Ze, createSelectOptions as Qe, createSelectionColumn as $e, dateSort as et, defaultFilterFunctions as tt, extractUniqueOptions as nt, numericSort as rt, stringSort as it, treeSort as at } from "./data-table.js";
|
|
76
|
+
import ot from "./components/Chart/Chart.js";
|
|
77
|
+
import st from "./components/Demo/index.js";
|
|
78
|
+
import ct from "./components/pro/ArticleControl/ArticleControl2.js";
|
|
79
|
+
import lt from "./components/pro/ArticleContextMenu/index.js";
|
|
80
|
+
import ut from "./components/Markdown/Markdown.js";
|
|
81
|
+
import { getDefaultSnippets as dt, javascriptSnippets as ft, pythonSnippets as pt } from "./components/pro/CodeEditor/langs/snippets.js";
|
|
82
|
+
import { jsJumpableKeywords as mt, jsKeywords as ht } from "./components/pro/CodeEditor/langs/javascript.js";
|
|
83
|
+
import { pyJumpableKeywords as gt, pyKeywords as _t } from "./components/pro/CodeEditor/langs/python.js";
|
|
84
|
+
import { getJumpableKeywords as vt, getLanguageKeywords as yt } from "./components/pro/CodeEditor/langs/index.js";
|
|
85
|
+
import { bracketMatchingStyle as bt, jumpTargetHighlight as xt, jumpToDefinition as St, lineHighlightStyle as Ct, smartAutocompletion as wt } from "./components/pro/CodeEditor/extensions/index.js";
|
|
86
|
+
import { createThemeExtension as Tt } from "./components/pro/CodeEditor/themes.js";
|
|
87
|
+
import { collectVariables as Et, generateOutline as Dt } from "./components/pro/CodeEditor/utils.js";
|
|
88
|
+
import { defaultContextMenu as Ot } from "./components/pro/CodeEditor/extensions/contextMenu.js";
|
|
89
|
+
import kt from "./components/pro/CodeEditor/editors/CodeEditor.js";
|
|
90
|
+
import At from "./components/pro/CodeEditor/panels/TableOfContentsPanel.js";
|
|
91
|
+
import jt from "./components/pro/CodeEditor/panels/FootnotePanel.js";
|
|
92
|
+
import Mt from "./components/pro/CodeEditor/editors/MarkdownEditor.js";
|
|
93
|
+
import Nt from "./components/pro/CodeEditor/panels/OutlinePanel.js";
|
|
94
|
+
import Pt from "./components/pro/CodeEditor/panels/VariablePanel.js";
|
|
95
|
+
import Ft from "./layouts/MainLayout.js";
|
|
96
|
+
import It from "./layouts/Navbar.js";
|
|
97
|
+
import { ProtectedRoute as Lt } from "./components/ProtectedRoute/index.js";
|
|
98
|
+
import { buildRouter as Rt, createRouterFromConfig as zt } from "./utils/routerBuilder.js";
|
|
99
|
+
import { DropZone as Bt, formatFileSize as Vt } from "./components/FileUploader/DropZone.js";
|
|
100
|
+
import { FileItem as Ht } from "./components/FileUploader/FileItem.js";
|
|
101
|
+
import { UploadQueue as Ut } from "./components/FileUploader/UploadQueue.js";
|
|
102
|
+
import { FileUploader as Wt } from "./components/FileUploader/FileUploader.js";
|
|
103
|
+
import { FileIcon as Gt } from "./components/pro/FileExplorer/FileIcon.js";
|
|
104
|
+
import { Breadcrumb as Kt } from "./components/pro/FileExplorer/Breadcrumb.js";
|
|
105
|
+
import { Toolbar as qt } from "./components/pro/FileExplorer/Toolbar.js";
|
|
106
|
+
import { ListView as Jt } from "./components/pro/FileExplorer/ListView.js";
|
|
107
|
+
import { GridView as Yt } from "./components/pro/FileExplorer/GridView.js";
|
|
108
|
+
import { CreateDialog as Xt } from "./components/pro/FileExplorer/CreateDialog.js";
|
|
109
|
+
import { FileExplorer as Zt } from "./components/pro/FileExplorer/FileExplorer.js";
|
|
110
|
+
import { defaultLabels as Qt } from "./components/pro/RichTextEditor/types.js";
|
|
111
|
+
import { MarkdownBlockExtension as $t } from "./components/pro/RichTextEditor/extensions/MarkdownBlock.js";
|
|
112
|
+
import en from "./components/pro/RichTextEditor/Toolbar/Toolbar.js";
|
|
113
|
+
import tn from "./components/ai/StreamingText/index.js";
|
|
114
|
+
import nn from "./components/ai/LoadingState/index.js";
|
|
115
|
+
import rn from "./components/pro/RichTextEditor/AIRewrite.js";
|
|
116
|
+
import { CodeBlockExtension as an } from "./components/pro/RichTextEditor/extensions/CodeBlockView.js";
|
|
117
|
+
import on from "./components/pro/RichTextEditor/RichTextEditor.js";
|
|
118
|
+
import { BORDER_STYLE_OPTIONS as sn, DASH_DENSITY_OPTIONS as cn, DEFAULT_EDGE_DATA as ln, DEFAULT_NODE_DATA as un, EDGE_LINE_STYLE_OPTIONS as dn, EDGE_MARKER_OPTIONS as fn, EDGE_TYPE_OPTIONS as pn, GRADIENT_DIRECTION_OPTIONS as mn, PALETTE_ITEMS as hn, ROOT_CANVAS_ID as gn, createEmptyDocument as _n } from "./components/pro/Flow/constants.js";
|
|
119
|
+
import { FlowProvider as vn, useFlowContext as yn } from "./components/pro/Flow/context/FlowContext.js";
|
|
120
|
+
import { FlowUIProvider as bn, useFlowUI as xn } from "./components/pro/Flow/context/FlowUIContext.js";
|
|
121
|
+
import { downloadDataURL as Sn, exportCanvasToPNG as Cn, useFlowImportExport as wn } from "./components/pro/Flow/hooks/useFlowImportExport.js";
|
|
122
|
+
import { useLayoutActions as Tn } from "./components/pro/Flow/hooks/useLayoutActions.js";
|
|
123
|
+
import En from "./components/pro/Flow/panels/FlowToolbar.js";
|
|
124
|
+
import Dn from "./components/pro/Flow/panels/ShapePalette.js";
|
|
125
|
+
import { FLOW_NODE_TYPES as On } from "./components/pro/Flow/types.js";
|
|
126
|
+
import kn from "./components/pro/Flow/panels/InspectorPanel.js";
|
|
127
|
+
import An from "./components/pro/Flow/panels/OutlinePanel.js";
|
|
128
|
+
import jn from "./components/pro/Flow/panels/ContextMenu.js";
|
|
129
|
+
import { useClipboard as Mn } from "./components/pro/Flow/hooks/useClipboard.js";
|
|
130
|
+
import Nn from "./components/pro/Flow/Flow.js";
|
|
131
|
+
import { useNodeMutations as Pn } from "./components/pro/Flow/hooks/useNodeMutations.js";
|
|
132
|
+
import { useEdgeMutations as Fn } from "./components/pro/Flow/hooks/useEdgeMutations.js";
|
|
133
|
+
import { useLineMutations as In } from "./components/pro/Flow/hooks/useLineMutations.js";
|
|
134
|
+
import { useSelection as Ln } from "./components/pro/Flow/hooks/useSelection.js";
|
|
135
|
+
import { DEFAULT_CATEGORY_CONFIG as Rn, DEFAULT_SCALE_CONFIGS as zn, DEFAULT_TIME_WINDOW as Bn, addDays as Vn, addWorkingDays as Hn, calculateWorkingDays as Un, computeDateRange as Wn, dateToX as Gn, daysBetween as Kn, flattenTree as qn, formatDate as Jn, generateDateRange as Yn, generateHeaderGroups as Xn, getISOWeekNumber as Zn, getISOWeekYear as Qn, isNonWorkingDay as $n, isWeekend as er, parseDate as tr, startOfDay as nr, xToDate as rr } from "./components/pro/Gantt/utils.js";
|
|
136
|
+
import { useGanttState as ir } from "./components/pro/Gantt/hooks/useGanttState.js";
|
|
137
|
+
import { useGanttDrag as ar } from "./components/pro/Gantt/hooks/useGanttDrag.js";
|
|
138
|
+
import or from "./components/pro/Gantt/Gantt.js";
|
|
139
|
+
import { cardsAt as sr, createCardMove as cr, getCardLocation as lr, moveKanbanCard as ur } from "./components/pro/Kanban/utils.js";
|
|
140
|
+
import dr from "./components/pro/Kanban/Swimlanes.js";
|
|
141
|
+
import { useKanbanDrag as fr } from "./components/pro/Kanban/useKanbanDrag.js";
|
|
142
|
+
import pr from "./components/pro/Kanban/Kanban.js";
|
|
143
|
+
import { DEFAULT_COLOR_OPTIONS as mr, LABELS_EN as hr, LABELS_ZH as gr, SLOT_HEIGHT as _r, TIME_GRID_HEIGHT as vr, TIME_SLOTS as yr, addDays as br, clamp as xr, formatDate as Sr, formatTime as Cr, generateId as wr, generateTimeSlots as Tr, getDaysInMonth as Er, getFirstDayOfMonth as Dr, getHolidayEntry as Or, getMonthDates as kr, getWeekDates as Ar, isHoliday as jr, isNonWorkingDay as Mr, isSameDay as Nr, isToday as Pr, isWeekend as Fr, minutesToTime as Ir, parseDate as Lr, parseTime as Rr, timeToMinutes as zr, todayStr as Br } from "./components/pro/Calendar/utils.js";
|
|
144
|
+
import { useCalendarState as Vr } from "./components/pro/Calendar/hooks/useCalendarState.js";
|
|
145
|
+
import { useCalendarDrag as Hr } from "./components/pro/Calendar/hooks/useCalendarDrag.js";
|
|
146
|
+
import Ur from "./components/pro/Calendar/Calendar.js";
|
|
147
|
+
import Wr from "./components/ai/Thinking/index.js";
|
|
148
|
+
import Gr from "./components/ai/ToolChips/index.js";
|
|
149
|
+
import Kr from "./components/ai/TaskRows/index.js";
|
|
150
|
+
import qr from "./components/ai/AgentChat/index.js";
|
|
151
|
+
import Jr from "./components/ai/PromptBar/index.js";
|
|
152
|
+
import Yr, { diffRowChange as Xr, isDiffCellChange as Zr } from "./components/ai/DiffTable/index.js";
|
|
153
|
+
import Qr, { STRENGTH_LABEL as $r, formatRelativeTime as ei, strengthPercent as ti } from "./components/ai/RecordsTable/index.js";
|
|
154
|
+
import ni from "./components/ai/FilterTable/index.js";
|
|
155
|
+
import ri from "./components/ai/CommandSearch/index.js";
|
|
156
|
+
import ii from "./components/ai/StateFlow/index.js";
|
|
157
|
+
import ai from "./components/ai/CodeView/index.js";
|
|
158
|
+
import oi from "./components/ai/SelectionActions/index.js";
|
|
159
|
+
import si from "./components/ai/AgentScreen/index.js";
|
|
160
|
+
export { T as AGENT_STATUS_LABEL, rn as AIRewrite, he as Accordion, oe as AdminSuite, qr as AgentChat, P as AgentRunCard, si as AgentScreen, Fe as AppLayoutWrapper, Ie as AppProvider, Le as AppShell, w as ApprovalCard, lt as ArticleContextMenu, ct as ArticleControl, pe as Avatar, sn as BORDER_STYLE_OPTIONS, m as Badge, se as BlankSuite, ce as BlogSuite, Kt as Breadcrumb, a as Button, p as ButtonMenu, mr as CALENDAR_DEFAULT_COLOR_OPTIONS, hr as CALENDAR_LABELS_EN, gr as CALENDAR_LABELS_ZH, _r as CALENDAR_SLOT_HEIGHT, vr as CALENDAR_TIME_GRID_HEIGHT, yr as CALENDAR_TIME_SLOTS, Ur as Calendar, F as Card, ot as Chart, y as Checkbox, Oe as ChoicePicker, an as CodeBlockExtension, kt as CodeEditor, ai as CodeView, Se as Column, ri as CommandSearch, _e as ConfirmDialog, $ as Container, A as ContextCards, Xt as CreateDialog, cn as DASH_DENSITY_OPTIONS, Rn as DEFAULT_CATEGORY_CONFIG, ln as DEFAULT_EDGE_DATA, un as DEFAULT_NODE_DATA, zn as DEFAULT_SCALE_CONFIGS, Bn as DEFAULT_TIME_WINDOW, ae as DashboardSuite, Je as DataTable, Ee as DateTimeInput, st as Demo, J as DesktopSidebarToggleButton, Yr as DiffTable, S as Divider, Bt as DropZone, dn as EDGE_LINE_STYLE_OPTIONS, fn as EDGE_MARKER_OPTIONS, pn as EDGE_TYPE_OPTIONS, fe as EmptyState, On as FLOW_NODE_TYPES, g as Field, Zt as FileExplorer, qt as FileExplorerToolbar, Gt as FileIcon, Wt as FileUploader, ni as FilterTable, M as FineTuneCard, ee as Flex, Nn as Flow, jn as FlowContextMenu, kn as FlowInspectorPanel, An as FlowOutlinePanel, vn as FlowProvider, Dn as FlowShapePalette, En as FlowToolbar, bn as FlowUIProvider, jt as FootnotePanel, mn as GRADIENT_DIRECTION_OPTIONS, or as Gantt, te as Grid, ne as GridItem, Yt as GridView, re as Group, o as GroupButton, l as GroupedTable, ke as Headbar, Me as HeadbarLangSwitcher, je as HeadbarSearch, Pe as HeadbarThemeSwitcher, Ae as HeadbarTitle, we as Icon, Ce as Image, h as Input, j as InsightCards, N as IssueCard, pr as Kanban, v as Label, Q as Layout, le as LayoutSuite, be as List, Jt as ListView, nn as LoadingState, ue as MailSuite, Ft as MainLayout, ut as Markdown, $t as MarkdownBlockExtension, Mt as MarkdownEditor, Y as MobileSidebarToggleButton, ge as Modal, De as MultipleChoice, It as Navbar, u as NavigationList, Nt as OutlinePanel, hn as PALETTE_ITEMS, R as Page, z as PageBody, L as PageFloat, B as PageFooter, I as PageHeader, V as PageLeft, H as PageMain, U as PageRight, Ge as PivotPanel, We as PivotView, Jr as PromptBar, Lt as ProtectedRoute, gn as ROOT_CANVAS_ID, O as RecommendationCard, Qr as RecordsTable, t as Resizable, n as ResizableHandle, r as ResizablePanel, on as RichTextEditor, en as RichTextToolbar, xe as Row, $r as STRENGTH_LABEL, d as Section, C as Select, oi as SelectionActions, Z as Sidebar, X as SidebarToggleButtons, c as Skeleton, Te as Slider, ie as Space, me as Sprite, ii as StateFlow, tn as StreamingText, dr as Swimlanes, b as Switch, ye as Tab, s as Table, At as TableOfContentsPanel, ve as Tabs, Kr as TaskRows, f as Text, _ as Textarea, Wr as Thinking, Gr as ToolChips, x as Tooltip, q as Tree, Ht as UploadFileItem, Ut as UploadQueue, Pt as VariablePanel, de as WikiSuite, br as addCalendarDays, Vn as addGanttDays, Hn as addWorkingDays, bt as bracketMatchingStyle, Rt as buildRouter, Un as calculateWorkingDays, xr as calendarClamp, Ir as calendarMinutesToTime, zr as calendarTimeToMinutes, Br as calendarTodayStr, i as cn, Et as collectVariables, Wn as computeDateRange, Ue as computePivot, k as confidenceLevel, Ye as createActionColumn, Xe as createColumn, Ze as createComputedColumn, _n as createEmptyDocument, cr as createKanbanCardMove, zt as createRouterFromConfig, Qe as createSelectOptions, $e as createSelectionColumn, Tt as createThemeExtension, et as dateSort, Kn as daysBetween, Ot as defaultContextMenu, tt as defaultFilterFunctions, He as defineExtension, Xr as diffRowChange, Sn as downloadDataURL, Cn as exportCanvasToPNG, nt as extractUniqueOptions, qn as flattenGanttTree, Sr as formatCalendarDate, Cr as formatCalendarTime, E as formatDuration, D as formatElapsed, Vt as formatFileSize, Jn as formatGanttDate, ei as formatRelativeTime, Gn as ganttDateToX, rr as ganttXToDate, wr as generateCalendarId, Tr as generateCalendarTimeSlots, Yn as generateDateRange, Xn as generateHeaderGroups, Dt as generateOutline, W as generateSidebarActiveStyles, G as generateTreeActiveStyles, Er as getCalendarDaysInMonth, Dr as getCalendarFirstDayOfMonth, Or as getCalendarHolidayEntry, kr as getCalendarMonthDates, Ar as getCalendarWeekDates, dt as getDefaultSnippets, Zn as getISOWeekNumber, Qn as getISOWeekYear, vt as getJumpableKeywords, lr as getKanbanCardLocation, yt as getLanguageKeywords, Ne as getThemes, jr as isCalendarHoliday, Mr as isCalendarNonWorkingDay, Nr as isCalendarSameDay, Pr as isCalendarToday, Fr as isCalendarWeekend, Zr as isDiffCellChange, $n as isGanttNonWorkingDay, er as isGanttWeekend, ft as javascriptSnippets, mt as jsJumpableKeywords, ht as jsKeywords, xt as jumpTargetHighlight, St as jumpToDefinition, sr as kanbanCardsAt, Ct as lineHighlightStyle, ur as moveKanbanCard, rt as numericSort, Lr as parseCalendarDate, Rr as parseCalendarTime, tr as parseGanttDate, gt as pyJumpableKeywords, _t as pyKeywords, pt as pythonSnippets, Qt as richTextDefaultLabels, wt as smartAutocompletion, nr as startOfGanttDay, ti as strengthPercent, it as stringSort, K as themeActiveStyles, at as treeSort, Re as useAppContext, ze as useAuth, Hr as useCalendarDrag, Vr as useCalendarState, Fn as useEdgeMutations, Mn as useFlowClipboard, yn as useFlowContext, wn as useFlowImportExport, Ln as useFlowSelection, xn as useFlowUI, ar as useGanttDrag, ir as useGanttState, fr as useKanbanDrag, Tn as useLayoutActions, In as useLineMutations, Pn as useNodeMutations, Ke as usePivotExtension, e as useResize, qe as useRowDetailExtension, Be as useTableColumns, Ve as useTableData };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainLayout.js","names":[],"sources":["../../src/layouts/MainLayout.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react';\nimport { Headbar, HeadbarTitle, HeadbarLangSwitcher, HeadbarThemeSwitcher } from './headbar';\nimport Sidebar from './Sidebar';\nimport { useAppContext } from '../contexts/AppContext';\nimport { Outlet } from '@tanstack/react-router';\nimport { MobileSidebarToggleButton } from '../components/SidebarToggleButton';\n\ninterface MainLayoutProps {\n children?: React.ReactNode;\n /** Headbar 左侧插槽 */\n headbarLeft?: React.ReactNode | ((toggleSidebar: () => void) => React.ReactNode);\n /** Headbar 中间插槽 */\n headbarMiddle?: React.ReactNode;\n /** Headbar 右侧插槽 */\n headbarRight?: React.ReactNode;\n}\n\nconst MainLayout: React.FC<MainLayoutProps> = ({ children, headbarLeft, headbarMiddle, headbarRight }) => {\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const { title, language, theme, menuItems, getMenuItems, themes, sidebarWidth: configSidebarWidth, sidebarCollapsedWidth } = useAppContext();\n const [sidebarWidth, setSidebarWidth] = useState(configSidebarWidth || 280); // 默认侧边栏宽度\n const sidebarRef = useRef<HTMLDivElement>(null);\n\n // 当配置的 sidebarWidth 改变时,更新本地 state\n React.useEffect(() => {\n if (configSidebarWidth) {\n setSidebarWidth(configSidebarWidth);\n }\n }, [configSidebarWidth]);\n\n const toggleSidebar = () => {\n setSidebarCollapsed(!sidebarCollapsed);\n };\n\n // 当侧边栏宽度变化时更新状态\n const handleSidebarWidthChange = (width: number) => {\n setSidebarWidth(width);\n };\n\n const resolvedLeft = typeof headbarLeft === 'function'\n ? headbarLeft(toggleSidebar)\n : headbarLeft;\n\n return (\n <div className=\"min-h-screen flex flex-col bg-base-100\" data-theme={theme}>\n <Headbar\n left={resolvedLeft}\n middle={headbarMiddle}\n right={headbarRight}\n />\n\n <div className=\"flex flex-1 overflow-hidden\">\n <div className=\"flex-shrink-0\" ref={sidebarRef}>\n <Sidebar\n isCollapsed={sidebarCollapsed}\n language={language}\n items={menuItems}\n getMenuItems={getMenuItems}\n onWidthChange={handleSidebarWidthChange}\n onToggle={toggleSidebar}\n initialWidth={sidebarWidth}\n collapsedWidth={sidebarCollapsedWidth || 64}\n />\n </div>\n\n <main className=\"flex-1 overflow-y-auto px-6 py-4\">\n {children || <Outlet />}\n </main>\n\n {/* 侧边栏切换控件:桌面端 pill 已由 Sidebar 内部渲染,此处仅保留移动端按钮 */}\n <MobileSidebarToggleButton\n isCollapsed={sidebarCollapsed}\n onToggle={toggleSidebar}\n />\n </div>\n </div>\n );\n};\n\nexport default MainLayout; "],"mappings":";;;;;;;;AAiBA,
|
|
1
|
+
{"version":3,"file":"MainLayout.js","names":["Sidebar","Headbar","React","MainLayout","sidebarCollapsed","setSidebarCollapsed","useState","configSidebarWidth","useAppContext","sidebarWidth","setSidebarWidth","sidebarRef","useRef","toggleSidebar","handleSidebarWidthChange","width","resolvedLeft","headbarLeft","theme","headbarMiddle","headbarRight","menuItems","sidebarCollapsedWidth","children","Outlet","MobileSidebarToggleButton"],"sources":["../../src/layouts/MainLayout.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react';\nimport { Headbar, HeadbarTitle, HeadbarLangSwitcher, HeadbarThemeSwitcher } from './headbar';\nimport Sidebar from './Sidebar';\nimport { useAppContext } from '../contexts/AppContext';\nimport { Outlet } from '@tanstack/react-router';\nimport { MobileSidebarToggleButton } from '../components/SidebarToggleButton';\n\ninterface MainLayoutProps {\n children?: React.ReactNode;\n /** Headbar 左侧插槽 */\n headbarLeft?: React.ReactNode | ((toggleSidebar: () => void) => React.ReactNode);\n /** Headbar 中间插槽 */\n headbarMiddle?: React.ReactNode;\n /** Headbar 右侧插槽 */\n headbarRight?: React.ReactNode;\n}\n\nconst MainLayout: React.FC<MainLayoutProps> = ({ children, headbarLeft, headbarMiddle, headbarRight }) => {\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const { title, language, theme, menuItems, getMenuItems, themes, sidebarWidth: configSidebarWidth, sidebarCollapsedWidth } = useAppContext();\n const [sidebarWidth, setSidebarWidth] = useState(configSidebarWidth || 280); // 默认侧边栏宽度\n const sidebarRef = useRef<HTMLDivElement>(null);\n\n // 当配置的 sidebarWidth 改变时,更新本地 state\n React.useEffect(() => {\n if (configSidebarWidth) {\n setSidebarWidth(configSidebarWidth);\n }\n }, [configSidebarWidth]);\n\n const toggleSidebar = () => {\n setSidebarCollapsed(!sidebarCollapsed);\n };\n\n // 当侧边栏宽度变化时更新状态\n const handleSidebarWidthChange = (width: number) => {\n setSidebarWidth(width);\n };\n\n const resolvedLeft = typeof headbarLeft === 'function'\n ? headbarLeft(toggleSidebar)\n : headbarLeft;\n\n return (\n <div className=\"min-h-screen flex flex-col bg-base-100\" data-theme={theme}>\n <Headbar\n left={resolvedLeft}\n middle={headbarMiddle}\n right={headbarRight}\n />\n\n <div className=\"flex flex-1 overflow-hidden\">\n <div className=\"flex-shrink-0\" ref={sidebarRef}>\n <Sidebar\n isCollapsed={sidebarCollapsed}\n language={language}\n items={menuItems}\n getMenuItems={getMenuItems}\n onWidthChange={handleSidebarWidthChange}\n onToggle={toggleSidebar}\n initialWidth={sidebarWidth}\n collapsedWidth={sidebarCollapsedWidth || 64}\n />\n </div>\n\n <main className=\"flex-1 overflow-y-auto px-6 py-4\">\n {children || <Outlet />}\n </main>\n\n {/* 侧边栏切换控件:桌面端 pill 已由 Sidebar 内部渲染,此处仅保留移动端按钮 */}\n <MobileSidebarToggleButton\n isCollapsed={sidebarCollapsed}\n onToggle={toggleSidebar}\n />\n </div>\n </div>\n );\n};\n\nexport default MainLayout; "],"mappings":";;;;;;;;AAiBA,IAAMG,KAAyC,EAAE,aAAU,gBAAa,kBAAe,sBAAmB;CACxG,IAAM,CAACC,GAAkBC,KAAuBC,EAAS,EAAK,GACxD,EAAE,UAAO,aAAU,UAAO,cAAW,iBAAc,WAAQ,cAAcC,GAAoB,6BAA0BC,EAAc,GACrI,CAACC,GAAcC,KAAmBJ,EAASC,KAAsB,GAAG,GACpEI,IAAaC,EAAuB,IAAI;CAG9C,EAAM,gBAAgB;EACpB,AAAIL,KACFG,EAAgBH,CAAkB;CAEtC,GAAG,CAACA,CAAkB,CAAC;CAEvB,IAAMM,UAAsB;EAC1B,EAAoB,CAACT,CAAgB;CACvC,GAGMU,KAA4B,MAAkB;EAClD,EAAgBC,CAAK;CACvB,GAEMC,IAAe,OAAOC,KAAgB,aACxCA,EAAYJ,CAAa,IACzBI;CAEJ,OACE,kBAAC,OAAD;EAAK,WAAU;EAAyC,cAAYC;EAApE,UAAA,CACE,kBAACjB,GAAD;GACE,MAAMe;GACN,QAAQG;GACR,OAAOC;EACR,CAAA,GAED,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,kBAAC,OAAD;KAAK,WAAU;KAAgB,KAAKT;KAClC,UAAA,kBAACX,GAAD;MACE,aAAaI;MACH;MACV,OAAOiB;MACO;MACd,eAAeP;MACf,UAAUD;MACV,cAAcJ;MACd,gBAAgBa,KAAyB;KAC1C,CAAA;IACE,CAAA;IAEL,kBAAC,QAAD;KAAM,WAAU;KACb,UAAAC,KAAY,kBAACC,GAAD,CAAS,CAAA;IAClB,CAAA;IAGN,kBAACC,GAAD;KACE,aAAarB;KACb,UAAUS;IACX,CAAA;GACE;EACF,CAAA,CAAA;;AAET"}
|