dishui 0.0.108 → 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.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.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.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":"shapes.js","names":[],"sources":["../../../../../src/components/pro/Flow/nodes/shapes.ts"],"sourcesContent":["import { Graphics } from 'pixi.js';\nimport type { FlowShapeType, FlowNodeData, FlowBorderSides, FlowBorderSideOverride } from '../types';\nimport { drawDashedPath, type PathSeg } from '../utils/dashedLine';\nimport { resolveThemeColor } from '../utils/themeColor';\n\nexport interface ShapeDrawOptions {\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n borderStyle?: 'solid' | 'dashed' | 'dotted' | 'dynamic' | 'none';\n dashOffset?: number;\n}\n\nfunction parseDash(style: string | undefined, strokeWidth: number): number[] | undefined {\n if (!style || style === 'solid') return undefined;\n if (style === 'dynamic') return [strokeWidth * 4, strokeWidth * 3];\n if (style === 'dashed') return [strokeWidth * 4, strokeWidth * 2];\n if (style === 'dotted') return [strokeWidth, strokeWidth * 2];\n return undefined;\n}\n\n/**\n * Sample a rectangle's outline as points for dashed border.\n */\nfunction sampleRect(w: number, h: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let x = 0; x <= w; x += step) pts.push({ x, y: 0 });\n for (let y = step; y <= h; y += step) pts.push({ x: w, y });\n for (let x = w - step; x >= 0; x -= step) pts.push({ x, y: h });\n for (let y = h - step; y > 0; y -= step) pts.push({ x: 0, y });\n pts.push({ x: 0, y: 0 });\n return pts;\n}\n\n/**\n * Sample a rounded rectangle outline as points.\n */\nfunction sampleRoundRect(w: number, h: number, r: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n const cornerSamples = Math.max(4, Math.ceil((Math.PI / 2) * r / step));\n const addCorner = (cx: number, cy: number, startAngle: number) => {\n for (let i = 0; i <= cornerSamples; i++) {\n const a = startAngle + (Math.PI / 2) * (i / cornerSamples);\n pts.push({ x: cx + r * Math.cos(a), y: cy + r * Math.sin(a) });\n }\n };\n addCorner(w - r, r, -Math.PI / 2);\n addCorner(w - r, h - r, 0);\n addCorner(r, h - r, Math.PI / 2);\n addCorner(r, r, Math.PI);\n if (pts.length > 0) pts.push(pts[0]);\n return pts;\n}\n\n/**\n * Sample an ellipse outline.\n */\nfunction sampleEllipse(cx: number, cy: number, rx: number, ry: number, samples = 60): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i <= samples; i++) {\n const a = (Math.PI * 2 * i) / samples;\n pts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return pts;\n}\n\n/**\n * Draw dashed polyline onto graphics.\n */\nfunction drawDashedPoly(g: Graphics, pts: Array<{ x: number; y: number }>, dash: number[], offset: number, color: string, width: number): void {\n if (pts.length < 2) return;\n const dists = [0];\n for (let i = 1; i < pts.length; i++) {\n dists.push(dists[i - 1] + Math.hypot(pts[i].x - pts[i - 1].x, pts[i].y - pts[i - 1].y));\n }\n const total = dists[dists.length - 1];\n if (total < 1) return;\n const patternLen = dash[0] + dash[1];\n let pos = -(((offset % patternLen) + patternLen) % patternLen);\n let drawing = true;\n\n const lerp = (d: number) => {\n if (d <= 0) return pts[0];\n if (d >= total) return pts[pts.length - 1];\n let lo = 0, hi = dists.length - 1;\n while (lo < hi - 1) { const m = (lo + hi) >> 1; if (dists[m] <= d) lo = m; else hi = m; }\n const t = dists[hi] - dists[lo] > 0 ? (d - dists[lo]) / (dists[hi] - dists[lo]) : 0;\n return { x: pts[lo].x + (pts[hi].x - pts[lo].x) * t, y: pts[lo].y + (pts[hi].y - pts[lo].y) * t };\n };\n\n while (pos < total) {\n const segLen = drawing ? dash[0] : dash[1];\n const start = Math.max(pos, 0);\n const end = Math.min(pos + segLen, total);\n if (drawing && end > start) {\n const p0 = lerp(start);\n g.moveTo(p0.x, p0.y);\n for (let d = start + 2; d < end; d += 2) {\n const p = lerp(d);\n g.lineTo(p.x, p.y);\n }\n const pe = lerp(end);\n g.lineTo(pe.x, pe.y);\n }\n pos += segLen;\n drawing = !drawing;\n }\n g.stroke({ color, width, cap: 'round' as const });\n}\n\nfunction fillShape(g: Graphics, o: ShapeDrawOptions) {\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill });\n }\n if (o.borderStyle === 'none') return;\n if (o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n // Dashed/dotted/dynamic: don't stroke the shape path, we'll draw dashed separately\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\n/**\n * After fillShape, draw dashed border if needed.\n * Pass shape-specific outline points.\n */\nfunction drawDashedBorder(g: Graphics, o: ShapeDrawOptions, outlinePts: Array<{ x: number; y: number }>) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (!dash || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, outlinePts, dash, offset, o.stroke, o.strokeWidth);\n}\n\n/** Draw only a rounded-rectangle border, without leaving a base path that can\n * be picked up by the dashed stroke. Useful when fill and border are rendered\n * independently, as they are for SVG icon nodes. */\nexport function drawRoundRectBorder(g: Graphics, o: ShapeDrawOptions, radius?: number): void {\n if (o.borderStyle === 'none' || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const r = radius ?? Math.min(14, o.width * 0.1, o.height * 0.1);\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.roundRect(0, 0, o.width, o.height, r).stroke({ color: o.stroke, width: o.strokeWidth });\n }\n}\n\nfunction polyPoints(verts: Array<{ x: number; y: number }>): Array<{ x: number; y: number }> {\n return [...verts, verts[0]];\n}\n\nexport function drawRect(g: Graphics, o: ShapeDrawOptions): void {\n g.rect(0, 0, o.width, o.height);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRect(o.width, o.height));\n}\n\nexport function drawRoundRect(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(14, o.width * 0.1, o.height * 0.1);\n g.roundRect(0, 0, o.width, o.height, r);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRoundRect(o.width, o.height, r));\n}\n\nexport function drawEllipse(g: Graphics, o: ShapeDrawOptions): void {\n g.ellipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleEllipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2));\n}\n\nexport function drawDiamond(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = [{ x: cx, y: 0 }, { x: o.width, y: cy }, { x: cx, y: o.height }, { x: 0, y: cy }];\n g.moveTo(cx, 0).lineTo(o.width, cy).lineTo(cx, o.height).lineTo(0, cy).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawDocument(g: Graphics, o: ShapeDrawOptions): void {\n const w = o.width, h = o.height, curve = h * 0.15;\n g.moveTo(0, 0)\n .lineTo(w, 0)\n .lineTo(w, h - curve)\n .bezierCurveTo(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve)\n .closePath();\n fillShape(g, o);\n const pts: Array<{ x: number; y: number }> = [{ x: 0, y: 0 }, { x: w, y: 0 }, { x: w, y: h - curve }];\n const samples = 20;\n for (let i = 1; i <= samples; i++) {\n const t = i / samples;\n const u = 1 - t;\n pts.push({\n x: u * u * u * w + 3 * u * u * t * (w * 0.75) + 3 * u * t * t * (w * 0.25),\n y: u * u * u * (h - curve) + 3 * u * u * t * (h - curve * 2) + 3 * u * t * t * h + t * t * t * (h - curve),\n });\n }\n pts.push({ x: 0, y: 0 });\n drawDashedBorder(g, o, pts);\n}\n\nexport function drawParallelogram(g: Graphics, o: ShapeDrawOptions): void {\n const skew = o.width * 0.2;\n const verts = [{ x: skew, y: 0 }, { x: o.width, y: 0 }, { x: o.width - skew, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(skew, 0).lineTo(o.width, 0).lineTo(o.width - skew, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: o.width / 2, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(o.width / 2, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTrapezoid(g: Graphics, o: ShapeDrawOptions): void {\n const inset = o.width * 0.15;\n const verts = [{ x: inset, y: 0 }, { x: o.width - inset, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(inset, 0).lineTo(o.width - inset, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nfunction regularPoly(cx: number, cy: number, sides: number, rx: number, ry: number, startAngle: number): Array<{ x: number; y: number }> {\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < sides; i++) {\n const a = (Math.PI * 2 * i) / sides + startAngle;\n verts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return verts;\n}\n\nexport function drawPentagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2, r = Math.min(cx, cy);\n const verts = regularPoly(cx, cy, 5, r, r, -Math.PI / 2);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = regularPoly(cx, cy, 6, cx, cy, -Math.PI / 6);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawStar(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.4, points = 5;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < points * 2; i++) {\n const angle = (Math.PI * i) / points - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagram(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.55;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < 12; i++) {\n const angle = (Math.PI * i) / 6 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawRightTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: 0, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(0, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawCorner(g: Graphics, o: ShapeDrawOptions): void {\n const half = Math.min(o.width, o.height) * 0.4;\n const verts = [\n { x: 0, y: 0 }, { x: o.width, y: 0 }, { x: o.width, y: half },\n { x: half, y: half }, { x: half, y: o.height }, { x: 0, y: o.height },\n ];\n g.moveTo(0, 0).lineTo(o.width, 0).lineTo(o.width, half)\n .lineTo(half, half).lineTo(half, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawFlowGroup(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(6, o.width * 0.04, o.height * 0.04);\n g.roundRect(0, 0, o.width, o.height, r);\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill, alpha: 0.08 });\n }\n const border = o.borderStyle ?? 'dashed';\n if (border !== 'none' && o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(border, o.strokeWidth);\n if (dash) {\n const offset = border === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\nexport const drawGeometryGroup = drawFlowGroup;\n\n/* ─── Per-side borders (top / right / bottom / left) ─────────────────── */\n\nexport type BorderSideName = 'top' | 'right' | 'bottom' | 'left';\nexport const BORDER_SIDE_NAMES: BorderSideName[] = ['top', 'right', 'bottom', 'left'];\n\n/** Shape types whose geometry has four well-defined sides. Other shapes ignore\n * `borderSides` and keep a full outline. */\nexport const BORDER_SIDE_TYPES = new Set<string>([\n 'shapeRect', 'shapeRoundRect', 'shapeEllipse', 'shapeDiamond', 'shapeDocument',\n 'shapeParallelogram', 'shapeTrapezoid', 'mediaNode', 'flowGroup', 'geometryGroup',\n]);\n\n/** True when `borderSides` carries at least one effective override AND the\n * shape type supports per-side borders. */\nexport function hasBorderSideOverrides(data: FlowNodeData, type?: string): boolean {\n if (type !== undefined && !BORDER_SIDE_TYPES.has(type)) return false;\n const sides = data.borderSides;\n if (!sides) return false;\n return BORDER_SIDE_NAMES.some((name) => {\n const side = sides[name];\n return !!side\n && (side.visible === false || side.color !== undefined || side.width !== undefined);\n });\n}\n\n/** Corner radius used by each shape's own drawer, so side segments line up\n * exactly with the (possibly hidden) full outline. */\nfunction borderSideRadius(type: string, w: number, h: number): number {\n switch (type) {\n case 'shapeRoundRect': return Math.min(14, w * 0.1, h * 0.1);\n case 'mediaNode': return 6;\n case 'flowGroup':\n case 'geometryGroup': return Math.min(6, w * 0.04, h * 0.04);\n default: return 0;\n }\n}\n\nconst BEZIER_K = 0.5522847498; // kappa for a 90° arc approximation\n\n/** Build the drawable path of one side of the shape. Corners are owned by the\n * side that starts there (clockwise): top owns the top-left arc, right the\n * top-right arc, and so on — with uniform styling the four sides reconstruct\n * the full outline seamlessly. */\nexport function buildBorderSideSegments(\n type: string,\n w: number,\n h: number,\n side: BorderSideName,\n): PathSeg[] {\n const segs: PathSeg[] = [];\n const line = (x: number, y: number) => segs.push({ type: 'L', x, y });\n const cubic = (\n c1x: number, c1y: number, c2x: number, c2y: number, x: number, y: number,\n ) => segs.push({ type: 'C', cp1x: c1x, cp1y: c1y, cp2x: c2x, cp2y: c2y, x, y });\n\n const r = borderSideRadius(type, w, h);\n if (r >= 0.5) {\n // Rounded rect family (shapeRoundRect / mediaNode / group frames): each\n // side owns its starting corner arc (clockwise), so uniform styling\n // reconstructs the full rounded outline seamlessly.\n const k = BEZIER_K * r;\n switch (side) {\n case 'top':\n segs.push({ type: 'M', x: 0, y: r });\n cubic(0, r - k, r - k, 0, r, 0);\n line(w - r, 0);\n break;\n case 'right':\n segs.push({ type: 'M', x: w - r, y: 0 });\n cubic(w - r + k, 0, w, r - k, w, r);\n line(w, h - r);\n break;\n case 'bottom':\n segs.push({ type: 'M', x: w, y: h - r });\n cubic(w, h - r + k, w - r + k, h, w - r, h);\n line(r, h);\n break;\n case 'left':\n segs.push({ type: 'M', x: r, y: h });\n cubic(r - k, h, 0, h - r + k, 0, h - r);\n line(0, r);\n break;\n }\n return segs;\n }\n\n if (type === 'shapeEllipse') {\n // Split the outline at the 45° diagonals so each side is the arc centered\n // on its direction (top arc spans the top, etc.).\n const cx = w / 2, cy = h / 2, rx = w / 2, ry = h / 2;\n const angles: Record<BorderSideName, [number, number]> = {\n top: [Math.PI * 1.25, Math.PI * 1.75],\n right: [Math.PI * 1.75, Math.PI * 2.25],\n bottom: [Math.PI * 0.25, Math.PI * 0.75],\n left: [Math.PI * 0.75, Math.PI * 1.25],\n };\n const [a0, a1] = angles[side];\n const p0x = cx + rx * Math.cos(a0), p0y = cy + ry * Math.sin(a0);\n const p3x = cx + rx * Math.cos(a1), p3y = cy + ry * Math.sin(a1);\n segs.push({ type: 'M', x: p0x, y: p0y });\n cubic(\n p0x - BEZIER_K * rx * Math.sin(a0), p0y + BEZIER_K * ry * Math.cos(a0),\n p3x + BEZIER_K * rx * Math.sin(a1), p3y - BEZIER_K * ry * Math.cos(a1),\n p3x, p3y,\n );\n return segs;\n }\n\n if (type === 'shapeDocument') {\n const curve = h * 0.15;\n if (side === 'top') {\n segs.push({ type: 'M', x: 0, y: 0 });\n line(w, 0);\n } else if (side === 'right') {\n segs.push({ type: 'M', x: w, y: 0 });\n line(w, h - curve);\n } else if (side === 'bottom') {\n segs.push({ type: 'M', x: w, y: h - curve });\n cubic(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve);\n } else {\n segs.push({ type: 'M', x: 0, y: h - curve });\n line(0, 0);\n }\n return segs;\n }\n\n // Quadrilaterals (rect / diamond / parallelogram / trapezoid).\n let v0: { x: number; y: number }, v1: { x: number; y: number }, v2: { x: number; y: number }, v3: { x: number; y: number };\n if (type === 'shapeDiamond') {\n const cx = w / 2, cy = h / 2;\n v0 = { x: cx, y: 0 }; v1 = { x: w, y: cy }; v2 = { x: cx, y: h }; v3 = { x: 0, y: cy };\n } else if (type === 'shapeParallelogram') {\n const skew = w * 0.2;\n v0 = { x: skew, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w - skew, y: h }; v3 = { x: 0, y: h };\n } else if (type === 'shapeTrapezoid') {\n const inset = w * 0.15;\n v0 = { x: inset, y: 0 }; v1 = { x: w - inset, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n } else {\n v0 = { x: 0, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n }\n\n const edges: Record<BorderSideName, [{ x: number; y: number }, { x: number; y: number }]> = {\n top: [v0, v1],\n right: [v1, v2],\n bottom: [v2, v3],\n left: [v3, v0],\n };\n const [a, b] = edges[side];\n segs.push({ type: 'M', x: a.x, y: a.y });\n line(b.x, b.y);\n return segs;\n}\n\n/** Draw the four sides of a node independently, honoring per-side color /\n * width / visibility overrides (falling back to the node's defaults). The\n * node's `borderStyle` (solid / dashed / dotted / dynamic) applies to every\n * side. `defaultColor` is the node's (already theme-resolved) stroke. */\nexport function drawBorderSides(\n g: Graphics,\n type: string,\n width: number,\n height: number,\n sides: FlowBorderSides | undefined,\n defaultColor: string,\n defaultWidth: number,\n borderStyle: string | undefined,\n dashOffset: number,\n): void {\n if (borderStyle === 'none') return;\n for (const name of BORDER_SIDE_NAMES) {\n const side: FlowBorderSideOverride | undefined = sides?.[name];\n if (side?.visible === false) continue;\n const color = resolveThemeColor(side?.color, defaultColor) || defaultColor;\n const strokeWidth = side?.width ?? defaultWidth;\n if (!color || color === 'transparent' || !(strokeWidth > 0)) continue;\n const segs = buildBorderSideSegments(type, width, height, name);\n const dash = parseDash(borderStyle, strokeWidth);\n if (dash) {\n const offset = borderStyle === 'dynamic' ? dashOffset : 0;\n drawDashedPath(g, segs, dash, offset);\n g.stroke({ color, width: strokeWidth, cap: 'round' as const });\n } else {\n for (const seg of segs) {\n switch (seg.type) {\n case 'M': g.moveTo(seg.x, seg.y); break;\n case 'L': g.lineTo(seg.x, seg.y); break;\n case 'C': g.bezierCurveTo(seg.cp1x!, seg.cp1y!, seg.cp2x!, seg.cp2y!, seg.x, seg.y); break;\n case 'Q': g.quadraticCurveTo(seg.cp1x!, seg.cp1y!, seg.x, seg.y); break;\n }\n }\n g.stroke({ color, width: strokeWidth });\n }\n }\n}\n\n/** Lookup table mapping shape type to draw function */\nexport const shapeDrawers: Record<string, (g: Graphics, o: ShapeDrawOptions) => void> = {\n shapeRect: drawRect,\n shapeRoundRect: drawRoundRect,\n shapeEllipse: drawEllipse,\n shapeDiamond: drawDiamond,\n shapeDocument: drawDocument,\n shapeParallelogram: drawParallelogram,\n shapeTriangle: drawTriangle,\n shapeTrapezoid: drawTrapezoid,\n shapePentagon: drawPentagon,\n shapeHexagon: drawHexagon,\n shapeStar: drawStar,\n shapeHexagram: drawHexagram,\n shapeRightTriangle: drawRightTriangle,\n shapeCorner: drawCorner,\n textLabel: drawRect,\n flowGroup: drawFlowGroup,\n geometryGroup: drawGeometryGroup,\n shapeSvg: drawRoundRect,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shapes.js","names":["parseDash","style","strokeWidth","sampleRect","pts","x","w","step","y","h","sampleRoundRect","cornerSamples","r","addCorner","i","a","startAngle","cx","cy","sampleEllipse","samples","rx","ry","drawDashedPoly","dists","total","patternLen","dash","pos","offset","drawing","lerp","d","lo","hi","m","t","segLen","start","end","p0","p","pe","fillShape","o","g","drawDashedBorder","outlinePts","drawRoundRectBorder","radius","polyPoints","verts","drawRect","drawRoundRect","drawEllipse","drawDiamond","drawDocument","curve","u","drawParallelogram","skew","drawTriangle","drawTrapezoid","inset","regularPoly","sides","drawPentagon","drawHexagon","drawStar","outer","inner","angle","drawHexagram","drawRightTriangle","drawCorner","half","drawFlowGroup","border","drawGeometryGroup","BORDER_SIDE_NAMES","BORDER_SIDE_TYPES","hasBorderSideOverrides","type","data","side","name","borderSideRadius","BEZIER_K","buildBorderSideSegments","segs","line","cubic","c1x","c1y","c2x","c2y","k","a0","a1","p0x","p0y","p3x","p3y","v0","v1","v2","v3","b","drawBorderSides","borderStyle","color","resolveThemeColor","defaultColor","defaultWidth","width","height","drawDashedPath","dashOffset","seg","shapeDrawers"],"sources":["../../../../../src/components/pro/Flow/nodes/shapes.ts"],"sourcesContent":["import { Graphics } from 'pixi.js';\nimport type { FlowShapeType, FlowNodeData, FlowBorderSides, FlowBorderSideOverride } from '../types';\nimport { drawDashedPath, type PathSeg } from '../utils/dashedLine';\nimport { resolveThemeColor } from '../utils/themeColor';\n\nexport interface ShapeDrawOptions {\n width: number;\n height: number;\n fill: string;\n stroke: string;\n strokeWidth: number;\n borderStyle?: 'solid' | 'dashed' | 'dotted' | 'dynamic' | 'none';\n dashOffset?: number;\n}\n\nfunction parseDash(style: string | undefined, strokeWidth: number): number[] | undefined {\n if (!style || style === 'solid') return undefined;\n if (style === 'dynamic') return [strokeWidth * 4, strokeWidth * 3];\n if (style === 'dashed') return [strokeWidth * 4, strokeWidth * 2];\n if (style === 'dotted') return [strokeWidth, strokeWidth * 2];\n return undefined;\n}\n\n/**\n * Sample a rectangle's outline as points for dashed border.\n */\nfunction sampleRect(w: number, h: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let x = 0; x <= w; x += step) pts.push({ x, y: 0 });\n for (let y = step; y <= h; y += step) pts.push({ x: w, y });\n for (let x = w - step; x >= 0; x -= step) pts.push({ x, y: h });\n for (let y = h - step; y > 0; y -= step) pts.push({ x: 0, y });\n pts.push({ x: 0, y: 0 });\n return pts;\n}\n\n/**\n * Sample a rounded rectangle outline as points.\n */\nfunction sampleRoundRect(w: number, h: number, r: number, step = 3): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n const cornerSamples = Math.max(4, Math.ceil((Math.PI / 2) * r / step));\n const addCorner = (cx: number, cy: number, startAngle: number) => {\n for (let i = 0; i <= cornerSamples; i++) {\n const a = startAngle + (Math.PI / 2) * (i / cornerSamples);\n pts.push({ x: cx + r * Math.cos(a), y: cy + r * Math.sin(a) });\n }\n };\n addCorner(w - r, r, -Math.PI / 2);\n addCorner(w - r, h - r, 0);\n addCorner(r, h - r, Math.PI / 2);\n addCorner(r, r, Math.PI);\n if (pts.length > 0) pts.push(pts[0]);\n return pts;\n}\n\n/**\n * Sample an ellipse outline.\n */\nfunction sampleEllipse(cx: number, cy: number, rx: number, ry: number, samples = 60): Array<{ x: number; y: number }> {\n const pts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i <= samples; i++) {\n const a = (Math.PI * 2 * i) / samples;\n pts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return pts;\n}\n\n/**\n * Draw dashed polyline onto graphics.\n */\nfunction drawDashedPoly(g: Graphics, pts: Array<{ x: number; y: number }>, dash: number[], offset: number, color: string, width: number): void {\n if (pts.length < 2) return;\n const dists = [0];\n for (let i = 1; i < pts.length; i++) {\n dists.push(dists[i - 1] + Math.hypot(pts[i].x - pts[i - 1].x, pts[i].y - pts[i - 1].y));\n }\n const total = dists[dists.length - 1];\n if (total < 1) return;\n const patternLen = dash[0] + dash[1];\n let pos = -(((offset % patternLen) + patternLen) % patternLen);\n let drawing = true;\n\n const lerp = (d: number) => {\n if (d <= 0) return pts[0];\n if (d >= total) return pts[pts.length - 1];\n let lo = 0, hi = dists.length - 1;\n while (lo < hi - 1) { const m = (lo + hi) >> 1; if (dists[m] <= d) lo = m; else hi = m; }\n const t = dists[hi] - dists[lo] > 0 ? (d - dists[lo]) / (dists[hi] - dists[lo]) : 0;\n return { x: pts[lo].x + (pts[hi].x - pts[lo].x) * t, y: pts[lo].y + (pts[hi].y - pts[lo].y) * t };\n };\n\n while (pos < total) {\n const segLen = drawing ? dash[0] : dash[1];\n const start = Math.max(pos, 0);\n const end = Math.min(pos + segLen, total);\n if (drawing && end > start) {\n const p0 = lerp(start);\n g.moveTo(p0.x, p0.y);\n for (let d = start + 2; d < end; d += 2) {\n const p = lerp(d);\n g.lineTo(p.x, p.y);\n }\n const pe = lerp(end);\n g.lineTo(pe.x, pe.y);\n }\n pos += segLen;\n drawing = !drawing;\n }\n g.stroke({ color, width, cap: 'round' as const });\n}\n\nfunction fillShape(g: Graphics, o: ShapeDrawOptions) {\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill });\n }\n if (o.borderStyle === 'none') return;\n if (o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n // Dashed/dotted/dynamic: don't stroke the shape path, we'll draw dashed separately\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\n/**\n * After fillShape, draw dashed border if needed.\n * Pass shape-specific outline points.\n */\nfunction drawDashedBorder(g: Graphics, o: ShapeDrawOptions, outlinePts: Array<{ x: number; y: number }>) {\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (!dash || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, outlinePts, dash, offset, o.stroke, o.strokeWidth);\n}\n\n/** Draw only a rounded-rectangle border, without leaving a base path that can\n * be picked up by the dashed stroke. Useful when fill and border are rendered\n * independently, as they are for SVG icon nodes. */\nexport function drawRoundRectBorder(g: Graphics, o: ShapeDrawOptions, radius?: number): void {\n if (o.borderStyle === 'none' || !o.stroke || o.stroke === 'transparent' || o.strokeWidth <= 0) return;\n const r = radius ?? Math.min(14, o.width * 0.1, o.height * 0.1);\n const dash = parseDash(o.borderStyle, o.strokeWidth);\n if (dash) {\n const offset = o.borderStyle === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.roundRect(0, 0, o.width, o.height, r).stroke({ color: o.stroke, width: o.strokeWidth });\n }\n}\n\nfunction polyPoints(verts: Array<{ x: number; y: number }>): Array<{ x: number; y: number }> {\n return [...verts, verts[0]];\n}\n\nexport function drawRect(g: Graphics, o: ShapeDrawOptions): void {\n g.rect(0, 0, o.width, o.height);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRect(o.width, o.height));\n}\n\nexport function drawRoundRect(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(14, o.width * 0.1, o.height * 0.1);\n g.roundRect(0, 0, o.width, o.height, r);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleRoundRect(o.width, o.height, r));\n}\n\nexport function drawEllipse(g: Graphics, o: ShapeDrawOptions): void {\n g.ellipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2);\n fillShape(g, o);\n drawDashedBorder(g, o, sampleEllipse(o.width / 2, o.height / 2, o.width / 2, o.height / 2));\n}\n\nexport function drawDiamond(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = [{ x: cx, y: 0 }, { x: o.width, y: cy }, { x: cx, y: o.height }, { x: 0, y: cy }];\n g.moveTo(cx, 0).lineTo(o.width, cy).lineTo(cx, o.height).lineTo(0, cy).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawDocument(g: Graphics, o: ShapeDrawOptions): void {\n const w = o.width, h = o.height, curve = h * 0.15;\n g.moveTo(0, 0)\n .lineTo(w, 0)\n .lineTo(w, h - curve)\n .bezierCurveTo(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve)\n .closePath();\n fillShape(g, o);\n const pts: Array<{ x: number; y: number }> = [{ x: 0, y: 0 }, { x: w, y: 0 }, { x: w, y: h - curve }];\n const samples = 20;\n for (let i = 1; i <= samples; i++) {\n const t = i / samples;\n const u = 1 - t;\n pts.push({\n x: u * u * u * w + 3 * u * u * t * (w * 0.75) + 3 * u * t * t * (w * 0.25),\n y: u * u * u * (h - curve) + 3 * u * u * t * (h - curve * 2) + 3 * u * t * t * h + t * t * t * (h - curve),\n });\n }\n pts.push({ x: 0, y: 0 });\n drawDashedBorder(g, o, pts);\n}\n\nexport function drawParallelogram(g: Graphics, o: ShapeDrawOptions): void {\n const skew = o.width * 0.2;\n const verts = [{ x: skew, y: 0 }, { x: o.width, y: 0 }, { x: o.width - skew, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(skew, 0).lineTo(o.width, 0).lineTo(o.width - skew, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: o.width / 2, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(o.width / 2, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawTrapezoid(g: Graphics, o: ShapeDrawOptions): void {\n const inset = o.width * 0.15;\n const verts = [{ x: inset, y: 0 }, { x: o.width - inset, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(inset, 0).lineTo(o.width - inset, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nfunction regularPoly(cx: number, cy: number, sides: number, rx: number, ry: number, startAngle: number): Array<{ x: number; y: number }> {\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < sides; i++) {\n const a = (Math.PI * 2 * i) / sides + startAngle;\n verts.push({ x: cx + rx * Math.cos(a), y: cy + ry * Math.sin(a) });\n }\n return verts;\n}\n\nexport function drawPentagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2, r = Math.min(cx, cy);\n const verts = regularPoly(cx, cy, 5, r, r, -Math.PI / 2);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagon(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const verts = regularPoly(cx, cy, 6, cx, cy, -Math.PI / 6);\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawStar(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.4, points = 5;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < points * 2; i++) {\n const angle = (Math.PI * i) / points - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawHexagram(g: Graphics, o: ShapeDrawOptions): void {\n const cx = o.width / 2, cy = o.height / 2;\n const outer = Math.min(cx, cy), inner = outer * 0.55;\n const verts: Array<{ x: number; y: number }> = [];\n for (let i = 0; i < 12; i++) {\n const angle = (Math.PI * i) / 6 - Math.PI / 2;\n const r = i % 2 === 0 ? outer : inner;\n verts.push({ x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) });\n }\n for (let i = 0; i < verts.length; i++) {\n if (i === 0) g.moveTo(verts[i].x, verts[i].y); else g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawRightTriangle(g: Graphics, o: ShapeDrawOptions): void {\n const verts = [{ x: 0, y: 0 }, { x: o.width, y: o.height }, { x: 0, y: o.height }];\n g.moveTo(0, 0).lineTo(o.width, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawCorner(g: Graphics, o: ShapeDrawOptions): void {\n const half = Math.min(o.width, o.height) * 0.4;\n const verts = [\n { x: 0, y: 0 }, { x: o.width, y: 0 }, { x: o.width, y: half },\n { x: half, y: half }, { x: half, y: o.height }, { x: 0, y: o.height },\n ];\n g.moveTo(0, 0).lineTo(o.width, 0).lineTo(o.width, half)\n .lineTo(half, half).lineTo(half, o.height).lineTo(0, o.height).closePath();\n fillShape(g, o);\n drawDashedBorder(g, o, polyPoints(verts));\n}\n\nexport function drawFlowGroup(g: Graphics, o: ShapeDrawOptions): void {\n const r = Math.min(6, o.width * 0.04, o.height * 0.04);\n g.roundRect(0, 0, o.width, o.height, r);\n if (o.fill && o.fill !== 'transparent') {\n g.fill({ color: o.fill, alpha: 0.08 });\n }\n const border = o.borderStyle ?? 'dashed';\n if (border !== 'none' && o.stroke && o.stroke !== 'transparent' && o.strokeWidth > 0) {\n const dash = parseDash(border, o.strokeWidth);\n if (dash) {\n const offset = border === 'dynamic' ? (o.dashOffset ?? 0) : 0;\n drawDashedPoly(g, sampleRoundRect(o.width, o.height, r), dash, offset, o.stroke, o.strokeWidth);\n } else {\n g.stroke({ color: o.stroke, width: o.strokeWidth });\n }\n }\n}\n\nexport const drawGeometryGroup = drawFlowGroup;\n\n/* ─── Per-side borders (top / right / bottom / left) ─────────────────── */\n\nexport type BorderSideName = 'top' | 'right' | 'bottom' | 'left';\nexport const BORDER_SIDE_NAMES: BorderSideName[] = ['top', 'right', 'bottom', 'left'];\n\n/** Shape types whose geometry has four well-defined sides. Other shapes ignore\n * `borderSides` and keep a full outline. */\nexport const BORDER_SIDE_TYPES = new Set<string>([\n 'shapeRect', 'shapeRoundRect', 'shapeEllipse', 'shapeDiamond', 'shapeDocument',\n 'shapeParallelogram', 'shapeTrapezoid', 'mediaNode', 'flowGroup', 'geometryGroup',\n]);\n\n/** True when `borderSides` carries at least one effective override AND the\n * shape type supports per-side borders. */\nexport function hasBorderSideOverrides(data: FlowNodeData, type?: string): boolean {\n if (type !== undefined && !BORDER_SIDE_TYPES.has(type)) return false;\n const sides = data.borderSides;\n if (!sides) return false;\n return BORDER_SIDE_NAMES.some((name) => {\n const side = sides[name];\n return !!side\n && (side.visible === false || side.color !== undefined || side.width !== undefined);\n });\n}\n\n/** Corner radius used by each shape's own drawer, so side segments line up\n * exactly with the (possibly hidden) full outline. */\nfunction borderSideRadius(type: string, w: number, h: number): number {\n switch (type) {\n case 'shapeRoundRect': return Math.min(14, w * 0.1, h * 0.1);\n case 'mediaNode': return 6;\n case 'flowGroup':\n case 'geometryGroup': return Math.min(6, w * 0.04, h * 0.04);\n default: return 0;\n }\n}\n\nconst BEZIER_K = 0.5522847498; // kappa for a 90° arc approximation\n\n/** Build the drawable path of one side of the shape. Corners are owned by the\n * side that starts there (clockwise): top owns the top-left arc, right the\n * top-right arc, and so on — with uniform styling the four sides reconstruct\n * the full outline seamlessly. */\nexport function buildBorderSideSegments(\n type: string,\n w: number,\n h: number,\n side: BorderSideName,\n): PathSeg[] {\n const segs: PathSeg[] = [];\n const line = (x: number, y: number) => segs.push({ type: 'L', x, y });\n const cubic = (\n c1x: number, c1y: number, c2x: number, c2y: number, x: number, y: number,\n ) => segs.push({ type: 'C', cp1x: c1x, cp1y: c1y, cp2x: c2x, cp2y: c2y, x, y });\n\n const r = borderSideRadius(type, w, h);\n if (r >= 0.5) {\n // Rounded rect family (shapeRoundRect / mediaNode / group frames): each\n // side owns its starting corner arc (clockwise), so uniform styling\n // reconstructs the full rounded outline seamlessly.\n const k = BEZIER_K * r;\n switch (side) {\n case 'top':\n segs.push({ type: 'M', x: 0, y: r });\n cubic(0, r - k, r - k, 0, r, 0);\n line(w - r, 0);\n break;\n case 'right':\n segs.push({ type: 'M', x: w - r, y: 0 });\n cubic(w - r + k, 0, w, r - k, w, r);\n line(w, h - r);\n break;\n case 'bottom':\n segs.push({ type: 'M', x: w, y: h - r });\n cubic(w, h - r + k, w - r + k, h, w - r, h);\n line(r, h);\n break;\n case 'left':\n segs.push({ type: 'M', x: r, y: h });\n cubic(r - k, h, 0, h - r + k, 0, h - r);\n line(0, r);\n break;\n }\n return segs;\n }\n\n if (type === 'shapeEllipse') {\n // Split the outline at the 45° diagonals so each side is the arc centered\n // on its direction (top arc spans the top, etc.).\n const cx = w / 2, cy = h / 2, rx = w / 2, ry = h / 2;\n const angles: Record<BorderSideName, [number, number]> = {\n top: [Math.PI * 1.25, Math.PI * 1.75],\n right: [Math.PI * 1.75, Math.PI * 2.25],\n bottom: [Math.PI * 0.25, Math.PI * 0.75],\n left: [Math.PI * 0.75, Math.PI * 1.25],\n };\n const [a0, a1] = angles[side];\n const p0x = cx + rx * Math.cos(a0), p0y = cy + ry * Math.sin(a0);\n const p3x = cx + rx * Math.cos(a1), p3y = cy + ry * Math.sin(a1);\n segs.push({ type: 'M', x: p0x, y: p0y });\n cubic(\n p0x - BEZIER_K * rx * Math.sin(a0), p0y + BEZIER_K * ry * Math.cos(a0),\n p3x + BEZIER_K * rx * Math.sin(a1), p3y - BEZIER_K * ry * Math.cos(a1),\n p3x, p3y,\n );\n return segs;\n }\n\n if (type === 'shapeDocument') {\n const curve = h * 0.15;\n if (side === 'top') {\n segs.push({ type: 'M', x: 0, y: 0 });\n line(w, 0);\n } else if (side === 'right') {\n segs.push({ type: 'M', x: w, y: 0 });\n line(w, h - curve);\n } else if (side === 'bottom') {\n segs.push({ type: 'M', x: w, y: h - curve });\n cubic(w * 0.75, h - curve * 2, w * 0.25, h, 0, h - curve);\n } else {\n segs.push({ type: 'M', x: 0, y: h - curve });\n line(0, 0);\n }\n return segs;\n }\n\n // Quadrilaterals (rect / diamond / parallelogram / trapezoid).\n let v0: { x: number; y: number }, v1: { x: number; y: number }, v2: { x: number; y: number }, v3: { x: number; y: number };\n if (type === 'shapeDiamond') {\n const cx = w / 2, cy = h / 2;\n v0 = { x: cx, y: 0 }; v1 = { x: w, y: cy }; v2 = { x: cx, y: h }; v3 = { x: 0, y: cy };\n } else if (type === 'shapeParallelogram') {\n const skew = w * 0.2;\n v0 = { x: skew, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w - skew, y: h }; v3 = { x: 0, y: h };\n } else if (type === 'shapeTrapezoid') {\n const inset = w * 0.15;\n v0 = { x: inset, y: 0 }; v1 = { x: w - inset, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n } else {\n v0 = { x: 0, y: 0 }; v1 = { x: w, y: 0 }; v2 = { x: w, y: h }; v3 = { x: 0, y: h };\n }\n\n const edges: Record<BorderSideName, [{ x: number; y: number }, { x: number; y: number }]> = {\n top: [v0, v1],\n right: [v1, v2],\n bottom: [v2, v3],\n left: [v3, v0],\n };\n const [a, b] = edges[side];\n segs.push({ type: 'M', x: a.x, y: a.y });\n line(b.x, b.y);\n return segs;\n}\n\n/** Draw the four sides of a node independently, honoring per-side color /\n * width / visibility overrides (falling back to the node's defaults). The\n * node's `borderStyle` (solid / dashed / dotted / dynamic) applies to every\n * side. `defaultColor` is the node's (already theme-resolved) stroke. */\nexport function drawBorderSides(\n g: Graphics,\n type: string,\n width: number,\n height: number,\n sides: FlowBorderSides | undefined,\n defaultColor: string,\n defaultWidth: number,\n borderStyle: string | undefined,\n dashOffset: number,\n): void {\n if (borderStyle === 'none') return;\n for (const name of BORDER_SIDE_NAMES) {\n const side: FlowBorderSideOverride | undefined = sides?.[name];\n if (side?.visible === false) continue;\n const color = resolveThemeColor(side?.color, defaultColor) || defaultColor;\n const strokeWidth = side?.width ?? defaultWidth;\n if (!color || color === 'transparent' || !(strokeWidth > 0)) continue;\n const segs = buildBorderSideSegments(type, width, height, name);\n const dash = parseDash(borderStyle, strokeWidth);\n if (dash) {\n const offset = borderStyle === 'dynamic' ? dashOffset : 0;\n drawDashedPath(g, segs, dash, offset);\n g.stroke({ color, width: strokeWidth, cap: 'round' as const });\n } else {\n for (const seg of segs) {\n switch (seg.type) {\n case 'M': g.moveTo(seg.x, seg.y); break;\n case 'L': g.lineTo(seg.x, seg.y); break;\n case 'C': g.bezierCurveTo(seg.cp1x!, seg.cp1y!, seg.cp2x!, seg.cp2y!, seg.x, seg.y); break;\n case 'Q': g.quadraticCurveTo(seg.cp1x!, seg.cp1y!, seg.x, seg.y); break;\n }\n }\n g.stroke({ color, width: strokeWidth });\n }\n }\n}\n\n/** Lookup table mapping shape type to draw function */\nexport const shapeDrawers: Record<string, (g: Graphics, o: ShapeDrawOptions) => void> = {\n shapeRect: drawRect,\n shapeRoundRect: drawRoundRect,\n shapeEllipse: drawEllipse,\n shapeDiamond: drawDiamond,\n shapeDocument: drawDocument,\n shapeParallelogram: drawParallelogram,\n shapeTriangle: drawTriangle,\n shapeTrapezoid: drawTrapezoid,\n shapePentagon: drawPentagon,\n shapeHexagon: drawHexagon,\n shapeStar: drawStar,\n shapeHexagram: drawHexagram,\n shapeRightTriangle: drawRightTriangle,\n shapeCorner: drawCorner,\n textLabel: drawRect,\n flowGroup: drawFlowGroup,\n geometryGroup: drawGeometryGroup,\n shapeSvg: drawRoundRect,\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svgIconTexture.js","names":[],"sources":["../../../../../src/components/pro/Flow/nodes/svgIconTexture.ts"],"sourcesContent":["import { Texture } from 'pixi.js';\nimport { buildSvgMarkup } from './svgIcons';\n\n/**\n * Rasterizes SVG icons into PixiJS textures and caches them by `id|color`.\n *\n * Rendering is asynchronous (SVG → Image → canvas → Texture). Callers request a\n * texture; if not cached yet, `null` is returned and the icon loads in the\n * background. Pass an `onReady` callback to trigger a re-render once available.\n */\nconst cache = new Map<string, Texture>();\nconst pending = new Set<string>();\nconst readyListeners = new Set<() => void>();\n\nexport function subscribeIconTextureReady(listener: () => void): () => void {\n readyListeners.add(listener);\n return () => readyListeners.delete(listener);\n}\n\nfunction notifyReady(): void {\n for (const listener of readyListeners) listener();\n}\n\nconst RASTER_SIZE = 96; // backing resolution for crisp icons when zoomed in\n/** Natural (pixel) size of rasterized icon textures; scale sprites by\n * `targetSize / ICON_TEXTURE_SIZE` — do NOT mix `width`/`height` setters with\n * `scale` writes on the same sprite, they overwrite each other. */\nexport const ICON_TEXTURE_SIZE = RASTER_SIZE;\n\nfunction keyFor(id: string, color: string): string {\n return `${id}|${color}`;\n}\n\nexport function getIconTexture(\n id: string,\n color: string,\n onReady?: () => void,\n): Texture | null {\n const key = keyFor(id, color);\n const cached = cache.get(key);\n if (cached) return cached;\n if (pending.has(key)) return null;\n\n const markup = buildSvgMarkup(id, color);\n if (!markup) return null;\n\n pending.add(key);\n const svgBlob = new Blob([markup], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(svgBlob);\n const img = new Image();\n img.onload = () => {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = RASTER_SIZE;\n canvas.height = RASTER_SIZE;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, RASTER_SIZE, RASTER_SIZE);\n ctx.drawImage(img, 0, 0, RASTER_SIZE, RASTER_SIZE);\n const tex = Texture.from(canvas);\n cache.set(key, tex);\n }\n } catch {\n /* ignore rasterization failures */\n } finally {\n URL.revokeObjectURL(url);\n pending.delete(key);\n onReady?.();\n notifyReady();\n }\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n pending.delete(key);\n };\n img.src = url;\n return null;\n}\n"],"mappings":";;;AAUA,
|
|
1
|
+
{"version":3,"file":"svgIconTexture.js","names":["cache","pending","readyListeners","subscribeIconTextureReady","listener","notifyReady","RASTER_SIZE","keyFor","id","color","getIconTexture","key","cached","markup","buildSvgMarkup","svgBlob","url","img","canvas","ctx","tex","Texture","onReady"],"sources":["../../../../../src/components/pro/Flow/nodes/svgIconTexture.ts"],"sourcesContent":["import { Texture } from 'pixi.js';\nimport { buildSvgMarkup } from './svgIcons';\n\n/**\n * Rasterizes SVG icons into PixiJS textures and caches them by `id|color`.\n *\n * Rendering is asynchronous (SVG → Image → canvas → Texture). Callers request a\n * texture; if not cached yet, `null` is returned and the icon loads in the\n * background. Pass an `onReady` callback to trigger a re-render once available.\n */\nconst cache = new Map<string, Texture>();\nconst pending = new Set<string>();\nconst readyListeners = new Set<() => void>();\n\nexport function subscribeIconTextureReady(listener: () => void): () => void {\n readyListeners.add(listener);\n return () => readyListeners.delete(listener);\n}\n\nfunction notifyReady(): void {\n for (const listener of readyListeners) listener();\n}\n\nconst RASTER_SIZE = 96; // backing resolution for crisp icons when zoomed in\n/** Natural (pixel) size of rasterized icon textures; scale sprites by\n * `targetSize / ICON_TEXTURE_SIZE` — do NOT mix `width`/`height` setters with\n * `scale` writes on the same sprite, they overwrite each other. */\nexport const ICON_TEXTURE_SIZE = RASTER_SIZE;\n\nfunction keyFor(id: string, color: string): string {\n return `${id}|${color}`;\n}\n\nexport function getIconTexture(\n id: string,\n color: string,\n onReady?: () => void,\n): Texture | null {\n const key = keyFor(id, color);\n const cached = cache.get(key);\n if (cached) return cached;\n if (pending.has(key)) return null;\n\n const markup = buildSvgMarkup(id, color);\n if (!markup) return null;\n\n pending.add(key);\n const svgBlob = new Blob([markup], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(svgBlob);\n const img = new Image();\n img.onload = () => {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = RASTER_SIZE;\n canvas.height = RASTER_SIZE;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.clearRect(0, 0, RASTER_SIZE, RASTER_SIZE);\n ctx.drawImage(img, 0, 0, RASTER_SIZE, RASTER_SIZE);\n const tex = Texture.from(canvas);\n cache.set(key, tex);\n }\n } catch {\n /* ignore rasterization failures */\n } finally {\n URL.revokeObjectURL(url);\n pending.delete(key);\n onReady?.();\n notifyReady();\n }\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n pending.delete(key);\n };\n img.src = url;\n return null;\n}\n"],"mappings":";;;AAUA,IAAMA,oBAAQ,IAAI,IAAqB,GACjCC,oBAAU,IAAI,IAAY,GAC1BC,oBAAiB,IAAI,IAAgB;AAE3C,SAAgBC,EAA0B,GAAkC;CAE1E,OADAD,EAAe,IAAIE,CAAQ,SACdF,EAAe,OAAOE,CAAQ;AAC7C;AAEA,SAASC,IAAoB;CAC3B,KAAK,IAAMD,KAAYF,GAAgB,EAAS;AAClD;AAEA,IAAMI,IAAc;AAMpB,SAASC,EAAO,GAAY,GAAuB;CACjD,OAAO,GAAGC,EAAG,GAAGC;AAClB;AAEA,SAAgBC,EACd,GACA,GACA,GACgB;CAChB,IAAMC,IAAMJ,EAAOC,GAAIC,CAAK,GACtBG,IAASZ,EAAM,IAAIW,CAAG;CAC5B,IAAIC,GAAQ,OAAOA;CACnB,IAAIX,EAAQ,IAAIU,CAAG,GAAG,OAAO;CAE7B,IAAME,IAASC,EAAeN,GAAIC,CAAK;CACvC,IAAI,CAACI,GAAQ,OAAO;CAEpB,EAAQ,IAAIF,CAAG;CACf,IAAMI,IAAU,IAAI,KAAK,CAACF,CAAM,GAAG,EAAE,MAAM,gBAAgB,CAAC,GACtDG,IAAM,IAAI,gBAAgBD,CAAO,GACjCE,IAAM,IAAI,MAAM;CA2BtB,OA1BA,EAAI,eAAe;EACjB,IAAI;GACF,IAAMC,IAAS,SAAS,cAAc,QAAQ;GAE9C,AADA,EAAO,QAAQZ,GACf,EAAO,SAASA;GAChB,IAAMa,IAAMD,EAAO,WAAW,IAAI;GAClC,IAAIC,GAAK;IAEP,AADAA,EAAI,UAAU,GAAG,GAAGb,GAAaA,CAAW,GAC5Ca,EAAI,UAAUF,GAAK,GAAG,GAAGX,GAAaA,CAAW;IACjD,IAAMc,IAAMC,EAAQ,KAAKH,CAAM;IAC/B,EAAM,IAAIP,GAAKS,CAAG;GACpB;EACF,QAAQ,CAER,UAAU;GAIR,AAHA,IAAI,gBAAgBJ,CAAG,GACvBf,EAAQ,OAAOU,CAAG,GAClBW,IAAU,GACVjB,EAAY;EACd;CACF,GACA,EAAI,gBAAgB;EAElB,AADA,IAAI,gBAAgBW,CAAG,GACvBf,EAAQ,OAAOU,CAAG;CACpB,GACA,EAAI,MAAMK,GACH;AACT"}
|