@studio-helga/once-ui-core 1.7.8
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/README.md +54 -0
- package/dist/README.md +54 -0
- package/dist/components/Accordion.d.ts +25 -0
- package/dist/components/Accordion.d.ts.map +1 -0
- package/dist/components/Accordion.js +75 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/Accordion.module.scss +5 -0
- package/dist/components/AccordionGroup.d.ts +16 -0
- package/dist/components/AccordionGroup.d.ts.map +1 -0
- package/dist/components/AccordionGroup.js +27 -0
- package/dist/components/AccordionGroup.js.map +1 -0
- package/dist/components/Animation.d.ts +34 -0
- package/dist/components/Animation.d.ts.map +1 -0
- package/dist/components/Animation.js +230 -0
- package/dist/components/Animation.js.map +1 -0
- package/dist/components/Arrow.d.ts +11 -0
- package/dist/components/Arrow.d.ts.map +1 -0
- package/dist/components/Arrow.js +33 -0
- package/dist/components/Arrow.js.map +1 -0
- package/dist/components/Arrow.module.scss +39 -0
- package/dist/components/ArrowNavigationContext.d.ts +33 -0
- package/dist/components/ArrowNavigationContext.d.ts.map +1 -0
- package/dist/components/ArrowNavigationContext.js +60 -0
- package/dist/components/ArrowNavigationContext.js.map +1 -0
- package/dist/components/AutoScroll.d.ts +14 -0
- package/dist/components/AutoScroll.d.ts.map +1 -0
- package/dist/components/AutoScroll.js +178 -0
- package/dist/components/AutoScroll.js.map +1 -0
- package/dist/components/AutoScroll.module.scss +9 -0
- package/dist/components/Avatar.d.ts +21 -0
- package/dist/components/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar.js +54 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Avatar.module.scss +56 -0
- package/dist/components/AvatarGroup.d.ts +14 -0
- package/dist/components/AvatarGroup.d.ts.map +1 -0
- package/dist/components/AvatarGroup.js +20 -0
- package/dist/components/AvatarGroup.js.map +1 -0
- package/dist/components/AvatarGroup.module.scss +11 -0
- package/dist/components/Background.d.ts +49 -0
- package/dist/components/Background.d.ts.map +1 -0
- package/dist/components/Background.js +72 -0
- package/dist/components/Background.js.map +1 -0
- package/dist/components/Background.module.scss +23 -0
- package/dist/components/Badge.d.ts +17 -0
- package/dist/components/Badge.d.ts.map +1 -0
- package/dist/components/Badge.js +21 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Badge.module.scss +67 -0
- package/dist/components/Banner.d.ts +6 -0
- package/dist/components/Banner.d.ts.map +1 -0
- package/dist/components/Banner.js +7 -0
- package/dist/components/Banner.js.map +1 -0
- package/dist/components/BlobFx.d.ts +8 -0
- package/dist/components/BlobFx.d.ts.map +1 -0
- package/dist/components/BlobFx.js +82 -0
- package/dist/components/BlobFx.js.map +1 -0
- package/dist/components/BlockQuote.d.ts +21 -0
- package/dist/components/BlockQuote.d.ts.map +1 -0
- package/dist/components/BlockQuote.js +10 -0
- package/dist/components/BlockQuote.js.map +1 -0
- package/dist/components/Button.d.ts +27 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +25 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Button.module.scss +154 -0
- package/dist/components/Card.d.ts +13 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +13 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Card.module.scss +7 -0
- package/dist/components/Carousel.d.ts +32 -0
- package/dist/components/Carousel.d.ts.map +1 -0
- package/dist/components/Carousel.js +156 -0
- package/dist/components/Carousel.js.map +1 -0
- package/dist/components/Carousel.module.scss +48 -0
- package/dist/components/CelebrationFx.d.ts +17 -0
- package/dist/components/CelebrationFx.d.ts.map +1 -0
- package/dist/components/CelebrationFx.js +314 -0
- package/dist/components/CelebrationFx.js.map +1 -0
- package/dist/components/Checkbox.d.ts +11 -0
- package/dist/components/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox.js +56 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/Chip.d.ts +17 -0
- package/dist/components/Chip.d.ts.map +1 -0
- package/dist/components/Chip.js +43 -0
- package/dist/components/Chip.js.map +1 -0
- package/dist/components/Chip.module.scss +39 -0
- package/dist/components/ClientFlex.d.ts +13 -0
- package/dist/components/ClientFlex.d.ts.map +1 -0
- package/dist/components/ClientFlex.js +110 -0
- package/dist/components/ClientFlex.js.map +1 -0
- package/dist/components/ClientGrid.d.ts +13 -0
- package/dist/components/ClientGrid.d.ts.map +1 -0
- package/dist/components/ClientGrid.js +110 -0
- package/dist/components/ClientGrid.js.map +1 -0
- package/dist/components/ColorInput.d.ts +11 -0
- package/dist/components/ColorInput.d.ts.map +1 -0
- package/dist/components/ColorInput.js +78 -0
- package/dist/components/ColorInput.js.map +1 -0
- package/dist/components/Column.d.ts +7 -0
- package/dist/components/Column.d.ts.map +1 -0
- package/dist/components/Column.js +10 -0
- package/dist/components/Column.js.map +1 -0
- package/dist/components/CompareImage.d.ts +16 -0
- package/dist/components/CompareImage.d.ts.map +1 -0
- package/dist/components/CompareImage.js +58 -0
- package/dist/components/CompareImage.js.map +1 -0
- package/dist/components/CompareImage.module.scss +14 -0
- package/dist/components/ContextMenu.d.ts +22 -0
- package/dist/components/ContextMenu.d.ts.map +1 -0
- package/dist/components/ContextMenu.js +224 -0
- package/dist/components/ContextMenu.js.map +1 -0
- package/dist/components/ContextMenu.module.scss +15 -0
- package/dist/components/CountFx.d.ts +15 -0
- package/dist/components/CountFx.d.ts.map +1 -0
- package/dist/components/CountFx.js +203 -0
- package/dist/components/CountFx.js.map +1 -0
- package/dist/components/CountdownFx.d.ts +11 -0
- package/dist/components/CountdownFx.d.ts.map +1 -0
- package/dist/components/CountdownFx.js +49 -0
- package/dist/components/CountdownFx.js.map +1 -0
- package/dist/components/Cursor.d.ts +8 -0
- package/dist/components/Cursor.d.ts.map +1 -0
- package/dist/components/Cursor.js +79 -0
- package/dist/components/Cursor.js.map +1 -0
- package/dist/components/CursorCard.d.ts +13 -0
- package/dist/components/CursorCard.d.ts.map +1 -0
- package/dist/components/CursorCard.js +63 -0
- package/dist/components/CursorCard.js.map +1 -0
- package/dist/components/CursorCard.module.scss +12 -0
- package/dist/components/DateInput.d.ts +18 -0
- package/dist/components/DateInput.d.ts.map +1 -0
- package/dist/components/DateInput.js +43 -0
- package/dist/components/DateInput.js.map +1 -0
- package/dist/components/DatePicker.d.ts +33 -0
- package/dist/components/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker.js +487 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/DatePicker.module.scss +194 -0
- package/dist/components/DateRangeInput.d.ts +15 -0
- package/dist/components/DateRangeInput.d.ts.map +1 -0
- package/dist/components/DateRangeInput.js +45 -0
- package/dist/components/DateRangeInput.js.map +1 -0
- package/dist/components/DateRangePicker.d.ts +17 -0
- package/dist/components/DateRangePicker.d.ts.map +1 -0
- package/dist/components/DateRangePicker.js +78 -0
- package/dist/components/DateRangePicker.js.map +1 -0
- package/dist/components/Dialog.d.ts +21 -0
- package/dist/components/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog.js +230 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/Dialog.module.scss +33 -0
- package/dist/components/Dropdown.d.ts +13 -0
- package/dist/components/Dropdown.d.ts.map +1 -0
- package/dist/components/Dropdown.js +21 -0
- package/dist/components/Dropdown.js.map +1 -0
- package/dist/components/DropdownWrapper.d.ts +29 -0
- package/dist/components/DropdownWrapper.d.ts.map +1 -0
- package/dist/components/DropdownWrapper.js +505 -0
- package/dist/components/DropdownWrapper.js.map +1 -0
- package/dist/components/DropdownWrapper.module.scss +15 -0
- package/dist/components/ElementType.d.ts +14 -0
- package/dist/components/ElementType.d.ts.map +1 -0
- package/dist/components/ElementType.js +21 -0
- package/dist/components/ElementType.js.map +1 -0
- package/dist/components/EmojiPicker.d.ts +16 -0
- package/dist/components/EmojiPicker.d.ts.map +1 -0
- package/dist/components/EmojiPicker.js +178 -0
- package/dist/components/EmojiPicker.js.map +1 -0
- package/dist/components/EmojiPicker.module.scss +14 -0
- package/dist/components/EmojiPickerDropdown.d.ts +11 -0
- package/dist/components/EmojiPickerDropdown.d.ts.map +1 -0
- package/dist/components/EmojiPickerDropdown.js +14 -0
- package/dist/components/EmojiPickerDropdown.js.map +1 -0
- package/dist/components/Fade.d.ts +19 -0
- package/dist/components/Fade.d.ts.map +1 -0
- package/dist/components/Fade.js +43 -0
- package/dist/components/Fade.js.map +1 -0
- package/dist/components/Fade.module.scss +6 -0
- package/dist/components/FadingLettersFx.d.ts +15 -0
- package/dist/components/FadingLettersFx.d.ts.map +1 -0
- package/dist/components/FadingLettersFx.js +27 -0
- package/dist/components/FadingLettersFx.js.map +1 -0
- package/dist/components/FadingLettersFx.module.scss +71 -0
- package/dist/components/Feedback.d.ts +16 -0
- package/dist/components/Feedback.d.ts.map +1 -0
- package/dist/components/Feedback.js +16 -0
- package/dist/components/Feedback.js.map +1 -0
- package/dist/components/Flex.d.ts +11 -0
- package/dist/components/Flex.d.ts.map +1 -0
- package/dist/components/Flex.js +31 -0
- package/dist/components/Flex.js.map +1 -0
- package/dist/components/FlipFx.d.ts +17 -0
- package/dist/components/FlipFx.d.ts.map +1 -0
- package/dist/components/FlipFx.js +76 -0
- package/dist/components/FlipFx.js.map +1 -0
- package/dist/components/FocusTrap.d.ts +16 -0
- package/dist/components/FocusTrap.d.ts.map +1 -0
- package/dist/components/FocusTrap.js +87 -0
- package/dist/components/FocusTrap.js.map +1 -0
- package/dist/components/GlitchFx.d.ts +12 -0
- package/dist/components/GlitchFx.d.ts.map +1 -0
- package/dist/components/GlitchFx.js +41 -0
- package/dist/components/GlitchFx.js.map +1 -0
- package/dist/components/GlitchFx.module.scss +92 -0
- package/dist/components/Grid.d.ts +11 -0
- package/dist/components/Grid.d.ts.map +1 -0
- package/dist/components/Grid.js +32 -0
- package/dist/components/Grid.js.map +1 -0
- package/dist/components/Heading.d.ts +9 -0
- package/dist/components/Heading.d.ts.map +1 -0
- package/dist/components/Heading.js +50 -0
- package/dist/components/Heading.js.map +1 -0
- package/dist/components/HoloFx.d.ts +32 -0
- package/dist/components/HoloFx.d.ts.map +1 -0
- package/dist/components/HoloFx.js +90 -0
- package/dist/components/HoloFx.js.map +1 -0
- package/dist/components/HoloFx.module.scss +32 -0
- package/dist/components/Hover.d.ts +14 -0
- package/dist/components/Hover.d.ts.map +1 -0
- package/dist/components/Hover.js +99 -0
- package/dist/components/Hover.js.map +1 -0
- package/dist/components/Hover.module.scss +12 -0
- package/dist/components/HoverCard.d.ts +5 -0
- package/dist/components/HoverCard.d.ts.map +1 -0
- package/dist/components/HoverCard.js +10 -0
- package/dist/components/HoverCard.js.map +1 -0
- package/dist/components/HoverCard.module.scss +12 -0
- package/dist/components/Icon.d.ts +18 -0
- package/dist/components/Icon.d.ts.map +1 -0
- package/dist/components/Icon.js +35 -0
- package/dist/components/Icon.js.map +1 -0
- package/dist/components/Icon.module.scss +19 -0
- package/dist/components/IconButton.d.ts +23 -0
- package/dist/components/IconButton.d.ts.map +1 -0
- package/dist/components/IconButton.js +23 -0
- package/dist/components/IconButton.js.map +1 -0
- package/dist/components/IconButton.module.scss +34 -0
- package/dist/components/InfiniteScroll.d.ts +16 -0
- package/dist/components/InfiniteScroll.d.ts.map +1 -0
- package/dist/components/InfiniteScroll.js +52 -0
- package/dist/components/InfiniteScroll.js.map +1 -0
- package/dist/components/InlineCode.d.ts +10 -0
- package/dist/components/InlineCode.d.ts.map +1 -0
- package/dist/components/InlineCode.js +12 -0
- package/dist/components/InlineCode.js.map +1 -0
- package/dist/components/InlineCode.module.scss +5 -0
- package/dist/components/Input.d.ts +24 -0
- package/dist/components/Input.d.ts.map +1 -0
- package/dist/components/Input.js +82 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/Input.module.scss +196 -0
- package/dist/components/InteractiveDetails.d.ts +15 -0
- package/dist/components/InteractiveDetails.d.ts.map +1 -0
- package/dist/components/InteractiveDetails.js +10 -0
- package/dist/components/InteractiveDetails.js.map +1 -0
- package/dist/components/Kbd.d.ts +12 -0
- package/dist/components/Kbd.d.ts.map +1 -0
- package/dist/components/Kbd.js +7 -0
- package/dist/components/Kbd.js.map +1 -0
- package/dist/components/LetterFx.d.ts +13 -0
- package/dist/components/LetterFx.d.ts.map +1 -0
- package/dist/components/LetterFx.js +80 -0
- package/dist/components/LetterFx.js.map +1 -0
- package/dist/components/Line.d.ts +9 -0
- package/dist/components/Line.d.ts.map +1 -0
- package/dist/components/Line.js +10 -0
- package/dist/components/Line.js.map +1 -0
- package/dist/components/List.d.ts +11 -0
- package/dist/components/List.d.ts.map +1 -0
- package/dist/components/List.js +13 -0
- package/dist/components/List.js.map +1 -0
- package/dist/components/List.module.scss +5 -0
- package/dist/components/ListItem.d.ts +10 -0
- package/dist/components/ListItem.d.ts.map +1 -0
- package/dist/components/ListItem.js +13 -0
- package/dist/components/ListItem.js.map +1 -0
- package/dist/components/Logo.d.ts +18 -0
- package/dist/components/Logo.d.ts.map +1 -0
- package/dist/components/Logo.js +99 -0
- package/dist/components/Logo.js.map +1 -0
- package/dist/components/LogoCloud.d.ts +14 -0
- package/dist/components/LogoCloud.d.ts.map +1 -0
- package/dist/components/LogoCloud.js +38 -0
- package/dist/components/LogoCloud.js.map +1 -0
- package/dist/components/LogoCloud.module.scss +42 -0
- package/dist/components/Mask.d.ts +15 -0
- package/dist/components/Mask.d.ts.map +1 -0
- package/dist/components/Mask.js +107 -0
- package/dist/components/Mask.js.map +1 -0
- package/dist/components/Mask.module.scss +8 -0
- package/dist/components/MasonryGrid.d.ts +22 -0
- package/dist/components/MasonryGrid.d.ts.map +1 -0
- package/dist/components/MasonryGrid.js +53 -0
- package/dist/components/MasonryGrid.js.map +1 -0
- package/dist/components/MasonryGrid.module.scss +199 -0
- package/dist/components/MatrixFx.d.ts +27 -0
- package/dist/components/MatrixFx.d.ts.map +1 -0
- package/dist/components/MatrixFx.js +799 -0
- package/dist/components/MatrixFx.js.map +1 -0
- package/dist/components/Media.d.ts +26 -0
- package/dist/components/Media.d.ts.map +1 -0
- package/dist/components/Media.js +112 -0
- package/dist/components/Media.js.map +1 -0
- package/dist/components/Modal.d.ts +11 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +72 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/NavIcon.d.ts +11 -0
- package/dist/components/NavIcon.d.ts.map +1 -0
- package/dist/components/NavIcon.js +11 -0
- package/dist/components/NavIcon.js.map +1 -0
- package/dist/components/NavIcon.module.scss +25 -0
- package/dist/components/NumberInput.d.ts +13 -0
- package/dist/components/NumberInput.d.ts.map +1 -0
- package/dist/components/NumberInput.js +44 -0
- package/dist/components/NumberInput.js.map +1 -0
- package/dist/components/NumberInput.module.scss +18 -0
- package/dist/components/OTPInput.d.ts +13 -0
- package/dist/components/OTPInput.d.ts.map +1 -0
- package/dist/components/OTPInput.js +71 -0
- package/dist/components/OTPInput.js.map +1 -0
- package/dist/components/OTPInput.module.scss +26 -0
- package/dist/components/OgCard.d.ts +34 -0
- package/dist/components/OgCard.d.ts.map +1 -0
- package/dist/components/OgCard.js +102 -0
- package/dist/components/OgCard.js.map +1 -0
- package/dist/components/Option.d.ts +21 -0
- package/dist/components/Option.d.ts.map +1 -0
- package/dist/components/Option.js +93 -0
- package/dist/components/Option.js.map +1 -0
- package/dist/components/Option.module.scss +47 -0
- package/dist/components/Particle.d.ts +21 -0
- package/dist/components/Particle.d.ts.map +1 -0
- package/dist/components/Particle.js +140 -0
- package/dist/components/Particle.js.map +1 -0
- package/dist/components/PasswordInput.d.ts +4 -0
- package/dist/components/PasswordInput.d.ts.map +1 -0
- package/dist/components/PasswordInput.js +12 -0
- package/dist/components/PasswordInput.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +15 -0
- package/dist/components/ProgressBar.d.ts.map +1 -0
- package/dist/components/ProgressBar.js +12 -0
- package/dist/components/ProgressBar.js.map +1 -0
- package/dist/components/Pulse.d.ts +13 -0
- package/dist/components/Pulse.d.ts.map +1 -0
- package/dist/components/Pulse.js +11 -0
- package/dist/components/Pulse.js.map +1 -0
- package/dist/components/Pulse.module.scss +22 -0
- package/dist/components/RadioButton.d.ts +15 -0
- package/dist/components/RadioButton.d.ts.map +1 -0
- package/dist/components/RadioButton.js +45 -0
- package/dist/components/RadioButton.js.map +1 -0
- package/dist/components/RevealFx.d.ts +16 -0
- package/dist/components/RevealFx.d.ts.map +1 -0
- package/dist/components/RevealFx.js +83 -0
- package/dist/components/RevealFx.js.map +1 -0
- package/dist/components/RevealFx.module.scss +27 -0
- package/dist/components/Row.d.ts +7 -0
- package/dist/components/Row.d.ts.map +1 -0
- package/dist/components/Row.js +10 -0
- package/dist/components/Row.js.map +1 -0
- package/dist/components/ScrollContainer.d.ts +9 -0
- package/dist/components/ScrollContainer.d.ts.map +1 -0
- package/dist/components/ScrollContainer.js +67 -0
- package/dist/components/ScrollContainer.js.map +1 -0
- package/dist/components/ScrollLock.d.ts +8 -0
- package/dist/components/ScrollLock.d.ts.map +1 -0
- package/dist/components/ScrollLock.js +112 -0
- package/dist/components/ScrollLock.js.map +1 -0
- package/dist/components/ScrollToTop.d.ts +7 -0
- package/dist/components/ScrollToTop.d.ts.map +1 -0
- package/dist/components/ScrollToTop.js +24 -0
- package/dist/components/ScrollToTop.js.map +1 -0
- package/dist/components/ScrollToTop.module.scss +11 -0
- package/dist/components/Scroller.d.ts +14 -0
- package/dist/components/Scroller.d.ts.map +1 -0
- package/dist/components/Scroller.js +100 -0
- package/dist/components/Scroller.js.map +1 -0
- package/dist/components/Scroller.module.scss +20 -0
- package/dist/components/SegmentedControl.d.ts +18 -0
- package/dist/components/SegmentedControl.d.ts.map +1 -0
- package/dist/components/SegmentedControl.js +70 -0
- package/dist/components/SegmentedControl.js.map +1 -0
- package/dist/components/Select.d.ts +19 -0
- package/dist/components/Select.d.ts.map +1 -0
- package/dist/components/Select.js +170 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/ServerFlex.d.ts +12 -0
- package/dist/components/ServerFlex.d.ts.map +1 -0
- package/dist/components/ServerFlex.js +282 -0
- package/dist/components/ServerFlex.js.map +1 -0
- package/dist/components/ServerGrid.d.ts +13 -0
- package/dist/components/ServerGrid.d.ts.map +1 -0
- package/dist/components/ServerGrid.js +207 -0
- package/dist/components/ServerGrid.js.map +1 -0
- package/dist/components/SharedInteractiveStyles.module.scss +91 -0
- package/dist/components/ShineFx.d.ts +13 -0
- package/dist/components/ShineFx.d.ts.map +1 -0
- package/dist/components/ShineFx.js +19 -0
- package/dist/components/ShineFx.js.map +1 -0
- package/dist/components/ShineFx.module.scss +50 -0
- package/dist/components/Skeleton.d.ts +13 -0
- package/dist/components/Skeleton.d.ts.map +1 -0
- package/dist/components/Skeleton.js +12 -0
- package/dist/components/Skeleton.js.map +1 -0
- package/dist/components/Skeleton.module.scss +120 -0
- package/dist/components/Slider.d.ts +17 -0
- package/dist/components/Slider.d.ts.map +1 -0
- package/dist/components/Slider.js +29 -0
- package/dist/components/Slider.js.map +1 -0
- package/dist/components/Slider.module.scss +75 -0
- package/dist/components/SmartLink.d.ts +18 -0
- package/dist/components/SmartLink.d.ts.map +1 -0
- package/dist/components/SmartLink.js +36 -0
- package/dist/components/SmartLink.js.map +1 -0
- package/dist/components/Spinner.d.ts +11 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +11 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Spinner.module.scss +71 -0
- package/dist/components/SplitView.d.ts +16 -0
- package/dist/components/SplitView.d.ts.map +1 -0
- package/dist/components/SplitView.js +80 -0
- package/dist/components/SplitView.js.map +1 -0
- package/dist/components/SplitView.module.scss +18 -0
- package/dist/components/StatusIndicator.d.ts +12 -0
- package/dist/components/StatusIndicator.d.ts.map +1 -0
- package/dist/components/StatusIndicator.js +11 -0
- package/dist/components/StatusIndicator.js.map +1 -0
- package/dist/components/StatusIndicator.module.scss +72 -0
- package/dist/components/StyleOverlay.d.ts +10 -0
- package/dist/components/StyleOverlay.d.ts.map +1 -0
- package/dist/components/StyleOverlay.js +17 -0
- package/dist/components/StyleOverlay.js.map +1 -0
- package/dist/components/StyleOverlay.module.scss +18 -0
- package/dist/components/StylePanel.d.ts +8 -0
- package/dist/components/StylePanel.d.ts.map +1 -0
- package/dist/components/StylePanel.js +193 -0
- package/dist/components/StylePanel.js.map +1 -0
- package/dist/components/StylePanel.module.scss +127 -0
- package/dist/components/Swiper.d.ts +17 -0
- package/dist/components/Swiper.d.ts.map +1 -0
- package/dist/components/Swiper.js +170 -0
- package/dist/components/Swiper.js.map +1 -0
- package/dist/components/Swiper.module.scss +31 -0
- package/dist/components/Switch.d.ts +17 -0
- package/dist/components/Switch.d.ts.map +1 -0
- package/dist/components/Switch.js +33 -0
- package/dist/components/Switch.js.map +1 -0
- package/dist/components/Switch.module.scss +102 -0
- package/dist/components/Table.d.ts +16 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Table.js +44 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/Table.module.scss +5 -0
- package/dist/components/Tag.d.ts +16 -0
- package/dist/components/Tag.d.ts.map +1 -0
- package/dist/components/Tag.js +14 -0
- package/dist/components/Tag.js.map +1 -0
- package/dist/components/Tag.module.scss +10 -0
- package/dist/components/TagInput.d.ts +9 -0
- package/dist/components/TagInput.d.ts.map +1 -0
- package/dist/components/TagInput.js +36 -0
- package/dist/components/TagInput.js.map +1 -0
- package/dist/components/Text.d.ts +9 -0
- package/dist/components/Text.d.ts.map +1 -0
- package/dist/components/Text.js +50 -0
- package/dist/components/Text.js.map +1 -0
- package/dist/components/Textarea.d.ts +24 -0
- package/dist/components/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea.js +109 -0
- package/dist/components/Textarea.js.map +1 -0
- package/dist/components/ThemeInit.d.ts +20 -0
- package/dist/components/ThemeInit.d.ts.map +1 -0
- package/dist/components/ThemeInit.js +46 -0
- package/dist/components/ThemeInit.js.map +1 -0
- package/dist/components/ThemeSwitcher.d.ts +4 -0
- package/dist/components/ThemeSwitcher.d.ts.map +1 -0
- package/dist/components/ThemeSwitcher.js +21 -0
- package/dist/components/ThemeSwitcher.js.map +1 -0
- package/dist/components/TiltFx.d.ts +10 -0
- package/dist/components/TiltFx.d.ts.map +1 -0
- package/dist/components/TiltFx.js +67 -0
- package/dist/components/TiltFx.js.map +1 -0
- package/dist/components/TiltFx.module.scss +11 -0
- package/dist/components/Timeline.d.ts +18 -0
- package/dist/components/Timeline.d.ts.map +1 -0
- package/dist/components/Timeline.js +72 -0
- package/dist/components/Timeline.js.map +1 -0
- package/dist/components/Toast.d.ts +12 -0
- package/dist/components/Toast.d.ts.map +1 -0
- package/dist/components/Toast.js +29 -0
- package/dist/components/Toast.js.map +1 -0
- package/dist/components/Toast.module.scss +11 -0
- package/dist/components/Toaster.d.ts +19 -0
- package/dist/components/Toaster.d.ts.map +1 -0
- package/dist/components/Toaster.js +47 -0
- package/dist/components/Toaster.js.map +1 -0
- package/dist/components/Toaster.module.scss +58 -0
- package/dist/components/ToggleButton.d.ts +25 -0
- package/dist/components/ToggleButton.d.ts.map +1 -0
- package/dist/components/ToggleButton.js +20 -0
- package/dist/components/ToggleButton.js.map +1 -0
- package/dist/components/ToggleButton.module.scss +73 -0
- package/dist/components/Tooltip.d.ts +13 -0
- package/dist/components/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip.js +15 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/Tooltip.module.scss +14 -0
- package/dist/components/TypeFx.d.ts +15 -0
- package/dist/components/TypeFx.d.ts.map +1 -0
- package/dist/components/TypeFx.js +84 -0
- package/dist/components/TypeFx.js.map +1 -0
- package/dist/components/User.d.ts +16 -0
- package/dist/components/User.d.ts.map +1 -0
- package/dist/components/User.js +13 -0
- package/dist/components/User.js.map +1 -0
- package/dist/components/UserMenu.d.ts +13 -0
- package/dist/components/UserMenu.d.ts.map +1 -0
- package/dist/components/UserMenu.js +13 -0
- package/dist/components/UserMenu.js.map +1 -0
- package/dist/components/UserMenu.module.scss +14 -0
- package/dist/components/WeatherFx.d.ts +18 -0
- package/dist/components/WeatherFx.d.ts.map +1 -0
- package/dist/components/WeatherFx.js +864 -0
- package/dist/components/WeatherFx.js.map +1 -0
- package/dist/components/index.d.ts +121 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +121 -0
- package/dist/components/index.js.map +1 -0
- package/dist/contexts/DataThemeProvider.d.ts +26 -0
- package/dist/contexts/DataThemeProvider.d.ts.map +1 -0
- package/dist/contexts/DataThemeProvider.js +103 -0
- package/dist/contexts/DataThemeProvider.js.map +1 -0
- package/dist/contexts/IconProvider.d.ts +12 -0
- package/dist/contexts/IconProvider.d.ts.map +1 -0
- package/dist/contexts/IconProvider.js +20 -0
- package/dist/contexts/IconProvider.js.map +1 -0
- package/dist/contexts/LayoutProvider.d.ts +27 -0
- package/dist/contexts/LayoutProvider.d.ts.map +1 -0
- package/dist/contexts/LayoutProvider.js +96 -0
- package/dist/contexts/LayoutProvider.js.map +1 -0
- package/dist/contexts/ThemeProvider.d.ts +49 -0
- package/dist/contexts/ThemeProvider.d.ts.map +1 -0
- package/dist/contexts/ThemeProvider.js +285 -0
- package/dist/contexts/ThemeProvider.js.map +1 -0
- package/dist/contexts/ToastProvider.d.ts +24 -0
- package/dist/contexts/ToastProvider.d.ts.map +1 -0
- package/dist/contexts/ToastProvider.js +34 -0
- package/dist/contexts/ToastProvider.js.map +1 -0
- package/dist/contexts/index.d.ts +6 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/contexts/index.js +6 -0
- package/dist/contexts/index.js.map +1 -0
- package/dist/css/styles.css +1 -0
- package/dist/css/styles.css.map +1 -0
- package/dist/css/tokens.css +1 -0
- package/dist/css/tokens.css.map +1 -0
- package/dist/data/emoji-data.json +16062 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useArrowNavigation.d.ts +23 -0
- package/dist/hooks/useArrowNavigation.d.ts.map +1 -0
- package/dist/hooks/useArrowNavigation.js +205 -0
- package/dist/hooks/useArrowNavigation.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +2 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounce.js +15 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useFetchOg.d.ts +17 -0
- package/dist/hooks/useFetchOg.d.ts.map +1 -0
- package/dist/hooks/useFetchOg.js +63 -0
- package/dist/hooks/useFetchOg.js.map +1 -0
- package/dist/hooks/useHeadingLinks.d.ts +6 -0
- package/dist/hooks/useHeadingLinks.d.ts.map +1 -0
- package/dist/hooks/useHeadingLinks.js +17 -0
- package/dist/hooks/useHeadingLinks.js.map +1 -0
- package/dist/hooks/useInViewport.d.ts +3 -0
- package/dist/hooks/useInViewport.d.ts.map +1 -0
- package/dist/hooks/useInViewport.js +19 -0
- package/dist/hooks/useInViewport.js.map +1 -0
- package/dist/hooks/useReducedMotion.d.ts +8 -0
- package/dist/hooks/useReducedMotion.d.ts.map +1 -0
- package/dist/hooks/useReducedMotion.js +44 -0
- package/dist/hooks/useReducedMotion.js.map +1 -0
- package/dist/hooks/useResponsiveClasses.d.ts +9 -0
- package/dist/hooks/useResponsiveClasses.d.ts.map +1 -0
- package/dist/hooks/useResponsiveClasses.js +250 -0
- package/dist/hooks/useResponsiveClasses.js.map +1 -0
- package/dist/hooks/useStreamingData.d.ts +24 -0
- package/dist/hooks/useStreamingData.d.ts.map +1 -0
- package/dist/hooks/useStreamingData.js +89 -0
- package/dist/hooks/useStreamingData.js.map +1 -0
- package/dist/hooks/useStreamingViewport.d.ts +25 -0
- package/dist/hooks/useStreamingViewport.d.ts.map +1 -0
- package/dist/hooks/useStreamingViewport.js +120 -0
- package/dist/hooks/useStreamingViewport.js.map +1 -0
- package/dist/icons.d.ts +5 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +56 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +177 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +2 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/modules/code/CodeBlock.d.ts +6 -0
- package/dist/modules/code/CodeBlock.d.ts.map +1 -0
- package/dist/modules/code/CodeBlock.impl.d.ts +34 -0
- package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -0
- package/dist/modules/code/CodeBlock.impl.js +497 -0
- package/dist/modules/code/CodeBlock.impl.js.map +1 -0
- package/dist/modules/code/CodeBlock.js +14 -0
- package/dist/modules/code/CodeBlock.js.map +1 -0
- package/dist/modules/code/CodeBlock.module.scss +43 -0
- package/dist/modules/code/CodeDiff.css +175 -0
- package/dist/modules/code/CodeHighlight.css +116 -0
- package/dist/modules/code/LineNumber.css +34 -0
- package/dist/modules/data/BarChart.d.ts +6 -0
- package/dist/modules/data/BarChart.d.ts.map +1 -0
- package/dist/modules/data/BarChart.impl.d.ts +12 -0
- package/dist/modules/data/BarChart.impl.d.ts.map +1 -0
- package/dist/modules/data/BarChart.impl.js +129 -0
- package/dist/modules/data/BarChart.impl.js.map +1 -0
- package/dist/modules/data/BarChart.js +14 -0
- package/dist/modules/data/BarChart.js.map +1 -0
- package/dist/modules/data/ChartHeader.d.ts +14 -0
- package/dist/modules/data/ChartHeader.d.ts.map +1 -0
- package/dist/modules/data/ChartHeader.js +116 -0
- package/dist/modules/data/ChartHeader.js.map +1 -0
- package/dist/modules/data/ChartStatus.d.ts +10 -0
- package/dist/modules/data/ChartStatus.d.ts.map +1 -0
- package/dist/modules/data/ChartStatus.js +10 -0
- package/dist/modules/data/ChartStatus.js.map +1 -0
- package/dist/modules/data/DataTooltip.d.ts +16 -0
- package/dist/modules/data/DataTooltip.d.ts.map +1 -0
- package/dist/modules/data/DataTooltip.js +16 -0
- package/dist/modules/data/DataTooltip.js.map +1 -0
- package/dist/modules/data/Gauge.module.css +27 -0
- package/dist/modules/data/Gradient.d.ts +32 -0
- package/dist/modules/data/Gradient.d.ts.map +1 -0
- package/dist/modules/data/Gradient.js +56 -0
- package/dist/modules/data/Gradient.js.map +1 -0
- package/dist/modules/data/Legend.d.ts +15 -0
- package/dist/modules/data/Legend.d.ts.map +1 -0
- package/dist/modules/data/Legend.js +69 -0
- package/dist/modules/data/Legend.js.map +1 -0
- package/dist/modules/data/LineBarChart.d.ts +6 -0
- package/dist/modules/data/LineBarChart.d.ts.map +1 -0
- package/dist/modules/data/LineBarChart.impl.d.ts +12 -0
- package/dist/modules/data/LineBarChart.impl.d.ts.map +1 -0
- package/dist/modules/data/LineBarChart.impl.js +124 -0
- package/dist/modules/data/LineBarChart.impl.js.map +1 -0
- package/dist/modules/data/LineBarChart.js +14 -0
- package/dist/modules/data/LineBarChart.js.map +1 -0
- package/dist/modules/data/LineChart.d.ts +6 -0
- package/dist/modules/data/LineChart.d.ts.map +1 -0
- package/dist/modules/data/LineChart.impl.d.ts +17 -0
- package/dist/modules/data/LineChart.impl.d.ts.map +1 -0
- package/dist/modules/data/LineChart.impl.js +137 -0
- package/dist/modules/data/LineChart.impl.js.map +1 -0
- package/dist/modules/data/LineChart.js +14 -0
- package/dist/modules/data/LineChart.js.map +1 -0
- package/dist/modules/data/LinearGauge.d.ts +18 -0
- package/dist/modules/data/LinearGauge.d.ts.map +1 -0
- package/dist/modules/data/LinearGauge.js +78 -0
- package/dist/modules/data/LinearGauge.js.map +1 -0
- package/dist/modules/data/PieChart.d.ts +6 -0
- package/dist/modules/data/PieChart.d.ts.map +1 -0
- package/dist/modules/data/PieChart.impl.d.ts +18 -0
- package/dist/modules/data/PieChart.impl.d.ts.map +1 -0
- package/dist/modules/data/PieChart.impl.js +100 -0
- package/dist/modules/data/PieChart.impl.js.map +1 -0
- package/dist/modules/data/PieChart.js +14 -0
- package/dist/modules/data/PieChart.js.map +1 -0
- package/dist/modules/data/RadialGauge.d.ts +25 -0
- package/dist/modules/data/RadialGauge.d.ts.map +1 -0
- package/dist/modules/data/RadialGauge.js +94 -0
- package/dist/modules/data/RadialGauge.js.map +1 -0
- package/dist/modules/data/Swatch.d.ts +9 -0
- package/dist/modules/data/Swatch.d.ts.map +1 -0
- package/dist/modules/data/Swatch.js +44 -0
- package/dist/modules/data/Swatch.js.map +1 -0
- package/dist/modules/data/index.d.ts +14 -0
- package/dist/modules/data/index.d.ts.map +1 -0
- package/dist/modules/data/index.js +14 -0
- package/dist/modules/data/index.js.map +1 -0
- package/dist/modules/data/interfaces.d.ts +53 -0
- package/dist/modules/data/interfaces.d.ts.map +1 -0
- package/dist/modules/data/interfaces.js +2 -0
- package/dist/modules/data/interfaces.js.map +1 -0
- package/dist/modules/data/rechartsLoader.d.ts +2 -0
- package/dist/modules/data/rechartsLoader.d.ts.map +1 -0
- package/dist/modules/data/rechartsLoader.js +15 -0
- package/dist/modules/data/rechartsLoader.js.map +1 -0
- package/dist/modules/data/utils/colorDistribution.d.ts +10 -0
- package/dist/modules/data/utils/colorDistribution.d.ts.map +1 -0
- package/dist/modules/data/utils/colorDistribution.js +46 -0
- package/dist/modules/data/utils/colorDistribution.js.map +1 -0
- package/dist/modules/data/utils/formatDate.d.ts +12 -0
- package/dist/modules/data/utils/formatDate.d.ts.map +1 -0
- package/dist/modules/data/utils/formatDate.js +30 -0
- package/dist/modules/data/utils/formatDate.js.map +1 -0
- package/dist/modules/index.d.ts +6 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +7 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/media/MediaUpload.d.ts +6 -0
- package/dist/modules/media/MediaUpload.d.ts.map +1 -0
- package/dist/modules/media/MediaUpload.impl.d.ts +24 -0
- package/dist/modules/media/MediaUpload.impl.d.ts.map +1 -0
- package/dist/modules/media/MediaUpload.impl.js +106 -0
- package/dist/modules/media/MediaUpload.impl.js.map +1 -0
- package/dist/modules/media/MediaUpload.js +14 -0
- package/dist/modules/media/MediaUpload.js.map +1 -0
- package/dist/modules/media/MediaUpload.module.scss +24 -0
- package/dist/modules/navigation/HeadingLink.d.ts +11 -0
- package/dist/modules/navigation/HeadingLink.d.ts.map +1 -0
- package/dist/modules/navigation/HeadingLink.js +39 -0
- package/dist/modules/navigation/HeadingLink.js.map +1 -0
- package/dist/modules/navigation/HeadingLink.module.scss +15 -0
- package/dist/modules/navigation/HeadingNav.d.ts +8 -0
- package/dist/modules/navigation/HeadingNav.d.ts.map +1 -0
- package/dist/modules/navigation/HeadingNav.js +168 -0
- package/dist/modules/navigation/HeadingNav.js.map +1 -0
- package/dist/modules/navigation/Kbar.d.ts +34 -0
- package/dist/modules/navigation/Kbar.d.ts.map +1 -0
- package/dist/modules/navigation/Kbar.js +192 -0
- package/dist/modules/navigation/Kbar.js.map +1 -0
- package/dist/modules/navigation/Kbar.module.scss +60 -0
- package/dist/modules/navigation/MegaMenu.d.ts +28 -0
- package/dist/modules/navigation/MegaMenu.d.ts.map +1 -0
- package/dist/modules/navigation/MegaMenu.js +182 -0
- package/dist/modules/navigation/MegaMenu.js.map +1 -0
- package/dist/modules/navigation/MegaMenu.module.scss +14 -0
- package/dist/modules/navigation/MobileMegaMenu.d.ts +28 -0
- package/dist/modules/navigation/MobileMegaMenu.d.ts.map +1 -0
- package/dist/modules/navigation/MobileMegaMenu.js +22 -0
- package/dist/modules/navigation/MobileMegaMenu.js.map +1 -0
- package/dist/modules/navigation/index.d.ts +6 -0
- package/dist/modules/navigation/index.d.ts.map +1 -0
- package/dist/modules/navigation/index.js +6 -0
- package/dist/modules/navigation/index.js.map +1 -0
- package/dist/modules/seo/Meta.d.ts +29 -0
- package/dist/modules/seo/Meta.d.ts.map +1 -0
- package/dist/modules/seo/Meta.js +53 -0
- package/dist/modules/seo/Meta.js.map +1 -0
- package/dist/modules/seo/Schema.d.ts +19 -0
- package/dist/modules/seo/Schema.d.ts.map +1 -0
- package/dist/modules/seo/Schema.js +65 -0
- package/dist/modules/seo/Schema.js.map +1 -0
- package/dist/package.json +130 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/og-utils.d.ts +20 -0
- package/dist/server/og-utils.d.ts.map +1 -0
- package/dist/server/og-utils.js +125 -0
- package/dist/server/og-utils.js.map +1 -0
- package/dist/styles/background.scss +423 -0
- package/dist/styles/border.scss +546 -0
- package/dist/styles/breakpoints.scss +28 -0
- package/dist/styles/color.scss +183 -0
- package/dist/styles/display.scss +391 -0
- package/dist/styles/flex.scss +518 -0
- package/dist/styles/global.scss +36 -0
- package/dist/styles/grid.scss +293 -0
- package/dist/styles/index.scss +14 -0
- package/dist/styles/position.scss +1549 -0
- package/dist/styles/shadow.scss +19 -0
- package/dist/styles/size.scss +53 -0
- package/dist/styles/spacing.scss +1505 -0
- package/dist/styles/typography.scss +215 -0
- package/dist/styles/utilities.scss +23 -0
- package/dist/test/dialogTestUtils.d.ts +2 -0
- package/dist/test/dialogTestUtils.d.ts.map +1 -0
- package/dist/test/dialogTestUtils.js +12 -0
- package/dist/test/dialogTestUtils.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +59 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/tokens/border.scss +95 -0
- package/dist/tokens/data.scss +107 -0
- package/dist/tokens/function.scss +742 -0
- package/dist/tokens/index.scss +8 -0
- package/dist/tokens/layout.scss +275 -0
- package/dist/tokens/scheme.scss +352 -0
- package/dist/tokens/shadow.scss +7 -0
- package/dist/tokens/theme.scss +639 -0
- package/dist/tokens/typography.scss +116 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/MissingDependency.d.ts +7 -0
- package/dist/utils/MissingDependency.d.ts.map +1 -0
- package/dist/utils/MissingDependency.js +6 -0
- package/dist/utils/MissingDependency.js.map +1 -0
- package/dist/utils/devLogger.d.ts +13 -0
- package/dist/utils/devLogger.d.ts.map +1 -0
- package/dist/utils/devLogger.js +34 -0
- package/dist/utils/devLogger.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +155 -0
|
@@ -0,0 +1,799 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useEffect, useRef } from "react";
|
|
4
|
+
import { Flex } from ".";
|
|
5
|
+
import { useReducedMotion } from "../hooks/useReducedMotion";
|
|
6
|
+
const MatrixFx = React.forwardRef(({ speed = 1, colors = ["brand-solid-medium"], size = 3, spacing = 3, revealFrom = "center", trigger = "instant", active = false, flicker = false, bulge, fps = 60, reducedMotion = "auto", children, ...rest }, forwardedRef) => {
|
|
7
|
+
const { shouldAnimate } = useReducedMotion(reducedMotion);
|
|
8
|
+
const containerRef = useRef(null);
|
|
9
|
+
const canvasRef = useRef(null);
|
|
10
|
+
const animationRef = useRef(undefined);
|
|
11
|
+
const revealStartTimeRef = useRef(Date.now());
|
|
12
|
+
const hideStartTimeRef = useRef(Date.now());
|
|
13
|
+
const maxRevealProgressRef = useRef(0);
|
|
14
|
+
const hideStartProgressRef = useRef(0);
|
|
15
|
+
const isHoveredRef = useRef(false);
|
|
16
|
+
const mountAnimationCompleteRef = useRef(false);
|
|
17
|
+
const bulgeStartTimeRef = useRef(Date.now());
|
|
18
|
+
const dotsRef = useRef([]);
|
|
19
|
+
const lastFrameTimeRef = useRef(0);
|
|
20
|
+
const isStaticRef = useRef(false);
|
|
21
|
+
const isVisibleRef = useRef(true);
|
|
22
|
+
const animateFnRef = useRef(null);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (forwardedRef) {
|
|
25
|
+
if ("current" in forwardedRef) {
|
|
26
|
+
forwardedRef.current = containerRef.current;
|
|
27
|
+
}
|
|
28
|
+
else if (typeof forwardedRef === "function") {
|
|
29
|
+
forwardedRef(containerRef.current);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}, [forwardedRef]);
|
|
33
|
+
// Viewport visibility detection
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const container = containerRef.current;
|
|
36
|
+
if (!container)
|
|
37
|
+
return;
|
|
38
|
+
const observer = new IntersectionObserver((entries) => {
|
|
39
|
+
entries.forEach((entry) => {
|
|
40
|
+
isVisibleRef.current = entry.isIntersecting;
|
|
41
|
+
});
|
|
42
|
+
}, {
|
|
43
|
+
// Start animating when 10% visible for smooth transitions
|
|
44
|
+
threshold: 0.1,
|
|
45
|
+
// Add margin to start rendering slightly before entering viewport
|
|
46
|
+
rootMargin: '50px',
|
|
47
|
+
});
|
|
48
|
+
observer.observe(container);
|
|
49
|
+
return () => {
|
|
50
|
+
observer.disconnect();
|
|
51
|
+
};
|
|
52
|
+
}, []);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
const canvas = canvasRef.current;
|
|
55
|
+
const container = containerRef.current;
|
|
56
|
+
if (!canvas || !container)
|
|
57
|
+
return;
|
|
58
|
+
const ctx = canvas.getContext("2d", { willReadFrequently: true });
|
|
59
|
+
if (!ctx)
|
|
60
|
+
return;
|
|
61
|
+
// Set canvas size
|
|
62
|
+
let canvasWidth = 0;
|
|
63
|
+
let canvasHeight = 0;
|
|
64
|
+
const updateSize = () => {
|
|
65
|
+
const rect = container.getBoundingClientRect();
|
|
66
|
+
canvasWidth = rect.width;
|
|
67
|
+
canvasHeight = rect.height;
|
|
68
|
+
canvas.width = rect.width * 2; // 2x for retina
|
|
69
|
+
canvas.height = rect.height * 2;
|
|
70
|
+
canvas.style.width = `${rect.width}px`;
|
|
71
|
+
canvas.style.height = `${rect.height}px`;
|
|
72
|
+
ctx.scale(2, 2); // Scale for retina
|
|
73
|
+
};
|
|
74
|
+
updateSize();
|
|
75
|
+
window.addEventListener("resize", updateSize);
|
|
76
|
+
// Parse colors - convert token names to CSS variables
|
|
77
|
+
const parsedColors = colors.map((color) => {
|
|
78
|
+
// Get computed value from CSS variable
|
|
79
|
+
const computedColor = getComputedStyle(container).getPropertyValue(`--${color}`);
|
|
80
|
+
return computedColor || color;
|
|
81
|
+
});
|
|
82
|
+
// Create dot grid with padding to prevent edge gaps during displacement
|
|
83
|
+
const totalSize = size + spacing;
|
|
84
|
+
const maxDisplacement = (bulge?.intensity ?? 10) * 2; // Account for max possible displacement
|
|
85
|
+
const paddedWidth = canvasWidth + maxDisplacement * 2;
|
|
86
|
+
const paddedHeight = canvasHeight + maxDisplacement * 2;
|
|
87
|
+
const cols = Math.ceil(paddedWidth / totalSize);
|
|
88
|
+
const rows = Math.ceil(paddedHeight / totalSize);
|
|
89
|
+
// Only create new dots if grid doesn't exist or dimensions/size changed
|
|
90
|
+
let dots = dotsRef.current;
|
|
91
|
+
let maxDistance = 0;
|
|
92
|
+
if (dots.length === 0 || dots[0]?.gridSize !== totalSize || dots[0]?.canvasW !== canvasWidth || dots[0]?.canvasH !== canvasHeight) {
|
|
93
|
+
// Create new dot grid
|
|
94
|
+
dots = [];
|
|
95
|
+
for (let row = 0; row < rows; row++) {
|
|
96
|
+
for (let col = 0; col < cols; col++) {
|
|
97
|
+
const x = col * totalSize + size / 2 - maxDisplacement;
|
|
98
|
+
const y = row * totalSize + size / 2 - maxDisplacement;
|
|
99
|
+
// Calculate distance from reveal origin
|
|
100
|
+
let distanceFromOrigin = 0;
|
|
101
|
+
const centerX = canvasWidth / 2;
|
|
102
|
+
const centerY = canvasHeight / 2;
|
|
103
|
+
switch (revealFrom) {
|
|
104
|
+
case "center":
|
|
105
|
+
const dx = x - centerX;
|
|
106
|
+
const dy = y - centerY;
|
|
107
|
+
distanceFromOrigin = Math.sqrt(dx * dx + dy * dy);
|
|
108
|
+
break;
|
|
109
|
+
case "top":
|
|
110
|
+
distanceFromOrigin = y;
|
|
111
|
+
break;
|
|
112
|
+
case "bottom":
|
|
113
|
+
distanceFromOrigin = canvasHeight - y;
|
|
114
|
+
break;
|
|
115
|
+
case "left":
|
|
116
|
+
distanceFromOrigin = x;
|
|
117
|
+
break;
|
|
118
|
+
case "right":
|
|
119
|
+
distanceFromOrigin = canvasWidth - x;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
dots.push({
|
|
123
|
+
x,
|
|
124
|
+
y,
|
|
125
|
+
gridX: col,
|
|
126
|
+
gridY: row,
|
|
127
|
+
color: parsedColors[Math.floor(Math.random() * parsedColors.length)],
|
|
128
|
+
baseOpacity: 0.3 + Math.random() * 0.7,
|
|
129
|
+
distanceFromOrigin,
|
|
130
|
+
randomOffset: Math.random() * 0.3,
|
|
131
|
+
flickerPhase: Math.random() * Math.PI * 2,
|
|
132
|
+
flickerSpeed: 0.8 + Math.random() * 0.4,
|
|
133
|
+
gridSize: totalSize,
|
|
134
|
+
canvasW: canvasWidth,
|
|
135
|
+
canvasH: canvasHeight,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Find max distance for normalization
|
|
140
|
+
maxDistance = Math.max(...dots.map((d) => d.distanceFromOrigin));
|
|
141
|
+
dotsRef.current = dots;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Update colors on existing dots
|
|
145
|
+
dots.forEach((dot) => {
|
|
146
|
+
dot.color = parsedColors[Math.floor(Math.random() * parsedColors.length)];
|
|
147
|
+
});
|
|
148
|
+
maxDistance = Math.max(...dots.map((d) => d.distanceFromOrigin));
|
|
149
|
+
}
|
|
150
|
+
// Animation loop
|
|
151
|
+
const startTime = Date.now();
|
|
152
|
+
const frameInterval = 1000 / fps; // Target ms per frame
|
|
153
|
+
// Bulge configuration
|
|
154
|
+
const bulgeEnabled = !!bulge;
|
|
155
|
+
const bulgeType = bulge?.type ?? "ripple"; // Default: ripple
|
|
156
|
+
const bulgeDuration = bulge?.duration ?? 3; // Default: 3 seconds per wave
|
|
157
|
+
const bulgeIntensity = bulge?.intensity ?? 10; // Default: 10px displacement
|
|
158
|
+
const bulgeRepeat = bulge?.repeat ?? true; // Default: true
|
|
159
|
+
const bulgeDelay = bulge?.delay ?? 0; // Default: 0ms
|
|
160
|
+
// Calculate center point for circular wave
|
|
161
|
+
const centerX = canvasWidth / 2;
|
|
162
|
+
const centerY = canvasHeight / 2;
|
|
163
|
+
const maxRadius = Math.sqrt(centerX * centerX + centerY * centerY);
|
|
164
|
+
// Cache for static rendering (when animation completes)
|
|
165
|
+
let cachedImageData = null;
|
|
166
|
+
// When reduced motion is active, force static rendering after first frame
|
|
167
|
+
if (!shouldAnimate) {
|
|
168
|
+
isStaticRef.current = true;
|
|
169
|
+
mountAnimationCompleteRef.current = true;
|
|
170
|
+
}
|
|
171
|
+
const animate = (currentTime = 0) => {
|
|
172
|
+
// Skip rendering if not visible in viewport
|
|
173
|
+
if (!isVisibleRef.current) {
|
|
174
|
+
animationRef.current = requestAnimationFrame(animate);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
// FPS throttling
|
|
178
|
+
if (currentTime - lastFrameTimeRef.current < frameInterval) {
|
|
179
|
+
animationRef.current = requestAnimationFrame(animate);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
lastFrameTimeRef.current = currentTime;
|
|
183
|
+
// If static and we have cached image, just render that and stop animating
|
|
184
|
+
if (isStaticRef.current && cachedImageData) {
|
|
185
|
+
ctx.putImageData(cachedImageData, 0, 0);
|
|
186
|
+
// Don't request another frame - animation is complete
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
|
|
190
|
+
const time = (Date.now() - startTime) / 1000; // Time in seconds
|
|
191
|
+
// Calculate circular wave radius (travels from center to edge)
|
|
192
|
+
let waveProgress = 0;
|
|
193
|
+
let showBulge = false;
|
|
194
|
+
let bulgeFadeOut = 1; // Multiplier for fading out bulge effect (1 = full effect, 0 = no effect)
|
|
195
|
+
if (bulgeEnabled) {
|
|
196
|
+
const bulgeElapsed = (Date.now() - bulgeStartTimeRef.current) / 1000;
|
|
197
|
+
const delaySeconds = bulgeDelay / 1000;
|
|
198
|
+
const totalCycleDuration = bulgeDuration + delaySeconds;
|
|
199
|
+
const adjustedTime = bulgeElapsed - delaySeconds;
|
|
200
|
+
const fadeStartPercent = 0.6; // Start fading at 60% of wave duration
|
|
201
|
+
if (adjustedTime >= 0) {
|
|
202
|
+
showBulge = true;
|
|
203
|
+
if (bulgeRepeat) {
|
|
204
|
+
// Continuous repeating wave
|
|
205
|
+
const cycleTime = adjustedTime % totalCycleDuration;
|
|
206
|
+
waveProgress = cycleTime < bulgeDuration ? cycleTime / bulgeDuration : 0;
|
|
207
|
+
showBulge = cycleTime < bulgeDuration; // Only show during active wave, not delay
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// Single wave with opacity fade during last 40%
|
|
211
|
+
if (adjustedTime <= bulgeDuration) {
|
|
212
|
+
waveProgress = adjustedTime / bulgeDuration;
|
|
213
|
+
// Start fading opacity at 60% of duration
|
|
214
|
+
if (waveProgress >= fadeStartPercent) {
|
|
215
|
+
const fadeProgress = (waveProgress - fadeStartPercent) / (1 - fadeStartPercent);
|
|
216
|
+
bulgeFadeOut = 1 - fadeProgress; // Fade from 1 to 0
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
waveProgress = 0;
|
|
221
|
+
showBulge = false;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
const waveRadius = waveProgress * maxRadius * 1.5; // Travel beyond edges for smooth cycle
|
|
227
|
+
// For instant trigger, show all dots immediately at full opacity
|
|
228
|
+
if (trigger === "instant") {
|
|
229
|
+
// Check if we're in a static state (no flicker, no active bulge)
|
|
230
|
+
const isCurrentlyStatic = !flicker && (!bulgeEnabled || !showBulge);
|
|
231
|
+
if (isCurrentlyStatic && isStaticRef.current && cachedImageData) {
|
|
232
|
+
// Use cached render
|
|
233
|
+
ctx.putImageData(cachedImageData, 0, 0);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// Render dots
|
|
237
|
+
dots.forEach((dot) => {
|
|
238
|
+
ctx.fillStyle = dot.color;
|
|
239
|
+
let opacity = dot.baseOpacity;
|
|
240
|
+
// Apply flicker effect if enabled
|
|
241
|
+
if (flicker) {
|
|
242
|
+
const flickerValue = Math.sin(time * dot.flickerSpeed * 3 + dot.flickerPhase);
|
|
243
|
+
const flickerMultiplier = 0.6 + (flickerValue * 0.4); // Oscillate between 0.6 and 1.0
|
|
244
|
+
opacity *= flickerMultiplier;
|
|
245
|
+
}
|
|
246
|
+
// Calculate bulge displacement
|
|
247
|
+
let offsetX = 0;
|
|
248
|
+
let offsetY = 0;
|
|
249
|
+
let sizeMultiplier = 1;
|
|
250
|
+
let bulgeOpacity = 1;
|
|
251
|
+
if (bulgeEnabled && showBulge) {
|
|
252
|
+
if (bulgeType === "ripple") {
|
|
253
|
+
// Ripple: circular wave from center
|
|
254
|
+
const dx = dot.x - centerX;
|
|
255
|
+
const dy = dot.y - centerY;
|
|
256
|
+
const distanceFromCenter = Math.sqrt(dx * dx + dy * dy);
|
|
257
|
+
const distanceToWave = Math.abs(distanceFromCenter - waveRadius);
|
|
258
|
+
const waveWidth = maxRadius * 0.15;
|
|
259
|
+
const distanceNorm = distanceToWave / waveWidth;
|
|
260
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 4);
|
|
261
|
+
const angle = Math.atan2(dy, dx);
|
|
262
|
+
const displacementAmount = waveFactor * bulgeIntensity * bulgeFadeOut;
|
|
263
|
+
offsetX = Math.cos(angle) * displacementAmount;
|
|
264
|
+
offsetY = Math.sin(angle) * displacementAmount;
|
|
265
|
+
sizeMultiplier = 1 + waveFactor * 0.8 * bulgeFadeOut;
|
|
266
|
+
const waveOpacity = 0.3 + waveFactor * 0.7;
|
|
267
|
+
bulgeOpacity = 1 + (waveOpacity - 1) * bulgeFadeOut;
|
|
268
|
+
}
|
|
269
|
+
else if (bulgeType === "wave") {
|
|
270
|
+
// Wave: Organic S-curve from bottom-left to top-right with rotation
|
|
271
|
+
const diagonalLength = Math.sqrt(canvasWidth * canvasWidth + canvasHeight * canvasHeight);
|
|
272
|
+
// Start wave off-screen before bottom-left, end off-screen after top-right
|
|
273
|
+
const wavePosOnDiagonal = (waveProgress * diagonalLength * 1.4) - (diagonalLength * 0.2);
|
|
274
|
+
// Calculate distance along the diagonal (from bottom-left to top-right)
|
|
275
|
+
const normalizedX = dot.x / canvasWidth;
|
|
276
|
+
const normalizedY = 1 - (dot.y / canvasHeight);
|
|
277
|
+
const dotDiagonalPos = (normalizedX + normalizedY) / 2 * diagonalLength;
|
|
278
|
+
// Distance from wave front
|
|
279
|
+
const distanceToWaveFront = dotDiagonalPos - wavePosOnDiagonal;
|
|
280
|
+
const waveWidth = diagonalLength * 0.25;
|
|
281
|
+
const distanceNorm = distanceToWaveFront / waveWidth;
|
|
282
|
+
// Smooth wave factor with wider influence
|
|
283
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 2.5);
|
|
284
|
+
// Create rotating S-curve with multiple frequency components
|
|
285
|
+
const perpendicularOffset = normalizedY - normalizedX;
|
|
286
|
+
// Primary S-curve that rotates over time
|
|
287
|
+
const rotationPhase = waveProgress * Math.PI * 3; // Rotates 1.5 times during animation
|
|
288
|
+
const primaryFreq = 3; // Number of S-curves along the wave
|
|
289
|
+
const sCurvePrimary = Math.sin(perpendicularOffset * Math.PI * primaryFreq + rotationPhase);
|
|
290
|
+
// Secondary curve for complexity (higher frequency, lower amplitude)
|
|
291
|
+
const secondaryFreq = 7;
|
|
292
|
+
const sCurveSecondary = Math.sin(perpendicularOffset * Math.PI * secondaryFreq - rotationPhase * 1.5) * 0.4;
|
|
293
|
+
// Combine curves for organic motion
|
|
294
|
+
const sCurveFactor = sCurvePrimary + sCurveSecondary;
|
|
295
|
+
// Wave straightens at the edges (distanceNorm affects curve strength)
|
|
296
|
+
const curveStrength = 1 - Math.abs(distanceNorm) * 0.5;
|
|
297
|
+
const modulatedCurve = sCurveFactor * curveStrength;
|
|
298
|
+
// Apply displacement
|
|
299
|
+
const baseDisplacement = waveFactor * bulgeIntensity * bulgeFadeOut;
|
|
300
|
+
const diagonalAngle = Math.PI / 4;
|
|
301
|
+
// Perpendicular displacement creates the S-curve
|
|
302
|
+
const perpAngle = diagonalAngle + Math.PI / 2;
|
|
303
|
+
offsetX = Math.cos(diagonalAngle) * baseDisplacement + Math.cos(perpAngle) * modulatedCurve * baseDisplacement * 0.8;
|
|
304
|
+
offsetY = -Math.sin(diagonalAngle) * baseDisplacement - Math.sin(perpAngle) * modulatedCurve * baseDisplacement * 0.8;
|
|
305
|
+
sizeMultiplier = 1 + waveFactor * 0.5 * bulgeFadeOut;
|
|
306
|
+
const waveOpacity = 0.4 + waveFactor * 0.6;
|
|
307
|
+
bulgeOpacity = 1 + (waveOpacity - 1) * bulgeFadeOut;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
ctx.globalAlpha = opacity * bulgeOpacity;
|
|
311
|
+
const adjustedSize = size * sizeMultiplier;
|
|
312
|
+
const sizeOffset = (adjustedSize - size) / 2;
|
|
313
|
+
ctx.fillRect(dot.x + offsetX - sizeOffset, dot.y + offsetY - sizeOffset, adjustedSize, adjustedSize);
|
|
314
|
+
});
|
|
315
|
+
// Cache if now static
|
|
316
|
+
if (isCurrentlyStatic) {
|
|
317
|
+
cachedImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
318
|
+
isStaticRef.current = true;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
ctx.globalAlpha = 1;
|
|
322
|
+
// Only continue animating if there's something dynamic (flicker or bulge)
|
|
323
|
+
if (!isCurrentlyStatic) {
|
|
324
|
+
animationRef.current = requestAnimationFrame(animate);
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
// Clear the ref so the animation can be restarted
|
|
328
|
+
animationRef.current = undefined;
|
|
329
|
+
}
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
// For mount trigger - progressive reveal on load, then static
|
|
333
|
+
if (trigger === "mount") {
|
|
334
|
+
if (!mountAnimationCompleteRef.current) {
|
|
335
|
+
// Revealing animation with explosive easing
|
|
336
|
+
const now = Date.now();
|
|
337
|
+
const elapsed = (now - revealStartTimeRef.current) / 1000;
|
|
338
|
+
// Cubic easing: starts very slow, then explodes
|
|
339
|
+
const revealProgress = Math.pow(elapsed, 3) * speed * 3;
|
|
340
|
+
// Check if animation is complete (max offset is ~1.3)
|
|
341
|
+
if (revealProgress >= 2.0) {
|
|
342
|
+
mountAnimationCompleteRef.current = true;
|
|
343
|
+
}
|
|
344
|
+
dots.forEach((dot) => {
|
|
345
|
+
const normalizedDistance = dot.distanceFromOrigin / maxDistance;
|
|
346
|
+
const introOffset = normalizedDistance * 0.8 + dot.randomOffset * 0.5;
|
|
347
|
+
let opacity = 0;
|
|
348
|
+
if (revealProgress > introOffset) {
|
|
349
|
+
const fadeIn = (revealProgress - introOffset) * 8;
|
|
350
|
+
opacity = Math.min(1, fadeIn * fadeIn) * dot.baseOpacity;
|
|
351
|
+
// Apply flicker effect if enabled
|
|
352
|
+
if (flicker) {
|
|
353
|
+
const flickerValue = Math.sin(time * dot.flickerSpeed * 3 + dot.flickerPhase);
|
|
354
|
+
const flickerMultiplier = 0.6 + (flickerValue * 0.4);
|
|
355
|
+
opacity *= flickerMultiplier;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (opacity > 0) {
|
|
359
|
+
// Calculate bulge displacement
|
|
360
|
+
let offsetX = 0;
|
|
361
|
+
let offsetY = 0;
|
|
362
|
+
let sizeMultiplier = 1;
|
|
363
|
+
let bulgeOpacity = 1;
|
|
364
|
+
if (bulgeEnabled) {
|
|
365
|
+
if (bulgeType === "ripple") {
|
|
366
|
+
const dx = dot.x - centerX;
|
|
367
|
+
const dy = dot.y - centerY;
|
|
368
|
+
const distanceFromCenter = Math.sqrt(dx * dx + dy * dy);
|
|
369
|
+
const distanceToWave = Math.abs(distanceFromCenter - waveRadius);
|
|
370
|
+
const waveWidth = maxRadius * 0.15;
|
|
371
|
+
const distanceNorm = distanceToWave / waveWidth;
|
|
372
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 4);
|
|
373
|
+
const angle = Math.atan2(dy, dx);
|
|
374
|
+
const displacementAmount = waveFactor * bulgeIntensity;
|
|
375
|
+
offsetX = Math.cos(angle) * displacementAmount;
|
|
376
|
+
offsetY = Math.sin(angle) * displacementAmount;
|
|
377
|
+
sizeMultiplier = 1 + waveFactor * 0.8;
|
|
378
|
+
bulgeOpacity = 0.3 + waveFactor * 0.7;
|
|
379
|
+
}
|
|
380
|
+
else if (bulgeType === "wave") {
|
|
381
|
+
const diagonalLength = Math.sqrt(canvasWidth * canvasWidth + canvasHeight * canvasHeight);
|
|
382
|
+
const wavePosOnDiagonal = waveProgress * diagonalLength * 1.2;
|
|
383
|
+
const normalizedX = dot.x / canvasWidth;
|
|
384
|
+
const normalizedY = 1 - (dot.y / canvasHeight);
|
|
385
|
+
const dotDiagonalPos = (normalizedX + normalizedY) / 2 * diagonalLength;
|
|
386
|
+
const distanceToWaveFront = dotDiagonalPos - wavePosOnDiagonal;
|
|
387
|
+
const waveWidth = diagonalLength * 0.2;
|
|
388
|
+
const distanceNorm = Math.abs(distanceToWaveFront) / waveWidth;
|
|
389
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 3);
|
|
390
|
+
const perpendicularOffset = normalizedY - normalizedX;
|
|
391
|
+
const sCurvePhase = perpendicularOffset * Math.PI * 2;
|
|
392
|
+
const sCurveFactor = Math.sin(sCurvePhase + waveProgress * Math.PI * 2);
|
|
393
|
+
const baseDisplacement = waveFactor * bulgeIntensity;
|
|
394
|
+
const diagonalAngle = Math.PI / 4;
|
|
395
|
+
offsetX = Math.cos(diagonalAngle) * baseDisplacement + sCurveFactor * baseDisplacement * 0.5;
|
|
396
|
+
offsetY = -Math.sin(diagonalAngle) * baseDisplacement + sCurveFactor * baseDisplacement * 0.5;
|
|
397
|
+
sizeMultiplier = 1 + waveFactor * 0.6;
|
|
398
|
+
bulgeOpacity = 0.4 + waveFactor * 0.6;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
ctx.fillStyle = dot.color;
|
|
402
|
+
ctx.globalAlpha = opacity * bulgeOpacity;
|
|
403
|
+
const adjustedSize = size * sizeMultiplier;
|
|
404
|
+
const sizeOffset = (adjustedSize - size) / 2;
|
|
405
|
+
ctx.fillRect(dot.x + offsetX - sizeOffset, dot.y + offsetY - sizeOffset, adjustedSize, adjustedSize);
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
// Animation complete - show all dots with optional flicker
|
|
411
|
+
const isCurrentlyStatic = !flicker && (!bulgeEnabled || !showBulge);
|
|
412
|
+
if (isCurrentlyStatic && isStaticRef.current && cachedImageData) {
|
|
413
|
+
// Use cached render for completed static state
|
|
414
|
+
ctx.putImageData(cachedImageData, 0, 0);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
dots.forEach((dot) => {
|
|
418
|
+
ctx.fillStyle = dot.color;
|
|
419
|
+
let opacity = dot.baseOpacity;
|
|
420
|
+
if (flicker) {
|
|
421
|
+
const flickerValue = Math.sin(time * dot.flickerSpeed * 3 + dot.flickerPhase);
|
|
422
|
+
const flickerMultiplier = 0.6 + (flickerValue * 0.4);
|
|
423
|
+
opacity *= flickerMultiplier;
|
|
424
|
+
}
|
|
425
|
+
// Calculate bulge displacement
|
|
426
|
+
let offsetX = 0;
|
|
427
|
+
let offsetY = 0;
|
|
428
|
+
let sizeMultiplier = 1;
|
|
429
|
+
let bulgeOpacity = 1;
|
|
430
|
+
if (bulgeEnabled) {
|
|
431
|
+
if (bulgeType === "ripple") {
|
|
432
|
+
const dx = dot.x - centerX;
|
|
433
|
+
const dy = dot.y - centerY;
|
|
434
|
+
const distanceFromCenter = Math.sqrt(dx * dx + dy * dy);
|
|
435
|
+
const distanceToWave = Math.abs(distanceFromCenter - waveRadius);
|
|
436
|
+
const waveWidth = maxRadius * 0.15;
|
|
437
|
+
const distanceNorm = distanceToWave / waveWidth;
|
|
438
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 4);
|
|
439
|
+
const angle = Math.atan2(dy, dx);
|
|
440
|
+
const displacementAmount = waveFactor * bulgeIntensity;
|
|
441
|
+
offsetX = Math.cos(angle) * displacementAmount;
|
|
442
|
+
offsetY = Math.sin(angle) * displacementAmount;
|
|
443
|
+
sizeMultiplier = 1 + waveFactor * 0.8;
|
|
444
|
+
bulgeOpacity = 0.3 + waveFactor * 0.7;
|
|
445
|
+
}
|
|
446
|
+
else if (bulgeType === "wave") {
|
|
447
|
+
const diagonalLength = Math.sqrt(canvasWidth * canvasWidth + canvasHeight * canvasHeight);
|
|
448
|
+
const wavePosOnDiagonal = waveProgress * diagonalLength * 1.2;
|
|
449
|
+
const normalizedX = dot.x / canvasWidth;
|
|
450
|
+
const normalizedY = 1 - (dot.y / canvasHeight);
|
|
451
|
+
const dotDiagonalPos = (normalizedX + normalizedY) / 2 * diagonalLength;
|
|
452
|
+
const distanceToWaveFront = dotDiagonalPos - wavePosOnDiagonal;
|
|
453
|
+
const waveWidth = diagonalLength * 0.2;
|
|
454
|
+
const distanceNorm = Math.abs(distanceToWaveFront) / waveWidth;
|
|
455
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 3);
|
|
456
|
+
const perpendicularOffset = normalizedY - normalizedX;
|
|
457
|
+
const sCurvePhase = perpendicularOffset * Math.PI * 2;
|
|
458
|
+
const sCurveFactor = Math.sin(sCurvePhase + waveProgress * Math.PI * 2);
|
|
459
|
+
const baseDisplacement = waveFactor * bulgeIntensity;
|
|
460
|
+
const diagonalAngle = Math.PI / 4;
|
|
461
|
+
offsetX = Math.cos(diagonalAngle) * baseDisplacement + sCurveFactor * baseDisplacement * 0.5;
|
|
462
|
+
offsetY = -Math.sin(diagonalAngle) * baseDisplacement + sCurveFactor * baseDisplacement * 0.5;
|
|
463
|
+
sizeMultiplier = 1 + waveFactor * 0.6;
|
|
464
|
+
bulgeOpacity = 0.4 + waveFactor * 0.6;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
ctx.globalAlpha = opacity * bulgeOpacity;
|
|
468
|
+
const adjustedSize = size * sizeMultiplier;
|
|
469
|
+
const sizeOffset = (adjustedSize - size) / 2;
|
|
470
|
+
ctx.fillRect(dot.x + offsetX - sizeOffset, dot.y + offsetY - sizeOffset, adjustedSize, adjustedSize);
|
|
471
|
+
});
|
|
472
|
+
// Cache if now static
|
|
473
|
+
if (isCurrentlyStatic) {
|
|
474
|
+
cachedImageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
475
|
+
isStaticRef.current = true;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
ctx.globalAlpha = 1;
|
|
480
|
+
// Only continue animating if mount animation is incomplete or there's something dynamic
|
|
481
|
+
const isCurrentlyStatic = mountAnimationCompleteRef.current && !flicker && (!bulgeEnabled || !showBulge);
|
|
482
|
+
if (!isCurrentlyStatic) {
|
|
483
|
+
animationRef.current = requestAnimationFrame(animate);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
// Clear the ref so the animation can be restarted
|
|
487
|
+
animationRef.current = undefined;
|
|
488
|
+
}
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
// For hover, click, and manual triggers with animation
|
|
492
|
+
if (trigger === "hover" || trigger === "click" || trigger === "manual") {
|
|
493
|
+
if (isHoveredRef.current) {
|
|
494
|
+
// Revealing animation with explosive easing
|
|
495
|
+
const now = Date.now();
|
|
496
|
+
const elapsed = (now - revealStartTimeRef.current) / 1000;
|
|
497
|
+
// Cubic easing: starts very slow, then explodes
|
|
498
|
+
const revealProgress = Math.pow(elapsed, 3) * speed * 3;
|
|
499
|
+
// Cap progress to prevent infinite growth (max offset is ~1.3)
|
|
500
|
+
const cappedProgress = Math.min(revealProgress, 2.0);
|
|
501
|
+
// Track maximum progress for reverse animation
|
|
502
|
+
maxRevealProgressRef.current = cappedProgress;
|
|
503
|
+
dots.forEach((dot) => {
|
|
504
|
+
const normalizedDistance = dot.distanceFromOrigin / maxDistance;
|
|
505
|
+
const introOffset = normalizedDistance * 0.8 + dot.randomOffset * 0.5; // Much lower threshold
|
|
506
|
+
let opacity = 0;
|
|
507
|
+
if (cappedProgress > introOffset) {
|
|
508
|
+
// Explosive opacity increase
|
|
509
|
+
const fadeIn = (cappedProgress - introOffset) * 8; // Faster fade-in
|
|
510
|
+
opacity = Math.min(1, fadeIn * fadeIn) * dot.baseOpacity;
|
|
511
|
+
// Apply flicker effect if enabled
|
|
512
|
+
if (flicker) {
|
|
513
|
+
const flickerValue = Math.sin(time * dot.flickerSpeed * 3 + dot.flickerPhase);
|
|
514
|
+
const flickerMultiplier = 0.6 + (flickerValue * 0.4); // Oscillate between 0.6 and 1.0
|
|
515
|
+
opacity *= flickerMultiplier;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
if (opacity > 0) {
|
|
519
|
+
// Calculate bulge displacement
|
|
520
|
+
let offsetX = 0;
|
|
521
|
+
let offsetY = 0;
|
|
522
|
+
let sizeMultiplier = 1;
|
|
523
|
+
let bulgeOpacity = 1;
|
|
524
|
+
if (bulgeEnabled) {
|
|
525
|
+
if (bulgeType === "ripple") {
|
|
526
|
+
const dx = dot.x - centerX;
|
|
527
|
+
const dy = dot.y - centerY;
|
|
528
|
+
const distanceFromCenter = Math.sqrt(dx * dx + dy * dy);
|
|
529
|
+
const distanceToWave = Math.abs(distanceFromCenter - waveRadius);
|
|
530
|
+
const waveWidth = maxRadius * 0.15;
|
|
531
|
+
const distanceNorm = distanceToWave / waveWidth;
|
|
532
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 4);
|
|
533
|
+
const angle = Math.atan2(dy, dx);
|
|
534
|
+
const displacementAmount = waveFactor * bulgeIntensity;
|
|
535
|
+
offsetX = Math.cos(angle) * displacementAmount;
|
|
536
|
+
offsetY = Math.sin(angle) * displacementAmount;
|
|
537
|
+
sizeMultiplier = 1 + waveFactor * 0.8;
|
|
538
|
+
bulgeOpacity = 0.3 + waveFactor * 0.7;
|
|
539
|
+
}
|
|
540
|
+
else if (bulgeType === "wave") {
|
|
541
|
+
const diagonalLength = Math.sqrt(canvasWidth * canvasWidth + canvasHeight * canvasHeight);
|
|
542
|
+
const wavePosOnDiagonal = waveProgress * diagonalLength * 1.2;
|
|
543
|
+
const normalizedX = dot.x / canvasWidth;
|
|
544
|
+
const normalizedY = 1 - (dot.y / canvasHeight);
|
|
545
|
+
const dotDiagonalPos = (normalizedX + normalizedY) / 2 * diagonalLength;
|
|
546
|
+
const distanceToWaveFront = dotDiagonalPos - wavePosOnDiagonal;
|
|
547
|
+
const waveWidth = diagonalLength * 0.2;
|
|
548
|
+
const distanceNorm = Math.abs(distanceToWaveFront) / waveWidth;
|
|
549
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 3);
|
|
550
|
+
const perpendicularOffset = normalizedY - normalizedX;
|
|
551
|
+
const sCurvePhase = perpendicularOffset * Math.PI * 2;
|
|
552
|
+
const sCurveFactor = Math.sin(sCurvePhase + waveProgress * Math.PI * 2);
|
|
553
|
+
const baseDisplacement = waveFactor * bulgeIntensity;
|
|
554
|
+
const diagonalAngle = Math.PI / 4;
|
|
555
|
+
offsetX = Math.cos(diagonalAngle) * baseDisplacement + sCurveFactor * baseDisplacement * 0.5;
|
|
556
|
+
offsetY = -Math.sin(diagonalAngle) * baseDisplacement + sCurveFactor * baseDisplacement * 0.5;
|
|
557
|
+
sizeMultiplier = 1 + waveFactor * 0.6;
|
|
558
|
+
bulgeOpacity = 0.4 + waveFactor * 0.6;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
ctx.fillStyle = dot.color;
|
|
562
|
+
ctx.globalAlpha = opacity * bulgeOpacity;
|
|
563
|
+
const adjustedSize = size * sizeMultiplier;
|
|
564
|
+
const sizeOffset = (adjustedSize - size) / 2;
|
|
565
|
+
ctx.fillRect(dot.x + offsetX - sizeOffset, dot.y + offsetY - sizeOffset, adjustedSize, adjustedSize);
|
|
566
|
+
}
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
// Reverse animation when hover ends - only run if there's something to hide
|
|
571
|
+
if (hideStartProgressRef.current > 0) {
|
|
572
|
+
const elapsed = (Date.now() - hideStartTimeRef.current) / 1000;
|
|
573
|
+
// Use quadratic easing for faster hide (power of 2)
|
|
574
|
+
const hideSpeed = speed * 6; // Faster to handle max progress of 2.0
|
|
575
|
+
const hideProgress = Math.pow(elapsed, 2) * hideSpeed;
|
|
576
|
+
// Reverse from the progress we had when hide started
|
|
577
|
+
const reverseProgress = Math.max(0, hideStartProgressRef.current - hideProgress);
|
|
578
|
+
if (reverseProgress > 0.01) { // Small threshold to ensure completion
|
|
579
|
+
// Still have dots to hide
|
|
580
|
+
dots.forEach((dot) => {
|
|
581
|
+
const normalizedDistance = dot.distanceFromOrigin / maxDistance;
|
|
582
|
+
const introOffset = normalizedDistance * 0.8 + dot.randomOffset * 0.5;
|
|
583
|
+
let opacity = 0;
|
|
584
|
+
if (reverseProgress > introOffset) {
|
|
585
|
+
const fadeIn = (reverseProgress - introOffset) * 8;
|
|
586
|
+
opacity = Math.min(1, fadeIn * fadeIn) * dot.baseOpacity;
|
|
587
|
+
// Apply flicker effect if enabled
|
|
588
|
+
if (flicker) {
|
|
589
|
+
const flickerValue = Math.sin(time * dot.flickerSpeed * 3 + dot.flickerPhase);
|
|
590
|
+
const flickerMultiplier = 0.6 + (flickerValue * 0.4);
|
|
591
|
+
opacity *= flickerMultiplier;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
if (opacity > 0) {
|
|
595
|
+
// Calculate bulge displacement
|
|
596
|
+
let offsetX = 0;
|
|
597
|
+
let offsetY = 0;
|
|
598
|
+
let sizeMultiplier = 1;
|
|
599
|
+
let bulgeOpacity = 1;
|
|
600
|
+
if (bulgeEnabled) {
|
|
601
|
+
const dx = dot.x - centerX;
|
|
602
|
+
const dy = dot.y - centerY;
|
|
603
|
+
const distanceFromCenter = Math.sqrt(dx * dx + dy * dy);
|
|
604
|
+
const distanceToWave = Math.abs(distanceFromCenter - waveRadius);
|
|
605
|
+
const waveWidth = maxRadius * 0.15;
|
|
606
|
+
const distanceNorm = distanceToWave / waveWidth;
|
|
607
|
+
const waveFactor = Math.exp(-distanceNorm * distanceNorm * 4);
|
|
608
|
+
const angle = Math.atan2(dy, dx);
|
|
609
|
+
const displacementAmount = waveFactor * bulgeIntensity;
|
|
610
|
+
offsetX = Math.cos(angle) * displacementAmount * 0.3;
|
|
611
|
+
offsetY = Math.sin(angle) * displacementAmount * 0.3 - waveFactor * bulgeIntensity;
|
|
612
|
+
sizeMultiplier = 1 + waveFactor * 0.8;
|
|
613
|
+
bulgeOpacity = 0.3 + waveFactor * 0.7;
|
|
614
|
+
}
|
|
615
|
+
ctx.fillStyle = dot.color;
|
|
616
|
+
ctx.globalAlpha = opacity * bulgeOpacity;
|
|
617
|
+
const adjustedSize = size * sizeMultiplier;
|
|
618
|
+
const sizeOffset = (adjustedSize - size) / 2;
|
|
619
|
+
ctx.fillRect(dot.x + offsetX - sizeOffset, dot.y + offsetY - sizeOffset, adjustedSize, adjustedSize);
|
|
620
|
+
}
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
// Hide animation complete, reset progress and clear canvas
|
|
625
|
+
hideStartProgressRef.current = 0;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
ctx.globalAlpha = 1;
|
|
631
|
+
// Only continue animating if there's active animation or dynamic content
|
|
632
|
+
const hasActiveAnimation = isHoveredRef.current || hideStartProgressRef.current > 0;
|
|
633
|
+
const hasDynamicContent = flicker || (bulgeEnabled && showBulge);
|
|
634
|
+
if (hasActiveAnimation || hasDynamicContent) {
|
|
635
|
+
animationRef.current = requestAnimationFrame(animate);
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
// Clear the ref so the animation can be restarted
|
|
639
|
+
animationRef.current = undefined;
|
|
640
|
+
}
|
|
641
|
+
};
|
|
642
|
+
// Store animate function in ref so it can be restarted
|
|
643
|
+
animateFnRef.current = animate;
|
|
644
|
+
animate();
|
|
645
|
+
return () => {
|
|
646
|
+
window.removeEventListener("resize", updateSize);
|
|
647
|
+
if (animationRef.current) {
|
|
648
|
+
cancelAnimationFrame(animationRef.current);
|
|
649
|
+
}
|
|
650
|
+
};
|
|
651
|
+
}, [colors, size, spacing, speed, revealFrom, trigger, flicker, bulge, fps]);
|
|
652
|
+
// Manual trigger control via `active` prop
|
|
653
|
+
useEffect(() => {
|
|
654
|
+
if (trigger !== "manual")
|
|
655
|
+
return;
|
|
656
|
+
const now = Date.now();
|
|
657
|
+
if (active) {
|
|
658
|
+
// Mimic mouse enter
|
|
659
|
+
if (hideStartProgressRef.current > 0) {
|
|
660
|
+
const hideElapsed = (now - hideStartTimeRef.current) / 1000;
|
|
661
|
+
const hideSpeed = speed * 6;
|
|
662
|
+
const hideProgress = Math.pow(hideElapsed, 2) * hideSpeed;
|
|
663
|
+
const currentProgress = Math.max(0, hideStartProgressRef.current - hideProgress);
|
|
664
|
+
const effectiveElapsed = Math.pow(currentProgress / (speed * 3), 1 / 3);
|
|
665
|
+
const simulatedStartTime = now - effectiveElapsed * 1000;
|
|
666
|
+
revealStartTimeRef.current = simulatedStartTime;
|
|
667
|
+
}
|
|
668
|
+
else {
|
|
669
|
+
revealStartTimeRef.current = now;
|
|
670
|
+
}
|
|
671
|
+
if (bulge && !bulge.repeat) {
|
|
672
|
+
bulgeStartTimeRef.current = now;
|
|
673
|
+
}
|
|
674
|
+
isHoveredRef.current = true;
|
|
675
|
+
hideStartProgressRef.current = 0;
|
|
676
|
+
isStaticRef.current = false; // Invalidate cache
|
|
677
|
+
// Restart animation loop if it was stopped
|
|
678
|
+
if (!animationRef.current && animateFnRef.current) {
|
|
679
|
+
animationRef.current = requestAnimationFrame(animateFnRef.current);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
else {
|
|
683
|
+
// Mimic mouse leave
|
|
684
|
+
if (isHoveredRef.current) {
|
|
685
|
+
const currentProgress = maxRevealProgressRef.current;
|
|
686
|
+
hideStartTimeRef.current = Date.now();
|
|
687
|
+
hideStartProgressRef.current = currentProgress;
|
|
688
|
+
isHoveredRef.current = false;
|
|
689
|
+
// Restart animation loop if it was stopped (for hide animation)
|
|
690
|
+
if (!animationRef.current && animateFnRef.current) {
|
|
691
|
+
animationRef.current = requestAnimationFrame(animateFnRef.current);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}, [active, trigger, speed, bulge]);
|
|
696
|
+
const handleMouseEnter = () => {
|
|
697
|
+
if (trigger === "hover" && !isHoveredRef.current) {
|
|
698
|
+
const now = Date.now();
|
|
699
|
+
// If we're currently hiding, resume from where we left off
|
|
700
|
+
if (hideStartProgressRef.current > 0) {
|
|
701
|
+
// Calculate current position during hide
|
|
702
|
+
const hideElapsed = (now - hideStartTimeRef.current) / 1000;
|
|
703
|
+
const hideSpeed = speed * 6;
|
|
704
|
+
const hideProgress = Math.pow(hideElapsed, 2) * hideSpeed;
|
|
705
|
+
const currentProgress = Math.max(0, hideStartProgressRef.current - hideProgress);
|
|
706
|
+
// Reverse the cubic easing formula: progress = elapsed^3 * speed * 3
|
|
707
|
+
// So: elapsed = (progress / (speed * 3)) ^ (1/3)
|
|
708
|
+
const effectiveElapsed = Math.pow(currentProgress / (speed * 3), 1 / 3);
|
|
709
|
+
const simulatedStartTime = now - effectiveElapsed * 1000;
|
|
710
|
+
revealStartTimeRef.current = simulatedStartTime;
|
|
711
|
+
}
|
|
712
|
+
else {
|
|
713
|
+
// Fresh start
|
|
714
|
+
revealStartTimeRef.current = now;
|
|
715
|
+
}
|
|
716
|
+
// Reset bulge animation on each hover when repeat is false
|
|
717
|
+
if (bulge && !bulge.repeat) {
|
|
718
|
+
bulgeStartTimeRef.current = now;
|
|
719
|
+
}
|
|
720
|
+
isHoveredRef.current = true;
|
|
721
|
+
hideStartProgressRef.current = 0; // Clear hide state
|
|
722
|
+
isStaticRef.current = false; // Invalidate cache
|
|
723
|
+
// Restart animation loop if it was stopped
|
|
724
|
+
if (!animationRef.current && animateFnRef.current) {
|
|
725
|
+
animationRef.current = requestAnimationFrame(animateFnRef.current);
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
};
|
|
729
|
+
const handleMouseMove = () => {
|
|
730
|
+
// Recovery mechanism: if cursor is moving over the element but we're not in hover state, trigger it
|
|
731
|
+
if (trigger === "hover" && !isHoveredRef.current) {
|
|
732
|
+
handleMouseEnter();
|
|
733
|
+
}
|
|
734
|
+
};
|
|
735
|
+
const handleMouseLeave = () => {
|
|
736
|
+
if (trigger === "hover" && isHoveredRef.current) {
|
|
737
|
+
const currentProgress = maxRevealProgressRef.current;
|
|
738
|
+
hideStartTimeRef.current = Date.now();
|
|
739
|
+
hideStartProgressRef.current = currentProgress; // Capture current progress
|
|
740
|
+
isHoveredRef.current = false;
|
|
741
|
+
// Restart animation loop if it was stopped (for hide animation)
|
|
742
|
+
if (!animationRef.current && animateFnRef.current) {
|
|
743
|
+
animationRef.current = requestAnimationFrame(animateFnRef.current);
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
};
|
|
747
|
+
const handleClick = () => {
|
|
748
|
+
if (trigger !== "click")
|
|
749
|
+
return;
|
|
750
|
+
if (!isHoveredRef.current) {
|
|
751
|
+
// Enter
|
|
752
|
+
const now = Date.now();
|
|
753
|
+
if (hideStartProgressRef.current > 0) {
|
|
754
|
+
const hideElapsed = (now - hideStartTimeRef.current) / 1000;
|
|
755
|
+
const hideSpeed = speed * 6;
|
|
756
|
+
const hideProgress = Math.pow(hideElapsed, 2) * hideSpeed;
|
|
757
|
+
const currentProgress = Math.max(0, hideStartProgressRef.current - hideProgress);
|
|
758
|
+
const effectiveElapsed = Math.pow(currentProgress / (speed * 3), 1 / 3);
|
|
759
|
+
const simulatedStartTime = now - effectiveElapsed * 1000;
|
|
760
|
+
revealStartTimeRef.current = simulatedStartTime;
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
revealStartTimeRef.current = now;
|
|
764
|
+
}
|
|
765
|
+
if (bulge && !bulge.repeat) {
|
|
766
|
+
bulgeStartTimeRef.current = now;
|
|
767
|
+
}
|
|
768
|
+
isHoveredRef.current = true;
|
|
769
|
+
hideStartProgressRef.current = 0;
|
|
770
|
+
isStaticRef.current = false; // Invalidate cache
|
|
771
|
+
// Restart animation loop if it was stopped
|
|
772
|
+
if (!animationRef.current && animateFnRef.current) {
|
|
773
|
+
animationRef.current = requestAnimationFrame(animateFnRef.current);
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
else {
|
|
777
|
+
// Leave
|
|
778
|
+
const currentProgress = maxRevealProgressRef.current;
|
|
779
|
+
hideStartTimeRef.current = Date.now();
|
|
780
|
+
hideStartProgressRef.current = currentProgress;
|
|
781
|
+
isHoveredRef.current = false;
|
|
782
|
+
// Restart animation loop if it was stopped (for hide animation)
|
|
783
|
+
if (!animationRef.current && animateFnRef.current) {
|
|
784
|
+
animationRef.current = requestAnimationFrame(animateFnRef.current);
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
};
|
|
788
|
+
return (_jsxs(Flex, { ref: containerRef, fill: true, overflow: "hidden", onMouseEnter: handleMouseEnter, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, onClick: handleClick, ...rest, children: [_jsx("canvas", { ref: canvasRef, style: {
|
|
789
|
+
position: "absolute",
|
|
790
|
+
top: 0,
|
|
791
|
+
left: 0,
|
|
792
|
+
width: "100%",
|
|
793
|
+
height: "100%",
|
|
794
|
+
pointerEvents: "none",
|
|
795
|
+
} }), children] }));
|
|
796
|
+
});
|
|
797
|
+
MatrixFx.displayName = "MatrixFx";
|
|
798
|
+
export { MatrixFx };
|
|
799
|
+
//# sourceMappingURL=MatrixFx.js.map
|