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,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sound engine — a lazy, rune-free Web Audio interpreter for cue recipes.
|
|
3
|
+
*
|
|
4
|
+
* Owned by Agent 03. Exported names and signatures are the contract
|
|
5
|
+
* (see workflow/contracts.md §3) and must not change.
|
|
6
|
+
*
|
|
7
|
+
* Invariants every implementation must keep:
|
|
8
|
+
* - `createSoundEngine()` allocates nothing. Only `play()` / `unlock()` may
|
|
9
|
+
* touch Web Audio, and only through `ensureContext()`.
|
|
10
|
+
* - Never throws. Every failure is swallowed into `state` / `lastError`.
|
|
11
|
+
* - No module-evaluation access to window/navigator/AudioContext.
|
|
12
|
+
*/
|
|
13
|
+
import { type SoundCue, type SoundEngineState, type SoundPlayOptions, type SoundThemeDefinition } from "./types.js";
|
|
14
|
+
export interface SoundEngineOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Returns the context to use, or null when none can/should be created.
|
|
17
|
+
* Default: lazily `new (window.AudioContext ?? window.webkitAudioContext)()`, memoised.
|
|
18
|
+
* Tests inject a FakeAudioContext here.
|
|
19
|
+
*/
|
|
20
|
+
getContext?: () => AudioContext | null;
|
|
21
|
+
/** Monotonic clock in ms for rate limiting. Default `performance.now`, falling back to `Date.now`. */
|
|
22
|
+
now?: () => number;
|
|
23
|
+
/**
|
|
24
|
+
* Whether a context may be created right now. Default:
|
|
25
|
+
* `typeof navigator === "undefined" ? false : (navigator.userActivation?.isActive ?? true)`.
|
|
26
|
+
* Keeps context creation inside a user gesture; when it returns false and no
|
|
27
|
+
* context exists yet, `play()` returns false and state stays "idle".
|
|
28
|
+
*/
|
|
29
|
+
canCreateContext?: () => boolean;
|
|
30
|
+
/** Initial theme. Default `FANCY_SOUND_THEME`. */
|
|
31
|
+
theme?: SoundThemeDefinition;
|
|
32
|
+
/** Overrides for `SOUND_MIN_INTERVAL_MS`. */
|
|
33
|
+
minIntervals?: Partial<Record<SoundCue, number>>;
|
|
34
|
+
/** Initial master volume 0..1. Default 0.5. */
|
|
35
|
+
masterVolume?: number;
|
|
36
|
+
/** Mirrors every state transition (the controller lifts this into `$state`). */
|
|
37
|
+
onStateChange?: (state: SoundEngineState, error: string | null) => void;
|
|
38
|
+
}
|
|
39
|
+
export interface SoundEngine {
|
|
40
|
+
readonly state: SoundEngineState;
|
|
41
|
+
readonly lastError: string | null;
|
|
42
|
+
/** Voices currently sounding (for leak tests and the status line). */
|
|
43
|
+
readonly voiceCount: number;
|
|
44
|
+
/**
|
|
45
|
+
* `true` once an AudioContext constructor was found in this environment
|
|
46
|
+
* (probed without constructing). `false` on the server.
|
|
47
|
+
*/
|
|
48
|
+
readonly supported: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Schedules `cue` now. Returns true only if a voice was actually scheduled.
|
|
51
|
+
* Returns false (never throws) when: unsupported, no context and creation not
|
|
52
|
+
* allowed, context not running (resume is kicked off, cue dropped), rate-limited,
|
|
53
|
+
* MAX_VOICES reached, unknown cue.
|
|
54
|
+
*/
|
|
55
|
+
play(cue: SoundCue, options?: SoundPlayOptions): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Creates the context if allowed and resumes it if suspended. Resolves true
|
|
58
|
+
* when the context is running afterwards. Never rejects. Call from a gesture.
|
|
59
|
+
*/
|
|
60
|
+
unlock(): Promise<boolean>;
|
|
61
|
+
/** 0..1; engine multiplies by SOUND_LIMITS.MASTER_CEILING. Ramped over ~20ms. */
|
|
62
|
+
setMasterVolume(volume: number): void;
|
|
63
|
+
setTheme(theme: SoundThemeDefinition): void;
|
|
64
|
+
/** Fades live voices out, stops/disconnects all nodes, closes an owned context, state → "idle". Idempotent. */
|
|
65
|
+
dispose(): void;
|
|
66
|
+
}
|
|
67
|
+
export declare function createSoundEngine(options?: SoundEngineOptions): SoundEngine;
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { SOUND_MIN_INTERVAL_MS, SOUND_LIMITS } from "./types.js";
|
|
3
|
+
import { FANCY_SOUND_THEME } from "./themes.js";
|
|
4
|
+
function clamp(value, min, max) {
|
|
5
|
+
return Math.min(max, Math.max(min, value));
|
|
6
|
+
}
|
|
7
|
+
function errorMessage(err) {
|
|
8
|
+
return err instanceof Error ? err.message : String(err);
|
|
9
|
+
}
|
|
10
|
+
function defaultGetContext() {
|
|
11
|
+
if (typeof window === "undefined") return null;
|
|
12
|
+
const w = window;
|
|
13
|
+
const Ctor = w.AudioContext ?? w.webkitAudioContext;
|
|
14
|
+
return Ctor ? new Ctor() : null;
|
|
15
|
+
}
|
|
16
|
+
function defaultCanCreateContext() {
|
|
17
|
+
if (typeof navigator === "undefined") return false;
|
|
18
|
+
const nav = navigator;
|
|
19
|
+
return nav.userActivation?.isActive ?? true;
|
|
20
|
+
}
|
|
21
|
+
function defaultNow() {
|
|
22
|
+
return typeof performance !== "undefined" ? performance.now() : Date.now();
|
|
23
|
+
}
|
|
24
|
+
function probeSupported() {
|
|
25
|
+
if (typeof window === "undefined") return false;
|
|
26
|
+
const w = window;
|
|
27
|
+
return typeof w.AudioContext !== "undefined" || typeof w.webkitAudioContext !== "undefined";
|
|
28
|
+
}
|
|
29
|
+
function fillNoise(data) {
|
|
30
|
+
let s = 2654435769;
|
|
31
|
+
for (let i = 0; i < data.length; i++) {
|
|
32
|
+
s ^= s << 13;
|
|
33
|
+
s >>>= 0;
|
|
34
|
+
s ^= s >>> 17;
|
|
35
|
+
s >>>= 0;
|
|
36
|
+
s ^= s << 5;
|
|
37
|
+
s >>>= 0;
|
|
38
|
+
data[i] = s / 4294967295 * 2 - 1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function createSoundEngine(options = {}) {
|
|
42
|
+
const getContextFn = options.getContext ?? defaultGetContext;
|
|
43
|
+
const canCreateContextFn = options.canCreateContext ?? defaultCanCreateContext;
|
|
44
|
+
const nowFn = options.now ?? defaultNow;
|
|
45
|
+
const minIntervals = options.minIntervals ?? {};
|
|
46
|
+
let theme = options.theme ?? FANCY_SOUND_THEME;
|
|
47
|
+
let masterVolume = clamp(
|
|
48
|
+
Number.isFinite(options.masterVolume) ? options.masterVolume : 0.5,
|
|
49
|
+
0,
|
|
50
|
+
1
|
|
51
|
+
);
|
|
52
|
+
const onStateChangeCb = options.onStateChange;
|
|
53
|
+
let ctx = null;
|
|
54
|
+
let master = null;
|
|
55
|
+
let limiter = null;
|
|
56
|
+
let statechangeListener = null;
|
|
57
|
+
let noiseBuffer = null;
|
|
58
|
+
let resumePromise = null;
|
|
59
|
+
let disposeGeneration = 0;
|
|
60
|
+
let state = "idle";
|
|
61
|
+
let lastError = null;
|
|
62
|
+
let voiceCount = 0;
|
|
63
|
+
const activeVoices = /* @__PURE__ */ new Set();
|
|
64
|
+
const lastAt = {};
|
|
65
|
+
function setState(next, error) {
|
|
66
|
+
if (next === state) {
|
|
67
|
+
if (error) lastError = error;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
state = next;
|
|
71
|
+
lastError = error;
|
|
72
|
+
onStateChangeCb?.(next, error);
|
|
73
|
+
}
|
|
74
|
+
function syncFromContextState(rawState) {
|
|
75
|
+
if (rawState === "running") setState("ready", null);
|
|
76
|
+
else if (rawState === "suspended" || rawState === "interrupted") setState("suspended", null);
|
|
77
|
+
else if (rawState === "closed") setState("blocked", null);
|
|
78
|
+
}
|
|
79
|
+
function attachContext(context) {
|
|
80
|
+
ctx = context;
|
|
81
|
+
const listener = () => syncFromContextState(context.state);
|
|
82
|
+
context.addEventListener("statechange", listener);
|
|
83
|
+
statechangeListener = listener;
|
|
84
|
+
master = context.createGain();
|
|
85
|
+
master.gain.value = masterVolume * SOUND_LIMITS.MASTER_CEILING;
|
|
86
|
+
if (typeof context.createDynamicsCompressor === "function") {
|
|
87
|
+
try {
|
|
88
|
+
const comp = context.createDynamicsCompressor();
|
|
89
|
+
comp.threshold.value = -12;
|
|
90
|
+
comp.knee.value = 6;
|
|
91
|
+
comp.ratio.value = 12;
|
|
92
|
+
comp.attack.value = 3e-3;
|
|
93
|
+
comp.release.value = 0.1;
|
|
94
|
+
master.connect(comp);
|
|
95
|
+
comp.connect(context.destination);
|
|
96
|
+
limiter = comp;
|
|
97
|
+
} catch {
|
|
98
|
+
limiter = null;
|
|
99
|
+
master.connect(context.destination);
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
master.connect(context.destination);
|
|
103
|
+
}
|
|
104
|
+
syncFromContextState(context.state);
|
|
105
|
+
}
|
|
106
|
+
function ensureContext() {
|
|
107
|
+
if (ctx) return ctx;
|
|
108
|
+
if (!canCreateContextFn()) return null;
|
|
109
|
+
let created;
|
|
110
|
+
try {
|
|
111
|
+
created = getContextFn();
|
|
112
|
+
if (!created) {
|
|
113
|
+
setState("unsupported", null);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
attachContext(created);
|
|
117
|
+
} catch (err) {
|
|
118
|
+
setState("unsupported", errorMessage(err));
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return created;
|
|
122
|
+
}
|
|
123
|
+
function kickResume(context) {
|
|
124
|
+
if (resumePromise) return resumePromise;
|
|
125
|
+
const generation = disposeGeneration;
|
|
126
|
+
const isCurrent = () => generation === disposeGeneration && ctx === context;
|
|
127
|
+
resumePromise = context.resume().then(() => {
|
|
128
|
+
if (isCurrent()) syncFromContextState(context.state);
|
|
129
|
+
}).catch((err) => {
|
|
130
|
+
if (isCurrent()) setState("blocked", errorMessage(err));
|
|
131
|
+
}).finally(() => {
|
|
132
|
+
if (generation === disposeGeneration) resumePromise = null;
|
|
133
|
+
});
|
|
134
|
+
return resumePromise;
|
|
135
|
+
}
|
|
136
|
+
const NOISE_BUFFER_SECONDS = 0.25;
|
|
137
|
+
function getNoiseBuffer(context) {
|
|
138
|
+
if (noiseBuffer) return noiseBuffer;
|
|
139
|
+
const length = Math.max(1, Math.round(context.sampleRate * NOISE_BUFFER_SECONDS));
|
|
140
|
+
const buffer = context.createBuffer(1, length, context.sampleRate);
|
|
141
|
+
fillNoise(buffer.getChannelData(0));
|
|
142
|
+
noiseBuffer = buffer;
|
|
143
|
+
return buffer;
|
|
144
|
+
}
|
|
145
|
+
let noiseOffsetStep = 0;
|
|
146
|
+
function nextNoiseOffset(buffer) {
|
|
147
|
+
noiseOffsetStep = (noiseOffsetStep + 1) % 8;
|
|
148
|
+
return buffer.duration * noiseOffsetStep / 8;
|
|
149
|
+
}
|
|
150
|
+
function renderLayer(context, masterNode, layer, recipeGain, opts) {
|
|
151
|
+
const { volume, pitch, rate } = opts;
|
|
152
|
+
const delayMs = layer.delay ?? 0;
|
|
153
|
+
const t0 = context.currentTime + delayMs / 1e3 / rate;
|
|
154
|
+
const durationMs = Math.min(layer.duration, SOUND_LIMITS.MAX_LAYER_MS);
|
|
155
|
+
const durationSec = durationMs / 1e3 / rate;
|
|
156
|
+
const pitchMul = 2 ** (pitch / 12);
|
|
157
|
+
let source;
|
|
158
|
+
let noiseStartOffset = 0;
|
|
159
|
+
if (layer.kind === "oscillator") {
|
|
160
|
+
const osc = context.createOscillator();
|
|
161
|
+
osc.type = layer.wave;
|
|
162
|
+
const freqStart = layer.frequency * pitchMul;
|
|
163
|
+
osc.frequency.value = freqStart;
|
|
164
|
+
if (layer.detune) osc.detune.value = layer.detune;
|
|
165
|
+
if (layer.frequencyEnd != null) {
|
|
166
|
+
const freqEnd = layer.frequencyEnd * pitchMul;
|
|
167
|
+
osc.frequency.setValueAtTime(freqStart, t0);
|
|
168
|
+
osc.frequency.exponentialRampToValueAtTime(Math.max(1, freqEnd), t0 + durationSec);
|
|
169
|
+
}
|
|
170
|
+
source = osc;
|
|
171
|
+
} else {
|
|
172
|
+
const buf = context.createBufferSource();
|
|
173
|
+
buf.buffer = getNoiseBuffer(context);
|
|
174
|
+
buf.loop = true;
|
|
175
|
+
source = buf;
|
|
176
|
+
noiseStartOffset = nextNoiseOffset(buf.buffer);
|
|
177
|
+
}
|
|
178
|
+
const nodes = [source];
|
|
179
|
+
let node = source;
|
|
180
|
+
if (layer.filter) {
|
|
181
|
+
const filterNode = context.createBiquadFilter();
|
|
182
|
+
filterNode.type = layer.filter.type;
|
|
183
|
+
filterNode.frequency.value = layer.filter.frequency;
|
|
184
|
+
if (layer.filter.q != null) filterNode.Q.value = layer.filter.q;
|
|
185
|
+
if (layer.filter.frequencyEnd != null) {
|
|
186
|
+
filterNode.frequency.setValueAtTime(layer.filter.frequency, t0);
|
|
187
|
+
filterNode.frequency.exponentialRampToValueAtTime(
|
|
188
|
+
Math.max(1, layer.filter.frequencyEnd),
|
|
189
|
+
t0 + durationSec
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
node.connect(filterNode);
|
|
193
|
+
node = filterNode;
|
|
194
|
+
nodes.push(filterNode);
|
|
195
|
+
}
|
|
196
|
+
const gainNode = context.createGain();
|
|
197
|
+
node.connect(gainNode);
|
|
198
|
+
gainNode.connect(masterNode);
|
|
199
|
+
nodes.push(gainNode);
|
|
200
|
+
const a = Math.max(layer.envelope.attack, SOUND_LIMITS.MIN_ATTACK_MS) / 1e3 / rate;
|
|
201
|
+
const d = layer.envelope.decay / 1e3 / rate;
|
|
202
|
+
const r = Math.max(layer.envelope.release, SOUND_LIMITS.MIN_RELEASE_MS) / 1e3 / rate;
|
|
203
|
+
const sustain = layer.envelope.sustain;
|
|
204
|
+
const peak = Math.min(layer.gain * recipeGain * volume, SOUND_LIMITS.LAYER_PEAK_CEILING);
|
|
205
|
+
const tRel = t0 + durationSec - r;
|
|
206
|
+
gainNode.gain.setValueAtTime(0, t0);
|
|
207
|
+
gainNode.gain.linearRampToValueAtTime(peak, t0 + a);
|
|
208
|
+
gainNode.gain.linearRampToValueAtTime(peak * sustain, t0 + a + d);
|
|
209
|
+
gainNode.gain.setValueAtTime(peak * sustain, tRel);
|
|
210
|
+
gainNode.gain.linearRampToValueAtTime(0, tRel + r);
|
|
211
|
+
if (layer.kind === "noise") source.start(t0, noiseStartOffset);
|
|
212
|
+
else source.start(t0);
|
|
213
|
+
source.stop(t0 + durationSec + 0.01);
|
|
214
|
+
return { nodes, source };
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
get state() {
|
|
218
|
+
return state;
|
|
219
|
+
},
|
|
220
|
+
get lastError() {
|
|
221
|
+
return lastError;
|
|
222
|
+
},
|
|
223
|
+
get voiceCount() {
|
|
224
|
+
return voiceCount;
|
|
225
|
+
},
|
|
226
|
+
get supported() {
|
|
227
|
+
return probeSupported();
|
|
228
|
+
},
|
|
229
|
+
play(cue, options2 = {}) {
|
|
230
|
+
if (state === "unsupported") return false;
|
|
231
|
+
const recipe = theme.cues[cue];
|
|
232
|
+
if (!recipe) return false;
|
|
233
|
+
const interval = minIntervals[cue] ?? SOUND_MIN_INTERVAL_MS[cue] ?? 15;
|
|
234
|
+
const last = lastAt[cue] ?? Number.NEGATIVE_INFINITY;
|
|
235
|
+
if (nowFn() - last < interval) return false;
|
|
236
|
+
const context = ensureContext();
|
|
237
|
+
if (!context) return false;
|
|
238
|
+
if (context.state !== "running") {
|
|
239
|
+
void kickResume(context);
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
if (voiceCount + recipe.layers.length > SOUND_LIMITS.MAX_VOICES) return false;
|
|
243
|
+
const volume = clamp(Number.isFinite(options2.volume) ? options2.volume : 1, 0, 1);
|
|
244
|
+
const pitch = clamp(Number.isFinite(options2.pitch) ? options2.pitch : 0, -24, 24);
|
|
245
|
+
const rate = clamp(
|
|
246
|
+
Number.isFinite(options2.playbackRate) ? options2.playbackRate : 1,
|
|
247
|
+
0.25,
|
|
248
|
+
4
|
|
249
|
+
);
|
|
250
|
+
const recipeGain = recipe.gain ?? 1;
|
|
251
|
+
const createdVoices = [];
|
|
252
|
+
try {
|
|
253
|
+
if (!master) throw new Error("master gain missing");
|
|
254
|
+
for (const layer of recipe.layers) {
|
|
255
|
+
createdVoices.push(
|
|
256
|
+
renderLayer(context, master, layer, recipeGain, { volume, pitch, rate })
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
} catch (err) {
|
|
260
|
+
for (const voice of createdVoices) {
|
|
261
|
+
for (const n of voice.nodes) {
|
|
262
|
+
try {
|
|
263
|
+
n.disconnect();
|
|
264
|
+
} catch {
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
lastError = errorMessage(err);
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
voiceCount += createdVoices.length;
|
|
272
|
+
for (const voice of createdVoices) {
|
|
273
|
+
activeVoices.add(voice);
|
|
274
|
+
voice.source.onended = () => {
|
|
275
|
+
activeVoices.delete(voice);
|
|
276
|
+
for (const n of voice.nodes) {
|
|
277
|
+
try {
|
|
278
|
+
n.disconnect();
|
|
279
|
+
} catch {
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
voiceCount = Math.max(0, voiceCount - 1);
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
lastAt[cue] = nowFn();
|
|
286
|
+
return true;
|
|
287
|
+
},
|
|
288
|
+
async unlock() {
|
|
289
|
+
try {
|
|
290
|
+
const context = ensureContext();
|
|
291
|
+
if (!context) return false;
|
|
292
|
+
if (context.state !== "running") {
|
|
293
|
+
await kickResume(context);
|
|
294
|
+
}
|
|
295
|
+
return context.state === "running";
|
|
296
|
+
} catch {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
setMasterVolume(volume) {
|
|
301
|
+
const v = clamp(Number.isFinite(volume) ? volume : 0, 0, 1);
|
|
302
|
+
masterVolume = v;
|
|
303
|
+
if (master && ctx) {
|
|
304
|
+
const now = ctx.currentTime;
|
|
305
|
+
const target = v * SOUND_LIMITS.MASTER_CEILING;
|
|
306
|
+
master.gain.cancelScheduledValues(now);
|
|
307
|
+
master.gain.linearRampToValueAtTime(target, now + 0.02);
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
setTheme(next) {
|
|
311
|
+
theme = next;
|
|
312
|
+
},
|
|
313
|
+
dispose() {
|
|
314
|
+
disposeGeneration += 1;
|
|
315
|
+
for (const voice of [...activeVoices]) {
|
|
316
|
+
try {
|
|
317
|
+
const now = ctx ? ctx.currentTime : 0;
|
|
318
|
+
const gainNode = voice.nodes[voice.nodes.length - 1];
|
|
319
|
+
gainNode.gain.cancelScheduledValues(now);
|
|
320
|
+
gainNode.gain.setValueAtTime(0, now);
|
|
321
|
+
voice.source.stop(now);
|
|
322
|
+
} catch {
|
|
323
|
+
}
|
|
324
|
+
for (const n of voice.nodes) {
|
|
325
|
+
try {
|
|
326
|
+
n.disconnect();
|
|
327
|
+
} catch {
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
activeVoices.clear();
|
|
332
|
+
voiceCount = 0;
|
|
333
|
+
if (master) {
|
|
334
|
+
try {
|
|
335
|
+
master.disconnect();
|
|
336
|
+
} catch {
|
|
337
|
+
}
|
|
338
|
+
master = null;
|
|
339
|
+
}
|
|
340
|
+
if (limiter) {
|
|
341
|
+
try {
|
|
342
|
+
limiter.disconnect();
|
|
343
|
+
} catch {
|
|
344
|
+
}
|
|
345
|
+
limiter = null;
|
|
346
|
+
}
|
|
347
|
+
if (ctx) {
|
|
348
|
+
if (statechangeListener) {
|
|
349
|
+
try {
|
|
350
|
+
ctx.removeEventListener("statechange", statechangeListener);
|
|
351
|
+
} catch {
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
try {
|
|
355
|
+
void ctx.close();
|
|
356
|
+
} catch {
|
|
357
|
+
}
|
|
358
|
+
ctx = null;
|
|
359
|
+
}
|
|
360
|
+
statechangeListener = null;
|
|
361
|
+
noiseBuffer = null;
|
|
362
|
+
resumePromise = null;
|
|
363
|
+
for (const key of Object.keys(lastAt)) delete lastAt[key];
|
|
364
|
+
setState("idle", null);
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
export {
|
|
369
|
+
createSoundEngine
|
|
370
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SoundToggle, type SoundToggleProps, type SoundToggleSize, type SoundToggleVariant, } from "./SoundToggle.js";
|
|
2
|
+
export { sound, getSoundStatus, type SoundController, type SoundSnapshot } from "./sound.js";
|
|
3
|
+
export { attachSoundFeedback, useSoundFeedback, DEFAULT_SOUND_FEEDBACK_ON, type SoundFeedbackOptions, type SoundFeedbackHandle, type SoundCueResolver, type SoundCueSpec, } from "./sound-feedback.js";
|
|
4
|
+
export { useSound, useSoundCue, useSoundEnabled, useSoundStatus, type SoundControls, } from "./use-sound.js";
|
|
5
|
+
export { createSoundEngine, type SoundEngine, type SoundEngineOptions } from "./engine.js";
|
|
6
|
+
export { FANCY_SOUND_THEME, SOUND_THEMES, getSoundTheme, validateSoundTheme } from "./themes.js";
|
|
7
|
+
export { SOUND_CUES, SOUND_THEME_NAMES, SOUND_STORAGE_KEY, SOUND_MIN_INTERVAL_MS, SOUND_LIMITS, DEFAULT_SOUND_PREFERENCES, type SoundCue, type SoundThemeName, type SoundPlayOptions, type SoundPreferences, type SoundPreferencesV1, type SoundStatus, type SoundEngineState, type SoundThemeDefinition, type CueRecipe, type SoundLayer, type SoundOscillatorLayer, type SoundNoiseLayer, type SoundEnvelope, type SoundFilter, type SoundWave, } from "./types.js";
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declarative event → cue mapping for any element.
|
|
3
|
+
*
|
|
4
|
+
* Semantics:
|
|
5
|
+
* - SSR (`typeof document === "undefined"`) → an inert handle, nothing bound.
|
|
6
|
+
* - Listeners are bound `{ passive: true }`; this module never calls
|
|
7
|
+
* `preventDefault`/`stopPropagation` — it only listens.
|
|
8
|
+
* - Defaults to `{ click: "press" }`. Hover is opt-in (`on: { pointerenter:
|
|
9
|
+
* "hover" }`) — a hover cue is a deliberate choice for dense pointer UI, not
|
|
10
|
+
* something every button should inherit. `on` REPLACES the defaults.
|
|
11
|
+
* - Universal guard: `opts.disabled` or the node matching
|
|
12
|
+
* `:disabled,[aria-disabled="true"],[data-disabled="true"]` → silent.
|
|
13
|
+
* - Hover guard (pointerenter/mouseenter only), all of which must pass:
|
|
14
|
+
* · `event.isTrusted` unless `allowUntrusted`;
|
|
15
|
+
* · `pointerType` is "mouse" or "pen" — a touch tap fires pointerenter and
|
|
16
|
+
* then click, and one tap must be one cue; "" is a synthesized pointer; a
|
|
17
|
+
* compatibility mouseenter from a tap carries `sourceCapabilities.firesTouchEvents`;
|
|
18
|
+
* · a pointer actually moved within the last HOVER_RECENCY_MS — content
|
|
19
|
+
* scrolling under a stationary pointer also fires pointerenter, and that
|
|
20
|
+
* is not a hover;
|
|
21
|
+
* · `relatedTarget` is not inside the node (re-entry from a descendant).
|
|
22
|
+
* - Resolver errors are swallowed — a broken resolver silences that event,
|
|
23
|
+
* it never throws into the DOM dispatch.
|
|
24
|
+
* - `update()` unbinds every listener and rebinds from the new options.
|
|
25
|
+
* `destroy()` unbinds every listener.
|
|
26
|
+
*/
|
|
27
|
+
import type { SoundCue } from "./types.js";
|
|
28
|
+
/** Return a cue to play, or null/undefined to stay silent for this event. */
|
|
29
|
+
export type SoundCueResolver = (event: Event) => SoundCue | null | undefined;
|
|
30
|
+
export type SoundCueSpec = SoundCue | SoundCueResolver;
|
|
31
|
+
export interface SoundFeedbackOptions {
|
|
32
|
+
/**
|
|
33
|
+
* DOM event name → cue. When omitted the default is `{ click: "press" }`.
|
|
34
|
+
* When given it REPLACES the defaults — add `pointerenter: "hover"` to opt
|
|
35
|
+
* into hover feedback.
|
|
36
|
+
*/
|
|
37
|
+
on?: Record<string, SoundCueSpec>;
|
|
38
|
+
/** Skips every cue while true. */
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
/** Forwarded to `sound.play` for every cue. */
|
|
41
|
+
volume?: number;
|
|
42
|
+
pitch?: number;
|
|
43
|
+
/** Let `isTrusted === false` hover events through (tests, programmatic pointer events). Default false. */
|
|
44
|
+
allowUntrusted?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** The handle `attachSoundFeedback` returns — the action's `{ update, destroy }`. */
|
|
47
|
+
export interface SoundFeedbackHandle {
|
|
48
|
+
update(next?: SoundFeedbackOptions): void;
|
|
49
|
+
destroy(): void;
|
|
50
|
+
}
|
|
51
|
+
export declare const DEFAULT_SOUND_FEEDBACK_ON: Readonly<Record<string, SoundCue>>;
|
|
52
|
+
/** Test-only: drops the shared pointer-tracking state between tests. Not exported from index.ts. */
|
|
53
|
+
export declare function resetSoundFeedbackForTests(): void;
|
|
54
|
+
/** Test-only leak counter for the shared document-level `pointermove` listener. */
|
|
55
|
+
export declare function __soundFeedbackHoverInstances(): number;
|
|
56
|
+
/**
|
|
57
|
+
* The framework-free core: binds the mapped listeners to `node` and hands back
|
|
58
|
+
* the action's own `{ update, destroy }`.
|
|
59
|
+
*/
|
|
60
|
+
export declare function attachSoundFeedback(node: HTMLElement, initialOptions?: SoundFeedbackOptions): SoundFeedbackHandle;
|
|
61
|
+
/**
|
|
62
|
+
* The hook binding, in two shapes.
|
|
63
|
+
*
|
|
64
|
+
* `useSoundFeedback(options?)` returns a callback ref to put straight on the
|
|
65
|
+
* element — the common case, and the idiomatic React answer to `use:soundFeedback`:
|
|
66
|
+
*
|
|
67
|
+
* const soundRef = useSoundFeedback({ on: { click: "press" } });
|
|
68
|
+
* return <button ref={soundRef} />;
|
|
69
|
+
*
|
|
70
|
+
* `useSoundFeedback(node, options?)` takes a node you already hold (convention
|
|
71
|
+
* C-1, paired with `useElementRef`); `null` binds nothing. Use it when the same
|
|
72
|
+
* element is already published for another hook, so it is not published twice.
|
|
73
|
+
*
|
|
74
|
+
* The two are the same binding — the first just owns the node state for you.
|
|
75
|
+
*/
|
|
76
|
+
export declare function useSoundFeedback(node: HTMLElement | null, options?: SoundFeedbackOptions): void;
|
|
77
|
+
export declare function useSoundFeedback(options?: SoundFeedbackOptions): (node: HTMLElement | null) => void;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { useElementRef } from "../internals/dom/use-element-ref.js";
|
|
4
|
+
import { useLiveRef } from "../internals/dom/use-live-ref.js";
|
|
5
|
+
import { sound } from "./sound.js";
|
|
6
|
+
const DEFAULT_SOUND_FEEDBACK_ON = Object.freeze({
|
|
7
|
+
click: "press"
|
|
8
|
+
});
|
|
9
|
+
const HOVER_EVENTS = /* @__PURE__ */ new Set(["pointerenter", "mouseenter"]);
|
|
10
|
+
const HOVER_POINTER_TYPES = /* @__PURE__ */ new Set(["mouse", "pen"]);
|
|
11
|
+
const HOVER_RECENCY_MS = 150;
|
|
12
|
+
let lastPointerMoveAt = -Infinity;
|
|
13
|
+
let hoverInstances = 0;
|
|
14
|
+
function onDocumentPointerMove() {
|
|
15
|
+
lastPointerMoveAt = performance.now();
|
|
16
|
+
}
|
|
17
|
+
function retainHoverTracking() {
|
|
18
|
+
if (hoverInstances++ === 0) {
|
|
19
|
+
document.addEventListener("pointermove", onDocumentPointerMove, {
|
|
20
|
+
capture: true,
|
|
21
|
+
passive: true
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function releaseHoverTracking() {
|
|
26
|
+
if (--hoverInstances === 0) {
|
|
27
|
+
document.removeEventListener("pointermove", onDocumentPointerMove, { capture: true });
|
|
28
|
+
lastPointerMoveAt = -Infinity;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function attachSoundFeedback(node, initialOptions) {
|
|
32
|
+
if (typeof document === "undefined") {
|
|
33
|
+
return { update() {
|
|
34
|
+
}, destroy() {
|
|
35
|
+
} };
|
|
36
|
+
}
|
|
37
|
+
let options = initialOptions ?? {};
|
|
38
|
+
let bound = [];
|
|
39
|
+
let tracksHover = false;
|
|
40
|
+
function isDisabled() {
|
|
41
|
+
if (options.disabled) return true;
|
|
42
|
+
return node.matches(':disabled,[aria-disabled="true"],[data-disabled="true"]');
|
|
43
|
+
}
|
|
44
|
+
function isSuppressedHover(event) {
|
|
45
|
+
if (event.isTrusted === false && !options.allowUntrusted) return true;
|
|
46
|
+
const pointerType = event.pointerType;
|
|
47
|
+
if (pointerType !== void 0 && !HOVER_POINTER_TYPES.has(pointerType)) return true;
|
|
48
|
+
const capabilities = event.sourceCapabilities;
|
|
49
|
+
if (capabilities?.firesTouchEvents) return true;
|
|
50
|
+
if (performance.now() - lastPointerMoveAt > HOVER_RECENCY_MS) return true;
|
|
51
|
+
const relatedTarget = event.relatedTarget;
|
|
52
|
+
if (relatedTarget instanceof Node && node.contains(relatedTarget)) return true;
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
function makeListener(eventName, spec) {
|
|
56
|
+
return (event) => {
|
|
57
|
+
if (isDisabled()) return;
|
|
58
|
+
if (HOVER_EVENTS.has(eventName) && isSuppressedHover(event)) return;
|
|
59
|
+
let cue;
|
|
60
|
+
try {
|
|
61
|
+
cue = typeof spec === "function" ? spec(event) : spec;
|
|
62
|
+
} catch {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (cue == null) return;
|
|
66
|
+
sound.play(cue, { volume: options.volume, pitch: options.pitch });
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function bind() {
|
|
70
|
+
const on = options.on ?? DEFAULT_SOUND_FEEDBACK_ON;
|
|
71
|
+
bound = Object.entries(on).map(([event, spec]) => {
|
|
72
|
+
const listener = makeListener(event, spec);
|
|
73
|
+
node.addEventListener(event, listener, { passive: true });
|
|
74
|
+
return { event, listener };
|
|
75
|
+
});
|
|
76
|
+
tracksHover = bound.some(({ event }) => HOVER_EVENTS.has(event));
|
|
77
|
+
if (tracksHover) retainHoverTracking();
|
|
78
|
+
}
|
|
79
|
+
function unbind() {
|
|
80
|
+
for (const { event, listener } of bound) {
|
|
81
|
+
node.removeEventListener(event, listener);
|
|
82
|
+
}
|
|
83
|
+
bound = [];
|
|
84
|
+
if (tracksHover) {
|
|
85
|
+
tracksHover = false;
|
|
86
|
+
releaseHoverTracking();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
bind();
|
|
90
|
+
return {
|
|
91
|
+
update(next) {
|
|
92
|
+
options = next ?? {};
|
|
93
|
+
unbind();
|
|
94
|
+
bind();
|
|
95
|
+
},
|
|
96
|
+
destroy() {
|
|
97
|
+
unbind();
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const EMPTY_OPTIONS = {};
|
|
102
|
+
const EVENT_KEY_SEPARATOR = "\0";
|
|
103
|
+
function isElement(value) {
|
|
104
|
+
return typeof value?.nodeType === "number";
|
|
105
|
+
}
|
|
106
|
+
function useSoundFeedback(nodeOrOptions, maybeOptions) {
|
|
107
|
+
const isNodeForm = nodeOrOptions === null || isElement(nodeOrOptions);
|
|
108
|
+
const [ownNode, ownRef] = useElementRef();
|
|
109
|
+
const node = isNodeForm ? nodeOrOptions : ownNode;
|
|
110
|
+
const options = isNodeForm ? maybeOptions : nodeOrOptions;
|
|
111
|
+
useSoundFeedbackBinding(node, options);
|
|
112
|
+
return isNodeForm ? void 0 : ownRef;
|
|
113
|
+
}
|
|
114
|
+
function useSoundFeedbackBinding(node, options) {
|
|
115
|
+
const optionsRef = useLiveRef(options ?? EMPTY_OPTIONS);
|
|
116
|
+
const eventKey = Object.keys(options?.on ?? DEFAULT_SOUND_FEEDBACK_ON).sort().join(EVENT_KEY_SEPARATOR);
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
if (!node) return;
|
|
119
|
+
const names = eventKey === "" ? [] : eventKey.split(EVENT_KEY_SEPARATOR);
|
|
120
|
+
const on = {};
|
|
121
|
+
for (const name of names) {
|
|
122
|
+
on[name] = (event) => {
|
|
123
|
+
const spec = (optionsRef.current.on ?? DEFAULT_SOUND_FEEDBACK_ON)[name];
|
|
124
|
+
return typeof spec === "function" ? spec(event) : spec;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const live = {
|
|
128
|
+
on,
|
|
129
|
+
get disabled() {
|
|
130
|
+
return optionsRef.current.disabled;
|
|
131
|
+
},
|
|
132
|
+
get volume() {
|
|
133
|
+
return optionsRef.current.volume;
|
|
134
|
+
},
|
|
135
|
+
get pitch() {
|
|
136
|
+
return optionsRef.current.pitch;
|
|
137
|
+
},
|
|
138
|
+
get allowUntrusted() {
|
|
139
|
+
return optionsRef.current.allowUntrusted;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const handle = attachSoundFeedback(node, live);
|
|
143
|
+
return () => {
|
|
144
|
+
handle.destroy();
|
|
145
|
+
};
|
|
146
|
+
}, [node, eventKey, optionsRef]);
|
|
147
|
+
}
|
|
148
|
+
export {
|
|
149
|
+
DEFAULT_SOUND_FEEDBACK_ON,
|
|
150
|
+
attachSoundFeedback,
|
|
151
|
+
useSoundFeedback
|
|
152
|
+
};
|