fancy-ui-vue 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/PORTING.md +209 -0
- package/README.md +207 -2
- package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
- package/dist/cameleon/FancyProvider.vue.d.ts +19 -0
- package/dist/cameleon/FancyProvider.vue.js +48 -0
- package/dist/cameleon/FancyProvider.vue2.js +4 -0
- package/dist/cameleon/context.d.ts +24 -0
- package/dist/cameleon/context.js +18 -0
- package/dist/cameleon/index.d.ts +31 -0
- package/dist/cameleon/index.js +39 -0
- package/dist/cameleon/primitives/Badge.vue.d.ts +18 -0
- package/dist/cameleon/primitives/Badge.vue.js +26 -0
- package/dist/cameleon/primitives/Badge.vue2.js +4 -0
- package/dist/cameleon/primitives/Button.vue.d.ts +24 -0
- package/dist/cameleon/primitives/Button.vue.js +51 -0
- package/dist/cameleon/primitives/Button.vue2.js +4 -0
- package/dist/cameleon/primitives/Checkbox.vue.d.ts +28 -0
- package/dist/cameleon/primitives/Checkbox.vue.js +65 -0
- package/dist/cameleon/primitives/Checkbox.vue2.js +4 -0
- package/dist/cameleon/primitives/Input.vue.d.ts +22 -0
- package/dist/cameleon/primitives/Input.vue.js +40 -0
- package/dist/cameleon/primitives/Input.vue2.js +4 -0
- package/dist/cameleon/primitives/Radio.vue.d.ts +32 -0
- package/dist/cameleon/primitives/Radio.vue.js +53 -0
- package/dist/cameleon/primitives/Radio.vue2.js +4 -0
- package/dist/cameleon/primitives/Select.vue.d.ts +28 -0
- package/dist/cameleon/primitives/Select.vue.js +65 -0
- package/dist/cameleon/primitives/Select.vue2.js +4 -0
- package/dist/cameleon/primitives/Slider.vue.d.ts +19 -0
- package/dist/cameleon/primitives/Slider.vue.js +45 -0
- package/dist/cameleon/primitives/Slider.vue2.js +4 -0
- package/dist/cameleon/primitives/Switch.vue.d.ts +23 -0
- package/dist/cameleon/primitives/Switch.vue.js +50 -0
- package/dist/cameleon/primitives/Switch.vue2.js +4 -0
- package/dist/cameleon/primitives/Textarea.vue.d.ts +21 -0
- package/dist/cameleon/primitives/Textarea.vue.js +40 -0
- package/dist/cameleon/primitives/Textarea.vue2.js +4 -0
- package/dist/cameleon/primitives/Tooltip.vue.d.ts +21 -0
- package/dist/cameleon/primitives/Tooltip.vue.js +40 -0
- package/dist/cameleon/primitives/Tooltip.vue2.js +4 -0
- package/dist/cameleon/primitives/index.d.ts +10 -0
- package/dist/cameleon/skins/aurora/index.d.ts +2 -0
- package/dist/cameleon/skins/aurora/index.js +15 -0
- package/dist/cameleon/skins/aurora/meta.d.ts +3 -0
- package/dist/cameleon/skins/aurora/meta.js +60 -0
- package/dist/cameleon/skins/aurora/recipes.d.ts +24 -0
- package/dist/cameleon/skins/aurora/recipes.js +123 -0
- package/dist/cameleon/skins/aurora/tokens.d.ts +6 -0
- package/dist/cameleon/skins/aurora/tokens.js +17 -0
- package/dist/cameleon/skins/brutal/index.d.ts +2 -0
- package/dist/cameleon/skins/brutal/index.js +34 -0
- package/dist/cameleon/skins/brutal/meta.d.ts +3 -0
- package/dist/cameleon/skins/brutal/meta.js +72 -0
- package/dist/cameleon/skins/brutal/ornaments.d.ts +11 -0
- package/dist/cameleon/skins/brutal/ornaments.js +25 -0
- package/dist/cameleon/skins/brutal/recipes.d.ts +23 -0
- package/dist/cameleon/skins/brutal/recipes.js +112 -0
- package/dist/cameleon/skins/brutal/tokens.d.ts +8 -0
- package/dist/cameleon/skins/brutal/tokens.js +22 -0
- package/dist/cameleon/skins/default.d.ts +2 -0
- package/dist/cameleon/skins/default.js +78 -0
- package/dist/cameleon/skins/glass/index.d.ts +2 -0
- package/dist/cameleon/skins/glass/index.js +15 -0
- package/dist/cameleon/skins/glass/meta.d.ts +3 -0
- package/dist/cameleon/skins/glass/meta.js +62 -0
- package/dist/cameleon/skins/glass/recipes.d.ts +24 -0
- package/dist/cameleon/skins/glass/recipes.js +123 -0
- package/dist/cameleon/skins/glass/tokens.d.ts +5 -0
- package/dist/cameleon/skins/glass/tokens.js +17 -0
- package/dist/cameleon/skins/retro-os/index.d.ts +2 -0
- package/dist/cameleon/skins/retro-os/index.js +23 -0
- package/dist/cameleon/skins/retro-os/meta.d.ts +3 -0
- package/dist/cameleon/skins/retro-os/meta.js +60 -0
- package/dist/cameleon/skins/retro-os/ornaments.d.ts +12 -0
- package/dist/cameleon/skins/retro-os/ornaments.js +26 -0
- package/dist/cameleon/skins/retro-os/recipes.d.ts +35 -0
- package/dist/cameleon/skins/retro-os/recipes.js +125 -0
- package/dist/cameleon/skins/retro-os/tokens.d.ts +16 -0
- package/dist/cameleon/skins/retro-os/tokens.js +22 -0
- package/dist/cameleon/skins/terminal/index.d.ts +2 -0
- package/dist/cameleon/skins/terminal/index.js +23 -0
- package/dist/cameleon/skins/terminal/meta.d.ts +3 -0
- package/dist/cameleon/skins/terminal/meta.js +69 -0
- package/dist/cameleon/skins/terminal/ornaments.d.ts +11 -0
- package/dist/cameleon/skins/terminal/ornaments.js +6 -0
- package/dist/cameleon/skins/terminal/recipes.d.ts +25 -0
- package/dist/cameleon/skins/terminal/recipes.js +124 -0
- package/dist/cameleon/skins/terminal/tokens.d.ts +5 -0
- package/dist/cameleon/skins/terminal/tokens.js +17 -0
- package/dist/cameleon/types.d.ts +133 -0
- package/dist/components/agent-plan/AgentPlan.vue.d.ts +38 -0
- package/dist/components/agent-plan/AgentPlan.vue.js +7 -0
- package/dist/components/agent-plan/AgentPlan.vue2.js +294 -0
- package/dist/components/agent-plan/index.d.ts +2 -0
- package/dist/components/ai-data-table/AiDataTable.vue.d.ts +57 -0
- package/dist/components/ai-data-table/AiDataTable.vue.js +7 -0
- package/dist/components/ai-data-table/AiDataTable.vue2.js +131 -0
- package/dist/components/ai-data-table/index.d.ts +2 -0
- package/dist/components/alert-dialog/AlertDialog.vue.d.ts +53 -0
- package/dist/components/alert-dialog/AlertDialog.vue.js +136 -0
- package/dist/components/alert-dialog/AlertDialog.vue2.js +4 -0
- package/dist/components/alert-dialog/index.d.ts +2 -0
- package/dist/components/animated-beam/AnimatedBeam.vue.d.ts +89 -0
- package/dist/components/animated-beam/AnimatedBeam.vue.js +11 -0
- package/dist/components/animated-beam/AnimatedBeam.vue2.js +372 -0
- package/dist/components/animated-beam/index.d.ts +2 -0
- package/dist/components/animated-testimonials/AnimatedTestimonials.vue.d.ts +35 -0
- package/dist/components/animated-testimonials/AnimatedTestimonials.vue.js +186 -0
- package/dist/components/animated-testimonials/AnimatedTestimonials.vue2.js +4 -0
- package/dist/components/animated-testimonials/index.d.ts +2 -0
- package/dist/components/animated-tooltip/AnimatedTooltip.vue.d.ts +26 -0
- package/dist/components/animated-tooltip/AnimatedTooltip.vue.js +7 -0
- package/dist/components/animated-tooltip/AnimatedTooltip.vue2.js +96 -0
- package/dist/components/animated-tooltip/AnimatedTooltipAvatar.vue.d.ts +38 -0
- package/dist/components/animated-tooltip/AnimatedTooltipAvatar.vue.js +7 -0
- package/dist/components/animated-tooltip/AnimatedTooltipAvatar.vue2.js +126 -0
- package/dist/components/animated-tooltip/index.d.ts +2 -0
- package/dist/components/apple-card-carousel/AppleCard.vue.d.ts +32 -0
- package/dist/components/apple-card-carousel/AppleCard.vue.js +217 -0
- package/dist/components/apple-card-carousel/AppleCard.vue2.js +6 -0
- package/dist/components/apple-card-carousel/AppleCardCarousel.vue.d.ts +17 -0
- package/dist/components/apple-card-carousel/AppleCardCarousel.vue.js +41 -0
- package/dist/components/apple-card-carousel/AppleCardCarousel.vue2.js +4 -0
- package/dist/components/apple-card-carousel/index.d.ts +3 -0
- package/dist/components/approval-card/ApprovalCard.vue.d.ts +59 -0
- package/dist/components/approval-card/ApprovalCard.vue.js +7 -0
- package/dist/components/approval-card/ApprovalCard.vue2.js +180 -0
- package/dist/components/approval-card/index.d.ts +3 -0
- package/dist/components/artifact-card/ArtifactCard.vue.d.ts +46 -0
- package/dist/components/artifact-card/ArtifactCard.vue.js +7 -0
- package/dist/components/artifact-card/ArtifactCard.vue2.js +230 -0
- package/dist/components/artifact-card/index.d.ts +2 -0
- package/dist/components/autocomplete/Autocomplete.vue.d.ts +49 -0
- package/dist/components/autocomplete/Autocomplete.vue.js +7 -0
- package/dist/components/autocomplete/Autocomplete.vue2.js +216 -0
- package/dist/components/autocomplete/AutocompletePanel.vue.d.ts +3 -0
- package/dist/components/autocomplete/AutocompletePanel.vue.js +118 -0
- package/dist/components/autocomplete/AutocompletePanel.vue2.js +4 -0
- package/dist/components/autocomplete/index.d.ts +4 -0
- package/dist/components/autocomplete/match.d.ts +6 -0
- package/dist/components/autocomplete/match.js +9 -0
- package/dist/components/autocomplete/types.d.ts +58 -0
- package/dist/components/autocomplete/types.js +7 -0
- package/dist/components/bento-grid/BentoFrame.vue.d.ts +24 -0
- package/dist/components/bento-grid/BentoFrame.vue.js +7 -0
- package/dist/components/bento-grid/BentoFrame.vue2.js +39 -0
- package/dist/components/bento-grid/BentoGrid.vue.d.ts +18 -0
- package/dist/components/bento-grid/BentoGrid.vue.js +7 -0
- package/dist/components/bento-grid/BentoGrid.vue2.js +96 -0
- package/dist/components/bento-grid/BentoGridCard.vue.d.ts +19 -0
- package/dist/components/bento-grid/BentoGridCard.vue.js +68 -0
- package/dist/components/bento-grid/BentoGridCard.vue2.js +4 -0
- package/dist/components/bento-grid/BentoGridItem.vue.d.ts +17 -0
- package/dist/components/bento-grid/BentoGridItem.vue.js +55 -0
- package/dist/components/bento-grid/BentoGridItem.vue2.js +4 -0
- package/dist/components/bento-grid/index.d.ts +6 -0
- package/dist/components/bg-falling-stars/FallingStarsBg.vue.d.ts +12 -0
- package/dist/components/bg-falling-stars/FallingStarsBg.vue.js +44 -0
- package/dist/components/bg-falling-stars/FallingStarsBg.vue2.js +4 -0
- package/dist/components/bg-falling-stars/bg-falling-stars-core.d.ts +24 -0
- package/dist/components/bg-falling-stars/bg-falling-stars-core.js +120 -0
- package/dist/components/bg-falling-stars/index.d.ts +2 -0
- package/dist/components/bg-stars/StarsBackground.vue.d.ts +50 -0
- package/dist/components/bg-stars/StarsBackground.vue.js +7 -0
- package/dist/components/bg-stars/StarsBackground.vue2.js +122 -0
- package/dist/components/bg-stars/bg-stars-core.d.ts +40 -0
- package/dist/components/bg-stars/bg-stars-core.js +70 -0
- package/dist/components/bg-stars/index.d.ts +2 -0
- package/dist/components/blur-reveal/BlurReveal.vue.d.ts +25 -0
- package/dist/components/blur-reveal/BlurReveal.vue.js +7 -0
- package/dist/components/blur-reveal/BlurReveal.vue2.js +57 -0
- package/dist/components/blur-reveal/index.d.ts +2 -0
- package/dist/components/book/Book.vue.d.ts +32 -0
- package/dist/components/book/Book.vue.js +86 -0
- package/dist/components/book/Book.vue2.js +4 -0
- package/dist/components/book/BookDescription.vue.d.ts +19 -0
- package/dist/components/book/BookDescription.vue.js +22 -0
- package/dist/components/book/BookDescription.vue2.js +4 -0
- package/dist/components/book/BookHeader.vue.d.ts +19 -0
- package/dist/components/book/BookHeader.vue.js +22 -0
- package/dist/components/book/BookHeader.vue2.js +4 -0
- package/dist/components/book/BookTitle.vue.d.ts +19 -0
- package/dist/components/book/BookTitle.vue.js +22 -0
- package/dist/components/book/BookTitle.vue2.js +4 -0
- package/dist/components/book/index.d.ts +132 -0
- package/dist/components/book/index.js +48 -0
- package/dist/components/border-beam/BorderBeam.vue.d.ts +73 -0
- package/dist/components/border-beam/BorderBeam.vue.js +12 -0
- package/dist/components/border-beam/BorderBeam.vue2.js +124 -0
- package/dist/components/border-beam/index.d.ts +2 -0
- package/dist/components/box-reveal/BoxReveal.vue.d.ts +28 -0
- package/dist/components/box-reveal/BoxReveal.vue.js +48 -0
- package/dist/components/box-reveal/BoxReveal.vue2.js +4 -0
- package/dist/components/box-reveal/index.d.ts +2 -0
- package/dist/components/breadcrumb/Breadcrumb.vue.d.ts +54 -0
- package/dist/components/breadcrumb/Breadcrumb.vue.js +99 -0
- package/dist/components/breadcrumb/Breadcrumb.vue2.js +4 -0
- package/dist/components/breadcrumb/index.d.ts +2 -0
- package/dist/components/button/Button.vue.d.ts +54 -0
- package/dist/components/button/Button.vue.js +7 -0
- package/dist/components/button/Button.vue2.js +207 -0
- package/dist/components/button/index.d.ts +3 -0
- package/dist/components/button/types.d.ts +4 -0
- package/dist/components/button-group/ButtonGroup.vue.d.ts +22 -0
- package/dist/components/button-group/ButtonGroup.vue.js +7 -0
- package/dist/components/button-group/ButtonGroup.vue2.js +44 -0
- package/dist/components/button-group/index.d.ts +5 -0
- package/dist/components/button-group/types.d.ts +17 -0
- package/dist/components/button-group/types.js +5 -0
- package/dist/components/card-3d/CardBody.vue.d.ts +15 -0
- package/dist/components/card-3d/CardBody.vue.js +22 -0
- package/dist/components/card-3d/CardBody.vue2.js +4 -0
- package/dist/components/card-3d/CardContainer.vue.d.ts +17 -0
- package/dist/components/card-3d/CardContainer.vue.js +59 -0
- package/dist/components/card-3d/CardContainer.vue2.js +4 -0
- package/dist/components/card-3d/CardItem.vue.d.ts +29 -0
- package/dist/components/card-3d/CardItem.vue.js +37 -0
- package/dist/components/card-3d/CardItem.vue2.js +4 -0
- package/dist/components/card-3d/context.d.ts +14 -0
- package/dist/components/card-3d/context.js +7 -0
- package/dist/components/card-3d/index.d.ts +6 -0
- package/dist/components/card-spotlight/CardSpotlight.vue.d.ts +23 -0
- package/dist/components/card-spotlight/CardSpotlight.vue.js +55 -0
- package/dist/components/card-spotlight/CardSpotlight.vue2.js +4 -0
- package/dist/components/card-spotlight/index.d.ts +2 -0
- package/dist/components/chat-error/ChatError.vue.d.ts +37 -0
- package/dist/components/chat-error/ChatError.vue.js +7 -0
- package/dist/components/chat-error/ChatError.vue2.js +93 -0
- package/dist/components/chat-error/index.d.ts +2 -0
- package/dist/components/chat-message/ChatMessage.vue.d.ts +46 -0
- package/dist/components/chat-message/ChatMessage.vue.js +7 -0
- package/dist/components/chat-message/ChatMessage.vue2.js +164 -0
- package/dist/components/chat-message/ChatMessageAction.vue.d.ts +27 -0
- package/dist/components/chat-message/ChatMessageAction.vue.js +57 -0
- package/dist/components/chat-message/ChatMessageAction.vue2.js +4 -0
- package/dist/components/chat-message/ChatMessageActions.vue.d.ts +21 -0
- package/dist/components/chat-message/ChatMessageActions.vue.js +7 -0
- package/dist/components/chat-message/ChatMessageActions.vue2.js +27 -0
- package/dist/components/chat-message/ChatMessageBranches.vue.d.ts +17 -0
- package/dist/components/chat-message/ChatMessageBranches.vue.js +81 -0
- package/dist/components/chat-message/ChatMessageBranches.vue2.js +4 -0
- package/dist/components/chat-message/index.d.ts +9 -0
- package/dist/components/chat-message/types.d.ts +37 -0
- package/dist/components/chat-message/types.js +4 -0
- package/dist/components/chat-panel/ChatEmptyState.vue.d.ts +27 -0
- package/dist/components/chat-panel/ChatEmptyState.vue.js +65 -0
- package/dist/components/chat-panel/ChatEmptyState.vue2.js +4 -0
- package/dist/components/chat-panel/ChatPanel.vue.d.ts +41 -0
- package/dist/components/chat-panel/ChatPanel.vue.js +7 -0
- package/dist/components/chat-panel/ChatPanel.vue2.js +163 -0
- package/dist/components/chat-panel/index.d.ts +4 -0
- package/dist/components/checkbox/Checkbox.vue.d.ts +82 -0
- package/dist/components/checkbox/Checkbox.vue.js +7 -0
- package/dist/components/checkbox/Checkbox.vue2.js +111 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/code-diff/CodeDiff.vue.d.ts +41 -0
- package/dist/components/code-diff/CodeDiff.vue.js +7 -0
- package/dist/components/code-diff/CodeDiff.vue2.js +258 -0
- package/dist/components/code-diff/index.d.ts +2 -0
- package/dist/components/colourful-text/ColourfulText.vue.d.ts +34 -0
- package/dist/components/colourful-text/ColourfulText.vue.js +72 -0
- package/dist/components/colourful-text/ColourfulText.vue2.js +4 -0
- package/dist/components/colourful-text/index.d.ts +2 -0
- package/dist/components/combobox/Combobox.vue.d.ts +49 -0
- package/dist/components/combobox/Combobox.vue.js +7 -0
- package/dist/components/combobox/Combobox.vue2.js +246 -0
- package/dist/components/combobox/ComboboxPanel.vue.d.ts +3 -0
- package/dist/components/combobox/ComboboxPanel.vue.js +120 -0
- package/dist/components/combobox/ComboboxPanel.vue2.js +4 -0
- package/dist/components/combobox/index.d.ts +4 -0
- package/dist/components/combobox/match.d.ts +15 -0
- package/dist/components/combobox/match.js +13 -0
- package/dist/components/combobox/types.d.ts +55 -0
- package/dist/components/combobox/types.js +4 -0
- package/dist/components/command-menu/CommandMenu.vue.d.ts +61 -0
- package/dist/components/command-menu/CommandMenu.vue.js +7 -0
- package/dist/components/command-menu/CommandMenu.vue2.js +382 -0
- package/dist/components/command-menu/index.d.ts +3 -0
- package/dist/components/command-menu/match.d.ts +19 -0
- package/dist/components/command-menu/match.js +44 -0
- package/dist/components/command-menu/types.d.ts +19 -0
- package/dist/components/compare/Compare.vue.d.ts +58 -0
- package/dist/components/compare/Compare.vue.js +12 -0
- package/dist/components/compare/Compare.vue2.js +374 -0
- package/dist/components/compare/StarField.vue.d.ts +18 -0
- package/dist/components/compare/StarField.vue.js +7 -0
- package/dist/components/compare/StarField.vue2.js +73 -0
- package/dist/components/compare/index.d.ts +4 -0
- package/dist/components/composer/Composer.vue.d.ts +63 -0
- package/dist/components/composer/Composer.vue.js +7 -0
- package/dist/components/composer/Composer.vue2.js +161 -0
- package/dist/components/composer/ComposerAttachment.vue.d.ts +16 -0
- package/dist/components/composer/ComposerAttachment.vue.js +7 -0
- package/dist/components/composer/ComposerAttachment.vue2.js +140 -0
- package/dist/components/composer/ComposerAttachments.vue.d.ts +25 -0
- package/dist/components/composer/ComposerAttachments.vue.js +7 -0
- package/dist/components/composer/ComposerAttachments.vue2.js +84 -0
- package/dist/components/composer/ComposerCommandMenu.vue.d.ts +40 -0
- package/dist/components/composer/ComposerCommandMenu.vue.js +7 -0
- package/dist/components/composer/ComposerCommandMenu.vue2.js +237 -0
- package/dist/components/composer/ComposerInput.vue.d.ts +21 -0
- package/dist/components/composer/ComposerInput.vue.js +7 -0
- package/dist/components/composer/ComposerInput.vue2.js +100 -0
- package/dist/components/composer/ComposerModelPicker.vue.d.ts +28 -0
- package/dist/components/composer/ComposerModelPicker.vue.js +7 -0
- package/dist/components/composer/ComposerModelPicker.vue2.js +234 -0
- package/dist/components/composer/ComposerSubmit.vue.d.ts +23 -0
- package/dist/components/composer/ComposerSubmit.vue.js +78 -0
- package/dist/components/composer/ComposerSubmit.vue2.js +4 -0
- package/dist/components/composer/ComposerToolbar.vue.d.ts +19 -0
- package/dist/components/composer/ComposerToolbar.vue.js +21 -0
- package/dist/components/composer/ComposerToolbar.vue2.js +4 -0
- package/dist/components/composer/caret.d.ts +69 -0
- package/dist/components/composer/caret.js +111 -0
- package/dist/components/composer/index.d.ts +17 -0
- package/dist/components/composer/types.d.ts +78 -0
- package/dist/components/composer/types.js +4 -0
- package/dist/components/confetti/Confetti.vue.d.ts +24 -0
- package/dist/components/confetti/Confetti.vue.js +47 -0
- package/dist/components/confetti/Confetti.vue2.js +4 -0
- package/dist/components/confetti/ConfettiButton.vue.d.ts +20 -0
- package/dist/components/confetti/ConfettiButton.vue.js +42 -0
- package/dist/components/confetti/ConfettiButton.vue2.js +4 -0
- package/dist/components/confetti/confetti-core.d.ts +26 -0
- package/dist/components/confetti/confetti-core.js +37 -0
- package/dist/components/confetti/context.d.ts +13 -0
- package/dist/components/confetti/context.js +5 -0
- package/dist/components/confetti/index.d.ts +4 -0
- package/dist/components/container-scroll/ContainerScroll.vue.d.ts +40 -0
- package/dist/components/container-scroll/ContainerScroll.vue.js +10 -0
- package/dist/components/container-scroll/ContainerScroll.vue2.js +116 -0
- package/dist/components/container-scroll/index.d.ts +2 -0
- package/dist/components/container-text-flip/ContainerTextFlip.vue.d.ts +16 -0
- package/dist/components/container-text-flip/ContainerTextFlip.vue.js +8 -0
- package/dist/components/container-text-flip/ContainerTextFlip.vue2.js +59 -0
- package/dist/components/container-text-flip/index.d.ts +2 -0
- package/dist/components/context-menu/ContextMenu.vue.d.ts +38 -0
- package/dist/components/context-menu/ContextMenu.vue.js +116 -0
- package/dist/components/context-menu/ContextMenu.vue2.js +4 -0
- package/dist/components/context-menu/ContextMenuContent.vue.d.ts +17 -0
- package/dist/components/context-menu/ContextMenuContent.vue.js +107 -0
- package/dist/components/context-menu/ContextMenuContent.vue2.js +4 -0
- package/dist/components/context-menu/ContextMenuTrigger.vue.d.ts +19 -0
- package/dist/components/context-menu/ContextMenuTrigger.vue.js +42 -0
- package/dist/components/context-menu/ContextMenuTrigger.vue2.js +4 -0
- package/dist/components/context-menu/index.d.ts +22 -0
- package/dist/components/context-menu/types.d.ts +30 -0
- package/dist/components/context-menu/types.js +5 -0
- package/dist/components/context-ring/ContextRing.vue.d.ts +35 -0
- package/dist/components/context-ring/ContextRing.vue.js +7 -0
- package/dist/components/context-ring/ContextRing.vue2.js +299 -0
- package/dist/components/context-ring/index.d.ts +2 -0
- package/dist/components/copy-button/CopyButton.vue.d.ts +49 -0
- package/dist/components/copy-button/CopyButton.vue.js +7 -0
- package/dist/components/copy-button/CopyButton.vue2.js +142 -0
- package/dist/components/copy-button/index.d.ts +2 -0
- package/dist/components/datamosh-transition/DatamoshTransition.vue.d.ts +75 -0
- package/dist/components/datamosh-transition/DatamoshTransition.vue.js +347 -0
- package/dist/components/datamosh-transition/DatamoshTransition.vue2.js +4 -0
- package/dist/components/datamosh-transition/datamosh-transition-core.d.ts +180 -0
- package/dist/components/datamosh-transition/datamosh-transition-core.js +369 -0
- package/dist/components/datamosh-transition/index.d.ts +3 -0
- package/dist/components/date-picker/DatePicker.vue.d.ts +52 -0
- package/dist/components/date-picker/DatePicker.vue.js +7 -0
- package/dist/components/date-picker/DatePicker.vue2.js +340 -0
- package/dist/components/date-picker/date-utils.d.ts +39 -0
- package/dist/components/date-picker/date-utils.js +84 -0
- package/dist/components/date-picker/index.d.ts +2 -0
- package/dist/components/dialog/Dialog.vue.d.ts +51 -0
- package/dist/components/dialog/Dialog.vue.js +113 -0
- package/dist/components/dialog/Dialog.vue2.js +4 -0
- package/dist/components/dialog/DialogSurface.vue.d.ts +18 -0
- package/dist/components/dialog/DialogSurface.vue.js +7 -0
- package/dist/components/dialog/DialogSurface.vue2.js +111 -0
- package/dist/components/dialog/index.d.ts +2 -0
- package/dist/components/dialog/types.d.ts +60 -0
- package/dist/components/dim-siblings/DimSiblings.vue.d.ts +40 -0
- package/dist/components/dim-siblings/DimSiblings.vue.js +7 -0
- package/dist/components/dim-siblings/DimSiblings.vue2.js +45 -0
- package/dist/components/dim-siblings/index.d.ts +2 -0
- package/dist/components/direction-aware-hover/DirectionAwareHover.vue.d.ts +18 -0
- package/dist/components/direction-aware-hover/DirectionAwareHover.vue.js +7 -0
- package/dist/components/direction-aware-hover/DirectionAwareHover.vue2.js +233 -0
- package/dist/components/direction-aware-hover/index.d.ts +2 -0
- package/dist/components/displacement-text/DisplacementText.vue.d.ts +29 -0
- package/dist/components/displacement-text/DisplacementText.vue.js +58 -0
- package/dist/components/displacement-text/DisplacementText.vue2.js +4 -0
- package/dist/components/displacement-text/displacement-text-core.d.ts +37 -0
- package/dist/components/displacement-text/displacement-text-core.js +214 -0
- package/dist/components/displacement-text/index.d.ts +2 -0
- package/dist/components/dock/Dock.vue.d.ts +38 -0
- package/dist/components/dock/Dock.vue.js +7 -0
- package/dist/components/dock/Dock.vue2.js +138 -0
- package/dist/components/dock/DockIcon.vue.d.ts +34 -0
- package/dist/components/dock/DockIcon.vue.js +10 -0
- package/dist/components/dock/DockIcon.vue2.js +54 -0
- package/dist/components/dock/DockSeparator.vue.d.ts +9 -0
- package/dist/components/dock/DockSeparator.vue.js +31 -0
- package/dist/components/dock/DockSeparator.vue2.js +4 -0
- package/dist/components/dock/index.d.ts +7 -0
- package/dist/components/dock/types.d.ts +45 -0
- package/dist/components/dock/types.js +18 -0
- package/dist/components/drawer/Drawer.vue.d.ts +56 -0
- package/dist/components/drawer/Drawer.vue.js +7 -0
- package/dist/components/drawer/Drawer.vue2.js +239 -0
- package/dist/components/drawer/index.d.ts +2 -0
- package/dist/components/dropdown-menu/DropdownMenu.vue.d.ts +38 -0
- package/dist/components/dropdown-menu/DropdownMenu.vue.js +89 -0
- package/dist/components/dropdown-menu/DropdownMenu.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuContent.vue.d.ts +17 -0
- package/dist/components/dropdown-menu/DropdownMenuContent.vue.js +108 -0
- package/dist/components/dropdown-menu/DropdownMenuContent.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuItem.vue.d.ts +28 -0
- package/dist/components/dropdown-menu/DropdownMenuItem.vue.js +82 -0
- package/dist/components/dropdown-menu/DropdownMenuItem.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuLabel.vue.d.ts +15 -0
- package/dist/components/dropdown-menu/DropdownMenuLabel.vue.js +27 -0
- package/dist/components/dropdown-menu/DropdownMenuLabel.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuSeparator.vue.d.ts +8 -0
- package/dist/components/dropdown-menu/DropdownMenuSeparator.vue.js +23 -0
- package/dist/components/dropdown-menu/DropdownMenuSeparator.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuSub.vue.d.ts +12 -0
- package/dist/components/dropdown-menu/DropdownMenuSub.vue.js +94 -0
- package/dist/components/dropdown-menu/DropdownMenuSub.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuSubContent.vue.d.ts +17 -0
- package/dist/components/dropdown-menu/DropdownMenuSubContent.vue.js +137 -0
- package/dist/components/dropdown-menu/DropdownMenuSubContent.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuSubTrigger.vue.d.ts +20 -0
- package/dist/components/dropdown-menu/DropdownMenuSubTrigger.vue.js +116 -0
- package/dist/components/dropdown-menu/DropdownMenuSubTrigger.vue2.js +4 -0
- package/dist/components/dropdown-menu/DropdownMenuTrigger.vue.d.ts +19 -0
- package/dist/components/dropdown-menu/DropdownMenuTrigger.vue.js +7 -0
- package/dist/components/dropdown-menu/DropdownMenuTrigger.vue2.js +74 -0
- package/dist/components/dropdown-menu/index.d.ts +20 -0
- package/dist/components/dropdown-menu/menu-shared.d.ts +42 -0
- package/dist/components/dropdown-menu/menu-shared.js +47 -0
- package/dist/components/dropdown-menu/types.d.ts +150 -0
- package/dist/components/dropdown-menu/types.js +11 -0
- package/dist/components/editorial-engine/EditorialEngine.vue.d.ts +24 -0
- package/dist/components/editorial-engine/EditorialEngine.vue.js +7 -0
- package/dist/components/editorial-engine/EditorialEngine.vue2.js +94 -0
- package/dist/components/editorial-engine/engine.d.ts +7 -0
- package/dist/components/editorial-engine/engine.js +544 -0
- package/dist/components/editorial-engine/index.d.ts +2 -0
- package/dist/components/file-upload/FileUpload.vue.d.ts +62 -0
- package/dist/components/file-upload/FileUpload.vue.js +7 -0
- package/dist/components/file-upload/FileUpload.vue2.js +388 -0
- package/dist/components/file-upload/index.d.ts +2 -0
- package/dist/components/fireworks-hdr/FireworksHdr.vue.d.ts +56 -0
- package/dist/components/fireworks-hdr/FireworksHdr.vue.js +95 -0
- package/dist/components/fireworks-hdr/FireworksHdr.vue2.js +4 -0
- package/dist/components/fireworks-hdr/fireworks-hdr-core.d.ts +103 -0
- package/dist/components/fireworks-hdr/fireworks-hdr-core.js +421 -0
- package/dist/components/fireworks-hdr/fireworks-shared.d.ts +444 -0
- package/dist/components/fireworks-hdr/fireworks-shared.js +1204 -0
- package/dist/components/fireworks-hdr/index.d.ts +4 -0
- package/dist/components/fireworks-hdr/webgl2-renderer.d.ts +20 -0
- package/dist/components/fireworks-hdr/webgl2-renderer.js +497 -0
- package/dist/components/fireworks-hdr/webgpu-renderer.d.ts +51 -0
- package/dist/components/fireworks-hdr/webgpu-renderer.js +441 -0
- package/dist/components/flickering-grid/FlickeringGrid.vue.d.ts +28 -0
- package/dist/components/flickering-grid/FlickeringGrid.vue.js +75 -0
- package/dist/components/flickering-grid/FlickeringGrid.vue2.js +4 -0
- package/dist/components/flickering-grid/flickering-grid-core.d.ts +42 -0
- package/dist/components/flickering-grid/flickering-grid-core.js +105 -0
- package/dist/components/flickering-grid/index.d.ts +2 -0
- package/dist/components/flip-card/FlipCard.vue.d.ts +61 -0
- package/dist/components/flip-card/FlipCard.vue.js +10 -0
- package/dist/components/flip-card/FlipCard.vue2.js +197 -0
- package/dist/components/flip-card/index.d.ts +2 -0
- package/dist/components/flip-words/FlipWords.vue.d.ts +19 -0
- package/dist/components/flip-words/FlipWords.vue.js +8 -0
- package/dist/components/flip-words/FlipWords.vue2.js +93 -0
- package/dist/components/flip-words/index.d.ts +2 -0
- package/dist/components/fluid-cursor/FluidCursor.vue.d.ts +17 -0
- package/dist/components/fluid-cursor/FluidCursor.vue.js +114 -0
- package/dist/components/fluid-cursor/FluidCursor.vue2.js +4 -0
- package/dist/components/fluid-cursor/fluid-cursor-core.d.ts +146 -0
- package/dist/components/fluid-cursor/fluid-cursor-core.js +1469 -0
- package/dist/components/fluid-cursor/fluid-shared.d.ts +90 -0
- package/dist/components/fluid-cursor/fluid-shared.js +124 -0
- package/dist/components/fluid-cursor/index.d.ts +8 -0
- package/dist/components/fluid-cursor/webgpu-engine.d.ts +42 -0
- package/dist/components/fluid-cursor/webgpu-engine.js +922 -0
- package/dist/components/focus/Focus.vue.d.ts +20 -0
- package/dist/components/focus/Focus.vue.js +7 -0
- package/dist/components/focus/Focus.vue2.js +126 -0
- package/dist/components/focus/index.d.ts +2 -0
- package/dist/components/form-field/FormField.vue.d.ts +48 -0
- package/dist/components/form-field/FormField.vue.js +7 -0
- package/dist/components/form-field/FormField.vue2.js +158 -0
- package/dist/components/form-field/index.d.ts +2 -0
- package/dist/components/frosted-glass/FrostedGlass.vue.d.ts +56 -0
- package/dist/components/frosted-glass/FrostedGlass.vue.js +7 -0
- package/dist/components/frosted-glass/FrostedGlass.vue2.js +102 -0
- package/dist/components/frosted-glass/index.d.ts +2 -0
- package/dist/components/glare-card/GlareCard.vue.d.ts +15 -0
- package/dist/components/glare-card/GlareCard.vue.js +7 -0
- package/dist/components/glare-card/GlareCard.vue2.js +101 -0
- package/dist/components/glare-card/index.d.ts +2 -0
- package/dist/components/glow-border/GlowBorder.vue.d.ts +50 -0
- package/dist/components/glow-border/GlowBorder.vue.js +13 -0
- package/dist/components/glow-border/GlowBorder.vue2.js +131 -0
- package/dist/components/glow-border/index.d.ts +2 -0
- package/dist/components/glowing-effect/GlowingEffect.vue.d.ts +26 -0
- package/dist/components/glowing-effect/GlowingEffect.vue.js +103 -0
- package/dist/components/glowing-effect/GlowingEffect.vue2.js +4 -0
- package/dist/components/glowing-effect/glowing-effect-core.d.ts +54 -0
- package/dist/components/glowing-effect/glowing-effect-core.js +91 -0
- package/dist/components/glowing-effect/index.d.ts +2 -0
- package/dist/components/gradient-button/GradientButton.vue.d.ts +41 -0
- package/dist/components/gradient-button/GradientButton.vue.js +9 -0
- package/dist/components/gradient-button/GradientButton.vue2.js +79 -0
- package/dist/components/gradient-button/index.d.ts +2 -0
- package/dist/components/hover-card/HoverCard.vue.d.ts +61 -0
- package/dist/components/hover-card/HoverCard.vue.js +141 -0
- package/dist/components/hover-card/HoverCard.vue2.js +4 -0
- package/dist/components/hover-card/index.d.ts +2 -0
- package/dist/components/hyper-text/HyperText.vue.d.ts +28 -0
- package/dist/components/hyper-text/HyperText.vue.js +99 -0
- package/dist/components/hyper-text/HyperText.vue3.js +5 -0
- package/dist/components/hyper-text/index.d.ts +2 -0
- package/dist/components/icon-button/IconButton.vue.d.ts +56 -0
- package/dist/components/icon-button/IconButton.vue.js +72 -0
- package/dist/components/icon-button/IconButton.vue2.js +4 -0
- package/dist/components/icon-button/index.d.ts +2 -0
- package/dist/components/image-generation/ImageGeneration.vue.d.ts +35 -0
- package/dist/components/image-generation/ImageGeneration.vue.js +7 -0
- package/dist/components/image-generation/ImageGeneration.vue2.js +126 -0
- package/dist/components/image-generation/index.d.ts +3 -0
- package/dist/components/image-trail-cursor/ImageTrailCursor.vue.d.ts +26 -0
- package/dist/components/image-trail-cursor/ImageTrailCursor.vue.js +81 -0
- package/dist/components/image-trail-cursor/ImageTrailCursor.vue2.js +4 -0
- package/dist/components/image-trail-cursor/index.d.ts +3 -0
- package/dist/components/image-trail-cursor/trail-variants.d.ts +148 -0
- package/dist/components/image-trail-cursor/trail-variants.js +1109 -0
- package/dist/components/inline-citation/InlineCitation.vue.d.ts +32 -0
- package/dist/components/inline-citation/InlineCitation.vue.js +7 -0
- package/dist/components/inline-citation/InlineCitation.vue2.js +164 -0
- package/dist/components/inline-citation/index.d.ts +2 -0
- package/dist/components/input/Input.vue.d.ts +53 -0
- package/dist/components/input/Input.vue.js +7 -0
- package/dist/components/input/Input.vue2.js +78 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/interactive-grid-pattern/InteractiveGridPattern.vue.d.ts +20 -0
- package/dist/components/interactive-grid-pattern/InteractiveGridPattern.vue.js +7 -0
- package/dist/components/interactive-grid-pattern/InteractiveGridPattern.vue2.js +61 -0
- package/dist/components/interactive-grid-pattern/index.d.ts +2 -0
- package/dist/components/interactive-hover-button/InteractiveHoverButton.vue.d.ts +28 -0
- package/dist/components/interactive-hover-button/InteractiveHoverButton.vue.js +7 -0
- package/dist/components/interactive-hover-button/InteractiveHoverButton.vue2.js +82 -0
- package/dist/components/interactive-hover-button/index.d.ts +2 -0
- package/dist/components/label/Label.vue.d.ts +21 -0
- package/dist/components/label/Label.vue.js +43 -0
- package/dist/components/label/Label.vue2.js +4 -0
- package/dist/components/label/index.d.ts +2 -0
- package/dist/components/letter-pullup/LetterPullup.vue.d.ts +18 -0
- package/dist/components/letter-pullup/LetterPullup.vue.js +40 -0
- package/dist/components/letter-pullup/LetterPullup.vue3.js +5 -0
- package/dist/components/letter-pullup/index.d.ts +2 -0
- package/dist/components/line-hover-link/LineHoverLink.vue.d.ts +53 -0
- package/dist/components/line-hover-link/LineHoverLink.vue.js +7 -0
- package/dist/components/line-hover-link/LineHoverLink.vue2.js +72 -0
- package/dist/components/line-hover-link/index.d.ts +2 -0
- package/dist/components/line-reveal/LineReveal.vue.d.ts +34 -0
- package/dist/components/line-reveal/LineReveal.vue.js +7 -0
- package/dist/components/line-reveal/LineReveal.vue2.js +115 -0
- package/dist/components/line-reveal/index.d.ts +2 -0
- package/dist/components/line-shadow-text/LineShadowText.vue.d.ts +10 -0
- package/dist/components/line-shadow-text/LineShadowText.vue.js +8 -0
- package/dist/components/line-shadow-text/LineShadowText.vue2.js +30 -0
- package/dist/components/line-shadow-text/index.d.ts +2 -0
- package/dist/components/link/Link.vue.d.ts +39 -0
- package/dist/components/link/Link.vue.js +7 -0
- package/dist/components/link/Link.vue2.js +81 -0
- package/dist/components/link/index.d.ts +2 -0
- package/dist/components/liquid-glass/LiquidGlass.vue.d.ts +57 -0
- package/dist/components/liquid-glass/LiquidGlass.vue.js +7 -0
- package/dist/components/liquid-glass/LiquidGlass.vue2.js +169 -0
- package/dist/components/liquid-glass/index.d.ts +2 -0
- package/dist/components/liquid-text/LiquidText.vue.d.ts +38 -0
- package/dist/components/liquid-text/LiquidText.vue.js +7 -0
- package/dist/components/liquid-text/LiquidText.vue2.js +200 -0
- package/dist/components/liquid-text/index.d.ts +2 -0
- package/dist/components/liquid-text/liquid-text-core.d.ts +120 -0
- package/dist/components/liquid-text/liquid-text-core.js +741 -0
- package/dist/components/logo-cloud/AnimatedLogoCloud.vue.d.ts +16 -0
- package/dist/components/logo-cloud/AnimatedLogoCloud.vue.js +7 -0
- package/dist/components/logo-cloud/AnimatedLogoCloud.vue2.js +49 -0
- package/dist/components/logo-cloud/IconLogoCloud.vue.d.ts +13 -0
- package/dist/components/logo-cloud/IconLogoCloud.vue.js +42 -0
- package/dist/components/logo-cloud/IconLogoCloud.vue2.js +4 -0
- package/dist/components/logo-cloud/StaticLogoCloud.vue.d.ts +31 -0
- package/dist/components/logo-cloud/StaticLogoCloud.vue.js +62 -0
- package/dist/components/logo-cloud/StaticLogoCloud.vue2.js +4 -0
- package/dist/components/logo-cloud/index.d.ts +6 -0
- package/dist/components/magnetic/Magnetic.vue.d.ts +44 -0
- package/dist/components/magnetic/Magnetic.vue.js +7 -0
- package/dist/components/magnetic/Magnetic.vue2.js +129 -0
- package/dist/components/magnetic/index.d.ts +2 -0
- package/dist/components/marquee/Marquee.vue.d.ts +36 -0
- package/dist/components/marquee/Marquee.vue.js +7 -0
- package/dist/components/marquee/Marquee.vue2.js +186 -0
- package/dist/components/marquee/ReviewCard.vue.d.ts +16 -0
- package/dist/components/marquee/ReviewCard.vue.js +7 -0
- package/dist/components/marquee/ReviewCard.vue2.js +48 -0
- package/dist/components/marquee/index.d.ts +4 -0
- package/dist/components/matrix-rain/MatrixRain.vue.d.ts +12 -0
- package/dist/components/matrix-rain/MatrixRain.vue.js +57 -0
- package/dist/components/matrix-rain/MatrixRain.vue2.js +4 -0
- package/dist/components/matrix-rain/index.d.ts +2 -0
- package/dist/components/matrix-rain/matrix-rain-core.d.ts +27 -0
- package/dist/components/matrix-rain/matrix-rain-core.js +108 -0
- package/dist/components/meteors/Meteors.vue.d.ts +46 -0
- package/dist/components/meteors/Meteors.vue.js +9 -0
- package/dist/components/meteors/Meteors.vue2.js +83 -0
- package/dist/components/meteors/index.d.ts +2 -0
- package/dist/components/mosaic-glow/MosaicGlow.vue.d.ts +60 -0
- package/dist/components/mosaic-glow/MosaicGlow.vue.js +147 -0
- package/dist/components/mosaic-glow/MosaicGlow.vue2.js +4 -0
- package/dist/components/mosaic-glow/index.d.ts +2 -0
- package/dist/components/mosaic-glow/mosaic-glow-core.d.ts +182 -0
- package/dist/components/mosaic-glow/mosaic-glow-core.js +534 -0
- package/dist/components/navbar/Navbar.vue.d.ts +28 -0
- package/dist/components/navbar/Navbar.vue.js +7 -0
- package/dist/components/navbar/Navbar.vue2.js +61 -0
- package/dist/components/navbar/NavbarLink.vue.d.ts +40 -0
- package/dist/components/navbar/NavbarLink.vue.js +7 -0
- package/dist/components/navbar/NavbarLink.vue2.js +63 -0
- package/dist/components/navbar/index.d.ts +4 -0
- package/dist/components/navigation-menu/NavigationMenu.vue.d.ts +36 -0
- package/dist/components/navigation-menu/NavigationMenu.vue.js +202 -0
- package/dist/components/navigation-menu/NavigationMenu.vue2.js +4 -0
- package/dist/components/navigation-menu/NavigationMenuContent.vue.d.ts +18 -0
- package/dist/components/navigation-menu/NavigationMenuContent.vue.js +7 -0
- package/dist/components/navigation-menu/NavigationMenuContent.vue2.js +90 -0
- package/dist/components/navigation-menu/NavigationMenuItem.vue.d.ts +18 -0
- package/dist/components/navigation-menu/NavigationMenuItem.vue.js +37 -0
- package/dist/components/navigation-menu/NavigationMenuItem.vue2.js +4 -0
- package/dist/components/navigation-menu/NavigationMenuLink.vue.d.ts +30 -0
- package/dist/components/navigation-menu/NavigationMenuLink.vue.js +7 -0
- package/dist/components/navigation-menu/NavigationMenuLink.vue2.js +55 -0
- package/dist/components/navigation-menu/NavigationMenuList.vue.d.ts +18 -0
- package/dist/components/navigation-menu/NavigationMenuList.vue.js +31 -0
- package/dist/components/navigation-menu/NavigationMenuList.vue2.js +4 -0
- package/dist/components/navigation-menu/NavigationMenuTrigger.vue.d.ts +18 -0
- package/dist/components/navigation-menu/NavigationMenuTrigger.vue.js +7 -0
- package/dist/components/navigation-menu/NavigationMenuTrigger.vue2.js +111 -0
- package/dist/components/navigation-menu/index.d.ts +14 -0
- package/dist/components/navigation-menu/types.d.ts +97 -0
- package/dist/components/navigation-menu/types.js +7 -0
- package/dist/components/neon-border/NeonBorder.vue.d.ts +48 -0
- package/dist/components/neon-border/NeonBorder.vue.js +11 -0
- package/dist/components/neon-border/NeonBorder.vue2.js +88 -0
- package/dist/components/neon-border/index.d.ts +2 -0
- package/dist/components/noise-reveal/NoiseReveal.vue.d.ts +20 -0
- package/dist/components/noise-reveal/NoiseReveal.vue.js +99 -0
- package/dist/components/noise-reveal/NoiseReveal.vue2.js +4 -0
- package/dist/components/noise-reveal/index.d.ts +2 -0
- package/dist/components/noise-reveal/noise-reveal-core.d.ts +57 -0
- package/dist/components/noise-reveal/noise-reveal-core.js +272 -0
- package/dist/components/number-input/NumberInput.vue.d.ts +47 -0
- package/dist/components/number-input/NumberInput.vue.js +7 -0
- package/dist/components/number-input/NumberInput.vue2.js +208 -0
- package/dist/components/number-input/index.d.ts +2 -0
- package/dist/components/number-ticker/NumberTicker.vue.d.ts +24 -0
- package/dist/components/number-ticker/NumberTicker.vue.js +105 -0
- package/dist/components/number-ticker/NumberTicker.vue2.js +4 -0
- package/dist/components/number-ticker/index.d.ts +2 -0
- package/dist/components/pagination/Pagination.vue.d.ts +49 -0
- package/dist/components/pagination/Pagination.vue.js +7 -0
- package/dist/components/pagination/Pagination.vue2.js +255 -0
- package/dist/components/pagination/index.d.ts +2 -0
- package/dist/components/pagination/pagination-range.d.ts +11 -0
- package/dist/components/pagination/pagination-range.js +34 -0
- package/dist/components/password-input/PasswordInput.vue.d.ts +58 -0
- package/dist/components/password-input/PasswordInput.vue.js +7 -0
- package/dist/components/password-input/PasswordInput.vue2.js +256 -0
- package/dist/components/password-input/index.d.ts +2 -0
- package/dist/components/pixel-loader/PixelLoader.vue.d.ts +24 -0
- package/dist/components/pixel-loader/PixelLoader.vue.js +7 -0
- package/dist/components/pixel-loader/PixelLoader.vue2.js +64 -0
- package/dist/components/pixel-loader/index.d.ts +3 -0
- package/dist/components/popover/Popover.vue.d.ts +50 -0
- package/dist/components/popover/Popover.vue.js +7 -0
- package/dist/components/popover/Popover.vue2.js +97 -0
- package/dist/components/popover/PopoverContent.vue.d.ts +18 -0
- package/dist/components/popover/PopoverContent.vue.js +84 -0
- package/dist/components/popover/PopoverContent.vue2.js +4 -0
- package/dist/components/popover/index.d.ts +5 -0
- package/dist/components/popover/types.d.ts +65 -0
- package/dist/components/popover/types.js +7 -0
- package/dist/components/presence/Presence.vue.d.ts +57 -0
- package/dist/components/presence/Presence.vue.js +64 -0
- package/dist/components/presence/Presence.vue2.js +4 -0
- package/dist/components/presence/index.d.ts +2 -0
- package/dist/components/pressable/Pressable.vue.d.ts +36 -0
- package/dist/components/pressable/Pressable.vue.js +7 -0
- package/dist/components/pressable/Pressable.vue2.js +92 -0
- package/dist/components/pressable/index.d.ts +2 -0
- package/dist/components/prompt-suggestions/PromptSuggestions.vue.d.ts +37 -0
- package/dist/components/prompt-suggestions/PromptSuggestions.vue.js +7 -0
- package/dist/components/prompt-suggestions/PromptSuggestions.vue2.js +79 -0
- package/dist/components/prompt-suggestions/index.d.ts +2 -0
- package/dist/components/pulse-beam/PulseBeam.vue.d.ts +54 -0
- package/dist/components/pulse-beam/PulseBeam.vue.js +7 -0
- package/dist/components/pulse-beam/PulseBeam.vue2.js +195 -0
- package/dist/components/pulse-beam/index.d.ts +2 -0
- package/dist/components/pulse-beam/pulse-beam-data.d.ts +81 -0
- package/dist/components/pulse-beam/pulse-beam-data.js +305 -0
- package/dist/components/pulse-beam/pulse-beam-loop.d.ts +26 -0
- package/dist/components/pulse-beam/pulse-beam-loop.js +57 -0
- package/dist/components/radio-group/RadioGroup.vue.d.ts +58 -0
- package/dist/components/radio-group/RadioGroup.vue.js +106 -0
- package/dist/components/radio-group/RadioGroup.vue2.js +4 -0
- package/dist/components/radio-group/RadioGroupItem.vue.d.ts +24 -0
- package/dist/components/radio-group/RadioGroupItem.vue.js +7 -0
- package/dist/components/radio-group/RadioGroupItem.vue2.js +62 -0
- package/dist/components/radio-group/index.d.ts +6 -0
- package/dist/components/radio-group/types.d.ts +50 -0
- package/dist/components/radio-group/types.js +4 -0
- package/dist/components/rainbow-button/RainbowButton.vue.d.ts +36 -0
- package/dist/components/rainbow-button/RainbowButton.vue.js +8 -0
- package/dist/components/rainbow-button/RainbowButton.vue2.js +94 -0
- package/dist/components/rainbow-button/index.d.ts +2 -0
- package/dist/components/reasoning-panel/ReasoningPanel.vue.d.ts +46 -0
- package/dist/components/reasoning-panel/ReasoningPanel.vue.js +7 -0
- package/dist/components/reasoning-panel/ReasoningPanel.vue2.js +180 -0
- package/dist/components/reasoning-panel/index.d.ts +3 -0
- package/dist/components/recommendation-card/RecommendationCard.vue.d.ts +56 -0
- package/dist/components/recommendation-card/RecommendationCard.vue.js +7 -0
- package/dist/components/recommendation-card/RecommendationCard.vue2.js +243 -0
- package/dist/components/recommendation-card/index.d.ts +2 -0
- package/dist/components/reveal/Reveal.vue.d.ts +47 -0
- package/dist/components/reveal/Reveal.vue.js +7 -0
- package/dist/components/reveal/Reveal.vue2.js +187 -0
- package/dist/components/reveal/index.d.ts +2 -0
- package/dist/components/ripple/Ripple.vue.d.ts +14 -0
- package/dist/components/ripple/Ripple.vue.js +8 -0
- package/dist/components/ripple/Ripple.vue2.js +43 -0
- package/dist/components/ripple/index.d.ts +2 -0
- package/dist/components/ripple-button/RippleButton.vue.d.ts +47 -0
- package/dist/components/ripple-button/RippleButton.vue.js +9 -0
- package/dist/components/ripple-button/RippleButton.vue2.js +104 -0
- package/dist/components/ripple-button/index.d.ts +2 -0
- package/dist/components/scroll-anchor/ScrollAnchor.vue.d.ts +43 -0
- package/dist/components/scroll-anchor/ScrollAnchor.vue.js +7 -0
- package/dist/components/scroll-anchor/ScrollAnchor.vue2.js +99 -0
- package/dist/components/scroll-anchor/index.d.ts +2 -0
- package/dist/components/scroll-progress/ScrollProgress.vue.d.ts +37 -0
- package/dist/components/scroll-progress/ScrollProgress.vue.js +7 -0
- package/dist/components/scroll-progress/ScrollProgress.vue2.js +99 -0
- package/dist/components/scroll-progress/index.d.ts +2 -0
- package/dist/components/search-input/SearchInput.vue.d.ts +57 -0
- package/dist/components/search-input/SearchInput.vue.js +7 -0
- package/dist/components/search-input/SearchInput.vue2.js +197 -0
- package/dist/components/search-input/index.d.ts +2 -0
- package/dist/components/select/Select.vue.d.ts +57 -0
- package/dist/components/select/Select.vue.js +7 -0
- package/dist/components/select/Select.vue2.js +283 -0
- package/dist/components/select/SelectPanel.vue.d.ts +10 -0
- package/dist/components/select/SelectPanel.vue.js +7 -0
- package/dist/components/select/SelectPanel.vue2.js +123 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/types.d.ts +80 -0
- package/dist/components/select/types.js +5 -0
- package/dist/components/sheet/Sheet.vue.d.ts +56 -0
- package/dist/components/sheet/Sheet.vue.js +197 -0
- package/dist/components/sheet/Sheet.vue2.js +4 -0
- package/dist/components/sheet/index.d.ts +2 -0
- package/dist/components/shimmer-button/ShimmerButton.vue.d.ts +32 -0
- package/dist/components/shimmer-button/ShimmerButton.vue.js +7 -0
- package/dist/components/shimmer-button/ShimmerButton.vue2.js +75 -0
- package/dist/components/shimmer-button/index.d.ts +2 -0
- package/dist/components/sidebar/Sidebar.vue.d.ts +27 -0
- package/dist/components/sidebar/Sidebar.vue.js +7 -0
- package/dist/components/sidebar/Sidebar.vue2.js +43 -0
- package/dist/components/sidebar/SidebarFooter.vue.d.ts +20 -0
- package/dist/components/sidebar/SidebarFooter.vue.js +52 -0
- package/dist/components/sidebar/SidebarFooter.vue2.js +4 -0
- package/dist/components/sidebar/SidebarGroup.vue.d.ts +18 -0
- package/dist/components/sidebar/SidebarGroup.vue.js +43 -0
- package/dist/components/sidebar/SidebarGroup.vue2.js +4 -0
- package/dist/components/sidebar/SidebarItem.vue.d.ts +43 -0
- package/dist/components/sidebar/SidebarItem.vue.js +7 -0
- package/dist/components/sidebar/SidebarItem.vue2.js +123 -0
- package/dist/components/sidebar/SidebarSeparator.vue.d.ts +10 -0
- package/dist/components/sidebar/SidebarSeparator.vue.js +23 -0
- package/dist/components/sidebar/SidebarSeparator.vue2.js +4 -0
- package/dist/components/sidebar/index.d.ts +11 -0
- package/dist/components/sidebar/types.d.ts +34 -0
- package/dist/components/sidebar/types.js +4 -0
- package/dist/components/skeleton/Skeleton.vue.d.ts +41 -0
- package/dist/components/skeleton/Skeleton.vue.js +7 -0
- package/dist/components/skeleton/Skeleton.vue2.js +140 -0
- package/dist/components/skeleton/index.d.ts +3 -0
- package/dist/components/slider/Slider.vue.d.ts +45 -0
- package/dist/components/slider/Slider.vue.js +7 -0
- package/dist/components/slider/Slider.vue2.js +113 -0
- package/dist/components/slider/index.d.ts +2 -0
- package/dist/components/smooth-cursor/SmoothCursor.vue.d.ts +30 -0
- package/dist/components/smooth-cursor/SmoothCursor.vue.js +7 -0
- package/dist/components/smooth-cursor/SmoothCursor.vue2.js +161 -0
- package/dist/components/smooth-cursor/index.d.ts +2 -0
- package/dist/components/smooth-cursor/smooth-cursor-core.d.ts +85 -0
- package/dist/components/smooth-cursor/smooth-cursor-core.js +326 -0
- package/dist/components/sources/SourceCard.vue.d.ts +28 -0
- package/dist/components/sources/SourceCard.vue.js +7 -0
- package/dist/components/sources/SourceCard.vue2.js +66 -0
- package/dist/components/sources/Sources.vue.d.ts +42 -0
- package/dist/components/sources/Sources.vue.js +68 -0
- package/dist/components/sources/Sources.vue2.js +4 -0
- package/dist/components/sources/SourcesList.vue.d.ts +23 -0
- package/dist/components/sources/SourcesList.vue.js +7 -0
- package/dist/components/sources/SourcesList.vue2.js +50 -0
- package/dist/components/sources/SourcesTrigger.vue.d.ts +13 -0
- package/dist/components/sources/SourcesTrigger.vue.js +7 -0
- package/dist/components/sources/SourcesTrigger.vue2.js +66 -0
- package/dist/components/sources/index.d.ts +9 -0
- package/dist/components/sources/types.d.ts +38 -0
- package/dist/components/sources/types.js +4 -0
- package/dist/components/sparkles/Sparkles.vue.d.ts +31 -0
- package/dist/components/sparkles/Sparkles.vue.js +60 -0
- package/dist/components/sparkles/Sparkles.vue2.js +4 -0
- package/dist/components/sparkles/index.d.ts +2 -0
- package/dist/components/sparkles/sparkles-core.d.ts +26 -0
- package/dist/components/sparkles/sparkles-core.js +81 -0
- package/dist/components/sparkles-text/SparklesText.vue.d.ts +31 -0
- package/dist/components/sparkles-text/SparklesText.vue.js +90 -0
- package/dist/components/sparkles-text/SparklesText.vue3.js +5 -0
- package/dist/components/sparkles-text/index.d.ts +2 -0
- package/dist/components/status-morph/StatusMorph.vue.d.ts +61 -0
- package/dist/components/status-morph/StatusMorph.vue.js +7 -0
- package/dist/components/status-morph/StatusMorph.vue2.js +116 -0
- package/dist/components/status-morph/index.d.ts +2 -0
- package/dist/components/stepper/Step.vue.d.ts +28 -0
- package/dist/components/stepper/Step.vue.js +7 -0
- package/dist/components/stepper/Step.vue2.js +232 -0
- package/dist/components/stepper/Stepper.vue.d.ts +38 -0
- package/dist/components/stepper/Stepper.vue.js +109 -0
- package/dist/components/stepper/Stepper.vue2.js +4 -0
- package/dist/components/stepper/index.d.ts +6 -0
- package/dist/components/stepper/types.d.ts +58 -0
- package/dist/components/stepper/types.js +5 -0
- package/dist/components/sticky-scroll/StickyScroll.vue.d.ts +63 -0
- package/dist/components/sticky-scroll/StickyScroll.vue.js +7 -0
- package/dist/components/sticky-scroll/StickyScroll.vue2.js +133 -0
- package/dist/components/sticky-scroll/StickyScrollItem.vue.d.ts +27 -0
- package/dist/components/sticky-scroll/StickyScrollItem.vue.js +38 -0
- package/dist/components/sticky-scroll/StickyScrollItem.vue2.js +4 -0
- package/dist/components/sticky-scroll/index.d.ts +2 -0
- package/dist/components/streaming-text/StreamingText.vue.d.ts +28 -0
- package/dist/components/streaming-text/StreamingText.vue.js +7 -0
- package/dist/components/streaming-text/StreamingText.vue2.js +68 -0
- package/dist/components/streaming-text/index.d.ts +2 -0
- package/dist/components/subagent-list/SubagentList.vue.d.ts +41 -0
- package/dist/components/subagent-list/SubagentList.vue.js +7 -0
- package/dist/components/subagent-list/SubagentList.vue2.js +248 -0
- package/dist/components/subagent-list/index.d.ts +2 -0
- package/dist/components/switch/Switch.vue.d.ts +59 -0
- package/dist/components/switch/Switch.vue.js +7 -0
- package/dist/components/switch/Switch.vue2.js +84 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/tabs/Tabs.vue.d.ts +44 -0
- package/dist/components/tabs/Tabs.vue.js +7 -0
- package/dist/components/tabs/Tabs.vue2.js +131 -0
- package/dist/components/tabs/TabsContent.vue.d.ts +27 -0
- package/dist/components/tabs/TabsContent.vue.js +82 -0
- package/dist/components/tabs/TabsContent.vue2.js +4 -0
- package/dist/components/tabs/TabsList.vue.d.ts +17 -0
- package/dist/components/tabs/TabsList.vue.js +7 -0
- package/dist/components/tabs/TabsList.vue2.js +155 -0
- package/dist/components/tabs/TabsTrigger.vue.d.ts +21 -0
- package/dist/components/tabs/TabsTrigger.vue.js +7 -0
- package/dist/components/tabs/TabsTrigger.vue2.js +151 -0
- package/dist/components/tabs/index.d.ts +10 -0
- package/dist/components/tabs/types.d.ts +67 -0
- package/dist/components/tabs/types.js +7 -0
- package/dist/components/terminal-block/TerminalBlock.vue.d.ts +37 -0
- package/dist/components/terminal-block/TerminalBlock.vue.js +7 -0
- package/dist/components/terminal-block/TerminalBlock.vue2.js +158 -0
- package/dist/components/terminal-block/ansi.d.ts +30 -0
- package/dist/components/terminal-block/ansi.js +113 -0
- package/dist/components/terminal-block/index.d.ts +2 -0
- package/dist/components/terminal-text/TerminalText.vue.d.ts +14 -0
- package/dist/components/terminal-text/TerminalText.vue.js +7 -0
- package/dist/components/terminal-text/TerminalText.vue2.js +167 -0
- package/dist/components/terminal-text/index.d.ts +2 -0
- package/dist/components/text-generate-effect/TextGenerateEffect.vue.d.ts +12 -0
- package/dist/components/text-generate-effect/TextGenerateEffect.vue.js +74 -0
- package/dist/components/text-generate-effect/TextGenerateEffect.vue2.js +4 -0
- package/dist/components/text-generate-effect/index.d.ts +2 -0
- package/dist/components/text-reveal-card/TextRevealCard.vue.d.ts +27 -0
- package/dist/components/text-reveal-card/TextRevealCard.vue.js +104 -0
- package/dist/components/text-reveal-card/TextRevealCard.vue2.js +4 -0
- package/dist/components/text-reveal-card/TextRevealStars.vue.d.ts +18 -0
- package/dist/components/text-reveal-card/TextRevealStars.vue.js +8 -0
- package/dist/components/text-reveal-card/TextRevealStars.vue2.js +56 -0
- package/dist/components/text-reveal-card/index.d.ts +4 -0
- package/dist/components/text-roll/TextRoll.vue.d.ts +48 -0
- package/dist/components/text-roll/TextRoll.vue.js +7 -0
- package/dist/components/text-roll/TextRoll.vue2.js +180 -0
- package/dist/components/text-roll/index.d.ts +4 -0
- package/dist/components/text-roll/roll-transitions.d.ts +74 -0
- package/dist/components/text-roll/roll-transitions.js +30 -0
- package/dist/components/textarea/Textarea.vue.d.ts +59 -0
- package/dist/components/textarea/Textarea.vue.js +7 -0
- package/dist/components/textarea/Textarea.vue2.js +136 -0
- package/dist/components/textarea/index.d.ts +2 -0
- package/dist/components/thinking-indicator/ThinkingIndicator.vue.d.ts +32 -0
- package/dist/components/thinking-indicator/ThinkingIndicator.vue.js +7 -0
- package/dist/components/thinking-indicator/ThinkingIndicator.vue2.js +77 -0
- package/dist/components/thinking-indicator/index.d.ts +3 -0
- package/dist/components/thread-list/ThreadList.vue.d.ts +57 -0
- package/dist/components/thread-list/ThreadList.vue.js +7 -0
- package/dist/components/thread-list/ThreadList.vue2.js +157 -0
- package/dist/components/thread-list/index.d.ts +2 -0
- package/dist/components/time-picker/TimePicker.vue.d.ts +51 -0
- package/dist/components/time-picker/TimePicker.vue.js +7 -0
- package/dist/components/time-picker/TimePicker.vue2.js +265 -0
- package/dist/components/time-picker/TimePickerPanel.vue.d.ts +10 -0
- package/dist/components/time-picker/TimePickerPanel.vue.js +7 -0
- package/dist/components/time-picker/TimePickerPanel.vue2.js +96 -0
- package/dist/components/time-picker/index.d.ts +2 -0
- package/dist/components/time-picker/time-utils.d.ts +33 -0
- package/dist/components/time-picker/time-utils.js +64 -0
- package/dist/components/time-picker/types.d.ts +54 -0
- package/dist/components/time-picker/types.js +5 -0
- package/dist/components/timeline/Timeline.vue.d.ts +35 -0
- package/dist/components/timeline/Timeline.vue.js +7 -0
- package/dist/components/timeline/Timeline.vue2.js +202 -0
- package/dist/components/timeline/index.d.ts +2 -0
- package/dist/components/toast/Toast.vue.d.ts +13 -0
- package/dist/components/toast/Toast.vue.js +7 -0
- package/dist/components/toast/Toast.vue2.js +118 -0
- package/dist/components/toast/Toaster.vue.d.ts +19 -0
- package/dist/components/toast/Toaster.vue.js +176 -0
- package/dist/components/toast/Toaster.vue2.js +4 -0
- package/dist/components/toast/index.d.ts +6 -0
- package/dist/components/toast/store.d.ts +95 -0
- package/dist/components/toast/store.js +104 -0
- package/dist/components/toggle/Toggle.vue.d.ts +47 -0
- package/dist/components/toggle/Toggle.vue.js +7 -0
- package/dist/components/toggle/Toggle.vue2.js +72 -0
- package/dist/components/toggle/index.d.ts +2 -0
- package/dist/components/toggle-group/ToggleGroup.vue.d.ts +42 -0
- package/dist/components/toggle-group/ToggleGroup.vue.js +7 -0
- package/dist/components/toggle-group/ToggleGroup.vue2.js +150 -0
- package/dist/components/toggle-group/ToggleGroupItem.vue.d.ts +23 -0
- package/dist/components/toggle-group/ToggleGroupItem.vue.js +7 -0
- package/dist/components/toggle-group/ToggleGroupItem.vue2.js +122 -0
- package/dist/components/toggle-group/index.d.ts +6 -0
- package/dist/components/toggle-group/types.d.ts +51 -0
- package/dist/components/toggle-group/types.js +5 -0
- package/dist/components/tool-call/ToolCall.vue.d.ts +53 -0
- package/dist/components/tool-call/ToolCall.vue.js +7 -0
- package/dist/components/tool-call/ToolCall.vue2.js +241 -0
- package/dist/components/tool-call/index.d.ts +3 -0
- package/dist/components/tool-timeline/ToolTimeline.vue.d.ts +38 -0
- package/dist/components/tool-timeline/ToolTimeline.vue.js +7 -0
- package/dist/components/tool-timeline/ToolTimeline.vue2.js +166 -0
- package/dist/components/tool-timeline/index.d.ts +2 -0
- package/dist/components/tooltip/Tooltip.vue.d.ts +38 -0
- package/dist/components/tooltip/Tooltip.vue.js +238 -0
- package/dist/components/tooltip/Tooltip.vue2.js +4 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tracing-beam/TracingBeam.vue.d.ts +15 -0
- package/dist/components/tracing-beam/TracingBeam.vue.js +166 -0
- package/dist/components/tracing-beam/TracingBeam.vue2.js +4 -0
- package/dist/components/tracing-beam/index.d.ts +2 -0
- package/dist/components/typing-indicator/TypingIndicator.vue.d.ts +18 -0
- package/dist/components/typing-indicator/TypingIndicator.vue.js +7 -0
- package/dist/components/typing-indicator/TypingIndicator.vue2.js +53 -0
- package/dist/components/typing-indicator/index.d.ts +2 -0
- package/dist/components/voice-input/VoiceInput.vue.d.ts +57 -0
- package/dist/components/voice-input/VoiceInput.vue.js +7 -0
- package/dist/components/voice-input/VoiceInput.vue2.js +288 -0
- package/dist/components/voice-input/index.d.ts +2 -0
- package/dist/components/web-search/WebSearch.vue.d.ts +42 -0
- package/dist/components/web-search/WebSearch.vue.js +7 -0
- package/dist/components/web-search/WebSearch.vue2.js +198 -0
- package/dist/components/web-search/index.d.ts +2 -0
- package/dist/index.d.ts +149 -0
- package/dist/index.js +499 -0
- package/dist/internals/Markdown.vue.d.ts +22 -0
- package/dist/internals/Markdown.vue.js +138 -0
- package/dist/internals/Markdown.vue2.js +4 -0
- package/dist/internals/MarkdownInline.vue.d.ts +7 -0
- package/dist/internals/MarkdownInline.vue.js +57 -0
- package/dist/internals/MarkdownInline.vue2.js +4 -0
- package/dist/internals/Portal.vue.d.ts +21 -0
- package/dist/internals/Portal.vue.js +32 -0
- package/dist/internals/Portal.vue2.js +4 -0
- package/dist/internals/StreamText.vue.d.ts +15 -0
- package/dist/internals/StreamText.vue.js +37 -0
- package/dist/internals/StreamText.vue2.js +4 -0
- package/dist/internals/ai-types.d.ts +117 -0
- package/dist/internals/anchor-position.d.ts +82 -0
- package/dist/internals/anchor-position.js +144 -0
- package/dist/internals/autoscroll.d.ts +35 -0
- package/dist/internals/autoscroll.js +107 -0
- package/dist/internals/calendar-core.d.ts +26 -0
- package/dist/internals/calendar-core.js +56 -0
- package/dist/internals/clipboard.d.ts +18 -0
- package/dist/internals/clipboard.js +42 -0
- package/dist/internals/diff.d.ts +38 -0
- package/dist/internals/diff.js +175 -0
- package/dist/internals/dismissable.d.ts +34 -0
- package/dist/internals/dismissable.js +58 -0
- package/dist/internals/dom/compose-refs.d.ts +18 -0
- package/dist/internals/dom/compose-refs.js +16 -0
- package/dist/internals/dom/context.d.ts +20 -0
- package/dist/internals/dom/context.js +21 -0
- package/dist/internals/elapsed.d.ts +79 -0
- package/dist/internals/elapsed.js +81 -0
- package/dist/internals/field.d.ts +113 -0
- package/dist/internals/field.js +38 -0
- package/dist/internals/float.d.ts +50 -0
- package/dist/internals/float.js +135 -0
- package/dist/internals/focus-trap.d.ts +64 -0
- package/dist/internals/focus-trap.js +104 -0
- package/dist/internals/host.d.ts +38 -0
- package/dist/internals/host.js +23 -0
- package/dist/internals/id.d.ts +11 -0
- package/dist/internals/id.js +13 -0
- package/dist/internals/listbox.d.ts +59 -0
- package/dist/internals/listbox.js +130 -0
- package/dist/internals/markdown.d.ts +71 -0
- package/dist/internals/markdown.js +466 -0
- package/dist/internals/menu.d.ts +103 -0
- package/dist/internals/menu.js +190 -0
- package/dist/internals/motion/anchored.d.ts +104 -0
- package/dist/internals/motion/anchored.js +43 -0
- package/dist/internals/motion/animate.d.ts +92 -0
- package/dist/internals/motion/animate.js +83 -0
- package/dist/internals/motion/easing.d.ts +20 -0
- package/dist/internals/motion/easing.js +12 -0
- package/dist/internals/motion/haptics.d.ts +38 -0
- package/dist/internals/motion/haptics.js +28 -0
- package/dist/internals/motion/in-view.d.ts +30 -0
- package/dist/internals/motion/in-view.js +53 -0
- package/dist/internals/motion/media-query.d.ts +25 -0
- package/dist/internals/motion/media-query.js +41 -0
- package/dist/internals/motion/presence-core.d.ts +59 -0
- package/dist/internals/motion/presence-core.js +161 -0
- package/dist/internals/motion/presence.d.ts +120 -0
- package/dist/internals/motion/presence.js +48 -0
- package/dist/internals/motion/presets.d.ts +34 -0
- package/dist/internals/motion/presets.js +18 -0
- package/dist/internals/motion/raf.d.ts +35 -0
- package/dist/internals/motion/raf.js +26 -0
- package/dist/internals/motion/stagger.d.ts +31 -0
- package/dist/internals/motion/stagger.js +14 -0
- package/dist/internals/motion/tokens.d.ts +97 -0
- package/dist/internals/motion/tokens.js +17 -0
- package/dist/internals/motion/transitions.d.ts +66 -0
- package/dist/internals/motion/transitions.js +40 -0
- package/dist/internals/motion/types.d.ts +16 -0
- package/dist/internals/motion/use-in-view.d.ts +20 -0
- package/dist/internals/motion/use-in-view.js +68 -0
- package/dist/internals/motion/use-media-query.d.ts +12 -0
- package/dist/internals/motion/use-media-query.js +18 -0
- package/dist/internals/portal.d.ts +5 -0
- package/dist/internals/portal.js +15 -0
- package/dist/internals/relative-time.d.ts +25 -0
- package/dist/internals/relative-time.js +45 -0
- package/dist/internals/scroll-lock.d.ts +29 -0
- package/dist/internals/scroll-lock.js +57 -0
- package/dist/internals/stream-text.d.ts +52 -0
- package/dist/internals/stream-text.js +94 -0
- package/dist/internals/use-anchor-position.d.ts +45 -0
- package/dist/internals/use-anchor-position.js +80 -0
- package/dist/internals/use-autoscroll.d.ts +9 -0
- package/dist/internals/use-autoscroll.js +32 -0
- package/dist/internals/use-copy.d.ts +9 -0
- package/dist/internals/use-copy.js +15 -0
- package/dist/internals/use-dismissable.d.ts +17 -0
- package/dist/internals/use-dismissable.js +30 -0
- package/dist/internals/use-elapsed.d.ts +14 -0
- package/dist/internals/use-elapsed.js +13 -0
- package/dist/internals/use-float.d.ts +21 -0
- package/dist/internals/use-float.js +85 -0
- package/dist/internals/use-focus-trap.d.ts +64 -0
- package/dist/internals/use-focus-trap.js +71 -0
- package/dist/internals/use-id.d.ts +9 -0
- package/dist/internals/use-id.js +7 -0
- package/dist/internals/use-scroll-lock.d.ts +14 -0
- package/dist/internals/use-scroll-lock.js +27 -0
- package/dist/internals/waveform-core.d.ts +33 -0
- package/dist/internals/waveform-core.js +38 -0
- package/dist/sound/SoundToggle.vue.d.ts +28 -0
- package/dist/sound/SoundToggle.vue.js +102 -0
- package/dist/sound/SoundToggle.vue2.js +4 -0
- package/dist/sound/engine.d.ts +67 -0
- package/dist/sound/engine.js +369 -0
- package/dist/sound/index.d.ts +9 -0
- package/dist/sound/sound-feedback.d.ts +52 -0
- package/dist/sound/sound-feedback.js +96 -0
- package/dist/sound/sound.d.ts +78 -0
- package/dist/sound/sound.js +255 -0
- package/dist/sound/sound.svelte.d.ts +15 -0
- package/dist/sound/themes.d.ts +19 -0
- package/dist/sound/themes.js +355 -0
- package/dist/sound/types.d.ts +125 -0
- package/dist/sound/types.js +54 -0
- package/dist/sound/use-sound-feedback.d.ts +22 -0
- package/dist/sound/use-sound-feedback.js +62 -0
- package/dist/sound/use-sound.d.ts +55 -0
- package/dist/sound/use-sound.js +67 -0
- package/dist/styles.css +10573 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +8 -0
- package/package.json +109 -3
- package/tailwind.css +132 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 RamaHerbin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/PORTING.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Porting conventions — Svelte → Vue
|
|
2
|
+
|
|
3
|
+
Law for every component ported into `fancy-ui-vue`. The Svelte source under
|
|
4
|
+
`src/lib/fancy-ui/<slug>/` (and `src/lib/cameleon/`, `src/lib/_internals/`) is
|
|
5
|
+
the reference; the port's job is pixel-for-pixel fidelity, not improvement.
|
|
6
|
+
Port the Svelte bugs too, and note them — divergence is a maintenance tax paid
|
|
7
|
+
on every future change. Where this file is silent, mirror Svelte exactly.
|
|
8
|
+
|
|
9
|
+
## Folder shape
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
vue/src/components/<slug>/
|
|
13
|
+
├── <Name>.vue # the component — ALWAYS with a <script setup> block
|
|
14
|
+
├── <Name>.test.ts # transposed from the Svelte <Name>.test.ts
|
|
15
|
+
├── <slug>-core.ts # engine components only: byte-identical Svelte copy
|
|
16
|
+
└── index.ts # export { default as <Name> } …; export type { <Name>Props }
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
No colocated `.css`: a Svelte `<style>` block becomes `<style scoped>` in the
|
|
20
|
+
same SFC. The React package needs a global stylesheet plus an invented anchor
|
|
21
|
+
class per component; Vue's scoped compiler gives the guarantee Svelte's does,
|
|
22
|
+
so rules move verbatim and no class is invented.
|
|
23
|
+
|
|
24
|
+
Internals live at `vue/src/internals/` (Svelte's `_internals/`, no underscore)
|
|
25
|
+
and the cameleon engine at `vue/src/cameleon/`, mirroring the Svelte tree.
|
|
26
|
+
Export blocks in `vue/src/index.ts` are the registrar's, never a port agent's.
|
|
27
|
+
|
|
28
|
+
**Shared cores.** An engine component's framework-free `<slug>-core.ts` is
|
|
29
|
+
copied byte-for-byte from the Svelte folder — not reformatted, not re-imported.
|
|
30
|
+
A CI gate hashes every file listed in the root `shared-cores.json` across the
|
|
31
|
+
packages and fails on a one-byte drift; fixes land on Svelte first and are
|
|
32
|
+
copied down again. The wrapper owns markup, `class`, slots, a11y, the
|
|
33
|
+
reduced-motion gate, visibility gating and sound hooks — nothing else.
|
|
34
|
+
|
|
35
|
+
## API contract
|
|
36
|
+
|
|
37
|
+
- **`export interface <Name>Props`** — the exact name is a tooling contract
|
|
38
|
+
(docs generation and design-tool sync key on it); `interface`, never a `type`
|
|
39
|
+
alias. It lives in a sibling `<script lang="ts">` block of the same SFC (the
|
|
40
|
+
mirror of Svelte's `<script module>`): one module scope, so
|
|
41
|
+
`defineProps<<Name>Props>()` sees it and `index.ts` re-exports it.
|
|
42
|
+
- **It declares the component's own props only** — no intersection with, or
|
|
43
|
+
`Omit` of, native attribute sets. The Svelte and React packages fold
|
|
44
|
+
`ButtonHTMLAttributes` in; here that would make the compiler declare every
|
|
45
|
+
native attribute as a prop and kill `$attrs` fallthrough. Native attrs and
|
|
46
|
+
listeners flow through `$attrs` — one package-level divergence in the README.
|
|
47
|
+
- **`class` is a declared prop**, typed `HTMLAttributes["class"]`: legal (the
|
|
48
|
+
reserved vnode keys are `key`, `ref`, `ref_for`, `ref_key`, `onVnode*`) and it
|
|
49
|
+
pulls `class` out of `$attrs` so `cn()` applies it once. Merge with `cn()`
|
|
50
|
+
from `../../utils.js` exactly where Svelte merges it — same call site,
|
|
51
|
+
argument order and literals.
|
|
52
|
+
- **`defineOptions({ name: '<Name>', inheritAttrs: false })` on every SFC**; the
|
|
53
|
+
name is read by a dist gate, closed attrs match Svelte. `v-bind="attrs"` goes
|
|
54
|
+
**only** on the element Svelte spreads `{...restProps}` onto.
|
|
55
|
+
- **`defineExpose({ ref })` exactly where Svelte has `ref = $bindable(null)`**,
|
|
56
|
+
on the same node, exposing nothing else; no Svelte ref, no Vue ref. `ref` is a
|
|
57
|
+
reserved vnode key: neither prop nor model, absent from `<Name>Props`.
|
|
58
|
+
- **Every other `$bindable` is `defineModel('<name>')`**, Svelte's name kept,
|
|
59
|
+
**no `modelValue` alias**. Where Svelte writes the bindable _and_ calls a
|
|
60
|
+
callback, do both, in Svelte's order.
|
|
61
|
+
- **Snippets become slots, 1:1**, typed with `defineSlots`; a `Snippet<[A, B]>`
|
|
62
|
+
becomes a scoped slot whose tuple parameters turn into named object props.
|
|
63
|
+
- **Callback props stay props**, called as `props.onX?.(…)`; **never hand-write
|
|
64
|
+
`defineEmits`**. Consumers still get `@open-change`, which the compiler turns
|
|
65
|
+
into an `onOpenChange` prop.
|
|
66
|
+
- **A DOM attribute the component _reads_ becomes a declared prop**: bare
|
|
67
|
+
`<X disabled>` gives `$attrs.disabled === ""`, which is falsy.
|
|
68
|
+
- **Nothing may differ between a server render and its hydration.** No
|
|
69
|
+
`window`/`document`/`navigator`/`localStorage`/`matchMedia` in setup, a
|
|
70
|
+
`computed`, a template or a `watchEffect`; no `Math.random()`/`Date.now()` on
|
|
71
|
+
a render path. Where Svelte randomises, take a `seed` prop and the
|
|
72
|
+
deterministic PRNG, with the React package's defaults. Media queries and the
|
|
73
|
+
sound store hydrate in `onMounted`; production hydration does not patch
|
|
74
|
+
attribute mismatches, so a wrong value stays wrong on screen.
|
|
75
|
+
|
|
76
|
+
## Rune → Composition API
|
|
77
|
+
|
|
78
|
+
Vue ≥3.5, `<script setup lang="ts">`. `onMounted`, `flush: 'post'` watchers and
|
|
79
|
+
template-ref assignment all run pre-paint in one flush: there is no
|
|
80
|
+
layout-vs-passive effect split to reproduce.
|
|
81
|
+
|
|
82
|
+
| Svelte | Vue | Trap |
|
|
83
|
+
| --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
84
|
+
| `let { class: className, size = 200, ...restProps } = $props()` | `const { class: className, size = 200 } = defineProps<XProps>()` (reactive destructure) + `useAttrs()` | `...rest` here = remaining _declared_ props, not DOM attrs. A destructured prop handed to `watch` or a composable is wrapped: `() => size` |
|
|
85
|
+
| `$state(x)` / `$state({…})` / `$state.raw` | `ref` / `reactive` or `ref<T[]>` / `shallowRef` | |
|
|
86
|
+
| `$derived` / `$derived.by` | `computed` | |
|
|
87
|
+
| `$effect(() => {…; return cleanup})` | `watch(src, (v, _, onCleanup) => {…}, { flush: 'post' })`; `watchPostEffect` only for truly dynamic deps | **never bare `watchEffect`**: flush is `'pre'` (before the DOM patch) and it runs once in SSR setup — a `document` read there breaks the server. `watch(src, cb)` without `immediate` never runs on the server |
|
|
88
|
+
| `$effect.pre` | `watch(src, cb, { flush: 'pre' })` | two sites in the census; everything else is `post` |
|
|
89
|
+
| `untrack(…)` | no API — `watch(explicitSource, cb)` | the callback body is untracked by construction |
|
|
90
|
+
| `onMount(() => {…; return cleanup})` / `onDestroy` | `onMounted(() => {…; onBeforeUnmount(cleanup)})` | `onBeforeUnmount`, never `onUnmounted` — DOM still attached, like an action's `destroy`; composables use `onScopeDispose` |
|
|
91
|
+
| `tick()` | `nextTick()` | not droppable: where Svelte awaits a tick before measuring, so do we |
|
|
92
|
+
| `bind:this={el}` | `useTemplateRef<HTMLDivElement>('el')` + `ref="el"` | `null` in setup and on the server |
|
|
93
|
+
| `ref = $bindable(null)` | `defineExpose({ ref: el })` on the node Svelte's `ref` pointed at | reserved vnode key: never a prop or model; `$el` is wrong for multi-root/Teleport roots |
|
|
94
|
+
| `open = $bindable(false)` | `defineModel<boolean>('open', { default: false })` → `v-model:open` | name kept; write the model **and** call the callback prop, Svelte's order. No `modelValue` alias |
|
|
95
|
+
| `setContext(KEY, ctx)` / `getContext(KEY)` | `provide(KEY, ctx)` / `inject(KEY, undefined)`, `const KEY: InjectionKey<T> = Symbol("…")` | getter-object contexts port **verbatim in shape** (a `computed` reading the getter stays tracked); `provide` only in setup, synchronously |
|
|
96
|
+
| `children?: Snippet` / named / `Snippet<[A,B]>` | `<slot/>` / `<slot name="x"/>` / scoped slot + `defineSlots<{ item?(p: { step; index }): unknown }>()` | tuple params become named object props (divergence); a snippet passed as a prop value becomes slot content |
|
|
97
|
+
| callback props `onOpenChange`, `onSelect`… | keep as props, call `props.onX?.()` | `defineEmits` is never hand-written |
|
|
98
|
+
| native `onclick` re-dispatched (cue, then `onclick?.(e)`) | `@click="handleClick"` written **before** `v-bind="attrs"` on the same element | listeners merge in source order; do not also call `attrs.onClick` or it fires twice |
|
|
99
|
+
| `restProps.disabled` read by the component | declare `disabled` as a Boolean prop, bind `:disabled` | bare `<X disabled>` gives `attrs.disabled === ""` — falsy |
|
|
100
|
+
| `use:foo={opts}` | `useFoo(el, () => opts)` over a verbatim `attachFoo(node, opts): { update, destroy }` core; **no directives** | a directive cannot return a handle (focus trap's `returnFocusNow`/`rearm`). Options keep the action's shape, getter fields included |
|
|
101
|
+
| `transition:x` on `{#if}` + `onintrostart`/`onoutroend` | `usePresence(() => open, { onEnterStart… })` + `presence.register(key, transition, params)`; `v-if="presence.mounted"`; `runTransition` from `internals/motion/animate.ts` | **not** `<Transition :css="false">`: it delays DOM removal but not teardown (`onBeforeUnmount` runs at leave _start_), gives no reversal position, and a scrim and its panel must share one clock |
|
|
102
|
+
| split `in:` / `out:` on keyed rows, `{#key}` | `<Transition :css="false" @enter="(el, done) => runTransition(el, spec, 1, undefined, done)" @leave="…0…">` / `<TransitionGroup>` | fine here: no cleanup dependents, no reversal |
|
|
103
|
+
| `data-state` + `markSurfaceState` | `:data-state="presence.surfaceState.value"`; `markSurfaceState` not ported | the vocabularies (`opening\|open\|closing` vs `open\|closing`) are not interchangeable |
|
|
104
|
+
| `use:portal` | `<Portal :target :disabled>` (`internals/Portal.vue`, a `<Teleport>`), **inside** the `v-if="presence.mounted"` gate | Teleport resolves synchronously — the React package keeps its portal outside the gate, here it goes inside. Nothing is emitted server-side, open or closed: `Portal` renders nothing on the server and on the hydration pass, and portals synchronously on a fresh mount |
|
|
105
|
+
| `$props.id()` | `useFancyId()` (wraps Vue's `useId()`); `uid()` verbatim for handler-time ids | keep `CSS.escape` where the source has it; ids read `v-N` |
|
|
106
|
+
| `.svelte.ts` rune modules | plain `.ts`: `$state` → `ref`/`reactive`/`shallowRef`, getters read `.value` | reactivity works outside components, so these keep their **exact Svelte signatures**, `start`/`stop` included |
|
|
107
|
+
| `svelte/elements` types | `ButtonHTMLAttributes`, `HTMLAttributes`, `AnchorHTMLAttributes` from `vue`; `FullAutoFill` declared locally | |
|
|
108
|
+
| `{...restProps}` | `defineOptions({ inheritAttrs: false })` + `v-bind="attrs"` on the same element | every other component also gets `inheritAttrs: false`, and no spread |
|
|
109
|
+
| `class:foo` / `style:x` / string `style` with custom properties | `:class="{ foo }"` / `:style="{ x }"` / **object** `:style="{ '--border-beam-size': size }"` | a string `style` goes through `cssText`, where jsdom drops custom properties and tests fail. **Empty-class trap:** Vue normalises every falsy `:class` (`undefined`, `null`, `{ foo: false }`) to `""` and still writes `class=""`; Svelte's `class:` directive and React emit no attribute. When an element's ONLY class is conditional, spell it `v-bind="cond ? { class: 'foo' } : {}"` (omits the attribute); merged with a static/`cn()` class the object form is fine |
|
|
110
|
+
| `bind:value` on native inputs | `v-model` | `v-model` defers updates during IME composition; Svelte does not |
|
|
111
|
+
| `{#each items as it, i (key)}` / `{#each Array(n) as _, i (i)}` | `v-for="(it, i) in items" :key` / `v-for="(_, i) in n" :key="i"` | `v-for="n in 4"` yields 1…4 — always take the index |
|
|
112
|
+
| `<svelte:element this>` / `{#key}` | `<component :is>` / `:key` | |
|
|
113
|
+
| `<svelte:window>` / `<svelte:document>` | `addEventListener` in `onMounted`, removed in `onBeforeUnmount` | hand-rolled; no helper library |
|
|
114
|
+
|
|
115
|
+
**Effect-phase policy:** `flush: 'post'` or `onMounted` for everything
|
|
116
|
+
DOM-visible; `flush: 'pre'` only where Svelte used `$effect.pre`; sound
|
|
117
|
+
hydration and media-query `start()` in `onMounted`.
|
|
118
|
+
|
|
119
|
+
## Styling — the part that breaks silently
|
|
120
|
+
|
|
121
|
+
1. **Tailwind class strings are copied VERBATIM.** They ship as static literals
|
|
122
|
+
and the consumer's Tailwind scans `dist/` for them (`tailwind.css` →
|
|
123
|
+
`@source "./dist"`); never compute a class name from a variable, the scanner
|
|
124
|
+
cannot see interpolations. With enough static nodes the compiler collapses a
|
|
125
|
+
subtree into `createStaticVNode("<div class=\"…\">")`; that is fine and needs
|
|
126
|
+
no action — the scanner reads class names out of the string literal (measured
|
|
127
|
+
end to end against the example app), so leave static hoisting on.
|
|
128
|
+
2. **A Svelte `<style>` block becomes `<style scoped>` in the same SFC**, rules
|
|
129
|
+
verbatim, class and keyframe names **identical** to the source: they are part
|
|
130
|
+
of the visual contract and some are referenced from inline `style`
|
|
131
|
+
attributes. Scoped styles aggregate into one `dist/styles.css`.
|
|
132
|
+
3. **`-global-` keyframe prefixes drop** (compiler syntax; keep the emitted
|
|
133
|
+
name), and a keyframe referenced from an inline style or a custom property
|
|
134
|
+
**cannot live in the scoped block** — the compiler renames keyframes and
|
|
135
|
+
rewrites only the `animation:` references it sees. Move it to a **second,
|
|
136
|
+
unscoped `<style>` block** in the same SFC. Rules reaching child or slot
|
|
137
|
+
markup use `:deep()` / `:slotted()`; `:global()` maps to the same.
|
|
138
|
+
4. **Custom properties keep their local fallbacks; custom utilities are traps.**
|
|
139
|
+
`animate-rainbow` is not stock Tailwind: trace it (`grep -rn` in `src/` at
|
|
140
|
+
the repo root) to its `@theme`/keyframes definition and re-declare the
|
|
141
|
+
equivalent in the component's own style block. Never depend on an app-level
|
|
142
|
+
token existing.
|
|
143
|
+
5. **`prefers-reduced-motion` blocks are ported as-is.** Never drop one, in CSS
|
|
144
|
+
or in script.
|
|
145
|
+
6. **Semantic colour names are declared once, in `vue/tailwind.css`.**
|
|
146
|
+
`bg-background`, `bg-primary`, `text-primary-foreground`, `ring-ring` are not
|
|
147
|
+
stock Tailwind either, but unlike rule 4's per-component utilities they are a
|
|
148
|
+
shared vocabulary — redeclaring them per component would fight itself. The
|
|
149
|
+
package stylesheet maps them with `@theme inline` and ships defaults in
|
|
150
|
+
`@layer base`. A new semantic name in a ported component is added there too.
|
|
151
|
+
|
|
152
|
+
The shared stylesheets that are not SFC-scoped (markdown, stream-text, sound
|
|
153
|
+
toggle, cameleon, the skin sheets) stay plain `import "./x.css"` from their
|
|
154
|
+
`.ts` module, anchored on a root class.
|
|
155
|
+
|
|
156
|
+
## Tests
|
|
157
|
+
|
|
158
|
+
Vitest + `@testing-library/vue`, jsdom, globals on. Tests are `.ts` importing
|
|
159
|
+
the `.vue`; transpose assertion-for-assertion, add nothing speculative.
|
|
160
|
+
|
|
161
|
+
- `render(Cmp, { props })` is identical, `props.class` reaches the declared
|
|
162
|
+
prop; pass `attrs` for anything meant to fall through.
|
|
163
|
+
- `createRawSnippet(...)` → `slots: { default: '<span>x</span>' }`; scoped →
|
|
164
|
+
`slots: { item: '<template #item="{ step }">…</template>' }`.
|
|
165
|
+
- `await tick()` / `flushSync(...)` → `await nextTick()`; `fireEvent.*` is
|
|
166
|
+
identical and already awaits it.
|
|
167
|
+
- `rerender(props)` **merges** where Svelte replaces — pass the full prop set.
|
|
168
|
+
- For an exposed ref, mount with `@vue/test-utils` and read `wrapper.vm.ref`.
|
|
169
|
+
- Context: `render(Cmp, { global: { provide: { [KEY]: v } } })` or an inline
|
|
170
|
+
`defineComponent` + `h()`. The `*.test.svelte` harnesses are not ported; a
|
|
171
|
+
`.test.vue` harness is only for a template too large to inline.
|
|
172
|
+
- Fake timers, `vi.stubGlobal("matchMedia")`, `document.body.querySelector(…)`
|
|
173
|
+
carry over unchanged.
|
|
174
|
+
- SSR: `renderToString(createSSRApp(Cmp, props))` from `vue/server-renderer`,
|
|
175
|
+
twice, asserted identical — every tier-3 component ships one.
|
|
176
|
+
- Leak suites mount and unmount twice and assert the counters return to zero
|
|
177
|
+
(dismissable layers, `document.body.style.position === ""`, hover instances).
|
|
178
|
+
- Drop only what is rune-specific: `$state` proxy identity, `untrack`, action
|
|
179
|
+
`update()` plumbing.
|
|
180
|
+
|
|
181
|
+
Run with `npx vitest run src/components/<slug>` from `vue/`.
|
|
182
|
+
|
|
183
|
+
## Hard rules for porting agents
|
|
184
|
+
|
|
185
|
+
- Work ONLY inside your assigned directories under `vue/src/`. The barrel, the
|
|
186
|
+
matrix, the README and the manifest belong to the registrar.
|
|
187
|
+
- **Vue ≥3.5 APIs only**: reactive props destructure, `useId`,
|
|
188
|
+
`useTemplateRef`, `onWatcherCleanup`, `<Teleport defer>` are the floor.
|
|
189
|
+
- **No helper libraries and no custom directives** — composables over verbatim
|
|
190
|
+
`attach*` cores instead.
|
|
191
|
+
- **Never a bare `watchEffect`.** **Never `v-html`** — the markdown renderer
|
|
192
|
+
walks its token tree through `<component :is>`.
|
|
193
|
+
- **Every SFC has a `<script setup>` block** — the dist-shape gate reads the
|
|
194
|
+
source and fails without one. (It does not read the emitted filenames: under
|
|
195
|
+
`preserveModules` a `<Name>.vue2.js` sibling is the NORMAL output for an SFC
|
|
196
|
+
with `<style scoped>`, not a symptom.)
|
|
197
|
+
- NO installs, no `package.json`/config edits, no new dependencies. Allowed
|
|
198
|
+
imports: `vue`, the component's own files, `../../utils.js`, the
|
|
199
|
+
internals/cameleon modules, and the shared runtime deps the Svelte source
|
|
200
|
+
already uses. Nothing may import `@vue/*` directly.
|
|
201
|
+
- Never edit a `<slug>-core.ts`: byte-identical copy, hashed across packages.
|
|
202
|
+
- Do not spawn sub-agents. Do not run tree-mutating git commands.
|
|
203
|
+
- No third-party product or library brand names in comments, code or docs —
|
|
204
|
+
house rule; write what the code does, not where an idea came from.
|
|
205
|
+
- Anything you cannot reproduce exactly is a **divergence**: record it in
|
|
206
|
+
`vue/README.md` under "## Divergences from the Svelte API" rather than
|
|
207
|
+
silently changing the API.
|
|
208
|
+
- Before reporting done: the component appears in `vue/src/index.ts` and passes
|
|
209
|
+
`npx vue-tsc --noEmit` plus its own vitest file.
|
package/README.md
CHANGED
|
@@ -1,3 +1,208 @@
|
|
|
1
|
-
#
|
|
1
|
+
# fancy-ui-vue
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Vue counterpart of [`fancy-ui-svelte`](https://www.npmjs.com/package/fancy-ui-svelte) —
|
|
4
|
+
same components, same visual contract, ported from the Svelte 5 reference
|
|
5
|
+
implementation that lives at the root of this repo, built on Vue 3.5 and
|
|
6
|
+
Tailwind CSS v4.
|
|
7
|
+
|
|
8
|
+
Status: at parity. All 145 components of `fancy-ui-svelte` are ported, along
|
|
9
|
+
with the `sound` family and the cameleon skin engine (FancyProvider +
|
|
10
|
+
primitives + skins) on the `fancy-ui-vue/cameleon` subpath. The Svelte package
|
|
11
|
+
remains the reference; each Vue component is a faithful transpose (see
|
|
12
|
+
`PORTING.md` for the law that governs ports), and every deliberate difference
|
|
13
|
+
is listed under [Divergences](#divergences-from-the-svelte-api) below.
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install fancy-ui-vue
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Peer dependencies: `vue` 3.5.2 or later, `tailwindcss` 4. TypeScript is an
|
|
22
|
+
optional peer at 5.0 or later.
|
|
23
|
+
|
|
24
|
+
## Tailwind setup
|
|
25
|
+
|
|
26
|
+
```css
|
|
27
|
+
/* app.css */
|
|
28
|
+
@import "tailwindcss";
|
|
29
|
+
@import "fancy-ui-vue/tailwind.css";
|
|
30
|
+
@import "fancy-ui-vue/styles.css";
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
`tailwind.css` points Tailwind's scanner at this package's shipped `dist/` so
|
|
34
|
+
every utility class the components use is generated in the consumer's build,
|
|
35
|
+
and declares the shared token set the components spend. `styles.css` carries
|
|
36
|
+
the components' own keyframes and scoped rules.
|
|
37
|
+
|
|
38
|
+
## Development
|
|
39
|
+
|
|
40
|
+
Workspace member of the repo's pnpm workspace — one `pnpm install` at the
|
|
41
|
+
repo root covers it.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pnpm install # at the repo root
|
|
45
|
+
pnpm --filter fancy-ui-vue test # vitest
|
|
46
|
+
pnpm --filter fancy-ui-vue check # vue-tsc --noEmit
|
|
47
|
+
pnpm --filter fancy-ui-vue build # vite lib build + d.ts via vue-tsc, then the dist gates
|
|
48
|
+
pnpm --filter fancy-ui-vue test:scripts # the gates' own regression tests (needs a build)
|
|
49
|
+
pnpm --filter fancy-ui-vue-example-nuxt dev # the consumer app (examples/nuxt-app) on http://localhost:3000
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The consumer app under `examples/` is `nuxt-app`, which resolves `fancy-ui-vue`
|
|
53
|
+
to `vue/dist`, so run `build` first. CI runs `nuxt generate` on it as the
|
|
54
|
+
SSR/hydration gate: `failOnError` in its prerender block is what makes a broken
|
|
55
|
+
page fail the build instead of being skipped. A second CI job, `vue-3-5`,
|
|
56
|
+
re-installs the workspace with a job-local override pinning Vue to 3.5.2 (the
|
|
57
|
+
peer floor) and runs `check`, `test`, `build` and `scripts/vue-floor-consumer.mjs`
|
|
58
|
+
against it.
|
|
59
|
+
|
|
60
|
+
`build` does more than build. After Vite and `vue-tsc` it runs six scripts in
|
|
61
|
+
`vue/scripts/`, each guarding something no other gate can see:
|
|
62
|
+
|
|
63
|
+
| Script | What it stops |
|
|
64
|
+
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
65
|
+
| `strip-dts-css-imports.mjs` | `vue-tsc` copies each component's `import "./x.css"` into its `.d.ts`, naming a file dist does not ship — one TS2307 per component for any consumer without `skipLibCheck` |
|
|
66
|
+
| `check-dist-names.mjs` | a minified build shipping `AnimatedBeam` as `const ut = ...` in every consumer's devtools tree and stack traces |
|
|
67
|
+
| `prune-orphan-dts.mjs` | a declaration under `dist/internals/` with no runtime module behind it, typing an import that cannot load |
|
|
68
|
+
| `check-dist-shape.mjs` | a test rig reaching the tarball, a declaration pointing at a file that is not there, an SFC without `<script setup>`, a bare import of a package nobody declared |
|
|
69
|
+
| `smoke-dist.mjs` | the built artifact never being executed: it imports every module with no DOM, server-renders each component export, and holds a gzip budget over the emitted JS and CSS |
|
|
70
|
+
| `ensure-styles-css.mjs` | the `./styles.css` subpath being declared while no stylesheet was emitted |
|
|
71
|
+
|
|
72
|
+
`test:scripts` runs `dist-gates.test.mjs`, which tests the gates' own logic
|
|
73
|
+
(what counts as a component, what the sweep counts) so a gate cannot go quiet
|
|
74
|
+
without a test noticing. `check-matrix.mjs` (`check:matrix`) holds the
|
|
75
|
+
migration matrix to the Svelte reference, and `vue-floor-consumer.mjs` is the
|
|
76
|
+
CI-only floor check above; neither is part of `build`.
|
|
77
|
+
|
|
78
|
+
The output is **not minified**, for the reason `check-dist-names.mjs` exists:
|
|
79
|
+
the consumer's bundler minifies over the whole app, and minifying here costs
|
|
80
|
+
every component its name.
|
|
81
|
+
|
|
82
|
+
## Divergences from the Svelte API
|
|
83
|
+
|
|
84
|
+
Everything not listed here is a faithful transpose of the Svelte reference.
|
|
85
|
+
The first list states each package-level rule once, with the components and
|
|
86
|
+
names it touches; the second holds only what is specific to one component.
|
|
87
|
+
Components are named by their exported Vue name.
|
|
88
|
+
|
|
89
|
+
### Package-level rules
|
|
90
|
+
|
|
91
|
+
- **props**: `<Name>Props` hold the component's own props only, never a `ButtonHTMLAttributes`-style intersection or Svelte's `Omit<HTMLAttributes<…>, …>` fold-in, so native attributes are untyped. Every component sets `inheritAttrs: false` and writes `v-bind="attrs"` only where the Svelte source spreads `{...restProps}`, at the same position, so attributes the component sets after it (`data-state`, `data-position`, `data-panel-side`) still win.
|
|
92
|
+
- Forward native attributes and listeners: DatamoshTransition, DimSiblings, GradientButton, InteractiveHoverButton, Magnetic (outer wrapper), MosaicGlow, Presence, Pressable, PulseBeam, Reveal, RippleButton, ScrollProgress, ShimmerButton, Skeleton, StatusMorph, StickyScroll, TextRoll. A consumer `style` merges with the component's own custom properties (`mergeProps`) instead of overwriting them the way a later `{...restProps}` would.
|
|
93
|
+
- Every other component is closed, exactly as in Svelte: an `id`, `data-*`, `aria-*` or `@click` put on it is dropped silently (`<Dialog id="x" data-foo="bar">` renders neither), which differs from Vue's default fallthrough.
|
|
94
|
+
- **boolean props**: a DOM attribute the component reads is a declared Boolean prop rather than a value read off `$attrs`, so a bare `<RippleButton disabled>` is `true`, not the falsy string `""` that would let the sound cue play: `disabled` on GradientButton, InteractiveHoverButton, RippleButton, ShimmerButton. Vue's Boolean casting applies to every Boolean prop: `<ChatMessageAction active="">` is `true` where Svelte renders `aria-pressed=""` (`active` keeps three states through an explicit `undefined` default), and ReasoningPanel's bare `open` is `true`.
|
|
95
|
+
- **class**: `class` is a declared prop typed `HTMLAttributes["class"]` (string, array or object) rather than `string`, merged once by `cn()` at the Svelte call site and argument position and never doubled through `$attrs`. Exceptions: ReviewCard (Marquee) and ConfettiButton declare no `class`, as in Svelte, so a `class` on them is dropped, and the renderless roots ContextMenu, DropdownMenu and DropdownMenuSub have none; LiquidGlass keeps `containerClass` a `string`; FrostedGlass's `class` still targets the content layer and `containerClass` the outer container.
|
|
96
|
+
- **ref**: Svelte's `ref = $bindable(null)` becomes `defineExpose({ ref })` on the same node. `ref` is a reserved vnode key, so it is absent from every `<Name>Props` and there is no `bind:ref` or `v-model:ref`: put a template ref on the component and read `.ref` (`wrapper.vm.ref` in tests).
|
|
97
|
+
- Nodes worth knowing: Button, CopyButton and IconButton expose whichever of `<a>` / `<button>` `href` selected (CopyButton and IconButton forward Button's own `ref`); Popover re-exposes `PopoverContent`'s panel; Select, DatePicker, TimePicker and Tooltip expose the trigger; Checkbox, Combobox, Autocomplete, NumberInput, Slider (`<input type="range">`) and RadioGroupItem the native `<input>`; Textarea the `<textarea>`; Magnetic its static outer wrapper; Toast `.ft-toast` and Toaster `.ft-toaster`; Composer's parts the form, the textarea and the menu div; NavigationMenu, NavigationMenuList, NavigationMenuTrigger and NavigationMenuContent (NavigationMenuItem and NavigationMenuLink expose none, as in Svelte).
|
|
98
|
+
- `null` while nothing renders: Presence and ComposerCommandMenu while closed, Skeleton in standalone mode with `loading=false`.
|
|
99
|
+
- Confetti also exposes `fire()`: `const c = useTemplateRef('c'); c.value.fire()` replaces `bind:this` plus Svelte's `export function fire`.
|
|
100
|
+
- DatamoshTransition also exposes `cover()`, `reveal()` and `play()`: `const t = useTemplateRef('t'); await t.value.cover()` replaces `bind:this` plus Svelte's `export function`s.
|
|
101
|
+
- **slots**: snippet props become slots, typed with `defineSlots` and absent from `<Name>Props`. `children` becomes the default slot (required where Svelte's `children: Snippet` is: BoxReveal, DimSiblings, Magnetic, Presence, Pressable, Reveal, ScrollAnchor), every other snippet a slot of the same name, and `{#if x}` guards become `v-if="$slots.x"`, so optional wrappers are still omitted when a slot is absent. A `<slot>` fallback also renders when a SUPPLIED slot renders nothing (ChatError with an empty default slot shows its built-in message), where Svelte's `{#if children}` would render an empty body.
|
|
102
|
+
- Named slots: AlertDialog `#trigger`; ArtifactCard `#actions`; BentoGridItem `#header` `#icon` `#title` `#description`, BentoGridCard `#icon` `#background`; Button `#iconStart` `#iconEnd`; ChatEmptyState and ChatError `#icon`; ChatMessage `#avatar` `#actions` `#footer` (its default slot still replaces the body and makes `content` ignored); ChatPanel `#header` `#composer` `#emptyState`; CommandMenu, ComposerCommandMenu and ThreadList `#empty`; Compare `#firstContent` `#secondContent` `#handle` (an empty `#handle` suppresses the handlebar); Composer `#accessory`; ContainerScroll `#titleContent` `#cardContent`; Dialog `#footer` `#trigger`; Drawer and Sheet `#footer`; DropdownMenuItem and DropdownMenuSubTrigger `#icon`; Markdown `#trailingCursor` (StreamingText fills it while streaming); Navbar `#brand` `#actions`; Pagination `#previousLabel` `#nextLabel`; Popover `#trigger`; SidebarItem `#icon`, SidebarFooter `#avatar`; SmoothCursor `#cursor`; SourceCard `#icon`; StatusMorph `#idle`; TerminalBlock `#header`; TextRevealCard `#text` `#revealText`; ThinkingIndicator `#done`; ToolCall `#icon`.
|
|
103
|
+
- Scoped slots, where Svelte's positional `Snippet<[A, B]>` arguments arrive as one named object: AgentPlan `#item="{ step, index }"`; AiDataTable `#cell="{ value, at }"` with `at` = `{ row, key }`; Breadcrumb `#item="{ item, index }"` (still replaces every crumb); CommandMenu `#icon="{ item }"`; HoverCard `#trigger="{ descriptionId }"`; InlineCitation `#preview="{ source }"`; PromptSuggestions `#item="{ suggestion, index }"`; SourcesList `#item="{ source, index }"`; StickyScroll required `#item="{ item, index, active }"` and `#panel="{ item, index }"`; SubagentList `#item="{ agent, index }"`; ThreadList `#item="{ thread, active }"`; Timeline `#content="{ item }"`; ToolCall `#input="{ value }"` and `#output="{ value }"`; ToolTimeline `#item="{ item, index }"`; WebSearch `#item="{ result, index }"`.
|
|
104
|
+
- Svelte's `{:else}` content is the slot fallback: InteractiveHoverButton `text`, RadioGroupItem and ToggleGroupItem `label ?? value`, Pagination `‹ Previous` / `Next ›`.
|
|
105
|
+
- **v-model**: each Svelte bindable is a model of the same name, written `v-model:<name>`. There is no `modelValue` alias, so a bare `v-model` binds nothing. Every model is declared by `defineModel`. Most also stay listed, typed, in the exported `<Name>Props`; nine are declared by `defineModel` alone and are absent from it: Checkbox `checked` / `indeterminate`, RadioGroup `value`, StatusMorph `state`, Stepper `current`, Switch `checked`, Tabs `value`, Toggle `pressed`, ToggleGroup `value`. The documented call shapes all still work — two-way, the `onXChange` callback alone, or a plain value plus callback — and the callback fires after the model write, in Svelte's order. `v-model` on native inputs defers to IME composition, as the input element does.
|
|
106
|
+
- `v-model:open`: AlertDialog, CommandMenu, ContextMenu, Dialog, Drawer, DropdownMenu, HoverCard, Popover, ReasoningPanel (tri-state: `undefined` until someone decides), Sheet, Sources, ToolCall.
|
|
107
|
+
- `v-model:value`: Autocomplete, Combobox, Composer, ComposerModelPicker (no default, so an unset value falls back to the first model), DatePicker, Input, NavigationMenu, NumberInput, PasswordInput, RadioGroup, SearchInput, Select, Slider, Tabs, Textarea, TimePicker, ToggleGroup.
|
|
108
|
+
- `v-model:checked`: Checkbox, Switch; `v-model:phase`: DatamoshTransition (output-only, see below); `v-model:indeterminate`: Checkbox; `v-model:state`: ApprovalCard, RecommendationCard, StatusMorph; `v-model:pressed`: Toggle; `v-model:current`: Stepper; `v-model:page`: Pagination; `v-model:files`: FileUpload; `v-model:attachments`: Composer; `v-model:collapsed`: CodeDiff; `v-model:activeIndex`: StickyScroll; `v-model:activeId`: ThreadList; `v-model:active`: VoiceInput; `v-model:query`: CommandMenu.
|
|
109
|
+
- Passing the value AND an `@update:<name>` listener hands ownership to the parent, where Svelte's bindable always writes locally. A listener that never writes the value back leaves Dialog open (`data-state` stays `open` after `onOpenChange(false)`), Pagination unmoved, and ApprovalCard and RecommendationCard pending with live buttons (a one-tick latch still resolves a decision exactly once, even for two clicks in one tick). The rendered state never disagrees with the model, though: after a press the parent declined, Switch and RadioGroup put their native controls back on the model in the next tick (so `aria-checked`, the visible track and the callbacks all describe the model), and VoiceInput's start guard follows the model rather than a latch of its own. A value passed with no listener still drives itself. Exception: NavigationMenu keeps an eager internal mirror of `value`, so it moves even when `update:value` is ignored.
|
|
110
|
+
- **callbacks**: callback props stay props, called as `props.onX?.()` rather than emitted, so devtools shows no event pane for them. The compiler still turns a listener spelling into the prop: `@value-change`, `@open-change`, `@files-change`, `@stick-change`, `@toggle`, `@select`, `@enter-end` / `@exit-end` reach `onValueChange`, `onOpenChange`, `onCheckedChange` (Checkbox, Switch), `onCurrentChange` (Stepper), `onQueryChange` (CommandMenu), `onFilesChange` (FileUpload), `onStickChange` (ScrollAnchor), `onToggle` (ToolCall), `onSelect` (PromptSuggestions, called with `(suggestion, index)`) and Presence's `onEnterEnd` / `onExitEnd`. AppleCard's `onExpand` / `onCollapse` are passed as `:on-expand` / `:on-collapse`.
|
|
111
|
+
- A lowercase `onclick` stays a declared prop, passed as `:onclick="fn"`: Button, ChatMessageAction, GradientButton, IconButton (forwarded straight to Button), InteractiveHoverButton, Link, NavbarLink, RippleButton, SidebarItem — and the other lowercase callback names of Compare, DatamoshTransition and PulseBeam (listed below). On the closed ones an `@click` is dropped with the other attributes, and on Button it would bypass the `disabled` / `loading` guard anyway.
|
|
112
|
+
- Exceptions riding in `$attrs`: ShimmerButton's `onclick` is plain `@click` fallthrough, merged after the press cue in Svelte's order; ShimmerButton's `onpointermove` is likewise plain `@pointermove` fallthrough, merged after the component's own pointer tracking (which writes --mx/--my), as in Svelte; Reveal's `onfocusin` is a caller's `@focusin`, fired after the component's own handler.
|
|
113
|
+
- **context keys**: exported context keys are Vue injection keys, not bare `unique symbol`s for `setContext` / `getContext`; the context value shapes are unchanged.
|
|
114
|
+
- Helper objects built by `createInternalContext` (`.key`, `.provide()`, `.useRequired()`, `.useOptional()`): `BUTTON_GROUP_CONTEXT` (Svelte's bare `BUTTON_GROUP_CONTEXT_KEY` symbol has no Vue export under that name), `CONTEXT_MENU_KEY` with the re-exported `MENU_KEY` / `SUB_KEY`, `NAVIGATION_MENU_KEY` / `NAVIGATION_MENU_ITEM_KEY`, `STEPPER_KEY`, `TABS_KEY`, `TOGGLE_GROUP_KEY`. A hand-written leaf calls `MENU_KEY.useRequired()` instead of `getContext(MENU_KEY)`.
|
|
115
|
+
- Plain `InjectionKey` symbols, read with `inject(KEY, undefined)`: `AUTOCOMPLETE_KEY`, `COMBOBOX_KEY`, `POPOVER_KEY`, `RADIO_GROUP_KEY`, `SIDEBAR_KEY`, `SOURCES_CONTEXT_KEY`.
|
|
116
|
+
- Outside its provider, a required part throws a NAMED error instead of reading `undefined`: the Autocomplete panel, `PopoverContent` (used standalone it now throws rather than rendering an unanchored panel), NavigationMenuList / Trigger / Content and the menu leaves. Optional parts degrade instead: Sidebar parts (`collapsed: false`), Sources parts, RadioGroupItem, and — where Svelte throws a TypeError — CardItem outside a `CardContainer` (Svelte calls the `card3d:mouseEntered` getter unguarded; Vue renders the rest transform, `translateX(0px) … rotateZ(0deg)`) and Dock's icons and separators (a frozen `magnify: false`, `orientation: "horizontal"` fallback: a lone icon renders at its resting 40px).
|
|
117
|
+
- **surfaces**: there is no `markSurfaceState`. `data-state` is an ordinary binding of the presence clock's two values, `"open"` / `"closing"` (never `"opening"`), and `inert` during an exit is written by the presence clock as an ATTRIBUTE (`toggleAttribute`), not the IDL property: `:not([inert])` selectors and assistive tech see it everywhere, but under jsdom assert `hasAttribute("inert")`, not `el.inert`. AlertDialog, Autocomplete, CommandMenu, ContextMenu, DatePicker, Dialog, Drawer, DropdownMenu, HoverCard, NavigationMenu, Popover, Toast; AnimatedTooltip and DirectionAwareHover run their exits on the same clock instead of a Svelte transition such as `transition:scale` (same timing and easing; the tooltip node appears one extra pre-paint render pass after the hover); Presence with `inert={false}` never writes the attribute at all. Collapsed regions carry a present-or-absent `inert` attribute: ReasoningPanel's trace, SourcesList (`<ul inert>`, never `inert="false"`), CodeDiff's body.
|
|
118
|
+
- Autocomplete, Combobox and Popover render their panel part unconditionally and let it own the mount gate, where Svelte writes `{#if open}` one level up. A closed surface still emits nothing, on the server included (Combobox leaves a pair of empty fragment comments).
|
|
119
|
+
- **portal**: `<Portal>` (a `<Teleport>`) sits INSIDE the presence-mounted gate, the inverse of the React package's ordering: a closed surface emits nothing server-side, and the teleport attaches its children during the patch that creates them, so a focus trap never focuses a detached node (CommandMenu, Combobox, NavigationMenu and every portalled surface).
|
|
120
|
+
- Nothing portalled is emitted on the server, open OR closed: `<Portal>` renders nothing on the server and on the hydration pass and portals synchronously on any later mount, so every portalled surface (Dialog, AlertDialog, Sheet, Drawer, Popover, Tooltip, HoverCard, Toaster, the menus and pickers) behaves the same whether it starts closed or open by default — server HTML holds the trigger only, the panel paints on the first post-hydration patch, and hydration is clean. The same contract as the React package; Svelte emits an open surface inline and relocates it on mount. `toast()` stays a no-op outside the browser.
|
|
121
|
+
- Always-mounted nodes that Svelte portals from a `use:portal` action render in place and relocate to `document.body` one flush AFTER mount, as a new node rather than the moved original: ContextMenu's `.ft-context-menu-anchor` span (`<Portal :disabled>` flipped in `onMounted`) and StatusMorph's `<div role="status">` live region. Code reading `document.body.querySelector(…)` synchronously after mount must `await nextTick()` first.
|
|
122
|
+
- **timing**: DOM-reading watchers run with `flush: 'post'`, and Svelte's mount-time `$effect` becomes `onMounted` (an `immediate` watcher would run during server setup), so a few things land one tick after mount — still before paint, but a test must `await nextTick()`:
|
|
123
|
+
- IntersectionObserver attachment: BoxReveal, Reveal, NoiseReveal (`trigger="view"`), StickyScroll rows (`activeIndex` cannot move before the first tick).
|
|
124
|
+
- Roving tab stops: Tabs and ToggleGroup render `tabindex="-1"` on every item on the server and the first client render, then patch in the `0`.
|
|
125
|
+
- Stepper registration: step numbers, `data-status`, `aria-current` and connectors repaint on the next tick; the `<li>` count is right immediately.
|
|
126
|
+
- Auto-open: ReasoningPanel mounted mid-stream, ToolCall mounted with an already-failed call (after hydration when `open` is bound from outside).
|
|
127
|
+
- PromptSuggestions' `$effect.pre` is a `flush: 'pre'` immediate watcher that runs in setup, before the first render (inert by construction).
|
|
128
|
+
- **ids**: generated ids come from `useFancyId()` (Vue's `useId()`) instead of `$props.id()` or `Math.random()`, and read `v-0`, `v-1`, …: Dialog and Drawer `v-0-title` / `v-0-description`, Select `v-N-listbox` / `v-N-option-K`, Tabs `v-0-trigger-account` / `v-0-panel-account`, ToolCall `v-0-header` / `v-0-body`, DropdownMenu `v-N-content` / `v-N-trigger`, FormField `v-0-control` (same `<base>-label` / `-description` / `-error` suffixes, and an explicit `id` yields identical ids), plus AnimatedBeam's gradient and filter ids (`beam-v-N`, `beam-v-N-glow` / `beam-v-N-bloom`), ContextMenu, ReasoningPanel headers, Sheet and SidebarGroup headings. They are stable across a server render and its hydration and serve only as `aria-*` targets: nothing may depend on the shape or use it as a CSS selector. Ids minted after mount come from an incrementing client-only counter: FrostedGlass `fg-dist-<n>`, LiquidGlass `lg-1`, `lg-2`, …. RadioGroup's generated `name` has its own bullet below.
|
|
129
|
+
- **seeds**: render-path `Math.random()` is replaced by a `seed` prop (default `1`) feeding a mulberry32 stream identical to the React package's, so a server render and its hydration agree. Two instances with no `seed` now look alike; vary `seed` to desynchronise them. ColourfulText (Fisher-Yates over the stream instead of a biased `sort`, so the exact order differs slightly); Compare's `StarField`; HyperText (scramble characters, seeded in setup so the server render emits them); SparklesText (streams `seed` and `seed + 1`; sparkle ids no longer include `Date.now()`); StarsBackground (the ~1600-entry box-shadow sky is in the server HTML, with no first-frame starless flash; the same `seed` + `starColor` names the same sky as React); TextRevealStars `seed` and TextRevealCard `starsSeed` (forwarded; unset inherits 1); No seed where randomness runs only after mount: BgFallingStars, FlickeringGrid.
|
|
130
|
+
- **clock**: `createNow` renders an empty sentinel label on the server and through hydration and starts in `onMounted` (a wrong clock value would otherwise survive Vue's production hydration), so relative timestamps appear one tick after mount where the Svelte package paints them immediately: ChatMessage (the `<time>`, and the row holding it when no `#actions` is given), ThreadList, ToolTimeline. `datetime` / `title` carry the exact time from the first render. DatePicker's `viewDate` / `focusedDate` likewise stay `null` until the first open instead of `new Date()` in setup.
|
|
131
|
+
- **styles**: `<style scoped>` replaces Svelte's scoping, with four visible consequences.
|
|
132
|
+
- Scoped keyframes are renamed (ArtifactCard's `ft-artifact-sweep` becomes `ft-artifact-sweep-<scope-id>`, likewise AgentPlan and ApprovalCard): the animation is unaffected, but a consumer cannot redefine a keyframe by its source name; the documented custom properties (`--ft-artifact-sweep-duration`, …) are the override surface.
|
|
133
|
+
- Keyframes referenced from an inline style or a custom property ship unscoped under their source names, from a second unscoped `<style>` block (or an all-unscoped one where nothing else needs scoping: ContainerTextFlip, LetterPullup): FlipWords (`flipFadeInWord`, `flipFadeInLetter`, `flipEnterWord`, `flipExitWord`), LineShadowText (`line-shadow`), TextRevealCard (`star-drift`), RainbowButton (`@keyframes rainbow` and `.animate-rainbow` are global, so a consumer's own `rainbow` keyframe or class collides). A parent's scoped selector can also still match a child component's root element.
|
|
134
|
+
- Svelte's `:global(…)` descendants become `:deep(…)`: BlurReveal `:deep(*)`, Reveal `:deep(*:not([data-reveal-skip]))`. Overriding Magnetic's `.ft-magnetic::before` halo from a consumer's `<style scoped>` needs `:deep()`.
|
|
135
|
+
- Inline custom properties are bound as a style object, never a string (a string goes through `cssText`, where jsdom drops custom properties), so the server-rendered attribute has no space after the colon (`style="--rainbow-speed:2s;"`, `--shimmer-color:#ffffff;`, `--blur-reveal-duration:1s;`, `touch-action:none;`). The parsed value is identical and hydration is clean: BlurReveal, BorderBeam, CopyButton, GlareCard, GlowBorder, GradientButton, ImageTrailCursor, LineShadowText, LiquidGlass, RainbowButton, ShimmerButton.
|
|
136
|
+
- **transitions**: Svelte `in:` / `out:` directives become `<Transition :css="false">` / `<TransitionGroup :css="false">` driving the shared `runTransition` sampler, with the same curves and durations. `@vue/test-utils` stubs both by default, which silently removes the motion and the `inert` exit window; a test that needs them passes `global: { stubs: { transition: false, 'transition-group': false } }`. Button (spinner ↔ `iconStart` cross-fade), FileUpload rows, FormField messages, SearchInput's clear button, StickyScroll's panel crossfade, Tabs' panel entrance, TextRoll cells, Toast / Toaster.
|
|
137
|
+
- **reduced motion**: `prefers-reduced-motion` is read through the shared `useReducedMotion()` composable instead of an inline `window.matchMedia(...)`, with the same query and the same mount-time answer: FireworksHdr, NoiseReveal, SmoothCursor (a genuine change is still routed through `setOptions({ reducedMotion })`). FireworksHdr keeps an unread `change` listener attached for its lifetime.
|
|
138
|
+
- **sound cues**: cues go through `useSoundCue`, which always forwards its options argument, so the controller sees `play("select", undefined)` where Svelte calls `play("select")`. Audibly identical; only a spy asserting exact arguments notices: AnimatedTestimonials, ArtifactCard and RainbowButton (`press`), Breadcrumb, Navbar, Pagination, PasswordInput, RecommendationCard (`select` / `close`), WebSearch (`select` / `open` / `close`).
|
|
139
|
+
- **markup**: Vue's template whitespace condensing, fragment anchors and dev-build comments change `textContent` and the raw server string, never layout — a test asserting exact text must `.trim()`. Breadcrumb's ellipsis glyph is padded with spaces; Stepper's bullet reads "3not started" where Svelte reads "3 not started"; DatePicker's trigger loses the space before its calendar emoji; BentoGridCard's CTA renders `Learn more →` tight; ToolCall's "Request" label and "Nothing recorded yet." placeholder gain surrounding spaces. Pagination's slot fallbacks carry `<!--[-->…<!--]-->` anchors in the server string, and its "hidden pages" comment and InlineCitation's template comments appear in dev builds. BlurReveal emits `class=""` when given no class; LiquidText omits an empty `font-family` rather than emitting `font-family:;`; Combobox's hidden submission input binds `value` with `.attr`, so a `cloneNode()` of it carries the value too.
|
|
140
|
+
- **types**: folder barrels export the `<Name>Props` type (the tooling contract) even where the Svelte `index.ts` exports only the component: `ContainerScrollProps`, `DirectionAwareHoverProps`, `FluidCursorProps` (also as `FluidCursorAdvancedProps` for the deprecated `FluidCursorAdvanced` alias), `LiquidGlassProps`, `MarqueeProps` and `ReviewCardProps`; StatusMorph also exports `StatusMorphState`. `AppleCardProps` is exported from `AppleCard.vue` but, as in Svelte, not from the folder's `index.ts`. `DropdownMenuSubProps` is an empty interface, kept for the contract.
|
|
141
|
+
- **fallbacks**: where the Svelte source throws on a missing browser API, the Vue port degrades quietly: BoxReveal reveals immediately with no `IntersectionObserver`; DisplacementText swallows three's `Error creating WebGL context` and leaves the labelled host (`role="img"`, `aria-label`) empty; EditorialEngine settles immediately with no `document.fonts`; FireworksHdr's `debug` is `false` outside a bundler (`import.meta.env?.DEV === true`). Missing providers are under **context keys**.
|
|
142
|
+
- **kept source behaviour**: Svelte behaviour is ported as-is, known quirks included, where the React package differs: ApprovalCard's `onApprove` / `onDeny` stay `() => void` (React widened them to `(state) => void`); Compare's `StarField` builds its sky once, ignoring later `starsCount` / `seed` changes; EditorialEngine tracks `pullquotes` by array identity (hoist an inline array to keep it stable); LogoCloud's cloned marquee tracks carry no `aria-hidden`; MatrixRain does not pause off-screen; ContainerTextFlip has no stale-interval guard; AnimatedTestimonials has no reduced-motion handling; FlipWords goes blank if `words` empties mid-exit (`(index + 1) % 0` stores `NaN`, plus a dev-only `[Vue warn]: VNode created with invalid key (NaN)`); Autocomplete and NavigationMenu publish the requested `data-align="start"` while `transform-origin` follows the resolved alignment; `DropdownMenuContent` keeps the source's `nextTick()` wait before moving the panel to its edge.
|
|
143
|
+
- **composables**: composables expose no `destroy()`; cleanup runs through `onScopeDispose`. Focus-trap composables return a handle (`returnFocusNow` / `rearm`) instead of imperative action methods. Media-query and similar composables keep an explicit `start` / `stop` pair and accept getter-shaped options, as the Svelte actions do.
|
|
144
|
+
- **hydration**: sound preferences hydrate explicitly in `onMounted` (`hydrateSound()`) rather than reading `localStorage` during setup, because Vue's production hydration does not patch an attribute mismatch introduced by an eagerly read client-only preference.
|
|
145
|
+
- **vue floor**: Vue 3.5 is the floor, not just the minimum peer range: the port relies on reactive props destructuring, `useTemplateRef`, `onWatcherCleanup` and `<Teleport defer>`.
|
|
146
|
+
- **upstream fixes**: a handful of proven bugs surfaced while porting `fancy-ui-react` were fixed on the Svelte source itself, and the Vue port inherits those fixes. The review of the Vue port surfaced more, fixed here first with Svelte parity pending (each listed under its component below): animated-testimonials, animated-tooltip, autocomplete, compare, confetti, copy-button, focus, inline-citation, number-input, rainbow-button, select, text-generate-effect, tooltip, tracing-beam.
|
|
147
|
+
- **not listed**: implementation-only differences with no consumer surface (template duplication, style-object plumbing, internal helper types, test-fixture transpositions) are not recorded here. A component without a bullet below differs from Svelte only through the rules above.
|
|
148
|
+
|
|
149
|
+
### Per component
|
|
150
|
+
|
|
151
|
+
- **animated-beam**: `containerRef`, `fromRef` and `toRef` are typed `HTMLElement | null` rather than a required `HTMLElement`: a Vue template ref is `null` until the parent has mounted, so the idiomatic `:container-ref="container"` binding passes `null` on the first render. They are still required props (pass `null`, not nothing).
|
|
152
|
+
- **animated-beam**: Ids come from `useFancyId()` and read `beam-v-N`, with the `-glow` / `-bloom` filter suffixes. Svelte uses `beam-<$props.id()>`. Vue's `useId()` is unique within one app, not across separately mounted apps, so the uniqueness test mounts two beams in one app.
|
|
153
|
+
- **animated-beam**: The ResizeObserver arms on `onMounted` and again from a `flush: 'post'` watcher on `containerRef`. A parent's template ref is still `null` when a child's `onMounted` runs, a gap Svelte's `bind:this` does not have. The watcher also re-arms the observer when the container is swapped.
|
|
154
|
+
- **animated-testimonials**: the active testimonial is clamped when the list shrinks, and an empty list during a transition resets the index to 0 instead of `NaN` (upstream fix, Svelte parity pending).
|
|
155
|
+
- **animated-tooltip**: tooltip ids are generated per avatar (`useFancyId()`) instead of `animated-tooltip-${item.id}`, so `aria-describedby` stays a single token and stays unique across rows that share item ids (upstream fix, Svelte parity pending).
|
|
156
|
+
- **apple-card-carousel**: `AppleCardData.content` is a Vue component or render function (`Component` from `vue`, rendered through `<component :is>`) where Svelte takes a `Snippet`. It cannot become a slot because it lives inside an item of the `cards` array: pass `content: () => h('div', …)` or a small component.
|
|
157
|
+
- **autocomplete**: when the filtered list changes while open, the active option follows the highlighted suggestion by its text and clears when that suggestion is gone, so `aria-activedescendant` never points at a missing option (upstream fix, Svelte parity pending).
|
|
158
|
+
- **bento-grid**: the source's `:global(.dark) .bento-tile …` dark-theme rules are written `.dark .bento-tile …` in the scoped block, because the scoped compiler would reduce a selector containing `:global(...)` to a bare `.dark`. The rule targets the same elements with the same specificity.
|
|
159
|
+
- **bento-grid**: tile content parts (`.bento-lift`, `.bento-icon`, `.bento-cta`) are reached with `:deep()` from the internal BentoFrame, and the grid's reveal rules use `> :deep(*)`, in place of the source's `:global()`. The compiled selectors are unchanged apart from the scope attribute.
|
|
160
|
+
- **bento-grid**: the child indexing (`--bento-i`, `--bento-delay`, re-run by a MutationObserver) and the one-shot in-view observer run from `flush: 'post'` watchers on the grid's template ref, and reduced motion comes from `useReducedMotion()`, which is read in `onMounted`. The SSR output is the same as the source's: the class `bento-reveal` with `data-state="armed"`, and the tiles have no inline index properties until the watchers run on the client.
|
|
161
|
+
- **bento-grid**: BentoGridItem and BentoGridCard pass `[base, class]` to the internal frame's `cn()` where the source uses `[base, className].join(" ")`. The merged string is identical for string classes, and the port also accepts Vue's array and object class values.
|
|
162
|
+
- **border-beam**: The dark-theme rule `:global(.dark) .border-beam` is written as `.dark .border-beam` under the scoped compiler, which only scopes `.border-beam` and gives the same selector; a leading `:global()` would instead produce a bare `.dark` rule.
|
|
163
|
+
- **border-beam**: The `bb-travel` and `bb-ignite` keyframes stay in the scoped block. They are only referenced from scoped `animation` declarations, so the compiler renames them with the scope hash and rewrites those references consistently. This means an outside stylesheet cannot target the keyframes by their bare names.
|
|
164
|
+
- **compare**: autoplay keeps a single frame loop: `startAutoplay` stops the running loop first, so mount, hover leave, drag end and prop restarts no longer stack loops, and unmount cancels it (upstream fix, Svelte parity pending).
|
|
165
|
+
- **composer**: `ComposerCommandMenu` attaches its textarea `keydown` listener in the CAPTURE phase (in Vue every listener sits on the textarea itself, so a bubble-phase `stopPropagation()` would arrive too late to stop Enter-to-send). A consumer's own `keydown` listener on the textarea therefore runs after the menu's while it is open.
|
|
166
|
+
- **compare**: the lowercase callbacks `onpercentagechange`, `ondragstart`, `ondragend`, `onhoverenter`, `onhoverleave` stay declared props, passed as `:ondragstart="fn"` and so on; the `@dragstart` / `@hoverenter` spellings compile to `onDragstart` / `onHoverenter` and are dropped with the other attributes, so they never fire.
|
|
167
|
+
- **confetti**: Reassigning `options` and calling `fire()` in the same tick bursts with the PREVIOUS object: Vue hands a reassigned prop to the child only on the parent's next render, where Svelte bursts with the new one. Mutating the object already passed as `options` behaves identically, and the next `fire()` after the re-render uses the reassignment.
|
|
168
|
+
- **confetti**: `ConfettiButton` renders `type="button"`: the Svelte source renders a bare `<button>`, which defaults to submit inside a form, and `inheritAttrs: false` leaves consumers no way to override it (upstream fix, Svelte parity pending).
|
|
169
|
+
- **container-scroll**: the source's `:global(.dark) .cs-root` and `:global(html:not(.dark)) .cs-root` selectors are written as plain ancestor selectors (`.dark .cs-root`, `html:not(.dark) .cs-root`) in the scoped style block, because the scoped compiler would otherwise emit the wrapped part alone; the matched elements and the values are identical.
|
|
170
|
+
- **context-menu**: `openAt` drops the source's imperative `anchorRef.style.setProperty("left"/"top")` writes and relies on the anchor span's `:style` binding landing ahead of the `flush: "post"` recompute. A consumer reading `ctx.anchorRef.style.left` synchronously inside `onOpenChange` sees the PREVIOUS coordinates in Vue and the new ones in Svelte.
|
|
171
|
+
- **copy-button**: `onCopy` reports the value captured when the copy started, not the prop's later value, when the prop changes while the clipboard write is pending (upstream fix, Svelte parity pending).
|
|
172
|
+
- **datamosh-transition**: `phase` is output-only: `v-model:phase` hears every change, but a value the parent writes back is ignored, where Svelte's bindable adopts it. The lowercase callbacks `oncovered` / `onrevealed` stay declared props, passed as `:oncovered` / `:onrevealed`; a `@covered` / `@revealed` listener compiles to `onCovered` / `onRevealed`, lands on the overlay as a native listener and never fires. `cover()` / `reveal()` / `play()` are called through a template ref.
|
|
173
|
+
- **dim-siblings**: Svelte's child `:global(...)` selector becomes `:slotted(...)`: only direct children that arrived through the default slot dim. DOM injected into the root from outside the slot does not participate, where Svelte's rule would still catch it.
|
|
174
|
+
- **direction-aware-hover**: The two `:global()` rules keep their declarations verbatim but lose their document-wide reach: the `.group\/card` 44px min-box and the `prefers-reduced-motion: reduce` `transition-duration: 0.1s` override apply to this component's own elements plus its whole slot subtree, because every scoped style ships in the one `styles.css` each consumer imports once, and would otherwise force both on apps that never render the component. Under reduced motion the 0.1s override therefore reaches this component's slot content only, not the rest of the host page. Matches the React package's identical narrowing.
|
|
175
|
+
- **dock**: Svelte throws when a DockIcon or DockSeparator is mounted outside a Dock. The Vue port degrades instead, through a frozen fallback context: `magnify: false`, `orientation: "horizontal"`, the pointer at `Infinity` and `reflection: true` (the prop default). A lone icon renders at its resting 40px with the reflection hook, and a lone separator is a vertical `role=separator` hairline.
|
|
176
|
+
- **dock**: Svelte writes `:global(.dark) .dock-*` in its scoped styles. Vue writes them as plain `.dark .dock-*` ancestor selectors, which have the same reach and the same specificity.
|
|
177
|
+
- **flip-card**: `inert` is bound as `cond || undefined` rather than a bare boolean: when Vue patches an element with no `inert` DOM property (jsdom) it writes `inert="false"`, which would make the visible face inert, so false is mapped to no attribute; browser behaviour is unchanged.
|
|
178
|
+
- **flip-card**: Reduced motion is read through `useReducedMotion()`, which starts the media query in onMounted, instead of Svelte's `$effect(() => reduced.start())`, following the package's rule that SSR and hydration must render the same thing.
|
|
179
|
+
- **focus**: toggling `manualMode` after mount starts or stops the auto-cycle, and switching to manual returns focus to the first word (upstream fix, Svelte parity pending).
|
|
180
|
+
- **inline-citation**: a source url or `href` with no scheme (`docs.example.dev/guide`) gets `https://` added before the scheme check, the same as `SourceCard`, so the marker no longer resolves against the app origin (upstream fix, Svelte parity pending).
|
|
181
|
+
- **input**: `autocomplete` is widened to `string` in the props the component accepts; the exported `InputProps` still types it as the full autofill token union. The generated props type would otherwise exceed the type checker's union ceiling, so a token typo is no longer caught at the call site.
|
|
182
|
+
- **line-hover-link**: `aria-label` is spelled `ariaLabel` in `LineHoverLinkProps`: Vue camelises declared prop names, so the hyphenated Svelte key could never be read back off `props`. Both `ariaLabel="…"` and `aria-label="…"` reach the prop and emit `aria-label` on the anchor.
|
|
183
|
+
- **line-reveal**: Line height survives a font-only change. Svelte's `style:font` / `style:line-height` directives re-apply only the declaration whose value changed, so switching weight or family at the same size re-applies the `font` shorthand (which resets `line-height`) without the longhand, and the lines drift inside their fixed-height masks. Vue re-applies every key of the style object, `font` then `line-height`, on each patch, so that bug does not reproduce; the emitted style still reads `font: …; line-height: …`. Behavioural parity with the React port.
|
|
184
|
+
- **marquee**: the Web Animations upgrade is rebuilt when `class` changes, as in Svelte, but because `class` is typed `HTMLAttributes["class"]` here, a consumer passing an inline array or object class gets a new identity on every parent render and triggers a rebuild each time; the rebuild resumes from the current position, so nothing jumps visually. Pass a string, or hoist the array, to avoid the churn.
|
|
185
|
+
- **marquee**: ReviewCard's dark-mode rule is written `.dark .review-card` instead of the source's `:global(.dark) .review-card`, because the scoped compiler would swallow the whole selector inside `:global()`; the emitted selector has the same reach (`.dark` ancestor, scoped card).
|
|
186
|
+
- **navigation-menu**: `NavigationMenuContext` gains one readonly member the source has no counterpart for, `pendingFocusValue`: a Vue watcher's callback is untracked, so the panel names the pending focus request as an explicit watch source (`consumeFocusRequest()` is still the only way to take it). Without it, Enter on a trigger whose panel is already hover-open would not move focus into the panel.
|
|
187
|
+
- **number-input**: step precision counts the exponent of steps written in exponential notation (`1e-7`), so tiny fractional steps no longer round back to an integer (upstream fix, Svelte parity pending).
|
|
188
|
+
- **pagination**: when the visible run of pages shifts, the numbers glide with the list's CSS move transition (300ms, cubic-bezier(0.16, 1, 0.3, 1), off under reduced motion) instead of a JS-sampled expo-out FLIP; the sliding current-page pill is identical.
|
|
189
|
+
- **password-input**: Cross-fade exit easing differs from the source, package-wide and shared with the React port: the icon cross-fade's EXIT leg resolves to `JS_EASINGS.in`, because the presence core passes a real per-leg direction, where the source's bidirectional `transition:iconFade` reports direction "both" and eases both legs with `JS_EASINGS.out`.
|
|
190
|
+
- **pressable**: `PressableProps` no longer blocks the seven listeners the wrapper owns (`onpointerdown`, `onpointerup`, `onpointercancel`, `onpointerleave`, `onfocusout`, `onkeydown`, `onkeyup`): passed through `$attrs`, a same-named handler is MERGED and fires alongside the wrapper's own (caller's first) rather than being silently overridden. Put your own handlers for those on the child; the guidance is advisory here, not type-enforced.
|
|
191
|
+
- **pulse-beam**: the lowercase callbacks `onfadein` / `onfadeout` stay declared props, passed as `:onfadein="fn"` / `:onfadeout="fn"`; a `@fadein` / `@fadeout` listener compiles to `onFadein` / `onFadeout`, lands on the host as a native listener and never fires. The computed `--pb-*` custom properties win over a consumer `style`.
|
|
192
|
+
- **radio-group**: The generated `name` reads `v-0-name`, `v-1-name`, … from Vue's `useId()`, whose counter is per APP, not per page: two RadioGroups mounted in two SEPARATE Vue apps on one page both get `v-0-name` and fight over each other's selection. Inside one app they are distinct and SSR-stable. Consumers mounting several apps must set `app.config.idPrefix` per app, or pass an explicit `name`; the Svelte and React packages have no equivalent hazard.
|
|
193
|
+
- **rainbow-button**: a disabled `href` anchor calls `preventDefault()` on click, so it no longer navigates; the Svelte source only returns early, and `aria-disabled` / `tabindex=-1` do not stop a pointer click from following the href (upstream fix, Svelte parity pending).
|
|
194
|
+
- **reveal**: Changing `once`, `threshold` or `rootMargin` no longer tears down and rebuilds the observer: `useInView` routes them through the core's `update()`, and a spent `once: true` observer does not re-fire (same as the React port).
|
|
195
|
+
- **select**: a disabled Select rejects every commit, and closes its panel if it is disabled while open, so a portalled row click can no longer change the value or fire `onValueChange` on a disabled control (upstream fix, Svelte parity pending).
|
|
196
|
+
- **smooth-cursor**: The custom cursor is the `#cursor` slot rather than a snippet prop. The tip-versus-centre hotspot is recomputed from the slot's presence on every render, not held in a reactive derived value, because slot presence is not reactive in Vue.
|
|
197
|
+
- **smooth-cursor**: The gradient id for the default arrow comes from `useFancyId()` (`smooth-cursor-fill-v-N`), not `$props.id()`. The two id sources format their ids differently, but the id is SSR-stable and unique per instance in both packages.
|
|
198
|
+
- **smooth-cursor**: The prop watchers (`springConfig`, `labelSpring`, `rotate`, `idleFade`) and the label-element watcher fire only on change, never at mount. The engine gets the mount values as creation options, so the Svelte effects' first run, which re-applies the same values, is not repeated here.
|
|
199
|
+
- **terminal-text**: The stream is keyed on the CONTENT of `lines`, not the array's identity, so an inline `:lines="['a', 'b']"` (a fresh array on every parent re-render) does not clear the pending timeouts and restart the animation each time. The array is serialised, so `['ab']` and `['a', 'b']` never collide; an in-place mutation of a reactive `lines` array still restarts the stream. Remaining gap: a re-allocated array with equal content keeps the current stream running, where Svelte would restart it (same trade-off as the React port).
|
|
200
|
+
- **text-generate-effect**: a `words` change re-arms the reveal on the new spans and clears the previous run's timers, instead of leaving replacement words invisible (upstream fix, Svelte parity pending).
|
|
201
|
+
- **textarea**: `autocomplete` is widened to `string` in the props the component accepts; the exported `TextareaProps` still types it as the full autofill token union. The generated props type would otherwise exceed the type checker's union ceiling, so a token typo is no longer caught at the call site.
|
|
202
|
+
- **time-picker**: When `step`, `min` or `max` regenerate the slot grid, the highlight is reconciled against the time it named: the same slot if it survived, else the closest one at or after it, else the last, else nothing highlighted. The Svelte component leaves the raw index in place, which can point past the end of a shorter grid or at a different time than the one arrowed to. Matches the React package, which closed the same gap.
|
|
203
|
+
- **timeline**: the source's `:global(.dark) .tl-root` theme override is written as a plain `.dark .tl-root` ancestor selector in the scoped block. The rule and the result are the same.
|
|
204
|
+
- **timeline**: the items-count watcher (`watch(() => items.length, …, { flush: 'post' })`) does not run on mount, while the Svelte `$effect` does. The Svelte first run only queues a redundant microtask re-measure after `onMount` has already measured synchronously, so the rendered result is the same.
|
|
205
|
+
- **toast**: The entrance and exit move from `<Toast>` to `<Toaster>`: a `<Toast>` rendered directly by a consumer paints at rest and no longer animates itself in or out. Through `<Toaster>` the motion is unchanged — same preset, 300ms/8px arrival, 200ms/4px departure, same reduced-motion collapse (parity with the React port).
|
|
206
|
+
- **tool-call**: The auto-open for a failure is keyed on the `call.status` VALUE, not on the `call` object identity: handing the card a fresh `call` object whose status is still `"error"` does not re-fire the auto-open. Observable only when a consumer drives `open` from outside AND re-creates the `call` object (same as the React port).
|
|
207
|
+
- **tooltip**: the tooltip appends its id to the trigger's existing `aria-describedby` list and removes only that id on close, instead of overwriting the attribute and then deleting it; it also rewires its listeners and `aria-describedby` onto a replacement trigger when the slot swaps its first element (upstream fixes, Svelte parity pending).
|
|
208
|
+
- **tracing-beam**: each instance uses its own generated gradient id (`useFancyId()`) for the gradient and its stroke reference, so two beams on one page no longer share one spring-animated gradient (upstream fix, Svelte parity pending).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "vue";
|
|
2
|
+
import type { Skin } from "./types.js";
|
|
3
|
+
export interface FancyProviderProps {
|
|
4
|
+
/** The active skin. Changing it re-flows the whole subtree live. */
|
|
5
|
+
skin: Skin;
|
|
6
|
+
/** Scope `.dark` to this subtree for skins whose colorScheme is "dark". */
|
|
7
|
+
manageColorScheme?: boolean;
|
|
8
|
+
class?: HTMLAttributes["class"];
|
|
9
|
+
}
|
|
10
|
+
declare const _default: typeof __VLS_export;
|
|
11
|
+
export default _default;
|
|
12
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<FancyProviderProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<FancyProviderProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
13
|
+
default?: () => unknown;
|
|
14
|
+
}>;
|
|
15
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
16
|
+
new (): {
|
|
17
|
+
$slots: S;
|
|
18
|
+
};
|
|
19
|
+
};
|