fancy-ui-react 0.2.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 +118 -0
- package/README.md +643 -0
- package/dist/cameleon/FancyProvider.d.ts +11 -0
- package/dist/cameleon/FancyProvider.js +42 -0
- package/dist/cameleon/context.d.ts +22 -0
- package/dist/cameleon/context.js +16 -0
- package/dist/cameleon/index.d.ts +31 -0
- package/dist/cameleon/index.js +39 -0
- package/dist/cameleon/primitives/Badge.d.ts +10 -0
- package/dist/cameleon/primitives/Badge.js +12 -0
- package/dist/cameleon/primitives/Button.d.ts +11 -0
- package/dist/cameleon/primitives/Button.js +43 -0
- package/dist/cameleon/primitives/Checkbox.d.ts +10 -0
- package/dist/cameleon/primitives/Checkbox.js +39 -0
- package/dist/cameleon/primitives/Input.d.ts +10 -0
- package/dist/cameleon/primitives/Input.js +13 -0
- package/dist/cameleon/primitives/Radio.d.ts +12 -0
- package/dist/cameleon/primitives/Radio.js +29 -0
- package/dist/cameleon/primitives/Select.d.ts +10 -0
- package/dist/cameleon/primitives/Select.js +27 -0
- package/dist/cameleon/primitives/Slider.d.ts +7 -0
- package/dist/cameleon/primitives/Slider.js +22 -0
- package/dist/cameleon/primitives/Switch.d.ts +9 -0
- package/dist/cameleon/primitives/Switch.js +33 -0
- package/dist/cameleon/primitives/Textarea.d.ts +9 -0
- package/dist/cameleon/primitives/Textarea.js +13 -0
- package/dist/cameleon/primitives/Tooltip.d.ts +14 -0
- package/dist/cameleon/primitives/Tooltip.js +15 -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 +16 -0
- package/dist/cameleon/skins/aurora/meta.d.ts +3 -0
- package/dist/cameleon/skins/aurora/meta.js +61 -0
- package/dist/cameleon/skins/aurora/recipes.d.ts +24 -0
- package/dist/cameleon/skins/aurora/recipes.js +124 -0
- package/dist/cameleon/skins/aurora/tokens.d.ts +6 -0
- package/dist/cameleon/skins/aurora/tokens.js +18 -0
- package/dist/cameleon/skins/brutal/index.d.ts +2 -0
- package/dist/cameleon/skins/brutal/index.js +35 -0
- package/dist/cameleon/skins/brutal/meta.d.ts +3 -0
- package/dist/cameleon/skins/brutal/meta.js +73 -0
- package/dist/cameleon/skins/brutal/ornaments.d.ts +7 -0
- package/dist/cameleon/skins/brutal/ornaments.js +18 -0
- package/dist/cameleon/skins/brutal/recipes.d.ts +23 -0
- package/dist/cameleon/skins/brutal/recipes.js +113 -0
- package/dist/cameleon/skins/brutal/tokens.d.ts +8 -0
- package/dist/cameleon/skins/brutal/tokens.js +23 -0
- package/dist/cameleon/skins/default.d.ts +2 -0
- package/dist/cameleon/skins/default.js +79 -0
- package/dist/cameleon/skins/glass/index.d.ts +2 -0
- package/dist/cameleon/skins/glass/index.js +16 -0
- package/dist/cameleon/skins/glass/meta.d.ts +3 -0
- package/dist/cameleon/skins/glass/meta.js +63 -0
- package/dist/cameleon/skins/glass/recipes.d.ts +24 -0
- package/dist/cameleon/skins/glass/recipes.js +124 -0
- package/dist/cameleon/skins/glass/tokens.d.ts +5 -0
- package/dist/cameleon/skins/glass/tokens.js +18 -0
- package/dist/cameleon/skins/retro-os/index.d.ts +2 -0
- package/dist/cameleon/skins/retro-os/index.js +24 -0
- package/dist/cameleon/skins/retro-os/meta.d.ts +3 -0
- package/dist/cameleon/skins/retro-os/meta.js +61 -0
- package/dist/cameleon/skins/retro-os/ornaments.d.ts +9 -0
- package/dist/cameleon/skins/retro-os/ornaments.js +28 -0
- package/dist/cameleon/skins/retro-os/recipes.d.ts +35 -0
- package/dist/cameleon/skins/retro-os/recipes.js +126 -0
- package/dist/cameleon/skins/retro-os/tokens.d.ts +16 -0
- package/dist/cameleon/skins/retro-os/tokens.js +23 -0
- package/dist/cameleon/skins/terminal/index.d.ts +2 -0
- package/dist/cameleon/skins/terminal/index.js +24 -0
- package/dist/cameleon/skins/terminal/meta.d.ts +3 -0
- package/dist/cameleon/skins/terminal/meta.js +70 -0
- package/dist/cameleon/skins/terminal/ornaments.d.ts +7 -0
- package/dist/cameleon/skins/terminal/ornaments.js +8 -0
- package/dist/cameleon/skins/terminal/recipes.d.ts +25 -0
- package/dist/cameleon/skins/terminal/recipes.js +125 -0
- package/dist/cameleon/skins/terminal/tokens.d.ts +5 -0
- package/dist/cameleon/skins/terminal/tokens.js +18 -0
- package/dist/cameleon/types.d.ts +133 -0
- package/dist/components/agent-plan/AgentPlan.d.ts +25 -0
- package/dist/components/agent-plan/AgentPlan.js +181 -0
- package/dist/components/agent-plan/index.d.ts +2 -0
- package/dist/components/ai-data-table/AiDataTable.d.ts +54 -0
- package/dist/components/ai-data-table/AiDataTable.js +110 -0
- package/dist/components/ai-data-table/index.d.ts +2 -0
- package/dist/components/alert-dialog/AlertDialog.d.ts +35 -0
- package/dist/components/alert-dialog/AlertDialog.js +109 -0
- package/dist/components/alert-dialog/index.d.ts +2 -0
- package/dist/components/animated-beam/AnimatedBeam.d.ts +39 -0
- package/dist/components/animated-beam/AnimatedBeam.js +192 -0
- package/dist/components/animated-beam/index.d.ts +2 -0
- package/dist/components/animated-testimonials/AnimatedTestimonials.d.ts +32 -0
- package/dist/components/animated-testimonials/AnimatedTestimonials.js +172 -0
- package/dist/components/animated-testimonials/index.d.ts +2 -0
- package/dist/components/animated-tooltip/AnimatedTooltip.d.ts +13 -0
- package/dist/components/animated-tooltip/AnimatedTooltip.js +137 -0
- package/dist/components/animated-tooltip/index.d.ts +2 -0
- package/dist/components/apple-card-carousel/AppleCard.d.ts +30 -0
- package/dist/components/apple-card-carousel/AppleCard.js +219 -0
- package/dist/components/apple-card-carousel/AppleCardCarousel.d.ts +14 -0
- package/dist/components/apple-card-carousel/AppleCardCarousel.js +30 -0
- package/dist/components/apple-card-carousel/index.d.ts +4 -0
- package/dist/components/approval-card/ApprovalCard.d.ts +57 -0
- package/dist/components/approval-card/ApprovalCard.js +153 -0
- package/dist/components/approval-card/index.d.ts +2 -0
- package/dist/components/artifact-card/ArtifactCard.d.ts +44 -0
- package/dist/components/artifact-card/ArtifactCard.js +204 -0
- package/dist/components/artifact-card/index.d.ts +2 -0
- package/dist/components/autocomplete/Autocomplete.d.ts +36 -0
- package/dist/components/autocomplete/Autocomplete.js +186 -0
- package/dist/components/autocomplete/AutocompletePanel.d.ts +12 -0
- package/dist/components/autocomplete/AutocompletePanel.js +123 -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 +10 -0
- package/dist/components/autocomplete/types.d.ts +52 -0
- package/dist/components/autocomplete/types.js +6 -0
- package/dist/components/bento-grid/BentoGrid.d.ts +6 -0
- package/dist/components/bento-grid/BentoGrid.js +19 -0
- package/dist/components/bento-grid/BentoGridCard.d.ts +11 -0
- package/dist/components/bento-grid/BentoGridCard.js +49 -0
- package/dist/components/bento-grid/BentoGridItem.d.ts +9 -0
- package/dist/components/bento-grid/BentoGridItem.js +33 -0
- package/dist/components/bento-grid/index.d.ts +6 -0
- package/dist/components/bg-falling-stars/FallingStarsBg.d.ts +24 -0
- package/dist/components/bg-falling-stars/FallingStarsBg.js +134 -0
- package/dist/components/bg-falling-stars/index.d.ts +2 -0
- package/dist/components/bg-stars/StarsBackground.d.ts +40 -0
- package/dist/components/bg-stars/StarsBackground.js +188 -0
- package/dist/components/bg-stars/index.d.ts +2 -0
- package/dist/components/blur-reveal/BlurReveal.d.ts +19 -0
- package/dist/components/blur-reveal/BlurReveal.js +50 -0
- package/dist/components/blur-reveal/index.d.ts +2 -0
- package/dist/components/book/Book.d.ts +13 -0
- package/dist/components/book/Book.js +94 -0
- package/dist/components/book/BookDescription.d.ts +6 -0
- package/dist/components/book/BookDescription.js +9 -0
- package/dist/components/book/BookHeader.d.ts +6 -0
- package/dist/components/book/BookHeader.js +9 -0
- package/dist/components/book/BookTitle.d.ts +6 -0
- package/dist/components/book/BookTitle.js +9 -0
- package/dist/components/book/index.d.ts +132 -0
- package/dist/components/book/index.js +48 -0
- package/dist/components/border-beam/BorderBeam.d.ts +25 -0
- package/dist/components/border-beam/BorderBeam.js +45 -0
- package/dist/components/border-beam/index.d.ts +2 -0
- package/dist/components/box-reveal/BoxReveal.d.ts +20 -0
- package/dist/components/box-reveal/BoxReveal.js +58 -0
- package/dist/components/box-reveal/index.d.ts +2 -0
- package/dist/components/breadcrumb/Breadcrumb.d.ts +49 -0
- package/dist/components/breadcrumb/Breadcrumb.js +61 -0
- package/dist/components/breadcrumb/index.d.ts +2 -0
- package/dist/components/button/Button.d.ts +44 -0
- package/dist/components/button/Button.js +120 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button/types.d.ts +4 -0
- package/dist/components/button-group/ButtonGroup.d.ts +23 -0
- package/dist/components/button-group/ButtonGroup.js +30 -0
- package/dist/components/button-group/index.d.ts +4 -0
- package/dist/components/button-group/types.d.ts +34 -0
- package/dist/components/button-group/types.js +7 -0
- package/dist/components/card-3d/CardBody.d.ts +8 -0
- package/dist/components/card-3d/CardBody.js +9 -0
- package/dist/components/card-3d/CardContainer.d.ts +19 -0
- package/dist/components/card-3d/CardContainer.js +61 -0
- package/dist/components/card-3d/CardItem.d.ts +22 -0
- package/dist/components/card-3d/CardItem.js +29 -0
- package/dist/components/card-3d/index.d.ts +6 -0
- package/dist/components/card-spotlight/CardSpotlight.d.ts +16 -0
- package/dist/components/card-spotlight/CardSpotlight.js +65 -0
- package/dist/components/card-spotlight/index.d.ts +2 -0
- package/dist/components/chat-error/ChatError.d.ts +32 -0
- package/dist/components/chat-error/ChatError.js +75 -0
- package/dist/components/chat-error/index.d.ts +2 -0
- package/dist/components/chat-message/ChatMessage.d.ts +43 -0
- package/dist/components/chat-message/ChatMessage.js +127 -0
- package/dist/components/chat-message/ChatMessageAction.d.ts +20 -0
- package/dist/components/chat-message/ChatMessageAction.js +58 -0
- package/dist/components/chat-message/ChatMessageActions.d.ts +14 -0
- package/dist/components/chat-message/ChatMessageActions.js +30 -0
- package/dist/components/chat-message/ChatMessageBranches.d.ts +15 -0
- package/dist/components/chat-message/ChatMessageBranches.js +93 -0
- package/dist/components/chat-message/index.d.ts +10 -0
- package/dist/components/chat-message/types.d.ts +38 -0
- package/dist/components/chat-message/types.js +7 -0
- package/dist/components/chat-panel/ChatEmptyState.d.ts +17 -0
- package/dist/components/chat-panel/ChatEmptyState.js +42 -0
- package/dist/components/chat-panel/ChatPanel.d.ts +31 -0
- package/dist/components/chat-panel/ChatPanel.js +163 -0
- package/dist/components/chat-panel/index.d.ts +4 -0
- package/dist/components/checkbox/Checkbox.d.ts +64 -0
- package/dist/components/checkbox/Checkbox.js +123 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/code-diff/CodeDiff.d.ts +39 -0
- package/dist/components/code-diff/CodeDiff.js +213 -0
- package/dist/components/code-diff/index.d.ts +2 -0
- package/dist/components/colourful-text/ColourfulText.d.ts +28 -0
- package/dist/components/colourful-text/ColourfulText.js +73 -0
- package/dist/components/colourful-text/index.d.ts +2 -0
- package/dist/components/combobox/Combobox.d.ts +53 -0
- package/dist/components/combobox/Combobox.js +248 -0
- package/dist/components/combobox/ComboboxPanel.d.ts +28 -0
- package/dist/components/combobox/ComboboxPanel.js +110 -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 +14 -0
- package/dist/components/combobox/types.d.ts +60 -0
- package/dist/components/combobox/types.js +6 -0
- package/dist/components/command-menu/CommandMenu.d.ts +37 -0
- package/dist/components/command-menu/CommandMenu.js +386 -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 +45 -0
- package/dist/components/command-menu/types.d.ts +19 -0
- package/dist/components/compare/Compare.d.ts +31 -0
- package/dist/components/compare/Compare.js +300 -0
- package/dist/components/compare/StarField.d.ts +22 -0
- package/dist/components/compare/StarField.js +66 -0
- package/dist/components/compare/index.d.ts +4 -0
- package/dist/components/composer/Composer.d.ts +56 -0
- package/dist/components/composer/Composer.js +155 -0
- package/dist/components/composer/ComposerAttachment.d.ts +14 -0
- package/dist/components/composer/ComposerAttachment.js +127 -0
- package/dist/components/composer/ComposerAttachments.d.ts +18 -0
- package/dist/components/composer/ComposerAttachments.js +85 -0
- package/dist/components/composer/ComposerCommandMenu.d.ts +37 -0
- package/dist/components/composer/ComposerCommandMenu.js +208 -0
- package/dist/components/composer/ComposerInput.d.ts +22 -0
- package/dist/components/composer/ComposerInput.js +96 -0
- package/dist/components/composer/ComposerModelPicker.d.ts +32 -0
- package/dist/components/composer/ComposerModelPicker.js +223 -0
- package/dist/components/composer/ComposerSubmit.d.ts +16 -0
- package/dist/components/composer/ComposerSubmit.js +52 -0
- package/dist/components/composer/ComposerToolbar.d.ts +38 -0
- package/dist/components/composer/ComposerToolbar.js +9 -0
- package/dist/components/composer/caret.d.ts +69 -0
- package/dist/components/composer/caret.js +112 -0
- package/dist/components/composer/index.d.ts +18 -0
- package/dist/components/composer/types.d.ts +86 -0
- package/dist/components/composer/types.js +7 -0
- package/dist/components/confetti/Confetti.d.ts +37 -0
- package/dist/components/confetti/Confetti.js +45 -0
- package/dist/components/confetti/ConfettiButton.d.ts +23 -0
- package/dist/components/confetti/ConfettiButton.js +29 -0
- package/dist/components/confetti/context.d.ts +21 -0
- package/dist/components/confetti/context.js +6 -0
- package/dist/components/confetti/index.d.ts +4 -0
- package/dist/components/container-scroll/ContainerScroll.d.ts +10 -0
- package/dist/components/container-scroll/ContainerScroll.js +74 -0
- package/dist/components/container-scroll/index.d.ts +2 -0
- package/dist/components/container-text-flip/ContainerTextFlip.d.ts +9 -0
- package/dist/components/container-text-flip/ContainerTextFlip.js +58 -0
- package/dist/components/container-text-flip/index.d.ts +2 -0
- package/dist/components/context-menu/ContextMenu.d.ts +39 -0
- package/dist/components/context-menu/ContextMenu.js +105 -0
- package/dist/components/context-menu/ContextMenuContent.d.ts +27 -0
- package/dist/components/context-menu/ContextMenuContent.js +97 -0
- package/dist/components/context-menu/ContextMenuTrigger.d.ts +26 -0
- package/dist/components/context-menu/ContextMenuTrigger.js +37 -0
- package/dist/components/context-menu/index.d.ts +20 -0
- package/dist/components/context-menu/types.d.ts +52 -0
- package/dist/components/context-menu/types.js +17 -0
- package/dist/components/context-ring/ContextRing.d.ts +33 -0
- package/dist/components/context-ring/ContextRing.js +257 -0
- package/dist/components/context-ring/index.d.ts +2 -0
- package/dist/components/copy-button/CopyButton.d.ts +39 -0
- package/dist/components/copy-button/CopyButton.js +124 -0
- package/dist/components/copy-button/index.d.ts +2 -0
- package/dist/components/date-picker/DatePicker.d.ts +58 -0
- package/dist/components/date-picker/DatePicker.js +331 -0
- package/dist/components/date-picker/date-utils.d.ts +39 -0
- package/dist/components/date-picker/date-utils.js +85 -0
- package/dist/components/date-picker/index.d.ts +2 -0
- package/dist/components/dialog/Dialog.d.ts +29 -0
- package/dist/components/dialog/Dialog.js +105 -0
- package/dist/components/dialog/DialogSurface.d.ts +2 -0
- package/dist/components/dialog/DialogSurface.js +98 -0
- package/dist/components/dialog/index.d.ts +2 -0
- package/dist/components/dialog/types.d.ts +61 -0
- package/dist/components/dim-siblings/DimSiblings.d.ts +30 -0
- package/dist/components/dim-siblings/DimSiblings.js +47 -0
- package/dist/components/dim-siblings/index.d.ts +2 -0
- package/dist/components/direction-aware-hover/DirectionAwareHover.d.ts +10 -0
- package/dist/components/direction-aware-hover/DirectionAwareHover.js +185 -0
- package/dist/components/direction-aware-hover/index.d.ts +2 -0
- package/dist/components/displacement-text/DisplacementText.d.ts +26 -0
- package/dist/components/displacement-text/DisplacementText.js +185 -0
- package/dist/components/displacement-text/index.d.ts +2 -0
- package/dist/components/dock/Dock.d.ts +28 -0
- package/dist/components/dock/Dock.js +80 -0
- package/dist/components/dock/DockIcon.d.ts +17 -0
- package/dist/components/dock/DockIcon.js +38 -0
- package/dist/components/dock/DockSeparator.d.ts +6 -0
- package/dist/components/dock/DockSeparator.js +20 -0
- package/dist/components/dock/index.d.ts +7 -0
- package/dist/components/dock/types.d.ts +47 -0
- package/dist/components/dock/types.js +15 -0
- package/dist/components/drawer/Drawer.d.ts +34 -0
- package/dist/components/drawer/Drawer.js +237 -0
- package/dist/components/drawer/index.d.ts +2 -0
- package/dist/components/dropdown-menu/DropdownMenu.d.ts +38 -0
- package/dist/components/dropdown-menu/DropdownMenu.js +99 -0
- package/dist/components/dropdown-menu/DropdownMenuContent.d.ts +15 -0
- package/dist/components/dropdown-menu/DropdownMenuContent.js +111 -0
- package/dist/components/dropdown-menu/DropdownMenuItem.d.ts +26 -0
- package/dist/components/dropdown-menu/DropdownMenuItem.js +74 -0
- package/dist/components/dropdown-menu/DropdownMenuLabel.d.ts +15 -0
- package/dist/components/dropdown-menu/DropdownMenuLabel.js +18 -0
- package/dist/components/dropdown-menu/DropdownMenuSeparator.d.ts +6 -0
- package/dist/components/dropdown-menu/DropdownMenuSeparator.js +15 -0
- package/dist/components/dropdown-menu/DropdownMenuSub.d.ts +10 -0
- package/dist/components/dropdown-menu/DropdownMenuSub.js +110 -0
- package/dist/components/dropdown-menu/DropdownMenuSubContent.d.ts +15 -0
- package/dist/components/dropdown-menu/DropdownMenuSubContent.js +139 -0
- package/dist/components/dropdown-menu/DropdownMenuSubTrigger.d.ts +17 -0
- package/dist/components/dropdown-menu/DropdownMenuSubTrigger.js +104 -0
- package/dist/components/dropdown-menu/DropdownMenuTrigger.d.ts +16 -0
- package/dist/components/dropdown-menu/DropdownMenuTrigger.js +67 -0
- package/dist/components/dropdown-menu/index.d.ts +20 -0
- package/dist/components/dropdown-menu/menu-shared.d.ts +39 -0
- package/dist/components/dropdown-menu/menu-shared.js +48 -0
- package/dist/components/dropdown-menu/types.d.ts +159 -0
- package/dist/components/dropdown-menu/types.js +32 -0
- package/dist/components/editorial-engine/EditorialEngine.d.ts +21 -0
- package/dist/components/editorial-engine/EditorialEngine.js +68 -0
- package/dist/components/editorial-engine/engine.d.ts +7 -0
- package/dist/components/editorial-engine/engine.js +558 -0
- package/dist/components/editorial-engine/index.d.ts +2 -0
- package/dist/components/file-upload/FileUpload.d.ts +63 -0
- package/dist/components/file-upload/FileUpload.js +438 -0
- package/dist/components/file-upload/index.d.ts +2 -0
- package/dist/components/fireworks-hdr/FireworksHdr.d.ts +56 -0
- package/dist/components/fireworks-hdr/FireworksHdr.js +426 -0
- package/dist/components/fireworks-hdr/dev.d.ts +1 -0
- package/dist/components/fireworks-hdr/dev.js +8 -0
- package/dist/components/fireworks-hdr/fireworks-shared.d.ts +444 -0
- package/dist/components/fireworks-hdr/fireworks-shared.js +1205 -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 +517 -0
- package/dist/components/fireworks-hdr/webgpu-renderer.d.ts +51 -0
- package/dist/components/fireworks-hdr/webgpu-renderer.js +461 -0
- package/dist/components/fireworks-hdr/webgpu-types.d.ts +159 -0
- package/dist/components/flickering-grid/FlickeringGrid.d.ts +33 -0
- package/dist/components/flickering-grid/FlickeringGrid.js +154 -0
- package/dist/components/flickering-grid/index.d.ts +2 -0
- package/dist/components/flip-card/FlipCard.d.ts +8 -0
- package/dist/components/flip-card/FlipCard.js +35 -0
- package/dist/components/flip-card/index.d.ts +2 -0
- package/dist/components/flip-words/FlipWords.d.ts +16 -0
- package/dist/components/flip-words/FlipWords.js +82 -0
- package/dist/components/flip-words/index.d.ts +2 -0
- package/dist/components/fluid-cursor/FluidCursor.d.ts +61 -0
- package/dist/components/fluid-cursor/FluidCursor.js +1479 -0
- package/dist/components/fluid-cursor/fluid-shared.d.ts +74 -0
- package/dist/components/fluid-cursor/fluid-shared.js +120 -0
- package/dist/components/fluid-cursor/index.d.ts +8 -0
- package/dist/components/fluid-cursor/webgpu-engine.d.ts +36 -0
- package/dist/components/fluid-cursor/webgpu-engine.js +922 -0
- package/dist/components/focus/Focus.d.ts +24 -0
- package/dist/components/focus/Focus.js +103 -0
- package/dist/components/focus/index.d.ts +2 -0
- package/dist/components/form-field/FormField.d.ts +46 -0
- package/dist/components/form-field/FormField.js +151 -0
- package/dist/components/form-field/index.d.ts +2 -0
- package/dist/components/frosted-glass/FrostedGlass.d.ts +48 -0
- package/dist/components/frosted-glass/FrostedGlass.js +89 -0
- package/dist/components/frosted-glass/index.d.ts +2 -0
- package/dist/components/glare-card/GlareCard.d.ts +8 -0
- package/dist/components/glare-card/GlareCard.js +103 -0
- package/dist/components/glare-card/index.d.ts +2 -0
- package/dist/components/glow-border/GlowBorder.d.ts +8 -0
- package/dist/components/glow-border/GlowBorder.js +39 -0
- package/dist/components/glow-border/index.d.ts +2 -0
- package/dist/components/glowing-effect/GlowingEffect.d.ts +23 -0
- package/dist/components/glowing-effect/GlowingEffect.js +157 -0
- package/dist/components/glowing-effect/index.d.ts +2 -0
- package/dist/components/gradient-button/GradientButton.d.ts +28 -0
- package/dist/components/gradient-button/GradientButton.js +66 -0
- package/dist/components/gradient-button/index.d.ts +2 -0
- package/dist/components/hover-card/HoverCard.d.ts +57 -0
- package/dist/components/hover-card/HoverCard.js +139 -0
- package/dist/components/hover-card/index.d.ts +2 -0
- package/dist/components/hyper-text/HyperText.d.ts +25 -0
- package/dist/components/hyper-text/HyperText.js +102 -0
- package/dist/components/hyper-text/index.d.ts +2 -0
- package/dist/components/icon-button/IconButton.d.ts +46 -0
- package/dist/components/icon-button/IconButton.js +62 -0
- package/dist/components/icon-button/index.d.ts +2 -0
- package/dist/components/image-generation/ImageGeneration.d.ts +33 -0
- package/dist/components/image-generation/ImageGeneration.js +131 -0
- package/dist/components/image-generation/index.d.ts +2 -0
- package/dist/components/image-trail-cursor/ImageTrailCursor.d.ts +15 -0
- package/dist/components/image-trail-cursor/ImageTrailCursor.js +75 -0
- package/dist/components/image-trail-cursor/index.d.ts +3 -0
- package/dist/components/image-trail-cursor/trail-variants.d.ts +112 -0
- package/dist/components/image-trail-cursor/trail-variants.js +787 -0
- package/dist/components/inline-citation/InlineCitation.d.ts +23 -0
- package/dist/components/inline-citation/InlineCitation.js +179 -0
- package/dist/components/inline-citation/index.d.ts +2 -0
- package/dist/components/input/Input.d.ts +41 -0
- package/dist/components/input/Input.js +74 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/interactive-grid-pattern/InteractiveGridPattern.d.ts +17 -0
- package/dist/components/interactive-grid-pattern/InteractiveGridPattern.js +89 -0
- package/dist/components/interactive-grid-pattern/index.d.ts +2 -0
- package/dist/components/interactive-hover-button/InteractiveHoverButton.d.ts +18 -0
- package/dist/components/interactive-hover-button/InteractiveHoverButton.js +66 -0
- package/dist/components/interactive-hover-button/index.d.ts +2 -0
- package/dist/components/label/Label.d.ts +18 -0
- package/dist/components/label/Label.js +28 -0
- package/dist/components/label/index.d.ts +2 -0
- package/dist/components/letter-pullup/LetterPullup.d.ts +16 -0
- package/dist/components/letter-pullup/LetterPullup.js +27 -0
- package/dist/components/letter-pullup/index.d.ts +2 -0
- package/dist/components/line-hover-link/LineHoverLink.d.ts +33 -0
- package/dist/components/line-hover-link/LineHoverLink.js +69 -0
- package/dist/components/line-hover-link/index.d.ts +2 -0
- package/dist/components/line-reveal/LineReveal.d.ts +31 -0
- package/dist/components/line-reveal/LineReveal.js +117 -0
- package/dist/components/line-reveal/index.d.ts +2 -0
- package/dist/components/line-shadow-text/LineShadowText.d.ts +18 -0
- package/dist/components/line-shadow-text/LineShadowText.js +26 -0
- package/dist/components/line-shadow-text/index.d.ts +2 -0
- package/dist/components/link/Link.d.ts +30 -0
- package/dist/components/link/Link.js +82 -0
- package/dist/components/link/index.d.ts +2 -0
- package/dist/components/liquid-glass/LiquidGlass.d.ts +49 -0
- package/dist/components/liquid-glass/LiquidGlass.js +165 -0
- package/dist/components/liquid-glass/index.d.ts +2 -0
- package/dist/components/liquid-text/LiquidText.d.ts +35 -0
- package/dist/components/liquid-text/LiquidText.js +882 -0
- package/dist/components/liquid-text/index.d.ts +2 -0
- package/dist/components/logo-cloud/AnimatedLogoCloud.d.ts +13 -0
- package/dist/components/logo-cloud/AnimatedLogoCloud.js +38 -0
- package/dist/components/logo-cloud/IconLogoCloud.d.ts +10 -0
- package/dist/components/logo-cloud/IconLogoCloud.js +20 -0
- package/dist/components/logo-cloud/StaticLogoCloud.d.ts +28 -0
- package/dist/components/logo-cloud/StaticLogoCloud.js +45 -0
- package/dist/components/logo-cloud/index.d.ts +6 -0
- package/dist/components/magnetic/Magnetic.d.ts +35 -0
- package/dist/components/magnetic/Magnetic.js +113 -0
- package/dist/components/magnetic/index.d.ts +2 -0
- package/dist/components/marquee/Marquee.d.ts +16 -0
- package/dist/components/marquee/Marquee.js +39 -0
- package/dist/components/marquee/ReviewCard.d.ts +8 -0
- package/dist/components/marquee/ReviewCard.js +17 -0
- package/dist/components/marquee/index.d.ts +4 -0
- package/dist/components/matrix-rain/MatrixRain.d.ts +35 -0
- package/dist/components/matrix-rain/MatrixRain.js +130 -0
- package/dist/components/matrix-rain/index.d.ts +2 -0
- package/dist/components/meteors/Meteors.d.ts +21 -0
- package/dist/components/meteors/Meteors.js +45 -0
- package/dist/components/meteors/index.d.ts +2 -0
- package/dist/components/mosaic-glow/MosaicGlow.d.ts +47 -0
- package/dist/components/mosaic-glow/MosaicGlow.js +438 -0
- package/dist/components/mosaic-glow/index.d.ts +2 -0
- package/dist/components/mosaic-glow/mosaic-glow-core.d.ts +94 -0
- package/dist/components/mosaic-glow/mosaic-glow-core.js +190 -0
- package/dist/components/navbar/Navbar.d.ts +25 -0
- package/dist/components/navbar/Navbar.js +27 -0
- package/dist/components/navbar/NavbarLink.d.ts +37 -0
- package/dist/components/navbar/NavbarLink.js +48 -0
- package/dist/components/navbar/index.d.ts +4 -0
- package/dist/components/navigation-menu/NavigationMenu.d.ts +28 -0
- package/dist/components/navigation-menu/NavigationMenu.js +202 -0
- package/dist/components/navigation-menu/NavigationMenuContent.d.ts +8 -0
- package/dist/components/navigation-menu/NavigationMenuContent.js +77 -0
- package/dist/components/navigation-menu/NavigationMenuItem.d.ts +20 -0
- package/dist/components/navigation-menu/NavigationMenuItem.js +18 -0
- package/dist/components/navigation-menu/NavigationMenuLink.d.ts +31 -0
- package/dist/components/navigation-menu/NavigationMenuLink.js +41 -0
- package/dist/components/navigation-menu/NavigationMenuList.d.ts +8 -0
- package/dist/components/navigation-menu/NavigationMenuList.js +33 -0
- package/dist/components/navigation-menu/NavigationMenuTrigger.d.ts +8 -0
- package/dist/components/navigation-menu/NavigationMenuTrigger.js +90 -0
- package/dist/components/navigation-menu/index.d.ts +14 -0
- package/dist/components/navigation-menu/types.d.ts +107 -0
- package/dist/components/navigation-menu/types.js +32 -0
- package/dist/components/neon-border/NeonBorder.d.ts +22 -0
- package/dist/components/neon-border/NeonBorder.js +50 -0
- package/dist/components/neon-border/index.d.ts +2 -0
- package/dist/components/noise-reveal/NoiseReveal.d.ts +29 -0
- package/dist/components/noise-reveal/NoiseReveal.js +329 -0
- package/dist/components/noise-reveal/index.d.ts +2 -0
- package/dist/components/number-input/NumberInput.d.ts +40 -0
- package/dist/components/number-input/NumberInput.js +207 -0
- package/dist/components/number-input/index.d.ts +2 -0
- package/dist/components/number-ticker/NumberTicker.d.ts +22 -0
- package/dist/components/number-ticker/NumberTicker.js +106 -0
- package/dist/components/number-ticker/index.d.ts +2 -0
- package/dist/components/pagination/Pagination.d.ts +43 -0
- package/dist/components/pagination/Pagination.js +156 -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 +35 -0
- package/dist/components/password-input/PasswordInput.d.ts +56 -0
- package/dist/components/password-input/PasswordInput.js +246 -0
- package/dist/components/password-input/index.d.ts +2 -0
- package/dist/components/pixel-loader/PixelLoader.d.ts +18 -0
- package/dist/components/pixel-loader/PixelLoader.js +56 -0
- package/dist/components/pixel-loader/index.d.ts +2 -0
- package/dist/components/popover/Popover.d.ts +49 -0
- package/dist/components/popover/Popover.js +81 -0
- package/dist/components/popover/PopoverContent.d.ts +21 -0
- package/dist/components/popover/PopoverContent.js +78 -0
- package/dist/components/popover/index.d.ts +6 -0
- package/dist/components/popover/types.d.ts +64 -0
- package/dist/components/popover/types.js +17 -0
- package/dist/components/presence/Presence.d.ts +40 -0
- package/dist/components/presence/Presence.js +49 -0
- package/dist/components/presence/index.d.ts +2 -0
- package/dist/components/pressable/Pressable.d.ts +27 -0
- package/dist/components/pressable/Pressable.js +86 -0
- package/dist/components/pressable/index.d.ts +2 -0
- package/dist/components/prompt-suggestions/PromptSuggestions.d.ts +25 -0
- package/dist/components/prompt-suggestions/PromptSuggestions.js +68 -0
- package/dist/components/prompt-suggestions/index.d.ts +2 -0
- package/dist/components/pulse-beam/PulseBeam.d.ts +44 -0
- package/dist/components/pulse-beam/PulseBeam.js +197 -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 +306 -0
- package/dist/components/pulse-beam/pulse-beam-loop.d.ts +26 -0
- package/dist/components/pulse-beam/pulse-beam-loop.js +58 -0
- package/dist/components/radio-group/RadioGroup.d.ts +56 -0
- package/dist/components/radio-group/RadioGroup.js +82 -0
- package/dist/components/radio-group/RadioGroupItem.d.ts +21 -0
- package/dist/components/radio-group/RadioGroupItem.js +47 -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 +7 -0
- package/dist/components/rainbow-button/RainbowButton.d.ts +21 -0
- package/dist/components/rainbow-button/RainbowButton.js +59 -0
- package/dist/components/rainbow-button/index.d.ts +2 -0
- package/dist/components/reasoning-panel/ReasoningPanel.d.ts +38 -0
- package/dist/components/reasoning-panel/ReasoningPanel.js +172 -0
- package/dist/components/reasoning-panel/index.d.ts +2 -0
- package/dist/components/recommendation-card/RecommendationCard.d.ts +53 -0
- package/dist/components/recommendation-card/RecommendationCard.js +234 -0
- package/dist/components/recommendation-card/index.d.ts +2 -0
- package/dist/components/reveal/Reveal.d.ts +36 -0
- package/dist/components/reveal/Reveal.js +138 -0
- package/dist/components/reveal/index.d.ts +2 -0
- package/dist/components/ripple/Ripple.d.ts +11 -0
- package/dist/components/ripple/Ripple.js +45 -0
- package/dist/components/ripple/index.d.ts +2 -0
- package/dist/components/ripple-button/RippleButton.d.ts +17 -0
- package/dist/components/ripple-button/RippleButton.js +77 -0
- package/dist/components/ripple-button/index.d.ts +2 -0
- package/dist/components/scroll-anchor/ScrollAnchor.d.ts +33 -0
- package/dist/components/scroll-anchor/ScrollAnchor.js +99 -0
- package/dist/components/scroll-anchor/index.d.ts +2 -0
- package/dist/components/scroll-progress/ScrollProgress.d.ts +39 -0
- package/dist/components/scroll-progress/ScrollProgress.js +118 -0
- package/dist/components/scroll-progress/index.d.ts +2 -0
- package/dist/components/search-input/SearchInput.d.ts +56 -0
- package/dist/components/search-input/SearchInput.js +192 -0
- package/dist/components/search-input/index.d.ts +2 -0
- package/dist/components/select/Select.d.ts +44 -0
- package/dist/components/select/Select.js +255 -0
- package/dist/components/select/SelectPanel.d.ts +33 -0
- package/dist/components/select/SelectPanel.js +108 -0
- package/dist/components/select/index.d.ts +3 -0
- package/dist/components/select/types.d.ts +83 -0
- package/dist/components/select/types.js +8 -0
- package/dist/components/sheet/Sheet.d.ts +40 -0
- package/dist/components/sheet/Sheet.js +183 -0
- package/dist/components/sheet/index.d.ts +2 -0
- package/dist/components/shimmer-button/ShimmerButton.d.ts +26 -0
- package/dist/components/shimmer-button/ShimmerButton.js +69 -0
- package/dist/components/shimmer-button/index.d.ts +2 -0
- package/dist/components/sidebar/Sidebar.d.ts +17 -0
- package/dist/components/sidebar/Sidebar.js +27 -0
- package/dist/components/sidebar/SidebarFooter.d.ts +10 -0
- package/dist/components/sidebar/SidebarFooter.js +31 -0
- package/dist/components/sidebar/SidebarGroup.d.ts +10 -0
- package/dist/components/sidebar/SidebarGroup.js +28 -0
- package/dist/components/sidebar/SidebarItem.d.ts +33 -0
- package/dist/components/sidebar/SidebarItem.js +81 -0
- package/dist/components/sidebar/SidebarSeparator.d.ts +5 -0
- package/dist/components/sidebar/SidebarSeparator.js +13 -0
- package/dist/components/sidebar/index.d.ts +12 -0
- package/dist/components/sidebar/types.d.ts +36 -0
- package/dist/components/sidebar/types.js +7 -0
- package/dist/components/skeleton/Skeleton.d.ts +35 -0
- package/dist/components/skeleton/Skeleton.js +106 -0
- package/dist/components/skeleton/index.d.ts +2 -0
- package/dist/components/slider/Slider.d.ts +32 -0
- package/dist/components/slider/Slider.js +119 -0
- package/dist/components/slider/index.d.ts +2 -0
- package/dist/components/smooth-cursor/SmoothCursor.d.ts +18 -0
- package/dist/components/smooth-cursor/SmoothCursor.js +186 -0
- package/dist/components/smooth-cursor/index.d.ts +2 -0
- package/dist/components/sources/SourceCard.d.ts +21 -0
- package/dist/components/sources/SourceCard.js +48 -0
- package/dist/components/sources/Sources.d.ts +31 -0
- package/dist/components/sources/Sources.js +39 -0
- package/dist/components/sources/SourcesList.d.ts +13 -0
- package/dist/components/sources/SourcesList.js +42 -0
- package/dist/components/sources/SourcesTrigger.d.ts +11 -0
- package/dist/components/sources/SourcesTrigger.js +50 -0
- package/dist/components/sources/index.d.ts +10 -0
- package/dist/components/sources/types.d.ts +45 -0
- package/dist/components/sources/types.js +7 -0
- package/dist/components/sparkles/Sparkles.d.ts +35 -0
- package/dist/components/sparkles/Sparkles.js +112 -0
- package/dist/components/sparkles/index.d.ts +2 -0
- package/dist/components/sparkles-text/SparklesText.d.ts +28 -0
- package/dist/components/sparkles-text/SparklesText.js +84 -0
- package/dist/components/sparkles-text/index.d.ts +2 -0
- package/dist/components/status-morph/StatusMorph.d.ts +47 -0
- package/dist/components/status-morph/StatusMorph.js +110 -0
- package/dist/components/status-morph/index.d.ts +2 -0
- package/dist/components/stepper/Step.d.ts +24 -0
- package/dist/components/stepper/Step.js +152 -0
- package/dist/components/stepper/Stepper.d.ts +38 -0
- package/dist/components/stepper/Stepper.js +79 -0
- package/dist/components/stepper/index.d.ts +6 -0
- package/dist/components/stepper/types.d.ts +66 -0
- package/dist/components/stepper/types.js +7 -0
- package/dist/components/sticky-scroll/StickyScroll.d.ts +40 -0
- package/dist/components/sticky-scroll/StickyScroll.js +163 -0
- package/dist/components/sticky-scroll/index.d.ts +2 -0
- package/dist/components/streaming-text/StreamingText.d.ts +20 -0
- package/dist/components/streaming-text/StreamingText.js +32 -0
- package/dist/components/streaming-text/index.d.ts +2 -0
- package/dist/components/subagent-list/SubagentList.d.ts +28 -0
- package/dist/components/subagent-list/SubagentList.js +167 -0
- package/dist/components/subagent-list/index.d.ts +2 -0
- package/dist/components/switch/Switch.d.ts +55 -0
- package/dist/components/switch/Switch.js +77 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/tabs/Tabs.d.ts +43 -0
- package/dist/components/tabs/Tabs.js +123 -0
- package/dist/components/tabs/TabsContent.d.ts +26 -0
- package/dist/components/tabs/TabsContent.js +64 -0
- package/dist/components/tabs/TabsList.d.ts +16 -0
- package/dist/components/tabs/TabsList.js +152 -0
- package/dist/components/tabs/TabsTrigger.d.ts +19 -0
- package/dist/components/tabs/TabsTrigger.js +138 -0
- package/dist/components/tabs/index.d.ts +10 -0
- package/dist/components/tabs/types.d.ts +94 -0
- package/dist/components/tabs/types.js +7 -0
- package/dist/components/terminal-block/TerminalBlock.d.ts +27 -0
- package/dist/components/terminal-block/TerminalBlock.js +120 -0
- package/dist/components/terminal-block/ansi.d.ts +30 -0
- package/dist/components/terminal-block/ansi.js +114 -0
- package/dist/components/terminal-block/index.d.ts +2 -0
- package/dist/components/terminal-text/TerminalText.d.ts +11 -0
- package/dist/components/terminal-text/TerminalText.js +140 -0
- package/dist/components/terminal-text/index.d.ts +2 -0
- package/dist/components/text-generate-effect/TextGenerateEffect.d.ts +9 -0
- package/dist/components/text-generate-effect/TextGenerateEffect.js +58 -0
- package/dist/components/text-generate-effect/index.d.ts +2 -0
- package/dist/components/text-reveal-card/TextRevealCard.d.ts +21 -0
- package/dist/components/text-reveal-card/TextRevealCard.js +107 -0
- package/dist/components/text-reveal-card/TextRevealStars.d.ts +25 -0
- package/dist/components/text-reveal-card/TextRevealStars.js +59 -0
- package/dist/components/text-reveal-card/index.d.ts +4 -0
- package/dist/components/text-roll/TextRoll.d.ts +43 -0
- package/dist/components/text-roll/TextRoll.js +242 -0
- package/dist/components/text-roll/index.d.ts +2 -0
- package/dist/components/text-roll/roll-transitions.d.ts +74 -0
- package/dist/components/text-roll/roll-transitions.js +31 -0
- package/dist/components/textarea/Textarea.d.ts +48 -0
- package/dist/components/textarea/Textarea.js +129 -0
- package/dist/components/textarea/index.d.ts +2 -0
- package/dist/components/thinking-indicator/ThinkingIndicator.d.ts +26 -0
- package/dist/components/thinking-indicator/ThinkingIndicator.js +60 -0
- package/dist/components/thinking-indicator/index.d.ts +2 -0
- package/dist/components/thread-list/ThreadList.d.ts +44 -0
- package/dist/components/thread-list/ThreadList.js +178 -0
- package/dist/components/thread-list/index.d.ts +2 -0
- package/dist/components/time-picker/TimePicker.d.ts +44 -0
- package/dist/components/time-picker/TimePicker.js +254 -0
- package/dist/components/time-picker/TimePickerPanel.d.ts +30 -0
- package/dist/components/time-picker/TimePickerPanel.js +94 -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 +65 -0
- package/dist/components/time-picker/types.d.ts +53 -0
- package/dist/components/time-picker/types.js +10 -0
- package/dist/components/timeline/Timeline.d.ts +18 -0
- package/dist/components/timeline/Timeline.js +96 -0
- package/dist/components/timeline/index.d.ts +2 -0
- package/dist/components/toast/Toast.d.ts +16 -0
- package/dist/components/toast/Toast.js +99 -0
- package/dist/components/toast/Toaster.d.ts +19 -0
- package/dist/components/toast/Toaster.js +147 -0
- package/dist/components/toast/index.d.ts +6 -0
- package/dist/components/toast/store.d.ts +102 -0
- package/dist/components/toast/store.js +118 -0
- package/dist/components/toggle/Toggle.d.ts +28 -0
- package/dist/components/toggle/Toggle.js +69 -0
- package/dist/components/toggle/index.d.ts +2 -0
- package/dist/components/toggle-group/ToggleGroup.d.ts +42 -0
- package/dist/components/toggle-group/ToggleGroup.js +150 -0
- package/dist/components/toggle-group/ToggleGroupItem.d.ts +21 -0
- package/dist/components/toggle-group/ToggleGroupItem.js +100 -0
- package/dist/components/toggle-group/index.d.ts +6 -0
- package/dist/components/toggle-group/types.d.ts +75 -0
- package/dist/components/toggle-group/types.js +7 -0
- package/dist/components/tool-call/ToolCall.d.ts +39 -0
- package/dist/components/tool-call/ToolCall.js +195 -0
- package/dist/components/tool-call/index.d.ts +2 -0
- package/dist/components/tool-timeline/ToolTimeline.d.ts +31 -0
- package/dist/components/tool-timeline/ToolTimeline.js +99 -0
- package/dist/components/tool-timeline/index.d.ts +2 -0
- package/dist/components/tooltip/Tooltip.d.ts +36 -0
- package/dist/components/tooltip/Tooltip.js +214 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tracing-beam/TracingBeam.d.ts +11 -0
- package/dist/components/tracing-beam/TracingBeam.js +163 -0
- package/dist/components/tracing-beam/index.d.ts +2 -0
- package/dist/components/typing-indicator/TypingIndicator.d.ts +17 -0
- package/dist/components/typing-indicator/TypingIndicator.js +47 -0
- package/dist/components/typing-indicator/index.d.ts +2 -0
- package/dist/components/voice-input/VoiceInput.d.ts +60 -0
- package/dist/components/voice-input/VoiceInput.js +268 -0
- package/dist/components/voice-input/index.d.ts +2 -0
- package/dist/components/web-search/WebSearch.d.ts +37 -0
- package/dist/components/web-search/WebSearch.js +135 -0
- package/dist/components/web-search/index.d.ts +2 -0
- package/dist/index.d.ts +148 -0
- package/dist/index.js +489 -0
- package/dist/internals/Portal.d.ts +35 -0
- package/dist/internals/Portal.js +37 -0
- package/dist/internals/StreamText.d.ts +20 -0
- package/dist/internals/StreamText.js +25 -0
- package/dist/internals/ai-types.d.ts +117 -0
- package/dist/internals/anchor-position.d.ts +79 -0
- package/dist/internals/anchor-position.js +154 -0
- package/dist/internals/calendar-core.d.ts +26 -0
- package/dist/internals/calendar-core.js +57 -0
- package/dist/internals/diff.d.ts +38 -0
- package/dist/internals/diff.js +176 -0
- package/dist/internals/dismissable.d.ts +76 -0
- package/dist/internals/dismissable.js +105 -0
- package/dist/internals/dom/context.d.ts +16 -0
- package/dist/internals/dom/context.js +20 -0
- package/dist/internals/dom/ssr.d.ts +21 -0
- package/dist/internals/dom/ssr.js +21 -0
- package/dist/internals/dom/types.d.ts +9 -0
- package/dist/internals/dom/use-composed-refs.d.ts +15 -0
- package/dist/internals/dom/use-composed-refs.js +34 -0
- package/dist/internals/dom/use-element-ref.d.ts +11 -0
- package/dist/internals/dom/use-element-ref.js +12 -0
- package/dist/internals/dom/use-event-callback.d.ts +14 -0
- package/dist/internals/dom/use-event-callback.js +12 -0
- package/dist/internals/dom/use-inert-attribute.d.ts +26 -0
- package/dist/internals/dom/use-inert-attribute.js +22 -0
- package/dist/internals/dom/use-live-ref.d.ts +10 -0
- package/dist/internals/dom/use-live-ref.js +12 -0
- package/dist/internals/field.d.ts +136 -0
- package/dist/internals/field.js +33 -0
- package/dist/internals/float.d.ts +47 -0
- package/dist/internals/float.js +31 -0
- package/dist/internals/focus-trap.d.ts +82 -0
- package/dist/internals/focus-trap.js +145 -0
- package/dist/internals/host.d.ts +38 -0
- package/dist/internals/host.js +24 -0
- package/dist/internals/listbox.d.ts +101 -0
- package/dist/internals/listbox.js +171 -0
- package/dist/internals/markdown/Markdown.d.ts +22 -0
- package/dist/internals/markdown/Markdown.js +53 -0
- package/dist/internals/markdown/MarkdownInline.d.ts +5 -0
- package/dist/internals/markdown/MarkdownInline.js +40 -0
- package/dist/internals/markdown.d.ts +66 -0
- package/dist/internals/markdown.js +467 -0
- package/dist/internals/menu.d.ts +121 -0
- package/dist/internals/menu.js +217 -0
- package/dist/internals/motion/anchored.d.ts +104 -0
- package/dist/internals/motion/anchored.js +44 -0
- package/dist/internals/motion/animate.d.ts +92 -0
- package/dist/internals/motion/animate.js +84 -0
- package/dist/internals/motion/easing.d.ts +20 -0
- package/dist/internals/motion/easing.js +13 -0
- package/dist/internals/motion/haptics.d.ts +42 -0
- package/dist/internals/motion/haptics.js +29 -0
- package/dist/internals/motion/in-view.d.ts +67 -0
- package/dist/internals/motion/in-view.js +97 -0
- package/dist/internals/motion/media-query.d.ts +50 -0
- package/dist/internals/motion/media-query.js +54 -0
- package/dist/internals/motion/presence.d.ts +108 -0
- package/dist/internals/motion/presence.js +197 -0
- package/dist/internals/motion/presets.d.ts +34 -0
- package/dist/internals/motion/presets.js +19 -0
- package/dist/internals/motion/raf.d.ts +35 -0
- package/dist/internals/motion/raf.js +27 -0
- package/dist/internals/motion/stagger.d.ts +32 -0
- package/dist/internals/motion/stagger.js +15 -0
- package/dist/internals/motion/tokens.d.ts +97 -0
- package/dist/internals/motion/tokens.js +18 -0
- package/dist/internals/motion/transitions.d.ts +66 -0
- package/dist/internals/motion/transitions.js +41 -0
- package/dist/internals/motion/types.d.ts +17 -0
- package/dist/internals/relative-time.d.ts +25 -0
- package/dist/internals/relative-time.js +46 -0
- package/dist/internals/scroll-lock.d.ts +26 -0
- package/dist/internals/scroll-lock.js +65 -0
- package/dist/internals/use-anchor-position.d.ts +54 -0
- package/dist/internals/use-anchor-position.js +87 -0
- package/dist/internals/use-autoscroll.d.ts +43 -0
- package/dist/internals/use-autoscroll.js +128 -0
- package/dist/internals/use-copy.d.ts +54 -0
- package/dist/internals/use-copy.js +67 -0
- package/dist/internals/use-elapsed.d.ts +96 -0
- package/dist/internals/use-elapsed.js +195 -0
- package/dist/internals/use-float.d.ts +49 -0
- package/dist/internals/use-float.js +150 -0
- package/dist/internals/use-id.d.ts +22 -0
- package/dist/internals/use-id.js +20 -0
- package/dist/internals/use-text-stream.d.ts +94 -0
- package/dist/internals/use-text-stream.js +133 -0
- package/dist/internals/waveform-core.d.ts +33 -0
- package/dist/internals/waveform-core.js +39 -0
- package/dist/sound/SoundToggle.d.ts +23 -0
- package/dist/sound/SoundToggle.js +96 -0
- package/dist/sound/engine.d.ts +67 -0
- package/dist/sound/engine.js +370 -0
- package/dist/sound/index.d.ts +7 -0
- package/dist/sound/sound-feedback.d.ts +77 -0
- package/dist/sound/sound-feedback.js +152 -0
- package/dist/sound/sound.d.ts +98 -0
- package/dist/sound/sound.js +309 -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.d.ts +53 -0
- package/dist/sound/use-sound.js +82 -0
- package/dist/styles.css +7975 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +8 -0
- package/package.json +96 -0
- package/tailwind.css +132 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Floating element positioning — the DOM-observing half of `float.ts`.
|
|
3
|
+
*
|
|
4
|
+
* `attachFloat` is the framework-free core (the Svelte `float` action's exact
|
|
5
|
+
* body, ported as-is: same rAF coalescing, same ResizeObserver watch on the
|
|
6
|
+
* float and its anchor, same visibility hiding while a getter anchor has
|
|
7
|
+
* nothing to point at). `useFloat` is a thin React binding on top, shaped
|
|
8
|
+
* like `use-anchor-position.ts`: a node-first hook that mounts and destroys
|
|
9
|
+
* the core in a layout effect (a post-paint position is a visible jump from
|
|
10
|
+
* the origin) and returns the placement as actually resolved.
|
|
11
|
+
*/
|
|
12
|
+
import type { FloatOptions, FloatPlacement } from "./float.js";
|
|
13
|
+
/**
|
|
14
|
+
* Internal-only extension of `FloatOptions`: a hook can't observe the
|
|
15
|
+
* placement `attachFloat` writes onto `node.dataset.placement` without a
|
|
16
|
+
* callback, so the hook layer threads one through here. Not part of the
|
|
17
|
+
* public `FloatOptions` shape — the ported action test never passes it, and
|
|
18
|
+
* omitting it reproduces the exact original behaviour.
|
|
19
|
+
*/
|
|
20
|
+
interface AttachFloatOptions extends FloatOptions {
|
|
21
|
+
onPlacement?: (placement: FloatPlacement) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface FloatHandle {
|
|
24
|
+
/** Swaps the options and re-syncs — the action's `update` under a new name. */
|
|
25
|
+
update(next: AttachFloatOptions): void;
|
|
26
|
+
/** Detaches every listener/observer and strips the node's own styles. */
|
|
27
|
+
destroy(): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Positions `node` with `position: fixed` against a live anchor, using
|
|
31
|
+
* `computeFloatPosition`. Recomputes on scroll/resize (coalesced into one
|
|
32
|
+
* rAF) and on a ResizeObserver watching both the float and its anchor
|
|
33
|
+
* element. SSR-safe: does nothing when `window` is unavailable.
|
|
34
|
+
*/
|
|
35
|
+
export declare function attachFloat(node: HTMLElement, opts: AttachFloatOptions): FloatHandle;
|
|
36
|
+
export interface UseFloatResult {
|
|
37
|
+
/** The placement as actually resolved — flipped when the requested side ran out of room. */
|
|
38
|
+
readonly placement: FloatPlacement;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Positions `node` with `position: fixed` against `options.anchor`. Mirrors
|
|
42
|
+
* `useAnchorPosition`'s shape: one layout effect keyed `[node]` mounts and
|
|
43
|
+
* destroys the core, a second re-syncs whenever an option that affects
|
|
44
|
+
* geometry changes, and the resolved placement is returned rather than
|
|
45
|
+
* discarded — the same collapse `useAnchorPosition`'s `onPlacement` return
|
|
46
|
+
* value buys its own callers.
|
|
47
|
+
*/
|
|
48
|
+
export declare function useFloat(node: HTMLElement | null, options: FloatOptions): UseFloatResult;
|
|
49
|
+
export type { FloatOptions, FloatPlacement, FloatRect } from "./float.js";
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useRef, useState } from "react";
|
|
3
|
+
import { useEventCallback } from "./dom/use-event-callback.js";
|
|
4
|
+
import { useIsomorphicLayoutEffect } from "./dom/ssr.js";
|
|
5
|
+
import { computeFloatPosition } from "./float.js";
|
|
6
|
+
const DEFAULT_PLACEMENT = "bottom-start";
|
|
7
|
+
function readAnchor(anchor) {
|
|
8
|
+
if (typeof anchor === "function") return anchor();
|
|
9
|
+
if (typeof anchor.getBoundingClientRect === "function") {
|
|
10
|
+
const { x, y, width, height } = anchor.getBoundingClientRect();
|
|
11
|
+
return { x, y, width, height };
|
|
12
|
+
}
|
|
13
|
+
return anchor;
|
|
14
|
+
}
|
|
15
|
+
function anchorElement(anchor) {
|
|
16
|
+
if (typeof anchor !== "object" || anchor === null) return null;
|
|
17
|
+
return typeof anchor.getBoundingClientRect === "function" ? anchor : null;
|
|
18
|
+
}
|
|
19
|
+
function attachFloat(node, opts) {
|
|
20
|
+
if (typeof window === "undefined") {
|
|
21
|
+
return { update() {
|
|
22
|
+
}, destroy() {
|
|
23
|
+
} };
|
|
24
|
+
}
|
|
25
|
+
let options = opts;
|
|
26
|
+
let frame = null;
|
|
27
|
+
let listening = false;
|
|
28
|
+
let sizes = null;
|
|
29
|
+
let reportedPlacement = null;
|
|
30
|
+
const position = () => {
|
|
31
|
+
node.style.position = "fixed";
|
|
32
|
+
node.style.visibility = "";
|
|
33
|
+
const anchor = readAnchor(options.anchor);
|
|
34
|
+
if (!anchor) {
|
|
35
|
+
node.style.visibility = "hidden";
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
node.style.width = options.matchWidth ? `${anchor.width}px` : "";
|
|
39
|
+
const box = node.getBoundingClientRect();
|
|
40
|
+
const { top, left, placement } = computeFloatPosition(
|
|
41
|
+
anchor,
|
|
42
|
+
{ width: box.width, height: box.height },
|
|
43
|
+
{ width: window.innerWidth, height: window.innerHeight },
|
|
44
|
+
{
|
|
45
|
+
placement: options.placement ?? "bottom-start",
|
|
46
|
+
offset: options.offset ?? 6,
|
|
47
|
+
padding: options.padding ?? 8
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
node.style.top = `${top}px`;
|
|
51
|
+
node.style.left = `${left}px`;
|
|
52
|
+
node.dataset.placement = placement;
|
|
53
|
+
if (placement !== reportedPlacement) {
|
|
54
|
+
reportedPlacement = placement;
|
|
55
|
+
options.onPlacement?.(placement);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const schedule = () => {
|
|
59
|
+
if (frame !== null) return;
|
|
60
|
+
frame = requestAnimationFrame(() => {
|
|
61
|
+
frame = null;
|
|
62
|
+
position();
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const observeSizes = () => {
|
|
66
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
67
|
+
sizes ??= new ResizeObserver(schedule);
|
|
68
|
+
sizes.disconnect();
|
|
69
|
+
sizes.observe(node);
|
|
70
|
+
const anchor = anchorElement(options.anchor);
|
|
71
|
+
if (anchor) sizes.observe(anchor);
|
|
72
|
+
};
|
|
73
|
+
const listen = (on) => {
|
|
74
|
+
if (on === listening) return;
|
|
75
|
+
listening = on;
|
|
76
|
+
if (on) {
|
|
77
|
+
window.addEventListener("scroll", schedule, { capture: true, passive: true });
|
|
78
|
+
window.addEventListener("resize", schedule, { passive: true });
|
|
79
|
+
} else {
|
|
80
|
+
window.removeEventListener("scroll", schedule, { capture: true });
|
|
81
|
+
window.removeEventListener("resize", schedule);
|
|
82
|
+
sizes?.disconnect();
|
|
83
|
+
sizes = null;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const reset = () => {
|
|
87
|
+
if (frame !== null) cancelAnimationFrame(frame);
|
|
88
|
+
frame = null;
|
|
89
|
+
node.style.position = "";
|
|
90
|
+
node.style.top = "";
|
|
91
|
+
node.style.left = "";
|
|
92
|
+
node.style.width = "";
|
|
93
|
+
node.style.visibility = "";
|
|
94
|
+
delete node.dataset.placement;
|
|
95
|
+
};
|
|
96
|
+
const sync = () => {
|
|
97
|
+
if (options.enabled === false) {
|
|
98
|
+
listen(false);
|
|
99
|
+
reset();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
listen(true);
|
|
103
|
+
observeSizes();
|
|
104
|
+
position();
|
|
105
|
+
};
|
|
106
|
+
sync();
|
|
107
|
+
return {
|
|
108
|
+
update(next) {
|
|
109
|
+
options = next;
|
|
110
|
+
sync();
|
|
111
|
+
},
|
|
112
|
+
destroy() {
|
|
113
|
+
listen(false);
|
|
114
|
+
sizes?.disconnect();
|
|
115
|
+
sizes = null;
|
|
116
|
+
reset();
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function useFloat(node, options) {
|
|
121
|
+
const handleRef = useRef(null);
|
|
122
|
+
const [placement, setPlacement] = useState(options.placement ?? DEFAULT_PLACEMENT);
|
|
123
|
+
const onPlacement = useEventCallback((next) => setPlacement(next));
|
|
124
|
+
useIsomorphicLayoutEffect(() => {
|
|
125
|
+
if (!node) return;
|
|
126
|
+
const handle = attachFloat(node, { ...options, onPlacement });
|
|
127
|
+
handleRef.current = handle;
|
|
128
|
+
return () => {
|
|
129
|
+
handle.destroy();
|
|
130
|
+
handleRef.current = null;
|
|
131
|
+
};
|
|
132
|
+
}, [node]);
|
|
133
|
+
useIsomorphicLayoutEffect(() => {
|
|
134
|
+
handleRef.current?.update({ ...options, onPlacement });
|
|
135
|
+
}, [
|
|
136
|
+
node,
|
|
137
|
+
options.anchor,
|
|
138
|
+
options.placement,
|
|
139
|
+
options.offset,
|
|
140
|
+
options.padding,
|
|
141
|
+
options.matchWidth,
|
|
142
|
+
options.enabled,
|
|
143
|
+
onPlacement
|
|
144
|
+
]);
|
|
145
|
+
return { placement };
|
|
146
|
+
}
|
|
147
|
+
export {
|
|
148
|
+
attachFloat,
|
|
149
|
+
useFloat
|
|
150
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A unique, SSR-stable id string for the calling component instance, e.g.
|
|
3
|
+
* "fui-«r0»". Stable across the server render and hydration, and stable for
|
|
4
|
+
* the life of the component.
|
|
5
|
+
*
|
|
6
|
+
* Call it once and suffix the result for every id the component needs; a
|
|
7
|
+
* second call is a second seed, not a second id off the same one.
|
|
8
|
+
*
|
|
9
|
+
* @param prefix - Prefix for the generated id (defaults to "fui").
|
|
10
|
+
*/
|
|
11
|
+
export declare function useFancyId(prefix?: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Returns a unique, stable id string, e.g. "fui-1", "fui-2", ...
|
|
14
|
+
*
|
|
15
|
+
* Client-only: throws when called on the server, since the id produced
|
|
16
|
+
* there would not match the one the client regenerates on hydration. Call
|
|
17
|
+
* this only from browser-only code paths (effects, event handlers) — use
|
|
18
|
+
* `useFancyId()` for ids that must survive SSR + hydration.
|
|
19
|
+
*
|
|
20
|
+
* @param prefix - Prefix for the generated id (defaults to "fui").
|
|
21
|
+
*/
|
|
22
|
+
export declare function uid(prefix?: string): string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useId } from "react";
|
|
3
|
+
let n = 0;
|
|
4
|
+
function useFancyId(prefix = "fui") {
|
|
5
|
+
const id = useId();
|
|
6
|
+
return `${prefix}-${id}`;
|
|
7
|
+
}
|
|
8
|
+
function uid(prefix = "fui") {
|
|
9
|
+
if (typeof window === "undefined") {
|
|
10
|
+
throw new Error(
|
|
11
|
+
"uid() is client-only and must not be called during SSR; use useFancyId() for SSR-stable ids."
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
n += 1;
|
|
15
|
+
return `${prefix}-${n}`;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
uid,
|
|
19
|
+
useFancyId
|
|
20
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text stream
|
|
3
|
+
*
|
|
4
|
+
* The consumer pushes a growing string — the whole text so far, not the
|
|
5
|
+
* delta — and this turns each growth step into a short-lived "fresh" segment
|
|
6
|
+
* so a view can tint what just arrived. After `settleMs` the segment stops
|
|
7
|
+
* being fresh and is merged back into its settled neighbours, so a long
|
|
8
|
+
* stream never accumulates more than a handful of spans.
|
|
9
|
+
*
|
|
10
|
+
* A push that is not a continuation of the current text (a regenerated
|
|
11
|
+
* answer, or chunks arriving out of order) is treated as a replacement: the
|
|
12
|
+
* new text lands already settled, with nothing to animate from.
|
|
13
|
+
*
|
|
14
|
+
* Nothing is scheduled until the first push, so building one during a render
|
|
15
|
+
* is safe.
|
|
16
|
+
*/
|
|
17
|
+
export interface StreamSegment {
|
|
18
|
+
/** Stable key for a keyed list; segments keep their id across merges. */
|
|
19
|
+
id: number;
|
|
20
|
+
text: string;
|
|
21
|
+
/** True while the segment is still animating in. */
|
|
22
|
+
fresh: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface TextStreamOptions {
|
|
25
|
+
/**
|
|
26
|
+
* How long a delta stays fresh before it settles, in ms. Pass a getter
|
|
27
|
+
* when the value can change after construction: it is read once per
|
|
28
|
+
* push, so a later duration applies to later chunks instead of only to
|
|
29
|
+
* the CSS.
|
|
30
|
+
*/
|
|
31
|
+
settleMs?: number | (() => number);
|
|
32
|
+
/** Set false to skip the animation entirely: every push settles at once. */
|
|
33
|
+
animate?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface TextStream {
|
|
36
|
+
/** The current segments, oldest first. Reactive. */
|
|
37
|
+
readonly segments: StreamSegment[];
|
|
38
|
+
/** The full text pushed so far. Reactive. */
|
|
39
|
+
readonly text: string;
|
|
40
|
+
/** Hand over the whole text so far; the delta is worked out from it. */
|
|
41
|
+
push(fullText: string): void;
|
|
42
|
+
/** Drop everything and start again from `text`, already settled. */
|
|
43
|
+
reset(text?: string): void;
|
|
44
|
+
/** Settle every currently-fresh segment immediately, cancelling their timers. */
|
|
45
|
+
flush(): void;
|
|
46
|
+
/** Cancel pending settle timers. Call from the consumer's teardown. */
|
|
47
|
+
destroy(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Re-arm a settle timer for every segment still marked fresh with nothing
|
|
50
|
+
* left to settle it. Not part of the Svelte source's surface: it exists
|
|
51
|
+
* because a React effect can be torn down and replayed without the
|
|
52
|
+
* component ever unmounting (StrictMode's mount rehearsal), which runs
|
|
53
|
+
* `destroy()` between a push and its settle. The replayed push is a no-op
|
|
54
|
+
* — the full text is already stored — so without this the segment would
|
|
55
|
+
* stay `fresh` for ever and `done` would never become true.
|
|
56
|
+
*/
|
|
57
|
+
resume(): void;
|
|
58
|
+
/**
|
|
59
|
+
* Subscribe to every change of `segments`/`text`. Not part of the Svelte
|
|
60
|
+
* source's surface — the React counterpart of the `$state.raw` runes that
|
|
61
|
+
* made them reactive there; `useTextStream` is what actually reads this.
|
|
62
|
+
*/
|
|
63
|
+
subscribe(listener: () => void): () => void;
|
|
64
|
+
}
|
|
65
|
+
export declare function createTextStream(initial?: string, opts?: TextStreamOptions): TextStream;
|
|
66
|
+
export interface UseTextStreamResult {
|
|
67
|
+
readonly text: string;
|
|
68
|
+
readonly segments: StreamSegment[];
|
|
69
|
+
push(fullText: string): void;
|
|
70
|
+
reset(text?: string): void;
|
|
71
|
+
flush(): void;
|
|
72
|
+
/** True once nothing in `segments` is still animating in. */
|
|
73
|
+
readonly done: boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Built once from `initial`/`options` (matching `createTextStream`'s own
|
|
77
|
+
* single construction call on the Svelte side) and subscribed through
|
|
78
|
+
* `useSyncExternalStore`; the segment-list snapshot is identity-cached by
|
|
79
|
+
* the store itself — unchanged between publishes — so React never loops.
|
|
80
|
+
* `destroy()` is removed from the returned surface and called in the hook's
|
|
81
|
+
* own cleanup instead (D-5): a pacing timer left running past unmount can no
|
|
82
|
+
* longer happen.
|
|
83
|
+
*
|
|
84
|
+
* That cleanup can run WITHOUT an unmount, though — StrictMode rehearses
|
|
85
|
+
* every effect as mount/cleanup/mount — and the typical consumer pushes from
|
|
86
|
+
* a mount effect of its own. First pass: push stores the text and starts a
|
|
87
|
+
* settle timer. Cleanup: the timer is cancelled. Replay: the push is a no-op,
|
|
88
|
+
* because the full text is already stored, so nothing reschedules the settle
|
|
89
|
+
* and the segment stays `fresh` for ever — `done` never turns true and the
|
|
90
|
+
* enter animation never ends. `resume()` on the way back in is what closes
|
|
91
|
+
* that, and it is a no-op on a first mount and on any stream with timers
|
|
92
|
+
* still in flight.
|
|
93
|
+
*/
|
|
94
|
+
export declare function useTextStream(initial?: string, options?: TextStreamOptions): UseTextStreamResult;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useSyncExternalStore, useEffect } from "react";
|
|
3
|
+
import { useConstant } from "./dom/ssr.js";
|
|
4
|
+
const DEFAULT_SETTLE_MS = 350;
|
|
5
|
+
function createTextStream(initial = "", opts = {}) {
|
|
6
|
+
const settleOption = opts.settleMs;
|
|
7
|
+
const settleAt = typeof settleOption === "function" ? settleOption : () => settleOption ?? DEFAULT_SETTLE_MS;
|
|
8
|
+
const animate = opts.animate !== false;
|
|
9
|
+
let list = [];
|
|
10
|
+
let full = "";
|
|
11
|
+
let nextId = 0;
|
|
12
|
+
const timers = /* @__PURE__ */ new Set();
|
|
13
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
14
|
+
let view = [];
|
|
15
|
+
let textView = "";
|
|
16
|
+
function notify() {
|
|
17
|
+
for (const listener of listeners) listener();
|
|
18
|
+
}
|
|
19
|
+
function publish() {
|
|
20
|
+
view = list.map((s) => ({ ...s }));
|
|
21
|
+
textView = full;
|
|
22
|
+
notify();
|
|
23
|
+
}
|
|
24
|
+
function clearTimers() {
|
|
25
|
+
for (const timer of timers) clearTimeout(timer);
|
|
26
|
+
timers.clear();
|
|
27
|
+
}
|
|
28
|
+
function merge() {
|
|
29
|
+
const merged = [];
|
|
30
|
+
for (const seg of list) {
|
|
31
|
+
const last = merged[merged.length - 1];
|
|
32
|
+
if (last && !last.fresh && !seg.fresh) last.text += seg.text;
|
|
33
|
+
else merged.push({ ...seg });
|
|
34
|
+
}
|
|
35
|
+
list = merged;
|
|
36
|
+
}
|
|
37
|
+
function settle(id) {
|
|
38
|
+
const seg = list.find((s) => s.id === id);
|
|
39
|
+
if (!seg) return;
|
|
40
|
+
seg.fresh = false;
|
|
41
|
+
merge();
|
|
42
|
+
publish();
|
|
43
|
+
}
|
|
44
|
+
function reset(text = "") {
|
|
45
|
+
clearTimers();
|
|
46
|
+
full = text;
|
|
47
|
+
list = text ? [{ id: nextId++, text, fresh: false }] : [];
|
|
48
|
+
publish();
|
|
49
|
+
}
|
|
50
|
+
function scheduleSettle(id) {
|
|
51
|
+
const timer = setTimeout(
|
|
52
|
+
() => {
|
|
53
|
+
timers.delete(timer);
|
|
54
|
+
settle(id);
|
|
55
|
+
},
|
|
56
|
+
Math.max(0, settleAt())
|
|
57
|
+
);
|
|
58
|
+
timers.add(timer);
|
|
59
|
+
}
|
|
60
|
+
function push(fullText) {
|
|
61
|
+
if (fullText === full) return;
|
|
62
|
+
if (!fullText.startsWith(full)) {
|
|
63
|
+
reset(fullText);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const seg = {
|
|
67
|
+
id: nextId++,
|
|
68
|
+
text: fullText.slice(full.length),
|
|
69
|
+
fresh: animate
|
|
70
|
+
};
|
|
71
|
+
full = fullText;
|
|
72
|
+
list.push(seg);
|
|
73
|
+
if (!animate) {
|
|
74
|
+
merge();
|
|
75
|
+
publish();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
publish();
|
|
79
|
+
scheduleSettle(seg.id);
|
|
80
|
+
}
|
|
81
|
+
function resume() {
|
|
82
|
+
if (!animate || timers.size > 0) return;
|
|
83
|
+
for (const seg of list) {
|
|
84
|
+
if (seg.fresh) scheduleSettle(seg.id);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function flush() {
|
|
88
|
+
if (timers.size === 0 && !list.some((s) => s.fresh)) return;
|
|
89
|
+
clearTimers();
|
|
90
|
+
for (const seg of list) seg.fresh = false;
|
|
91
|
+
merge();
|
|
92
|
+
publish();
|
|
93
|
+
}
|
|
94
|
+
reset(initial);
|
|
95
|
+
return {
|
|
96
|
+
get segments() {
|
|
97
|
+
return view;
|
|
98
|
+
},
|
|
99
|
+
get text() {
|
|
100
|
+
return textView;
|
|
101
|
+
},
|
|
102
|
+
push,
|
|
103
|
+
reset,
|
|
104
|
+
flush,
|
|
105
|
+
destroy: clearTimers,
|
|
106
|
+
resume,
|
|
107
|
+
subscribe(listener) {
|
|
108
|
+
listeners.add(listener);
|
|
109
|
+
return () => listeners.delete(listener);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function useTextStream(initial = "", options = {}) {
|
|
114
|
+
const stream = useConstant(() => createTextStream(initial, options));
|
|
115
|
+
const segments = useSyncExternalStore(stream.subscribe, () => stream.segments, () => stream.segments);
|
|
116
|
+
const text = useSyncExternalStore(stream.subscribe, () => stream.text, () => stream.text);
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
stream.resume();
|
|
119
|
+
return stream.destroy;
|
|
120
|
+
}, [stream]);
|
|
121
|
+
return {
|
|
122
|
+
text,
|
|
123
|
+
segments,
|
|
124
|
+
push: stream.push,
|
|
125
|
+
reset: stream.reset,
|
|
126
|
+
flush: stream.flush,
|
|
127
|
+
done: !segments.some((s) => s.fresh)
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export {
|
|
131
|
+
createTextStream,
|
|
132
|
+
useTextStream
|
|
133
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waveform rendering primitives.
|
|
3
|
+
*
|
|
4
|
+
* Pure drawing math kept out of the component so it can be unit-tested against
|
|
5
|
+
* a stub 2D context: given a context and a set of 0..1 samples, paint one frame
|
|
6
|
+
* of vertical bars. No canvas, timing, or DOM access lives here.
|
|
7
|
+
*/
|
|
8
|
+
export interface WaveformStyle {
|
|
9
|
+
/** Any canvas fill style — solid colour, gradient string, etc. */
|
|
10
|
+
color: string;
|
|
11
|
+
/** Bar thickness in pixels. */
|
|
12
|
+
barWidth: number;
|
|
13
|
+
/** Empty space between bars, in pixels. */
|
|
14
|
+
gap: number;
|
|
15
|
+
/** Amplitude floor (0..1) so an idle signal still reads as a waveform. */
|
|
16
|
+
minAmp: number;
|
|
17
|
+
/** True centres each bar vertically; false grows it up from the bottom. */
|
|
18
|
+
mirror: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Paints one frame: clears the surface, then draws `floor(width / (barWidth +
|
|
22
|
+
* gap))` bars. Each bar covers its own slice of the buffer and takes that
|
|
23
|
+
* slice's peak, so the last bar reaches the end of the buffer and a transient
|
|
24
|
+
* between two sample points is never skipped. Bar height is
|
|
25
|
+
* `max(minAmp, sample) * height`, so a silent signal still shows a floor.
|
|
26
|
+
*/
|
|
27
|
+
export declare function drawWaveformFrame(ctx: CanvasRenderingContext2D, samples: ArrayLike<number>, width: number, height: number, style: WaveformStyle): void;
|
|
28
|
+
/**
|
|
29
|
+
* Stand-in amplitude for an idle or unmetered source: layered sines of the bar
|
|
30
|
+
* index and the elapsed time. Deterministic — same arguments, same value — so
|
|
31
|
+
* frames stay reproducible in tests and across a re-render.
|
|
32
|
+
*/
|
|
33
|
+
export declare function fakeWaveSample(i: number, tMs: number): number;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
function clamp01(value) {
|
|
3
|
+
if (!Number.isFinite(value)) return 0;
|
|
4
|
+
if (value < 0) return 0;
|
|
5
|
+
if (value > 1) return 1;
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
function drawWaveformFrame(ctx, samples, width, height, style) {
|
|
9
|
+
ctx.clearRect(0, 0, width, height);
|
|
10
|
+
const step = style.barWidth + style.gap;
|
|
11
|
+
if (step <= 0 || width <= 0 || height <= 0) return;
|
|
12
|
+
const barCount = Math.floor(width / step);
|
|
13
|
+
if (barCount <= 0) return;
|
|
14
|
+
const floorAmp = clamp01(style.minAmp);
|
|
15
|
+
const sampleCount = samples.length;
|
|
16
|
+
ctx.fillStyle = style.color;
|
|
17
|
+
const perBar = sampleCount / barCount;
|
|
18
|
+
for (let i = 0; i < barCount; i++) {
|
|
19
|
+
let sample = 0;
|
|
20
|
+
if (sampleCount > 0) {
|
|
21
|
+
const from = Math.min(Math.floor(i * perBar), sampleCount - 1);
|
|
22
|
+
const to = i === barCount - 1 ? sampleCount : Math.max(Math.floor((i + 1) * perBar), from + 1);
|
|
23
|
+
for (let s = from; s < to; s++) sample = Math.max(sample, clamp01(samples[s] ?? 0));
|
|
24
|
+
}
|
|
25
|
+
const barHeight = Math.max(floorAmp, sample) * height;
|
|
26
|
+
const x = i * step;
|
|
27
|
+
const y = (height - barHeight) / 2;
|
|
28
|
+
ctx.fillRect(x, y, style.barWidth, barHeight);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function fakeWaveSample(i, tMs) {
|
|
32
|
+
return clamp01(
|
|
33
|
+
0.5 + 0.2 * Math.sin(i * 0.35 + tMs * 4e-3) + 0.15 * Math.sin(i * 0.13 - tMs * 2e-3) + 0.1 * Math.sin(tMs * 8e-3)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
drawWaveformFrame,
|
|
38
|
+
fakeWaveSample
|
|
39
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type SoundToggleSize = "sm" | "md" | "lg";
|
|
2
|
+
export type SoundToggleVariant = "outline" | "ghost";
|
|
3
|
+
export interface SoundToggleProps {
|
|
4
|
+
/** Visual size of the control; `md` matches header-style triggers */
|
|
5
|
+
size?: SoundToggleSize;
|
|
6
|
+
/** `"outline"` keeps a resting border, `"ghost"` shows one only on hover */
|
|
7
|
+
variant?: SoundToggleVariant;
|
|
8
|
+
/** Renders the label and the On/Off word beside the icon; icon-only otherwise */
|
|
9
|
+
showLabel?: boolean;
|
|
10
|
+
/** Accessible name of the switch. Stays constant — the state is announced through aria-checked */
|
|
11
|
+
label?: string;
|
|
12
|
+
/** Visible state word when `showLabel` is set */
|
|
13
|
+
labelOn?: string;
|
|
14
|
+
/** Visible state word when `showLabel` is set */
|
|
15
|
+
labelOff?: string;
|
|
16
|
+
/** Disables the control. A browser with no Web Audio also disables it — but only while sound is off, so a stored "on" can always be undone */
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
/** Called after the preference flips, with the new value */
|
|
19
|
+
onEnabledChange?: (enabled: boolean) => void;
|
|
20
|
+
/** Additional CSS classes */
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const SoundToggle: import("react").ForwardRefExoticComponent<SoundToggleProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { cn } from "../utils.js";
|
|
5
|
+
import { sound } from "./sound.js";
|
|
6
|
+
import { useSoundEnabled, useSoundEngineState } from "./use-sound.js";
|
|
7
|
+
/* empty css */
|
|
8
|
+
const SIZE_CLASSES = {
|
|
9
|
+
sm: "h-8 gap-1 rounded-md px-1.5 text-xs",
|
|
10
|
+
md: "h-9 gap-1.5 rounded-md px-2 text-sm",
|
|
11
|
+
lg: "h-10 gap-2 rounded-md px-2.5 text-sm"
|
|
12
|
+
};
|
|
13
|
+
const ICON_SIZE = { sm: 14, md: 16, lg: 18 };
|
|
14
|
+
const SoundToggle = forwardRef(function SoundToggle2({
|
|
15
|
+
size = "md",
|
|
16
|
+
variant = "outline",
|
|
17
|
+
showLabel = false,
|
|
18
|
+
label = "Sound",
|
|
19
|
+
labelOn = "On",
|
|
20
|
+
labelOff = "Off",
|
|
21
|
+
disabled = false,
|
|
22
|
+
onEnabledChange,
|
|
23
|
+
className
|
|
24
|
+
}, ref) {
|
|
25
|
+
const enabled = useSoundEnabled();
|
|
26
|
+
const unsupported = useSoundEngineState() === "unsupported";
|
|
27
|
+
const effectiveDisabled = disabled || unsupported && !enabled;
|
|
28
|
+
const classes = cn(
|
|
29
|
+
"ft-sound-toggle text-foreground inline-flex shrink-0 items-center font-medium transition-colors",
|
|
30
|
+
"focus-visible:outline-none",
|
|
31
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
32
|
+
SIZE_CLASSES[size],
|
|
33
|
+
variant === "outline" ? "border-border bg-background hover:bg-accent hover:text-accent-foreground border" : "hover:bg-accent hover:text-accent-foreground",
|
|
34
|
+
className
|
|
35
|
+
);
|
|
36
|
+
function handleClick() {
|
|
37
|
+
if (effectiveDisabled) return;
|
|
38
|
+
const next = sound.toggle();
|
|
39
|
+
if (next) {
|
|
40
|
+
void sound.unlock().then((ok) => {
|
|
41
|
+
if (ok) sound.play("toggle-on");
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
onEnabledChange?.(next);
|
|
45
|
+
}
|
|
46
|
+
return /* @__PURE__ */ jsxs(
|
|
47
|
+
"button",
|
|
48
|
+
{
|
|
49
|
+
ref,
|
|
50
|
+
type: "button",
|
|
51
|
+
role: "switch",
|
|
52
|
+
"aria-checked": enabled,
|
|
53
|
+
"aria-label": label,
|
|
54
|
+
disabled: effectiveDisabled,
|
|
55
|
+
title: unsupported ? "This browser has no Web Audio support" : void 0,
|
|
56
|
+
"data-sound-toggle": "",
|
|
57
|
+
"data-state": enabled ? "on" : "off",
|
|
58
|
+
"data-size": size,
|
|
59
|
+
"data-variant": variant,
|
|
60
|
+
className: classes,
|
|
61
|
+
onClick: handleClick,
|
|
62
|
+
children: [
|
|
63
|
+
/* @__PURE__ */ jsxs(
|
|
64
|
+
"svg",
|
|
65
|
+
{
|
|
66
|
+
className: "ft-sound-toggle-icon shrink-0",
|
|
67
|
+
width: ICON_SIZE[size],
|
|
68
|
+
height: ICON_SIZE[size],
|
|
69
|
+
viewBox: "0 0 24 24",
|
|
70
|
+
fill: "none",
|
|
71
|
+
stroke: "currentColor",
|
|
72
|
+
strokeWidth: "2",
|
|
73
|
+
strokeLinecap: "round",
|
|
74
|
+
strokeLinejoin: "round",
|
|
75
|
+
"aria-hidden": "true",
|
|
76
|
+
children: [
|
|
77
|
+
/* @__PURE__ */ jsx("path", { d: "M11 5 6 9H2v6h4l5 4V5z" }),
|
|
78
|
+
/* @__PURE__ */ jsxs("g", { className: "ft-sound-toggle-glyph ft-sound-toggle-glyph-on", children: [
|
|
79
|
+
/* @__PURE__ */ jsx("path", { d: "M15.5 8.5a5 5 0 0 1 0 7" }),
|
|
80
|
+
/* @__PURE__ */ jsx("path", { d: "M19 5a9 9 0 0 1 0 14" })
|
|
81
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ jsx("g", { className: "ft-sound-toggle-glyph ft-sound-toggle-glyph-off", children: /* @__PURE__ */ jsx("path", { d: "m16 9 6 6M22 9l-6 6" }) })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
),
|
|
86
|
+
showLabel && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
87
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: label }),
|
|
88
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-muted-foreground", children: enabled ? labelOn : labelOff })
|
|
89
|
+
] })
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
});
|
|
94
|
+
export {
|
|
95
|
+
SoundToggle
|
|
96
|
+
};
|