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,94 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { cn } from "../../utils.js";
|
|
5
|
+
import { Portal } from "../../internals/Portal.js";
|
|
6
|
+
import { useAnchorPosition } from "../../internals/use-anchor-position.js";
|
|
7
|
+
import { useDismissable } from "../../internals/dismissable.js";
|
|
8
|
+
import { useComposedRefs } from "../../internals/dom/use-composed-refs.js";
|
|
9
|
+
import { useElementRef } from "../../internals/dom/use-element-ref.js";
|
|
10
|
+
import { anchored, originFor } from "../../internals/motion/anchored.js";
|
|
11
|
+
import { usePresence } from "../../internals/motion/presence.js";
|
|
12
|
+
import { useTimePickerContext } from "./types.js";
|
|
13
|
+
/* empty css */
|
|
14
|
+
const TimePickerPanel = forwardRef(
|
|
15
|
+
function TimePickerPanel2({ className }, forwardedRef) {
|
|
16
|
+
const ctx = useTimePickerContext();
|
|
17
|
+
const [panel, setPanelNode] = useElementRef();
|
|
18
|
+
const presence = usePresence(ctx.open);
|
|
19
|
+
const { side: resolvedSide, align: resolvedAlign } = useAnchorPosition(panel, {
|
|
20
|
+
anchor: () => ctx.triggerRef,
|
|
21
|
+
side: "bottom",
|
|
22
|
+
align: "start",
|
|
23
|
+
offset: 4
|
|
24
|
+
});
|
|
25
|
+
useDismissable(panel, {
|
|
26
|
+
onDismiss: ctx.close,
|
|
27
|
+
exclude: () => [ctx.triggerRef],
|
|
28
|
+
active: ctx.open
|
|
29
|
+
});
|
|
30
|
+
const panelRef = useComposedRefs(
|
|
31
|
+
setPanelNode,
|
|
32
|
+
forwardedRef,
|
|
33
|
+
presence.register(anchored, (entering) => ({ side: resolvedSide, entering }))
|
|
34
|
+
);
|
|
35
|
+
function rowClasses(index) {
|
|
36
|
+
return cn(
|
|
37
|
+
"ft-time-picker-option flex cursor-pointer items-center justify-between gap-2 rounded-[6px] px-[10px] py-[6px] font-mono text-foreground select-none",
|
|
38
|
+
(ctx.isSelected(index) || ctx.isActive(index)) && "bg-accent text-accent-foreground"
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
return /* @__PURE__ */ jsx(Portal, { children: presence.mounted ? /* @__PURE__ */ jsx(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
ref: panelRef,
|
|
45
|
+
id: ctx.panelId,
|
|
46
|
+
role: "listbox",
|
|
47
|
+
className: cn(
|
|
48
|
+
"ft-time-picker-panel border-border bg-popover text-popover-foreground flex max-h-[220px] w-max min-w-[100px] flex-col gap-[1px] overflow-y-auto rounded-[10px] border p-[5px] text-[12px] shadow-lg outline-none",
|
|
49
|
+
className
|
|
50
|
+
),
|
|
51
|
+
"data-state": presence.surfaceState,
|
|
52
|
+
"data-side": resolvedSide,
|
|
53
|
+
"data-align": "start",
|
|
54
|
+
style: { transformOrigin: originFor(resolvedSide, resolvedAlign) },
|
|
55
|
+
children: ctx.slots.length === 0 ? (
|
|
56
|
+
/* Reachable when `min`/`max` exclude every generated slot — see the
|
|
57
|
+
README. A real row, not silently nothing: an empty floating panel
|
|
58
|
+
with no explanation is a worse failure than this one line. */
|
|
59
|
+
/* @__PURE__ */ jsx("p", { className: "text-muted-foreground px-[10px] py-[7px] text-[12px] italic", children: "No times available." })
|
|
60
|
+
) : ctx.slots.map((slot, index) => (
|
|
61
|
+
/*
|
|
62
|
+
Keyboard activation for this row is not local: the trigger
|
|
63
|
+
button owns every keydown (Enter/Space/arrow keys/Home/End)
|
|
64
|
+
and drives selection through `aria-activedescendant`, per the
|
|
65
|
+
ARIA combobox-with-listbox-popup pattern. A row-level keydown
|
|
66
|
+
handler would be dead code — focus never reaches a row to fire
|
|
67
|
+
one — not a missing affordance.
|
|
68
|
+
*/
|
|
69
|
+
/* @__PURE__ */ jsxs(
|
|
70
|
+
"div",
|
|
71
|
+
{
|
|
72
|
+
id: ctx.optionId(index),
|
|
73
|
+
role: "option",
|
|
74
|
+
tabIndex: -1,
|
|
75
|
+
"aria-selected": ctx.isSelected(index),
|
|
76
|
+
className: rowClasses(index),
|
|
77
|
+
onClick: () => ctx.commit(index),
|
|
78
|
+
onPointerEnter: () => ctx.setActive(index),
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ jsx("span", { children: ctx.labelFor(slot) }),
|
|
81
|
+
ctx.isSelected(index) ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "text-[var(--ft-field-accent)]", children: "✓" }) : null
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
slot
|
|
85
|
+
)
|
|
86
|
+
))
|
|
87
|
+
}
|
|
88
|
+
) : null });
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
TimePickerPanel.displayName = "TimePickerPanel";
|
|
92
|
+
export {
|
|
93
|
+
TimePickerPanel
|
|
94
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Parses "HH:mm" into total minutes since midnight. Returns `null` for anything malformed. */
|
|
2
|
+
export declare function toMinutes(value: string): number | null;
|
|
3
|
+
/** Formats total minutes since midnight back into zero-padded "HH:mm". */
|
|
4
|
+
export declare function fromMinutes(totalMinutes: number): string;
|
|
5
|
+
/**
|
|
6
|
+
* The full slot grid for `step`-minute increments, anchored at 00:00 —
|
|
7
|
+
* 00:00, 00:{step}, 00:{2*step}, ... for as long as the slot start is still
|
|
8
|
+
* within the day. A `step` that does not divide 60 or 1440 evenly (45, say)
|
|
9
|
+
* is not special-cased: the loop simply stops once the next start would
|
|
10
|
+
* reach or pass 24:00, which can leave a shorter-than-usual final gap before
|
|
11
|
+
* midnight rather than inserting a partial slot — the defined behaviour the
|
|
12
|
+
* brief asks for, documented here and in the README.
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateSlots(step: number): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Keeps only the slots within `[min, max]` (either bound optional, both
|
|
17
|
+
* inclusive). A bound that does not land exactly on a generated slot simply
|
|
18
|
+
* excludes the slot straddling it, rather than inserting a synthetic one at
|
|
19
|
+
* the bound itself — same "defined, not silently magic" behaviour as
|
|
20
|
+
* `generateSlots`'s own step handling.
|
|
21
|
+
*/
|
|
22
|
+
export declare function filterByBounds(slots: string[], min?: string, max?: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Index of the slot to highlight when the panel opens: an exact match for
|
|
25
|
+
* `value`, else the nearest slot at or after it, else the last slot (`value`
|
|
26
|
+
* is later than every slot), else -1 (no slots at all). A `value` that does
|
|
27
|
+
* not land on a generated boundary — set programmatically while `step`
|
|
28
|
+
* doesn't divide it evenly — still resolves to a sensible neighbour instead
|
|
29
|
+
* of leaving nothing highlighted.
|
|
30
|
+
*/
|
|
31
|
+
export declare function nearestIndex(slots: string[], value: string | null | undefined): number;
|
|
32
|
+
/** Formats "HH:mm" for display, honouring `hour12` and `locale`. The underlying value never changes shape. */
|
|
33
|
+
export declare function formatSlotLabel(value: string, hour12: boolean, locale?: string): string;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const MINUTES_PER_DAY = 24 * 60;
|
|
3
|
+
function toMinutes(value) {
|
|
4
|
+
const match = /^(\d{1,2}):(\d{2})$/.exec(value);
|
|
5
|
+
if (!match) return null;
|
|
6
|
+
const hours = Number(match[1]);
|
|
7
|
+
const minutes = Number(match[2]);
|
|
8
|
+
if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null;
|
|
9
|
+
return hours * 60 + minutes;
|
|
10
|
+
}
|
|
11
|
+
function fromMinutes(totalMinutes) {
|
|
12
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
13
|
+
const minutes = totalMinutes % 60;
|
|
14
|
+
return `${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`;
|
|
15
|
+
}
|
|
16
|
+
function generateSlots(step) {
|
|
17
|
+
const safeStep = Math.max(1, Math.floor(step));
|
|
18
|
+
const slots = [];
|
|
19
|
+
for (let minutes = 0; minutes < MINUTES_PER_DAY; minutes += safeStep) {
|
|
20
|
+
slots.push(fromMinutes(minutes));
|
|
21
|
+
}
|
|
22
|
+
return slots;
|
|
23
|
+
}
|
|
24
|
+
function filterByBounds(slots, min, max) {
|
|
25
|
+
const minMinutes = min ? toMinutes(min) : null;
|
|
26
|
+
const maxMinutes = max ? toMinutes(max) : null;
|
|
27
|
+
return slots.filter((slot) => {
|
|
28
|
+
const value = toMinutes(slot);
|
|
29
|
+
if (value === null) return false;
|
|
30
|
+
if (minMinutes !== null && value < minMinutes) return false;
|
|
31
|
+
if (maxMinutes !== null && value > maxMinutes) return false;
|
|
32
|
+
return true;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function nearestIndex(slots, value) {
|
|
36
|
+
if (slots.length === 0) return -1;
|
|
37
|
+
const target = value ? toMinutes(value) : null;
|
|
38
|
+
if (target === null) return 0;
|
|
39
|
+
let best = -1;
|
|
40
|
+
for (let i = 0; i < slots.length; i++) {
|
|
41
|
+
const slotMinutes = toMinutes(slots[i]);
|
|
42
|
+
if (slotMinutes === null) continue;
|
|
43
|
+
if (slotMinutes >= target) {
|
|
44
|
+
best = i;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return best === -1 ? slots.length - 1 : best;
|
|
49
|
+
}
|
|
50
|
+
function formatSlotLabel(value, hour12, locale) {
|
|
51
|
+
const minutes = toMinutes(value);
|
|
52
|
+
if (minutes === null) return value;
|
|
53
|
+
const reference = new Date(2e3, 0, 1, Math.floor(minutes / 60), minutes % 60);
|
|
54
|
+
return new Intl.DateTimeFormat(locale, { hour: "numeric", minute: "2-digit", hour12 }).format(
|
|
55
|
+
reference
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
filterByBounds,
|
|
60
|
+
formatSlotLabel,
|
|
61
|
+
fromMinutes,
|
|
62
|
+
generateSlots,
|
|
63
|
+
nearestIndex,
|
|
64
|
+
toMinutes
|
|
65
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The contract between the `TimePicker` trigger and its portalled listbox
|
|
3
|
+
* panel — the same split `Select`/`SelectPanel` use, for the same reason:
|
|
4
|
+
* the root owns the slot list, the value and where the active (highlighted)
|
|
5
|
+
* index sits, and the panel only ever reads that or reports back through
|
|
6
|
+
* `setActive`/`commit`.
|
|
7
|
+
*/
|
|
8
|
+
export interface TimePickerContext {
|
|
9
|
+
/** Whether the panel is open. Read by the panel's own presence clock, which
|
|
10
|
+
* needs it to tell an entrance from a departure. Also the panel's
|
|
11
|
+
* dismissable `active` gate: the instant this flips false the layer stops
|
|
12
|
+
* answering Escape, so a second Escape during the fade reaches whatever is
|
|
13
|
+
* underneath instead of being swallowed by a panel that is already
|
|
14
|
+
* leaving. */
|
|
15
|
+
readonly open: boolean;
|
|
16
|
+
/** The panel's own id — also what the trigger's `aria-controls` points at while open. */
|
|
17
|
+
readonly panelId: string;
|
|
18
|
+
/** The "HH:mm" slots to render as rows, in order. */
|
|
19
|
+
readonly slots: string[];
|
|
20
|
+
/** Index of the highlighted option, or -1 when nothing is active. */
|
|
21
|
+
readonly activeIndex: number;
|
|
22
|
+
/** Display label for a slot, honouring `hour12`/`locale`. */
|
|
23
|
+
labelFor(slot: string): string;
|
|
24
|
+
/** The real trigger button — what the panel anchors against and excludes from its own outside-click check. */
|
|
25
|
+
readonly triggerRef: HTMLElement | null;
|
|
26
|
+
/** The id a given option row must carry — also what `aria-activedescendant` points at while it's active. */
|
|
27
|
+
optionId(index: number): string;
|
|
28
|
+
/** Whether the slot at `index` is the current selection. */
|
|
29
|
+
isSelected(index: number): boolean;
|
|
30
|
+
/** Whether the slot at `index` is the highlighted (`aria-activedescendant`) one. */
|
|
31
|
+
isActive(index: number): boolean;
|
|
32
|
+
/** Highlights `index` without selecting it — a pointer hover, not a commit. */
|
|
33
|
+
setActive(index: number): void;
|
|
34
|
+
/** Selects the slot at `index` and closes the panel, the same way Enter does. */
|
|
35
|
+
commit(index: number): void;
|
|
36
|
+
/** Closes the panel without changing the value — what Escape and an outside click do. */
|
|
37
|
+
close(): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The React counterpart of the source's `TIME_PICKER_KEY` symbol: a context
|
|
41
|
+
* object plus its readers, per the internals contract's naming table
|
|
42
|
+
* (`FOO_KEY` → `FooReactContext` + `useFoo()`).
|
|
43
|
+
*
|
|
44
|
+
* Not re-exported from this folder's `index.ts`, because the source barrel
|
|
45
|
+
* does not export `TIME_PICKER_KEY` either — the trigger/panel wiring is
|
|
46
|
+
* private to the pair.
|
|
47
|
+
*/
|
|
48
|
+
export declare const TimePickerReactContext: import("../../internals/dom/context.js").InternalContext<TimePickerContext>;
|
|
49
|
+
/** Reads the surrounding `TimePicker`'s context. Throws outside one, which is
|
|
50
|
+
* the compound-component contract: `TimePickerPanel` is only ever rendered by
|
|
51
|
+
* `TimePicker`, so there is no standalone-usage fallback to design for — the
|
|
52
|
+
* same as the source's `getContext(TIME_PICKER_KEY)` with no fallback branch. */
|
|
53
|
+
export declare const useTimePickerContext: () => TimePickerContext;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createInternalContext } from "../../internals/dom/context.js";
|
|
3
|
+
const TimePickerReactContext = createInternalContext(
|
|
4
|
+
"TimePicker context"
|
|
5
|
+
);
|
|
6
|
+
const useTimePickerContext = TimePickerReactContext.useRequired;
|
|
7
|
+
export {
|
|
8
|
+
TimePickerReactContext,
|
|
9
|
+
useTimePickerContext
|
|
10
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export interface TimelineItem {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export interface TimelineProps {
|
|
7
|
+
/** Timeline entries */
|
|
8
|
+
items?: TimelineItem[];
|
|
9
|
+
/** Heading text */
|
|
10
|
+
title?: string;
|
|
11
|
+
/** Subheading text */
|
|
12
|
+
description?: string;
|
|
13
|
+
/** Additional CSS classes for the outer wrapper */
|
|
14
|
+
className?: string;
|
|
15
|
+
/** Content render prop, called for each item */
|
|
16
|
+
content?: (item: TimelineItem) => ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export declare function Timeline({ items, title, description, className, content }: TimelineProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useState } from "react";
|
|
4
|
+
import { cn } from "../../utils.js";
|
|
5
|
+
import { useIsomorphicLayoutEffect } from "../../internals/dom/ssr.js";
|
|
6
|
+
import { rafThrottle } from "../../internals/motion/raf.js";
|
|
7
|
+
function writeProgressLine(line, progress, height) {
|
|
8
|
+
if (!line) return;
|
|
9
|
+
line.style.height = `${progress * height}px`;
|
|
10
|
+
line.style.opacity = String(Math.min(progress / 0.1, 1));
|
|
11
|
+
}
|
|
12
|
+
function Timeline({ items = [], title, description, className, content }) {
|
|
13
|
+
const timelineRef = useRef(null);
|
|
14
|
+
const progressRef = useRef(null);
|
|
15
|
+
const heightRef = useRef(0);
|
|
16
|
+
const progressValueRef = useRef(0);
|
|
17
|
+
const [timelineHeight, setTimelineHeight] = useState(0);
|
|
18
|
+
useIsomorphicLayoutEffect(() => {
|
|
19
|
+
function measure(el2) {
|
|
20
|
+
heightRef.current = el2.getBoundingClientRect().height;
|
|
21
|
+
setTimelineHeight(heightRef.current);
|
|
22
|
+
}
|
|
23
|
+
function updateProgress() {
|
|
24
|
+
const el2 = timelineRef.current;
|
|
25
|
+
if (!el2) return;
|
|
26
|
+
const rect = el2.getBoundingClientRect();
|
|
27
|
+
const viewportHeight = window.innerHeight;
|
|
28
|
+
const startOffset = viewportHeight * 0.1;
|
|
29
|
+
const endOffset = viewportHeight * 0.5;
|
|
30
|
+
const start = rect.top - startOffset;
|
|
31
|
+
const end = rect.bottom - endOffset;
|
|
32
|
+
const total = end - start;
|
|
33
|
+
if (total <= 0) {
|
|
34
|
+
progressValueRef.current = 0;
|
|
35
|
+
} else {
|
|
36
|
+
const progress = -start / total;
|
|
37
|
+
progressValueRef.current = Math.max(0, Math.min(1, progress));
|
|
38
|
+
}
|
|
39
|
+
writeProgressLine(progressRef.current, progressValueRef.current, heightRef.current);
|
|
40
|
+
}
|
|
41
|
+
const el = timelineRef.current;
|
|
42
|
+
if (el) {
|
|
43
|
+
measure(el);
|
|
44
|
+
}
|
|
45
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
46
|
+
if (timelineRef.current) {
|
|
47
|
+
measure(timelineRef.current);
|
|
48
|
+
writeProgressLine(progressRef.current, progressValueRef.current, heightRef.current);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
if (el) {
|
|
52
|
+
resizeObserver.observe(el);
|
|
53
|
+
}
|
|
54
|
+
const onScroll = rafThrottle(updateProgress);
|
|
55
|
+
window.addEventListener("scroll", onScroll, { passive: true });
|
|
56
|
+
updateProgress();
|
|
57
|
+
return () => {
|
|
58
|
+
onScroll.cancel();
|
|
59
|
+
resizeObserver.disconnect();
|
|
60
|
+
window.removeEventListener("scroll", onScroll);
|
|
61
|
+
};
|
|
62
|
+
}, []);
|
|
63
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("w-full font-sans md:px-10", className), children: [
|
|
64
|
+
(title || description) && /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-7xl px-4 py-20 md:px-8 lg:px-10", children: [
|
|
65
|
+
title && /* @__PURE__ */ jsx("h2", { className: "text-foreground mb-4 max-w-4xl text-lg md:text-4xl", children: title }),
|
|
66
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground max-w-sm text-sm md:text-base", children: description })
|
|
67
|
+
] }),
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { ref: timelineRef, className: "relative z-0 mx-auto max-w-7xl pb-20", children: [
|
|
69
|
+
items.map((item, index) => /* @__PURE__ */ jsxs("div", { className: "flex justify-start pt-10 md:gap-10 md:pt-40", children: [
|
|
70
|
+
/* @__PURE__ */ jsxs("div", { className: "sticky top-40 z-40 flex max-w-xs flex-col items-center self-start md:w-full md:flex-row lg:max-w-sm", children: [
|
|
71
|
+
/* @__PURE__ */ jsx("div", { className: "bg-background absolute left-3 flex size-10 items-center justify-center rounded-full md:left-3", children: /* @__PURE__ */ jsx("div", { className: "size-4 rounded-full border border-neutral-300 bg-neutral-200 p-2 dark:border-neutral-700 dark:bg-neutral-800" }) }),
|
|
72
|
+
/* @__PURE__ */ jsx("h3", { className: "hidden text-xl font-bold text-neutral-500 md:block md:pl-20 md:text-5xl dark:text-neutral-500", children: item.label })
|
|
73
|
+
] }),
|
|
74
|
+
/* @__PURE__ */ jsx("div", { className: "w-full pr-4 pl-20 md:pl-4", children: content ? content(item) : null })
|
|
75
|
+
] }, `${item.id}-${index}`)),
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
"div",
|
|
78
|
+
{
|
|
79
|
+
style: { height: `${timelineHeight}px` },
|
|
80
|
+
className: "absolute top-0 left-8 w-[2px] overflow-hidden bg-[linear-gradient(to_bottom,var(--tw-gradient-stops))] from-transparent from-0% via-neutral-200 to-transparent to-[99%] [mask-image:linear-gradient(to_bottom,transparent_0%,black_10%,black_90%,transparent_100%)] md:left-8 dark:via-neutral-700",
|
|
81
|
+
children: /* @__PURE__ */ jsx(
|
|
82
|
+
"div",
|
|
83
|
+
{
|
|
84
|
+
ref: progressRef,
|
|
85
|
+
style: { height: "0px", opacity: 0 },
|
|
86
|
+
className: "absolute inset-x-0 top-0 w-[2px] rounded-full bg-gradient-to-t from-purple-500 from-0% via-blue-500 via-10% to-transparent"
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
] })
|
|
92
|
+
] });
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
Timeline
|
|
96
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ToastItem } from "./store.js";
|
|
2
|
+
export interface ToastProps {
|
|
3
|
+
/** The toast to render. */
|
|
4
|
+
item: ToastItem;
|
|
5
|
+
/** Additional classes for the toast panel. */
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* One toast panel. Renders what the store hands it and wires the pause /
|
|
10
|
+
* resume protocol; the entrance and exit animation belong to `<Toaster>`,
|
|
11
|
+
* whose per-item presence clock attaches to this component's forwarded ref —
|
|
12
|
+
* the React spelling of the source's two separate `in:`/`out:` directives on
|
|
13
|
+
* this same root element (a toast has no `open` boolean: its existence IS its
|
|
14
|
+
* open state, so the mount clock has to live with whatever renders the list).
|
|
15
|
+
*/
|
|
16
|
+
export declare const Toast: import("react").ForwardRefExoticComponent<ToastProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef, useRef } from "react";
|
|
4
|
+
import { cn } from "../../utils.js";
|
|
5
|
+
import { dismissToast, pauseToast, resumeToast } from "./store.js";
|
|
6
|
+
/* empty css */
|
|
7
|
+
const VARIANT_ICON_CLASSES = {
|
|
8
|
+
success: "ft-toast-icon--success",
|
|
9
|
+
error: "ft-toast-icon--error",
|
|
10
|
+
info: "ft-toast-icon--info",
|
|
11
|
+
loading: ""
|
|
12
|
+
};
|
|
13
|
+
const Toast = forwardRef(function Toast2({ item, className }, forwardedRef) {
|
|
14
|
+
const hovering = useRef(false);
|
|
15
|
+
const focusedWithin = useRef(false);
|
|
16
|
+
function syncTimer() {
|
|
17
|
+
if (hovering.current || focusedWithin.current) {
|
|
18
|
+
pauseToast(item.id);
|
|
19
|
+
} else {
|
|
20
|
+
resumeToast(item.id);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function handlePointerEnter() {
|
|
24
|
+
hovering.current = true;
|
|
25
|
+
syncTimer();
|
|
26
|
+
}
|
|
27
|
+
function handlePointerLeave() {
|
|
28
|
+
hovering.current = false;
|
|
29
|
+
syncTimer();
|
|
30
|
+
}
|
|
31
|
+
function handleFocusIn() {
|
|
32
|
+
focusedWithin.current = true;
|
|
33
|
+
syncTimer();
|
|
34
|
+
}
|
|
35
|
+
function handleFocusOut() {
|
|
36
|
+
focusedWithin.current = false;
|
|
37
|
+
syncTimer();
|
|
38
|
+
}
|
|
39
|
+
function handleAction() {
|
|
40
|
+
item.action?.onClick();
|
|
41
|
+
}
|
|
42
|
+
function handleDismiss() {
|
|
43
|
+
dismissToast(item.id);
|
|
44
|
+
}
|
|
45
|
+
const classes = cn(
|
|
46
|
+
"ft-toast bg-popover text-popover-foreground border-border flex w-[300px] items-center gap-3 rounded-xl border p-3 shadow-[0_12px_32px_rgba(0,0,0,.5)]",
|
|
47
|
+
item.variant === "error" && "border-destructive/30",
|
|
48
|
+
className
|
|
49
|
+
);
|
|
50
|
+
return /* @__PURE__ */ jsxs(
|
|
51
|
+
"div",
|
|
52
|
+
{
|
|
53
|
+
ref: forwardedRef,
|
|
54
|
+
className: classes,
|
|
55
|
+
"data-state": "open",
|
|
56
|
+
"data-variant": item.variant,
|
|
57
|
+
onPointerEnter: handlePointerEnter,
|
|
58
|
+
onPointerLeave: handlePointerLeave,
|
|
59
|
+
onFocus: handleFocusIn,
|
|
60
|
+
onBlur: handleFocusOut,
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
"span",
|
|
64
|
+
{
|
|
65
|
+
className: cn("ft-toast-icon flex-none text-[14px]", VARIANT_ICON_CLASSES[item.variant]),
|
|
66
|
+
"aria-hidden": "true",
|
|
67
|
+
children: item.variant === "loading" ? /* @__PURE__ */ jsx("span", { className: "ft-toast-spinner" }) : item.variant === "success" ? "✓" : item.variant === "error" ? "✕" : "ℹ"
|
|
68
|
+
}
|
|
69
|
+
),
|
|
70
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col gap-0.5", children: [
|
|
71
|
+
/* @__PURE__ */ jsx("span", { className: "text-[13px] font-medium", children: item.title }),
|
|
72
|
+
item.description ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-[11px]", children: item.description }) : null
|
|
73
|
+
] }),
|
|
74
|
+
item.action ? /* @__PURE__ */ jsx(
|
|
75
|
+
"button",
|
|
76
|
+
{
|
|
77
|
+
type: "button",
|
|
78
|
+
className: "ft-toast-action shrink-0 text-[12px] font-medium hover:underline",
|
|
79
|
+
onClick: handleAction,
|
|
80
|
+
children: item.action.label
|
|
81
|
+
}
|
|
82
|
+
) : null,
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
"button",
|
|
85
|
+
{
|
|
86
|
+
type: "button",
|
|
87
|
+
className: "text-muted-foreground hover:text-foreground shrink-0 text-[12px] transition-colors",
|
|
88
|
+
"aria-label": "Dismiss",
|
|
89
|
+
onClick: handleDismiss,
|
|
90
|
+
children: "✕"
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
});
|
|
97
|
+
export {
|
|
98
|
+
Toast
|
|
99
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type ToasterPosition = "top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right";
|
|
2
|
+
export interface ToasterProps {
|
|
3
|
+
/** Corner (or edge-center) the stack anchors to. Defaults to `"bottom-right"`. */
|
|
4
|
+
position?: ToasterPosition;
|
|
5
|
+
/** Additional classes for the viewport that stacks the toasts. */
|
|
6
|
+
className?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Plays the `success`/`error` cue through the sound controller when a
|
|
9
|
+
* toast of that variant appears. Off by default; only audible once the
|
|
10
|
+
* user has enabled sound.
|
|
11
|
+
*/
|
|
12
|
+
sound?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The viewport: portals to `<body>`, renders the store's stack in order, and
|
|
16
|
+
* owns the two live regions plus the timer hand-off protocol (`rearm` on
|
|
17
|
+
* mount, `clear` on unmount).
|
|
18
|
+
*/
|
|
19
|
+
export declare const Toaster: import("react").ForwardRefExoticComponent<ToasterProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef, useSyncExternalStore, useRef, useReducer, useCallback, useEffect, useState } from "react";
|
|
4
|
+
import { cn } from "../../utils.js";
|
|
5
|
+
import { Portal } from "../../internals/Portal.js";
|
|
6
|
+
import { prefersReducedMotion } from "../../internals/motion/anchored.js";
|
|
7
|
+
import { usePresence } from "../../internals/motion/presence.js";
|
|
8
|
+
import { JS_EASINGS, DURATIONS } from "../../internals/motion/tokens.js";
|
|
9
|
+
import { preset } from "../../internals/motion/transitions.js";
|
|
10
|
+
import { useSoundCue } from "../../sound/use-sound.js";
|
|
11
|
+
import { toastStore, rearmToastTimers, clearAllToastTimers } from "./store.js";
|
|
12
|
+
import { Toast } from "./Toast.js";
|
|
13
|
+
const soundedIds = /* @__PURE__ */ new Set();
|
|
14
|
+
const POSITION_CLASSES = {
|
|
15
|
+
"top-left": "top-4 left-4 items-start",
|
|
16
|
+
"top-center": "top-4 left-1/2 -translate-x-1/2 items-center",
|
|
17
|
+
"top-right": "top-4 right-4 items-end",
|
|
18
|
+
"bottom-left": "bottom-4 left-4 items-start",
|
|
19
|
+
"bottom-center": "bottom-4 left-1/2 -translate-x-1/2 items-center",
|
|
20
|
+
"bottom-right": "bottom-4 right-4 items-end"
|
|
21
|
+
};
|
|
22
|
+
const slide = preset("fade-up");
|
|
23
|
+
function ToastSlot({ item, present, appear, onExited }) {
|
|
24
|
+
const presence = usePresence(present, {
|
|
25
|
+
appear,
|
|
26
|
+
onExitEnd: () => onExited(item.id)
|
|
27
|
+
});
|
|
28
|
+
const toastRef = presence.register(
|
|
29
|
+
slide,
|
|
30
|
+
(entering) => entering ? {
|
|
31
|
+
duration: prefersReducedMotion() ? 0 : DURATIONS.base,
|
|
32
|
+
distance: 8,
|
|
33
|
+
easing: JS_EASINGS.out
|
|
34
|
+
} : {
|
|
35
|
+
duration: prefersReducedMotion() ? 0 : DURATIONS.exit,
|
|
36
|
+
distance: 4,
|
|
37
|
+
easing: JS_EASINGS.in
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
const mounted = presence.mounted;
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!present && !mounted) onExited(item.id);
|
|
43
|
+
}, []);
|
|
44
|
+
if (!presence.mounted) return null;
|
|
45
|
+
return /* @__PURE__ */ jsx("div", { className: "pointer-events-auto", children: /* @__PURE__ */ jsx(Toast, { item, ref: toastRef }) });
|
|
46
|
+
}
|
|
47
|
+
function ToastSlots({ items, storeIds, onExited }) {
|
|
48
|
+
const initialIdsRef = useRef(null);
|
|
49
|
+
if (initialIdsRef.current === null) {
|
|
50
|
+
initialIdsRef.current = new Set(items.map((item) => item.id));
|
|
51
|
+
}
|
|
52
|
+
const initialIds = initialIdsRef.current;
|
|
53
|
+
return /* @__PURE__ */ jsx(Fragment, { children: items.map((item) => /* @__PURE__ */ jsx(
|
|
54
|
+
ToastSlot,
|
|
55
|
+
{
|
|
56
|
+
item,
|
|
57
|
+
present: storeIds.has(item.id),
|
|
58
|
+
appear: !initialIds.has(item.id),
|
|
59
|
+
onExited
|
|
60
|
+
},
|
|
61
|
+
item.id
|
|
62
|
+
)) });
|
|
63
|
+
}
|
|
64
|
+
function announcementText(item) {
|
|
65
|
+
return item.description ? `${item.title}. ${item.description}` : item.title;
|
|
66
|
+
}
|
|
67
|
+
const bumpReducer = (n) => n + 1;
|
|
68
|
+
const Toaster = forwardRef(function Toaster2({ position = "bottom-right", className, sound = false }, forwardedRef) {
|
|
69
|
+
const playCue = useSoundCue(sound);
|
|
70
|
+
const storeItems = useSyncExternalStore(
|
|
71
|
+
toastStore.subscribe,
|
|
72
|
+
() => toastStore.items,
|
|
73
|
+
// `toast()` is a no-op outside the browser, so the server snapshot is
|
|
74
|
+
// the never-reassigned initial empty stack — referentially stable.
|
|
75
|
+
() => toastStore.items
|
|
76
|
+
);
|
|
77
|
+
const renderedRef = useRef([]);
|
|
78
|
+
const exitedRef = useRef(/* @__PURE__ */ new Set());
|
|
79
|
+
const [, bumpExited] = useReducer(bumpReducer, 0);
|
|
80
|
+
const storeIds = new Set(storeItems.map((item) => item.id));
|
|
81
|
+
const prev = renderedRef.current;
|
|
82
|
+
const prevIds = new Set(prev.map((item) => item.id));
|
|
83
|
+
const rendered = [];
|
|
84
|
+
for (const item of prev) {
|
|
85
|
+
if (storeIds.has(item.id) || !exitedRef.current.has(item.id)) rendered.push(item);
|
|
86
|
+
}
|
|
87
|
+
for (const item of storeItems) {
|
|
88
|
+
if (!prevIds.has(item.id)) rendered.push(item);
|
|
89
|
+
}
|
|
90
|
+
renderedRef.current = rendered;
|
|
91
|
+
const handleExited = useCallback((id) => {
|
|
92
|
+
exitedRef.current.add(id);
|
|
93
|
+
bumpExited();
|
|
94
|
+
}, []);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
const live = new Set(renderedRef.current.map((item) => item.id));
|
|
97
|
+
for (const id of [...exitedRef.current]) {
|
|
98
|
+
if (!live.has(id)) exitedRef.current.delete(id);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
const [politeAnnouncement, setPoliteAnnouncement] = useState("");
|
|
102
|
+
const [assertiveAnnouncement, setAssertiveAnnouncement] = useState("");
|
|
103
|
+
const announcedIdsRef = useRef(/* @__PURE__ */ new Set());
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
const current = storeItems;
|
|
106
|
+
const currentIds = new Set(current.map((item) => item.id));
|
|
107
|
+
for (const id of soundedIds) {
|
|
108
|
+
if (!currentIds.has(id)) soundedIds.delete(id);
|
|
109
|
+
}
|
|
110
|
+
for (const item of current) {
|
|
111
|
+
if (item.variant === "success" || item.variant === "error") {
|
|
112
|
+
if (!soundedIds.has(item.id)) playCue(item.variant);
|
|
113
|
+
soundedIds.add(item.id);
|
|
114
|
+
}
|
|
115
|
+
if (announcedIdsRef.current.has(item.id)) continue;
|
|
116
|
+
if (item.variant === "error") {
|
|
117
|
+
setAssertiveAnnouncement(announcementText(item));
|
|
118
|
+
} else {
|
|
119
|
+
setPoliteAnnouncement(announcementText(item));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
announcedIdsRef.current = new Set(current.map((item) => item.id));
|
|
123
|
+
}, [storeItems, playCue]);
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
rearmToastTimers();
|
|
126
|
+
return () => {
|
|
127
|
+
clearAllToastTimers();
|
|
128
|
+
};
|
|
129
|
+
}, []);
|
|
130
|
+
return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs("div", { ref: forwardedRef, className: cn("ft-toaster contents", className), children: [
|
|
131
|
+
/* @__PURE__ */ jsx("div", { "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: politeAnnouncement }),
|
|
132
|
+
/* @__PURE__ */ jsx("div", { "aria-live": "assertive", "aria-atomic": "true", className: "sr-only", children: assertiveAnnouncement }),
|
|
133
|
+
/* @__PURE__ */ jsx(
|
|
134
|
+
"div",
|
|
135
|
+
{
|
|
136
|
+
className: cn(
|
|
137
|
+
"ft-toaster-viewport pointer-events-none fixed z-50 flex flex-col gap-2",
|
|
138
|
+
POSITION_CLASSES[position]
|
|
139
|
+
),
|
|
140
|
+
children: /* @__PURE__ */ jsx(ToastSlots, { items: rendered, storeIds, onExited: handleExited })
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
] }) });
|
|
144
|
+
});
|
|
145
|
+
export {
|
|
146
|
+
Toaster
|
|
147
|
+
};
|