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
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { bindFace as e } from "../shared/face.js";
|
|
2
|
+
import { createRubyModel as t } from "./model.js";
|
|
3
|
+
import { bindPart as n, createGroundFeet as r, createRigDisposer as i } from "../shared/rig.js";
|
|
4
|
+
import * as a from "three";
|
|
5
|
+
//#region src/components/pro/Sprite/Ruby/rig.ts
|
|
6
|
+
function o() {
|
|
7
|
+
let o = new a.Group();
|
|
8
|
+
o.name = "sprite-ruby";
|
|
9
|
+
let s = t(), { body: c, head: l, front: u, back: d, tail: f, wings: p, tips: m, horn: h, ears: g, eyes: _, lids: v, brows: y, mouth: b, lip: x, opening: S, tongue: C } = s;
|
|
10
|
+
n(o, c, "body-rig", [
|
|
11
|
+
0,
|
|
12
|
+
0,
|
|
13
|
+
0
|
|
14
|
+
]);
|
|
15
|
+
for (let e = 0; e < 2; e++) {
|
|
16
|
+
let t = e ? 1 : -1;
|
|
17
|
+
n(c, d[e], `hind-leg-${t}`, [
|
|
18
|
+
t * .34,
|
|
19
|
+
.96,
|
|
20
|
+
-.31
|
|
21
|
+
], 1 + e * 2), n(c, u[e], `fore-leg-${t}`, [
|
|
22
|
+
t * .27,
|
|
23
|
+
1.05,
|
|
24
|
+
.34
|
|
25
|
+
], 2 + e * 2);
|
|
26
|
+
}
|
|
27
|
+
n(c, f, "tail", [
|
|
28
|
+
0,
|
|
29
|
+
1.04,
|
|
30
|
+
-.49
|
|
31
|
+
], 5);
|
|
32
|
+
for (let e = 0; e < 2; e++) {
|
|
33
|
+
let t = e ? 1 : -1;
|
|
34
|
+
n(c, p[e], `wing-${t}`, [
|
|
35
|
+
t * .35,
|
|
36
|
+
1.25,
|
|
37
|
+
-.24
|
|
38
|
+
], 6 + e), n(p[e], m[e], `wing-tip-${t}`, [
|
|
39
|
+
t * .3,
|
|
40
|
+
.16,
|
|
41
|
+
-.04
|
|
42
|
+
], 0), p[e].rotation.set(-.08, t * -.12, t * .1);
|
|
43
|
+
}
|
|
44
|
+
n(c, l, "head", [
|
|
45
|
+
0,
|
|
46
|
+
1.9,
|
|
47
|
+
.25
|
|
48
|
+
], 8);
|
|
49
|
+
for (let e = 0; e < 2; e++) {
|
|
50
|
+
let t = e ? 1 : -1;
|
|
51
|
+
n(l, g[e], `ear-${t}`, [
|
|
52
|
+
t * .41,
|
|
53
|
+
.34,
|
|
54
|
+
-.05
|
|
55
|
+
], 1 + e), g[e].rotation.z = t * -.12;
|
|
56
|
+
}
|
|
57
|
+
n(l, h, "horn", [
|
|
58
|
+
0,
|
|
59
|
+
.49,
|
|
60
|
+
0
|
|
61
|
+
], 9), h.rotation.x = .1;
|
|
62
|
+
for (let e = 0; e < 2; e++) {
|
|
63
|
+
let t = e ? 1 : -1;
|
|
64
|
+
n(l, _[e], `eye-${t}`, [
|
|
65
|
+
t * .285,
|
|
66
|
+
.005,
|
|
67
|
+
.473
|
|
68
|
+
], 13 + e * 4), _[e].rotation.y = t * .28, n(l, v[e], `eyelid-${t}`, [
|
|
69
|
+
t * .285,
|
|
70
|
+
.005,
|
|
71
|
+
.536
|
|
72
|
+
], 14 + e * 4), v[e].rotation.y = t * .28, v[e].scale.y = .6, v[e].visible = !1, n(l, y[e], `brow-${t}`, [
|
|
73
|
+
t * .28,
|
|
74
|
+
.235,
|
|
75
|
+
.448
|
|
76
|
+
], 15 + e * 4);
|
|
77
|
+
}
|
|
78
|
+
return n(l, b, "mouth", [
|
|
79
|
+
0,
|
|
80
|
+
-.325,
|
|
81
|
+
.67
|
|
82
|
+
], 21), n(l, x, "lip", [
|
|
83
|
+
0,
|
|
84
|
+
-.325,
|
|
85
|
+
.67
|
|
86
|
+
], 22), S.scale.y = .00132, C.scale.y = .022 * .02, C.position.y = -.036 * .02, b.position.y = -.325 - .018 * .02, {
|
|
87
|
+
group: o,
|
|
88
|
+
body: c,
|
|
89
|
+
head: l,
|
|
90
|
+
front: u,
|
|
91
|
+
back: d,
|
|
92
|
+
tail: f,
|
|
93
|
+
wings: p,
|
|
94
|
+
tips: m,
|
|
95
|
+
horn: h,
|
|
96
|
+
ears: g,
|
|
97
|
+
eyes: _,
|
|
98
|
+
lids: v,
|
|
99
|
+
brows: y,
|
|
100
|
+
mouth: b,
|
|
101
|
+
lip: x,
|
|
102
|
+
opening: S,
|
|
103
|
+
tongue: C,
|
|
104
|
+
face: e(l, s.skin, s.patches),
|
|
105
|
+
groundFeet: r(c, u, d),
|
|
106
|
+
dispose: i(o, s.dispose)
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { o as createRubyRig };
|
|
111
|
+
|
|
112
|
+
//# sourceMappingURL=rig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rig.js","names":["THREE","createRubyRig","group","model","createRubyModel","body","i","side","bindPart","back","front","tail","wings","tips","head","ears","horn","eyes","lids","brows","mouth","lip","bindFace","createGroundFeet","createRigDisposer"],"sources":["../../../../../src/components/pro/Sprite/Ruby/rig.ts"],"sourcesContent":["import * as THREE from 'three';\nimport { createRubyModel } from './model';\nimport { bindFace } from '../shared/face';\nimport { bindPart, createGroundFeet, createRigDisposer } from '../shared/rig';\n\nexport function createRubyRig() {\n const group = new THREE.Group();\n group.name = 'sprite-ruby';\n const model = createRubyModel();\n const { body, head, front, back, tail, wings, tips, horn, ears, eyes, lids, brows, mouth, lip, opening, tongue } = model;\n bindPart(group, body, 'body-rig', [0, 0, 0]);\n\n // Indices preserve the original interleaving of joints and locally modeled meshes.\n for (let i = 0; i < 2; i++) {\n const side = i ? 1 : -1;\n bindPart(body, back[i], `hind-leg-${side}`, [side * 0.34, 0.96, -0.31], 1 + i * 2);\n bindPart(body, front[i], `fore-leg-${side}`, [side * 0.27, 1.05, 0.34], 2 + i * 2);\n }\n bindPart(body, tail, 'tail', [0, 1.04, -0.49], 5);\n for (let i = 0; i < 2; i++) {\n const side = i ? 1 : -1;\n bindPart(body, wings[i], `wing-${side}`, [side * 0.35, 1.25, -0.24], 6 + i);\n bindPart(wings[i], tips[i], `wing-tip-${side}`, [side * 0.30, 0.16, -0.04], 0);\n wings[i].rotation.set(-0.08, side * -0.12, side * 0.10);\n }\n bindPart(body, head, 'head', [0, 1.90, 0.25], 8);\n for (let i = 0; i < 2; i++) {\n const side = i ? 1 : -1;\n bindPart(head, ears[i], `ear-${side}`, [side * 0.41, 0.34, -0.05], 1 + i);\n ears[i].rotation.z = side * -0.12;\n }\n bindPart(head, horn, 'horn', [0, 0.49, 0], 9);\n horn.rotation.x = 0.1;\n for (let i = 0; i < 2; i++) {\n const side = i ? 1 : -1;\n bindPart(head, eyes[i], `eye-${side}`, [side * 0.285, 0.005, 0.473], 13 + i * 4);\n eyes[i].rotation.y = side * 0.28;\n bindPart(head, lids[i], `eyelid-${side}`, [side * 0.285, 0.005, 0.536], 14 + i * 4);\n lids[i].rotation.y = side * 0.28;\n lids[i].scale.y = 0.6;\n lids[i].visible = false;\n bindPart(head, brows[i], `brow-${side}`, [side * 0.28, 0.235, 0.448], 15 + i * 4);\n }\n bindPart(head, mouth, 'mouth', [0, -0.325, 0.67], 21);\n bindPart(head, lip, 'lip', [0, -0.325, 0.67], 22);\n opening.scale.y = 0.066 * 0.02;\n tongue.scale.y = 0.022 * 0.02;\n tongue.position.y = -0.036 * 0.02;\n mouth.position.y = -0.325 - 0.018 * 0.02;\n\n const face = bindFace(head, model.skin, model.patches);\n const groundFeet = createGroundFeet(body, front, back);\n const dispose = createRigDisposer(group, model.dispose);\n return {\n group, body, head, front, back, tail, wings, tips, horn, ears, eyes, lids, brows,\n mouth, lip, opening, tongue, face, groundFeet, dispose,\n };\n}\n\nexport type RubyRig = ReturnType<typeof createRubyRig>;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type SpriteAction } from './actions';
|
|
3
|
+
import type { SpriteCharacter, SpriteLocale } from './types';
|
|
4
|
+
export type SpriteHandle = {
|
|
5
|
+
/** Interrupt the current animation and play the action from the beginning. */
|
|
6
|
+
play(action: SpriteAction): void;
|
|
7
|
+
/** Return to idle without changing the view angle or chat. */
|
|
8
|
+
stop(): void;
|
|
9
|
+
};
|
|
10
|
+
export type SpriteProps = {
|
|
11
|
+
ref?: React.Ref<SpriteHandle>;
|
|
12
|
+
/** Ruby the pink winged unicorn, or Molly the mint cat. */
|
|
13
|
+
character?: SpriteCharacter;
|
|
14
|
+
/** Optional reply provider. Without it the character uses short, offline scripted replies. */
|
|
15
|
+
onMessage?: (message: string, character: SpriteCharacter) => string | Promise<string>;
|
|
16
|
+
/** Bubble lifetime in milliseconds. Default 0 keeps it visible; pending replies never expire. */
|
|
17
|
+
speechDuration?: number;
|
|
18
|
+
locale?: SpriteLocale;
|
|
19
|
+
className?: string;
|
|
20
|
+
};
|
|
21
|
+
/** A small, self-contained Three.js character with accessible chat and turn controls. */
|
|
22
|
+
export declare function Sprite(props: SpriteProps): React.JSX.Element;
|
|
23
|
+
export default Sprite;
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { SPRITE_ACTION_DURATIONS as e } from "./actions.js";
|
|
2
|
+
import { createSpriteScene as t } from "./createSpriteScene.js";
|
|
3
|
+
import { createSpriteStage as n } from "./shared/createSpriteStage.js";
|
|
4
|
+
import { classifyMessage as r, getSpriteEvents as i, isComfortMessage as a } from "./shared/events.js";
|
|
5
|
+
import { createSpritePlayback as o } from "./shared/playback.js";
|
|
6
|
+
import { createSpeechBubble as s } from "./shared/speechBubble.js";
|
|
7
|
+
/* empty css */
|
|
8
|
+
import { useEffect as c, useImperativeHandle as l, useRef as u, useState as d } from "react";
|
|
9
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
10
|
+
import { Vector3 as m } from "three";
|
|
11
|
+
//#region src/components/pro/Sprite/Sprite.tsx
|
|
12
|
+
var h = {
|
|
13
|
+
zh: {
|
|
14
|
+
ruby: "Ruby · 天角兽",
|
|
15
|
+
molly: "Molly · 小猫咪",
|
|
16
|
+
hint: "点击看表情和挥手 · 拖动旋转 · 方向键转身",
|
|
17
|
+
placeholder: "和我说句话…",
|
|
18
|
+
send: "发送",
|
|
19
|
+
busy: "正在想怎么回答…",
|
|
20
|
+
error: "没能收到回复,请再试一次。",
|
|
21
|
+
empty: "我在认真听哦,再多告诉我一点吧!",
|
|
22
|
+
unavailable: "此设备无法显示 3D 角色,仍可在下方聊天。",
|
|
23
|
+
offline: "本地互动",
|
|
24
|
+
custom: "自定义回复"
|
|
25
|
+
},
|
|
26
|
+
en: {
|
|
27
|
+
ruby: "Ruby · Winged unicorn",
|
|
28
|
+
molly: "Molly · Little cat",
|
|
29
|
+
hint: "Tap for a smile and wave · Drag to rotate · Arrow keys to turn",
|
|
30
|
+
placeholder: "Say something…",
|
|
31
|
+
send: "Send",
|
|
32
|
+
busy: "Thinking of a reply…",
|
|
33
|
+
error: "I couldn’t get a reply. Please try again.",
|
|
34
|
+
empty: "I’m listening! Tell me a little more.",
|
|
35
|
+
unavailable: "3D is unavailable on this device. You can still chat below.",
|
|
36
|
+
offline: "Offline chat",
|
|
37
|
+
custom: "Custom replies"
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
function g(e) {
|
|
41
|
+
return /* @__PURE__ */ f(_, { ...e }, e.character ?? "ruby");
|
|
42
|
+
}
|
|
43
|
+
function _({ character: g = "ruby", locale: _ = "zh", onMessage: v, speechDuration: y = 0, className: b, ref: x }) {
|
|
44
|
+
let S = h[_], C = i(g), w = u(null), T = u(() => {}), E = u(() => {}), D = u(() => {}), O = u(() => {}), k = (e) => {
|
|
45
|
+
let { mood: t, duration: n, sustain: r } = C.action(e);
|
|
46
|
+
E.current(t, n, r);
|
|
47
|
+
};
|
|
48
|
+
l(x, () => ({
|
|
49
|
+
play: (t) => E.current(t, e[t]),
|
|
50
|
+
stop: () => D.current()
|
|
51
|
+
}), []);
|
|
52
|
+
let A = u(null), j = u(0), M = u(!0), [N, P] = d(""), [F, I] = d([]), L = u(0), R = u(null), z = (e, t) => {
|
|
53
|
+
let n = ++L.current;
|
|
54
|
+
I((r) => [...r, {
|
|
55
|
+
id: n,
|
|
56
|
+
role: e,
|
|
57
|
+
text: t
|
|
58
|
+
}].slice(-20));
|
|
59
|
+
}, [B, V] = d(!1), [H, U] = d(!1), W = F.reduce((e, t) => t.role === "sprite" ? t : e, {
|
|
60
|
+
id: 0,
|
|
61
|
+
text: C.greeting[_]
|
|
62
|
+
}), G = B ? S.busy : W.text;
|
|
63
|
+
c(() => {
|
|
64
|
+
(F.length || B) && R.current && (R.current.scrollTop = R.current.scrollHeight);
|
|
65
|
+
}, [F, B]), c(() => {
|
|
66
|
+
let e = w.current;
|
|
67
|
+
if (!e) return;
|
|
68
|
+
let r, i, a, c, l, u, d = !1, f = j;
|
|
69
|
+
M.current = !0;
|
|
70
|
+
try {
|
|
71
|
+
r = n(e, { topInset: 126 }), i = t(g), l = s(e), r.scene.add(i.group, l.group);
|
|
72
|
+
let f = i.group.getObjectByName("head") ?? i.group, p = new m(), h = () => {
|
|
73
|
+
d || r?.render((t) => {
|
|
74
|
+
f.localToWorld(p.set(0, g === "ruby" ? 1 : .85, 0)), l?.update(t, p, {
|
|
75
|
+
width: e.clientWidth,
|
|
76
|
+
height: e.clientHeight
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
O.current = (e) => {
|
|
81
|
+
l?.setText(e), h();
|
|
82
|
+
}, u = o(e, i, h), T.current = u.turn, D.current = u.stop, E.current = u.express, u.stop(), a = new ResizeObserver(h), a.observe(e), c = new MutationObserver(h);
|
|
83
|
+
for (let t = e; t; t = t.parentElement) c.observe(t, {
|
|
84
|
+
attributes: !0,
|
|
85
|
+
attributeFilter: [
|
|
86
|
+
"class",
|
|
87
|
+
"style",
|
|
88
|
+
"data-theme"
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
h();
|
|
92
|
+
} catch {
|
|
93
|
+
queueMicrotask(() => {
|
|
94
|
+
d || U(!0);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return () => {
|
|
98
|
+
d = !0, M.current = !1, f.current++, T.current = () => {}, E.current = () => {}, D.current = () => {}, O.current = () => {}, u?.dispose(), a?.disconnect(), c?.disconnect(), l?.dispose(), i?.dispose(), r?.dispose();
|
|
99
|
+
};
|
|
100
|
+
}, [
|
|
101
|
+
g,
|
|
102
|
+
E,
|
|
103
|
+
D
|
|
104
|
+
]), c(() => {
|
|
105
|
+
if (O.current(G), B || !Number.isFinite(y) || y <= 0) return;
|
|
106
|
+
let e = window.setTimeout(() => O.current(""), Math.min(y, 2147483647));
|
|
107
|
+
return () => window.clearTimeout(e);
|
|
108
|
+
}, [
|
|
109
|
+
G,
|
|
110
|
+
W.id,
|
|
111
|
+
B,
|
|
112
|
+
y
|
|
113
|
+
]);
|
|
114
|
+
let K = () => {
|
|
115
|
+
z("sprite", C.greeting[_]), k({ type: "greet" });
|
|
116
|
+
};
|
|
117
|
+
return /* @__PURE__ */ p("section", {
|
|
118
|
+
className: ["dishui-sprite", b].filter(Boolean).join(" "),
|
|
119
|
+
"aria-label": S[g],
|
|
120
|
+
children: [
|
|
121
|
+
/* @__PURE__ */ p("div", {
|
|
122
|
+
className: "dishui-sprite__header",
|
|
123
|
+
children: [/* @__PURE__ */ f("strong", { children: S[g] }), /* @__PURE__ */ f("span", { children: v ? S.custom : S.offline })]
|
|
124
|
+
}),
|
|
125
|
+
/* @__PURE__ */ f("div", {
|
|
126
|
+
ref: w,
|
|
127
|
+
className: "dishui-sprite__stage",
|
|
128
|
+
role: "button",
|
|
129
|
+
tabIndex: 0,
|
|
130
|
+
"aria-label": `${S[g]} — ${S.hint}`,
|
|
131
|
+
onPointerDown: (e) => {
|
|
132
|
+
e.button === 0 && (A.current = {
|
|
133
|
+
x: e.clientX,
|
|
134
|
+
startX: e.clientX,
|
|
135
|
+
moved: !1
|
|
136
|
+
}, e.currentTarget.setPointerCapture(e.pointerId));
|
|
137
|
+
},
|
|
138
|
+
onPointerMove: (e) => {
|
|
139
|
+
if (!A.current) return;
|
|
140
|
+
let t = e.clientX - A.current.x;
|
|
141
|
+
Math.abs(e.clientX - A.current.startX) > 3 && (A.current.moved = !0), A.current.moved && T.current(t * .012), A.current.x = e.clientX;
|
|
142
|
+
},
|
|
143
|
+
onPointerUp: (e) => {
|
|
144
|
+
if (!A.current) return;
|
|
145
|
+
let t = A.current.moved;
|
|
146
|
+
A.current = null, e.currentTarget.hasPointerCapture(e.pointerId) && e.currentTarget.releasePointerCapture(e.pointerId), t ? k({ type: "turn" }) : K();
|
|
147
|
+
},
|
|
148
|
+
onPointerCancel: () => {
|
|
149
|
+
A.current = null;
|
|
150
|
+
},
|
|
151
|
+
onKeyDown: (e) => {
|
|
152
|
+
e.key === "ArrowLeft" || e.key === "ArrowRight" ? (e.preventDefault(), T.current(e.key === "ArrowLeft" ? -.2 : .2), k({ type: "turn" })) : (e.key === "Enter" || e.key === " ") && (e.preventDefault(), K());
|
|
153
|
+
},
|
|
154
|
+
children: H && /* @__PURE__ */ f("span", {
|
|
155
|
+
className: "dishui-sprite__unavailable",
|
|
156
|
+
role: "status",
|
|
157
|
+
children: S.unavailable
|
|
158
|
+
})
|
|
159
|
+
}),
|
|
160
|
+
/* @__PURE__ */ f("p", {
|
|
161
|
+
className: "dishui-sprite__hint",
|
|
162
|
+
children: S.hint
|
|
163
|
+
}),
|
|
164
|
+
/* @__PURE__ */ p("div", {
|
|
165
|
+
ref: R,
|
|
166
|
+
className: "dishui-sprite__reply",
|
|
167
|
+
role: "log",
|
|
168
|
+
"aria-live": "polite",
|
|
169
|
+
"aria-label": `${S[g]} chat`,
|
|
170
|
+
children: [
|
|
171
|
+
F.length === 0 && /* @__PURE__ */ f("p", {
|
|
172
|
+
className: "dishui-sprite__message",
|
|
173
|
+
children: C.greeting[_]
|
|
174
|
+
}),
|
|
175
|
+
F.map((e) => /* @__PURE__ */ f("p", {
|
|
176
|
+
className: `dishui-sprite__message dishui-sprite__message--${e.role}`,
|
|
177
|
+
children: e.text
|
|
178
|
+
}, e.id)),
|
|
179
|
+
B && /* @__PURE__ */ f("p", {
|
|
180
|
+
className: "dishui-sprite__message",
|
|
181
|
+
role: "status",
|
|
182
|
+
children: S.busy
|
|
183
|
+
})
|
|
184
|
+
]
|
|
185
|
+
}),
|
|
186
|
+
/* @__PURE__ */ p("form", {
|
|
187
|
+
className: "dishui-sprite__form",
|
|
188
|
+
onSubmit: async (e) => {
|
|
189
|
+
e.preventDefault();
|
|
190
|
+
let t = N.trim();
|
|
191
|
+
if (!t || B) return;
|
|
192
|
+
let n = ++j.current;
|
|
193
|
+
V(!0), P(""), z("user", t), k({ type: "message-pending" });
|
|
194
|
+
try {
|
|
195
|
+
let e = await (v ? v(t, g) : C.localReply(r(t), _));
|
|
196
|
+
M.current && j.current === n && (z("sprite", typeof e == "string" && e.trim() ? e : S.empty), k({
|
|
197
|
+
type: "message-replied",
|
|
198
|
+
comfort: a(t)
|
|
199
|
+
}));
|
|
200
|
+
} catch {
|
|
201
|
+
M.current && j.current === n && (z("sprite", S.error), k({ type: "message-failed" }));
|
|
202
|
+
} finally {
|
|
203
|
+
M.current && j.current === n && V(!1);
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
children: [/* @__PURE__ */ f("input", {
|
|
207
|
+
"aria-label": _ === "zh" ? `给 ${S[g]} 发送消息` : `Message ${S[g]}`,
|
|
208
|
+
value: N,
|
|
209
|
+
maxLength: 280,
|
|
210
|
+
onChange: (e) => P(e.target.value),
|
|
211
|
+
placeholder: S.placeholder
|
|
212
|
+
}), /* @__PURE__ */ f("button", {
|
|
213
|
+
type: "submit",
|
|
214
|
+
disabled: !N.trim() || B,
|
|
215
|
+
children: S.send
|
|
216
|
+
})]
|
|
217
|
+
})
|
|
218
|
+
]
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
//#endregion
|
|
222
|
+
export { g as Sprite, g as default };
|
|
223
|
+
|
|
224
|
+
//# sourceMappingURL=Sprite2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sprite2.js","names":["words","Sprite","SpriteInstance","props","t","locale","events","getSpriteEvents","character","stage","useRef","turn","express","stop","speak","dispatch","event","mood","duration","sustain","ref","action","SPRITE_ACTION_DURATIONS","drag","request","mounted","draft","setDraft","useState","messages","setMessages","nextMessageId","log","append","id","current","pending","setPending","renderError","setRenderError","latestReply","message","reply","speech","useEffect","host","studio","model","observer","themeObserver","bubble","playback","disposed","requestRef","createSpriteStage","createSpriteScene","createSpeechBubble","head","anchor","Vector3","draw","camera","text","createSpritePlayback","element","speechDuration","timer","greet","className","onMessage","delta","moved","answer","classifyMessage","isComfortMessage"],"sources":["../../../../src/components/pro/Sprite/Sprite.tsx"],"sourcesContent":["import React, { useEffect, useImperativeHandle, useRef, useState, type FormEvent, type PointerEvent } from 'react';\nimport { Vector3 } from 'three';\nimport { SPRITE_ACTION_DURATIONS, type SpriteAction } from './actions';\nimport { createSpriteScene } from './createSpriteScene';\nimport { createSpriteStage } from './shared/createSpriteStage';\nimport { classifyMessage, getSpriteEvents, isComfortMessage, type SpriteEvent } from './shared/events';\nimport { createSpritePlayback } from './shared/playback';\nimport { createSpeechBubble } from './shared/speechBubble';\nimport type { SpriteCharacter, SpriteLocale, SpriteMood } from './types';\nimport './Sprite.css';\n\nexport type SpriteHandle = {\n /** Interrupt the current animation and play the action from the beginning. */\n play(action: SpriteAction): void;\n /** Return to idle without changing the view angle or chat. */\n stop(): void;\n};\n\nexport type SpriteProps = {\n ref?: React.Ref<SpriteHandle>;\n /** Ruby the pink winged unicorn, or Molly the mint cat. */\n character?: SpriteCharacter;\n /** Optional reply provider. Without it the character uses short, offline scripted replies. */\n onMessage?: (message: string, character: SpriteCharacter) => string | Promise<string>;\n /** Bubble lifetime in milliseconds. Default 0 keeps it visible; pending replies never expire. */\n speechDuration?: number;\n locale?: SpriteLocale;\n className?: string;\n};\n\nconst words = {\n zh: {\n ruby: 'Ruby · 天角兽', molly: 'Molly · 小猫咪',\n hint: '点击看表情和挥手 · 拖动旋转 · 方向键转身', placeholder: '和我说句话…', send: '发送',\n busy: '正在想怎么回答…', error: '没能收到回复,请再试一次。', empty: '我在认真听哦,再多告诉我一点吧!',\n unavailable: '此设备无法显示 3D 角色,仍可在下方聊天。', offline: '本地互动', custom: '自定义回复',\n },\n en: {\n ruby: 'Ruby · Winged unicorn', molly: 'Molly · Little cat',\n hint: 'Tap for a smile and wave · Drag to rotate · Arrow keys to turn', placeholder: 'Say something…', send: 'Send',\n busy: 'Thinking of a reply…', error: 'I couldn’t get a reply. Please try again.', empty: 'I’m listening! Tell me a little more.',\n unavailable: '3D is unavailable on this device. You can still chat below.', offline: 'Offline chat', custom: 'Custom replies',\n },\n} as const;\n\n/** A small, self-contained Three.js character with accessible chat and turn controls. */\nexport function Sprite(props: SpriteProps) {\n return <SpriteInstance key={props.character ?? 'ruby'} {...props} />;\n}\n\nfunction SpriteInstance({ character = 'ruby', locale = 'zh', onMessage, speechDuration = 0, className, ref }: SpriteProps) {\n const t = words[locale];\n const events = getSpriteEvents(character);\n const stage = useRef<HTMLDivElement>(null);\n const turn = useRef<(radians: number) => void>(() => {});\n const express = useRef<(mood: SpriteMood, duration?: number, sustain?: boolean) => void>(() => {});\n const stop = useRef<() => void>(() => {});\n const speak = useRef<(text: string) => void>(() => {});\n const dispatch = (event: SpriteEvent) => {\n const { mood, duration, sustain } = events.action(event);\n express.current(mood, duration, sustain);\n };\n useImperativeHandle(ref, () => ({\n play: action => express.current(action, SPRITE_ACTION_DURATIONS[action]),\n stop: () => stop.current(),\n }), []);\n const drag = useRef<{ x: number; startX: number; moved: boolean } | null>(null);\n const request = useRef(0);\n const mounted = useRef(true);\n const [draft, setDraft] = useState('');\n const [messages, setMessages] = useState<Array<{ id: number; role: 'user' | 'sprite'; text: string }>>([]);\n const nextMessageId = useRef(0);\n const log = useRef<HTMLDivElement>(null);\n const append = (role: 'user' | 'sprite', text: string) => {\n const id = ++nextMessageId.current;\n setMessages(current => [...current, { id, role, text }].slice(-20));\n };\n const [pending, setPending] = useState(false);\n const [renderError, setRenderError] = useState(false);\n const latestReply = messages.reduce<{ id: number; text: string }>(\n (reply, message) => message.role === 'sprite' ? message : reply,\n { id: 0, text: events.greeting[locale] },\n );\n const speech = pending ? t.busy : latestReply.text;\n\n useEffect(() => {\n if ((messages.length || pending) && log.current) log.current.scrollTop = log.current.scrollHeight;\n }, [messages, pending]);\n\n useEffect(() => {\n const host = stage.current;\n if (!host) return;\n let studio: ReturnType<typeof createSpriteStage> | undefined;\n let model: ReturnType<typeof createSpriteScene> | undefined;\n let observer: ResizeObserver | undefined;\n let themeObserver: MutationObserver | undefined;\n let bubble: ReturnType<typeof createSpeechBubble> | undefined;\n let playback: ReturnType<typeof createSpritePlayback> | undefined;\n let disposed = false;\n const requestRef = request;\n mounted.current = true;\n try {\n studio = createSpriteStage(host, { topInset: 126 });\n model = createSpriteScene(character);\n bubble = createSpeechBubble(host);\n studio.scene.add(model.group, bubble.group);\n const head = model.group.getObjectByName('head') ?? model.group;\n const anchor = new Vector3();\n const draw = () => {\n if (disposed) return;\n studio?.render(camera => {\n head.localToWorld(anchor.set(0, character === 'ruby' ? 1.0 : 0.85, 0));\n bubble?.update(camera, anchor, { width: host.clientWidth, height: host.clientHeight });\n });\n };\n speak.current = text => { bubble?.setText(text); draw(); };\n playback = createSpritePlayback(host, model, draw);\n turn.current = playback.turn;\n stop.current = playback.stop;\n express.current = playback.express;\n playback.stop();\n observer = new ResizeObserver(draw);\n observer.observe(host);\n // Theme tokens are inherited; repaint even when reduced motion has stopped the renderer.\n themeObserver = new MutationObserver(draw);\n for (let element: HTMLElement | null = host; element; element = element.parentElement) {\n themeObserver.observe(element, { attributes: true, attributeFilter: ['class', 'style', 'data-theme'] });\n }\n draw();\n } catch {\n queueMicrotask(() => { if (!disposed) setRenderError(true); });\n }\n return () => {\n disposed = true;\n mounted.current = false;\n requestRef.current++;\n turn.current = () => {};\n express.current = () => {};\n stop.current = () => {};\n speak.current = () => {};\n playback?.dispose();\n observer?.disconnect();\n themeObserver?.disconnect();\n bubble?.dispose();\n model?.dispose();\n studio?.dispose();\n };\n }, [character, express, stop]);\n\n useEffect(() => {\n speak.current(speech);\n if (pending || !Number.isFinite(speechDuration) || speechDuration <= 0) return;\n const timer = window.setTimeout(() => speak.current(''), Math.min(speechDuration, 2_147_483_647));\n return () => window.clearTimeout(timer);\n // eslint-disable-next-line react/exhaustive-effect-dependencies -- New message IDs must restart expiry even when the text is unchanged.\n }, [speech, latestReply.id, pending, speechDuration]);\n\n const greet = () => { append('sprite', events.greeting[locale]); dispatch({ type: 'greet' }); };\n const pointerDown = (event: PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n drag.current = { x: event.clientX, startX: event.clientX, moved: false };\n event.currentTarget.setPointerCapture(event.pointerId);\n };\n const pointerMove = (event: PointerEvent<HTMLDivElement>) => {\n if (!drag.current) return;\n const delta = event.clientX - drag.current.x;\n if (Math.abs(event.clientX - drag.current.startX) > 3) drag.current.moved = true;\n if (drag.current.moved) turn.current(delta * 0.012);\n drag.current.x = event.clientX;\n };\n const pointerUp = (event: PointerEvent<HTMLDivElement>) => {\n if (!drag.current) return;\n const moved = drag.current.moved;\n drag.current = null;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);\n if (!moved) greet();\n else dispatch({ type: 'turn' });\n };\n const send = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const text = draft.trim();\n if (!text || pending) return;\n const id = ++request.current;\n setPending(true);\n setDraft('');\n append('user', text);\n dispatch({ type: 'message-pending' });\n try {\n const answer = await (onMessage ? onMessage(text, character) : events.localReply(classifyMessage(text), locale));\n if (mounted.current && request.current === id) {\n append('sprite', typeof answer === 'string' && answer.trim() ? answer : t.empty);\n dispatch({ type: 'message-replied', comfort: isComfortMessage(text) });\n }\n } catch {\n if (mounted.current && request.current === id) {\n append('sprite', t.error);\n dispatch({ type: 'message-failed' });\n }\n } finally {\n if (mounted.current && request.current === id) setPending(false);\n }\n };\n\n return <section className={['dishui-sprite', className].filter(Boolean).join(' ')} aria-label={t[character]}>\n <div className=\"dishui-sprite__header\"><strong>{t[character]}</strong><span>{onMessage ? t.custom : t.offline}</span></div>\n <div ref={stage} className=\"dishui-sprite__stage\" role=\"button\" tabIndex={0}\n aria-label={`${t[character]} — ${t.hint}`}\n onPointerDown={pointerDown} onPointerMove={pointerMove} onPointerUp={pointerUp}\n onPointerCancel={() => { drag.current = null; }}\n onKeyDown={event => {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.preventDefault(); turn.current(event.key === 'ArrowLeft' ? -0.2 : 0.2); dispatch({ type: 'turn' });\n } else if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); greet(); }\n }}>\n {renderError && <span className=\"dishui-sprite__unavailable\" role=\"status\">{t.unavailable}</span>}\n </div>\n <p className=\"dishui-sprite__hint\">{t.hint}</p>\n <div ref={log} className=\"dishui-sprite__reply\" role=\"log\" aria-live=\"polite\" aria-label={`${t[character]} chat`}>\n {messages.length === 0 && <p className=\"dishui-sprite__message\">{events.greeting[locale]}</p>}\n {messages.map(message => <p className={`dishui-sprite__message dishui-sprite__message--${message.role}`} key={message.id}>{message.text}</p>)}\n {pending && <p className=\"dishui-sprite__message\" role=\"status\">{t.busy}</p>}\n </div>\n <form className=\"dishui-sprite__form\" onSubmit={send}>\n <input aria-label={locale === 'zh' ? `给 ${t[character]} 发送消息` : `Message ${t[character]}`} value={draft}\n maxLength={280} onChange={event => setDraft(event.target.value)} placeholder={t.placeholder} />\n <button type=\"submit\" disabled={!draft.trim() || pending}>{t.send}</button>\n </form>\n </section>;\n}\n\nexport default Sprite;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type SpriteAction = 'greet' | 'bye' | 'talk' | 'happy' | 'walk' | 'run' | 'rise' | 'sad' | 'magic';
|
|
2
|
+
/** Finite action durations in milliseconds. Chat may sustain talk while awaiting a reply. */
|
|
3
|
+
export declare const SPRITE_ACTION_DURATIONS: Readonly<Record<SpriteAction, number>>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/components/pro/Sprite/actions.ts
|
|
2
|
+
var e = {
|
|
3
|
+
greet: 1400,
|
|
4
|
+
bye: 1400,
|
|
5
|
+
talk: 1600,
|
|
6
|
+
happy: 1400,
|
|
7
|
+
walk: 2600,
|
|
8
|
+
run: 2200,
|
|
9
|
+
rise: 1800,
|
|
10
|
+
sad: 1800,
|
|
11
|
+
magic: 2600
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { e as SPRITE_ACTION_DURATIONS };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","names":["SPRITE_ACTION_DURATIONS"],"sources":["../../../../src/components/pro/Sprite/actions.ts"],"sourcesContent":["export type SpriteAction = 'greet' | 'bye' | 'talk' | 'happy' | 'walk' | 'run' | 'rise' | 'sad' | 'magic';\n\n/** Finite action durations in milliseconds. Chat may sustain talk while awaiting a reply. */\nexport const SPRITE_ACTION_DURATIONS: Readonly<Record<SpriteAction, number>> = {\n greet: 1400,\n bye: 1400,\n talk: 1600,\n happy: 1400,\n walk: 2600,\n run: 2200,\n rise: 1800,\n sad: 1800,\n magic: 2600,\n};\n"],"mappings":";AAGA,IAAaA,IAAkE;CAC7E,OAAO;CACP,KAAK;CACL,MAAM;CACN,OAAO;CACP,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;CACL,OAAO;AACT"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SpriteCharacter, SpriteScene } from './types';
|
|
2
|
+
export type { SpriteCharacter, SpriteMood, SpritePose } from './types';
|
|
3
|
+
/** Public scene factory; character geometry, binding and animation live in their own modules. */
|
|
4
|
+
export declare function createSpriteScene(character: SpriteCharacter): SpriteScene;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createRuby as e } from "./Ruby/index.js";
|
|
2
|
+
import { createMolly as t } from "./Molly/index.js";
|
|
3
|
+
//#region src/components/pro/Sprite/createSpriteScene.ts
|
|
4
|
+
var n = {
|
|
5
|
+
ruby: e,
|
|
6
|
+
molly: t
|
|
7
|
+
};
|
|
8
|
+
function r(e) {
|
|
9
|
+
return n[e]();
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { r as createSpriteScene };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=createSpriteScene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSpriteScene.js","names":["characters","createRuby","createMolly","createSpriteScene","character"],"sources":["../../../../src/components/pro/Sprite/createSpriteScene.ts"],"sourcesContent":["import { createRuby } from './Ruby';\nimport { createMolly } from './Molly';\nimport type { SpriteCharacter, SpriteScene } from './types';\n\nexport type { SpriteCharacter, SpriteMood, SpritePose } from './types';\n\nconst characters: Record<SpriteCharacter, () => SpriteScene> = { ruby: createRuby, molly: createMolly };\n\n/** Public scene factory; character geometry, binding and animation live in their own modules. */\nexport function createSpriteScene(character: SpriteCharacter): SpriteScene {\n return characters[character]();\n}\n"],"mappings":";;;AAMA,IAAMA,IAAyD;CAAE,MAAMC;CAAY,OAAOC;AAAY;AAGtG,SAAgBC,EAAkB,GAAyC;CACzE,OAAOH,EAAWI,EAAU,CAAC;AAC/B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import type { SpritePose } from '../types';
|
|
3
|
+
export declare function samplePose({ elapsed, mood, intensity, blink, progress }: SpritePose): {
|
|
4
|
+
t: number;
|
|
5
|
+
happy: number;
|
|
6
|
+
talk: number;
|
|
7
|
+
comfort: number;
|
|
8
|
+
curious: number;
|
|
9
|
+
greet: number;
|
|
10
|
+
bye: number;
|
|
11
|
+
rise: number;
|
|
12
|
+
sad: number;
|
|
13
|
+
walk: number;
|
|
14
|
+
run: number;
|
|
15
|
+
wave: number;
|
|
16
|
+
phase: number;
|
|
17
|
+
magic: number;
|
|
18
|
+
beat: number;
|
|
19
|
+
blink: number;
|
|
20
|
+
};
|
|
21
|
+
type FacialRig = {
|
|
22
|
+
ears: THREE.Group[];
|
|
23
|
+
eyes: THREE.Group[];
|
|
24
|
+
lids: THREE.Group[];
|
|
25
|
+
brows: THREE.Group[];
|
|
26
|
+
lip: THREE.Group;
|
|
27
|
+
mouth: THREE.Group;
|
|
28
|
+
opening: THREE.Mesh;
|
|
29
|
+
tongue: THREE.Mesh;
|
|
30
|
+
};
|
|
31
|
+
/** Shared facial vocabulary; each character supplies its mouth anchor and magic expression. */
|
|
32
|
+
export declare function animateFace(rig: FacialRig, state: ReturnType<typeof samplePose>, mouthY: number, magicSquint: number): void;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as e from "three";
|
|
2
|
+
//#region src/components/pro/Sprite/shared/animation.ts
|
|
3
|
+
var t = (t) => Number.isFinite(t) ? e.MathUtils.clamp(t, 0, 1) : 0;
|
|
4
|
+
function n({ elapsed: n, mood: r, intensity: i, blink: a = 0, progress: o }) {
|
|
5
|
+
let s = Number.isFinite(n) ? n : 0, c = t(i), l = r === "happy" ? c : 0, u = r === "talk" ? c : 0, d = r === "comfort" ? c : 0, f = r === "curious" ? c : 0, p = r === "greet" ? c : 0, m = r === "bye" ? c : 0, h = r === "rise" ? c : 0, g = r === "sad" ? c : 0, _ = r === "walk" ? c : 0, v = r === "run" ? c : 0, y = p + m, b = o === void 0 ? .5 : t(o);
|
|
6
|
+
return {
|
|
7
|
+
t: s,
|
|
8
|
+
happy: l,
|
|
9
|
+
talk: u,
|
|
10
|
+
comfort: d,
|
|
11
|
+
curious: f,
|
|
12
|
+
greet: p,
|
|
13
|
+
bye: m,
|
|
14
|
+
rise: h,
|
|
15
|
+
sad: g,
|
|
16
|
+
walk: _,
|
|
17
|
+
run: v,
|
|
18
|
+
wave: y,
|
|
19
|
+
phase: b,
|
|
20
|
+
magic: r === "magic" ? c * e.MathUtils.smoothstep(b, 0, .22) * (1 - e.MathUtils.smoothstep(b, .82, 1)) : 0,
|
|
21
|
+
beat: Math.sin(s * 8),
|
|
22
|
+
blink: t(a)
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function r(e, t, n, r) {
|
|
26
|
+
let { ears: i, eyes: a, lids: o, brows: s, lip: c, mouth: l, opening: u, tongue: d } = e, { t: f, happy: p, talk: m, comfort: h, curious: g, sad: _, wave: v, magic: y, beat: b, blink: x } = t;
|
|
27
|
+
for (let e = 0; e < 2; e++) {
|
|
28
|
+
let t = e ? 1 : -1;
|
|
29
|
+
i[e].rotation.set(h * .08 - g * .1 + _ * .24, 0, t * (-.12 - h * .2 + p * .05 + v * .04 - _ * .28) + g * (e ? .15 : -.06)), s[e].position.y = .235 + p * .015 + g * (e ? .058 : -.008) + m * .012 * b + v * .025 + _ * .01, s[e].rotation.z = t * (p * .12 - h * .25 - _ * .36);
|
|
30
|
+
let n = Math.max(x, p * .15, h * .18, _ * .32, y * r);
|
|
31
|
+
a[e].scale.y = Math.max(.018, 1 - n), o[e].scale.y = .6 + n * .4, o[e].position.y = .005 - n * .012, o[e].visible = n > .82;
|
|
32
|
+
}
|
|
33
|
+
let S = Math.max(.02, p * .52, m * (.28 + Math.abs(Math.sin(f * 10)) * .62), g * .2, h * .05, v * .28), C = 1 - _ * 1.8;
|
|
34
|
+
c.scale.y = Math.abs(C) < .04 ? C < 0 ? -.04 : .04 : C, u.scale.y = .066 * S, d.scale.y = .022 * S, d.position.y = -.036 * S, l.position.y = n - .018 * S;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { r as animateFace, n as samplePose };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=animation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.js","names":["THREE","unit","value","samplePose","t","elapsed","amount","intensity","happy","mood","talk","comfort","curious","greet","bye","rise","sad","walk","run","wave","phase","progress","blink","animateFace","rig","state","i","side","ears","beat","closed","magic","magicSquint","aperture","lipCurve","mouthY"],"sources":["../../../../../src/components/pro/Sprite/shared/animation.ts"],"sourcesContent":["import * as THREE from 'three';\nimport type { SpritePose } from '../types';\n\nconst unit = (value: number) => Number.isFinite(value) ? THREE.MathUtils.clamp(value, 0, 1) : 0;\n\nexport function samplePose({ elapsed, mood, intensity, blink = 0, progress }: SpritePose) {\n const t = Number.isFinite(elapsed) ? elapsed : 0;\n const amount = unit(intensity);\n const happy = mood === 'happy' ? amount : 0;\n const talk = mood === 'talk' ? amount : 0;\n const comfort = mood === 'comfort' ? amount : 0;\n const curious = mood === 'curious' ? amount : 0;\n const greet = mood === 'greet' ? amount : 0;\n const bye = mood === 'bye' ? amount : 0;\n const rise = mood === 'rise' ? amount : 0;\n const sad = mood === 'sad' ? amount : 0;\n const walk = mood === 'walk' ? amount : 0;\n const run = mood === 'run' ? amount : 0;\n const wave = greet + bye;\n const phase = progress === undefined ? 0.5 : unit(progress);\n const magic = mood === 'magic' ? amount * THREE.MathUtils.smoothstep(phase, 0, 0.22)\n * (1 - THREE.MathUtils.smoothstep(phase, 0.82, 1)) : 0;\n return { t, happy, talk, comfort, curious, greet, bye, rise, sad, walk, run, wave, phase, magic, beat: Math.sin(t * 8), blink: unit(blink) };\n}\n\ntype FacialRig = {\n ears: THREE.Group[]; eyes: THREE.Group[]; lids: THREE.Group[]; brows: THREE.Group[];\n lip: THREE.Group; mouth: THREE.Group; opening: THREE.Mesh; tongue: THREE.Mesh;\n};\n\n/** Shared facial vocabulary; each character supplies its mouth anchor and magic expression. */\nexport function animateFace(rig: FacialRig, state: ReturnType<typeof samplePose>, mouthY: number, magicSquint: number) {\n const { ears, eyes, lids, brows, lip, mouth, opening, tongue } = rig;\n const { t, happy, talk, comfort, curious, sad, wave, magic, beat, blink } = state;\n for (let i = 0; i < 2; i++) {\n const side = i ? 1 : -1;\n ears[i].rotation.set(comfort * 0.08 - curious * 0.10 + sad * 0.24, 0,\n side * (-0.12 - comfort * 0.20 + happy * 0.05 + wave * 0.04 - sad * 0.28) + curious * (i ? 0.15 : -0.06));\n brows[i].position.y = 0.235 + happy * 0.015 + curious * (i ? 0.058 : -0.008) + talk * 0.012 * beat + wave * 0.025 + sad * 0.01;\n brows[i].rotation.z = side * (happy * 0.12 - comfort * 0.25 - sad * 0.36);\n const closed = Math.max(blink, happy * 0.15, comfort * 0.18, sad * 0.32, magic * magicSquint);\n eyes[i].scale.y = Math.max(0.018, 1 - closed);\n lids[i].scale.y = 0.6 + closed * 0.4;\n lids[i].position.y = 0.005 - closed * 0.012;\n lids[i].visible = closed > 0.82;\n }\n const aperture = Math.max(0.02, happy * 0.52, talk * (0.28 + Math.abs(Math.sin(t * 10)) * 0.62), curious * 0.2, comfort * 0.05, wave * 0.28);\n const lipCurve = 1 - sad * 1.8;\n lip.scale.y = Math.abs(lipCurve) < 0.04 ? (lipCurve < 0 ? -0.04 : 0.04) : lipCurve;\n opening.scale.y = 0.066 * aperture;\n tongue.scale.y = 0.022 * aperture;\n tongue.position.y = -0.036 * aperture;\n mouth.position.y = mouthY - 0.018 * aperture;\n}\n"],"mappings":";;AAGA,IAAMC,KAAQ,MAAkB,OAAO,SAASC,CAAK,IAAIF,EAAM,UAAU,MAAME,GAAO,GAAG,CAAC,IAAI;AAE9F,SAAgBC,EAAW,EAAE,YAAS,SAAM,cAAW,WAAQ,GAAG,eAAwB;CACxF,IAAMC,IAAI,OAAO,SAASC,CAAO,IAAIA,IAAU,GACzCC,IAASL,EAAKM,CAAS,GACvBC,IAAQC,MAAS,UAAUH,IAAS,GACpCI,IAAOD,MAAS,SAASH,IAAS,GAClCK,IAAUF,MAAS,YAAYH,IAAS,GACxCM,IAAUH,MAAS,YAAYH,IAAS,GACxCO,IAAQJ,MAAS,UAAUH,IAAS,GACpCQ,IAAML,MAAS,QAAQH,IAAS,GAChCS,IAAON,MAAS,SAASH,IAAS,GAClCU,IAAMP,MAAS,QAAQH,IAAS,GAChCW,IAAOR,MAAS,SAASH,IAAS,GAClCY,IAAMT,MAAS,QAAQH,IAAS,GAChCa,IAAON,IAAQC,GACfM,IAAQC,MAAa,KAAA,IAAY,KAAMpB,EAAKoB,CAAQ;CAG1D,OAAO;EAAE;EAAG;EAAO;EAAM;EAAS;EAAS;EAAO;EAAK;EAAM;EAAK;EAAM;EAAK;EAAM;EAAO,OAF5EZ,MAAS,UAAUH,IAASN,EAAM,UAAU,WAAWoB,GAAO,GAAG,GAAI,KAC9E,IAAIpB,EAAM,UAAU,WAAWoB,GAAO,KAAM,CAAC,KAAK;EAC0C,MAAM,KAAK,IAAIhB,IAAI,CAAC;EAAG,OAAOH,EAAKqB,CAAK;CAAE;AAC7I;AAQA,SAAgBC,EAAY,GAAgB,GAAsC,GAAgB,GAAqB;CACrH,IAAM,EAAE,SAAM,SAAM,SAAM,UAAO,QAAK,UAAO,YAAS,cAAWC,GAC3D,EAAE,MAAG,UAAO,SAAM,YAAS,YAAS,QAAK,SAAM,UAAO,SAAM,aAAUC;CAC5E,KAAK,IAAIC,IAAI,GAAGA,IAAI,GAAG,KAAK;EAC1B,IAAMC,IAAOD,IAAI,IAAI;EAIrB,AAHAE,EAAKF,EAAE,CAAC,SAAS,IAAIf,IAAU,MAAOC,IAAU,KAAOI,IAAM,KAAM,GACjEW,KAAQ,OAAQhB,IAAU,KAAOH,IAAQ,MAAOW,IAAO,MAAOH,IAAM,OAAQJ,KAAWc,IAAI,MAAO,KAAM,GAC1G,EAAMA,EAAE,CAAC,SAAS,IAAI,OAAQlB,IAAQ,OAAQI,KAAWc,IAAI,OAAQ,SAAUhB,IAAO,OAAQmB,IAAOV,IAAO,OAAQH,IAAM,KAC1H,EAAMU,EAAE,CAAC,SAAS,IAAIC,KAAQnB,IAAQ,MAAOG,IAAU,MAAOK,IAAM;EACpE,IAAMc,IAAS,KAAK,IAAIR,GAAOd,IAAQ,KAAMG,IAAU,KAAMK,IAAM,KAAMe,IAAQC,CAAW;EAI5F,AAHA,EAAKN,EAAE,CAAC,MAAM,IAAI,KAAK,IAAI,MAAO,IAAII,CAAM,GAC5C,EAAKJ,EAAE,CAAC,MAAM,IAAI,KAAMI,IAAS,IACjC,EAAKJ,EAAE,CAAC,SAAS,IAAI,OAAQI,IAAS,MACtC,EAAKJ,EAAE,CAAC,UAAUI,IAAS;CAC7B;CACA,IAAMG,IAAW,KAAK,IAAI,KAAMzB,IAAQ,KAAME,KAAQ,MAAO,KAAK,IAAI,KAAK,IAAIN,IAAI,EAAE,CAAC,IAAI,MAAOQ,IAAU,IAAKD,IAAU,KAAMQ,IAAO,GAAI,GACrIe,IAAW,IAAIlB,IAAM;CAK3B,AAJA,EAAI,MAAM,IAAI,KAAK,IAAIkB,CAAQ,IAAI,MAAQA,IAAW,IAAI,OAAQ,MAAQA,GAC1E,EAAQ,MAAM,IAAI,OAAQD,GAC1B,EAAO,MAAM,IAAI,OAAQA,GACzB,EAAO,SAAS,IAAI,QAASA,GAC7B,EAAM,SAAS,IAAIE,IAAS,OAAQF;AACtC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
/**
|
|
3
|
+
* A transparent, on-demand studio for +Z-facing sprites, about 2.8 high with feet at y=0.
|
|
4
|
+
* Callers own their models, animation and resize scheduling. Enable castShadow /
|
|
5
|
+
* receiveShadow on model meshes and use flat normals or flatShading for visible facets.
|
|
6
|
+
* dispose() releases only studio resources, not geometry/materials added by the caller.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createSpriteStage(host: HTMLElement, { topInset }?: {
|
|
9
|
+
topInset?: number;
|
|
10
|
+
}): {
|
|
11
|
+
scene: THREE.Scene;
|
|
12
|
+
render: (beforeRender?: (camera: THREE.OrthographicCamera) => void) => void;
|
|
13
|
+
dispose: () => void;
|
|
14
|
+
};
|