@flikk/ui 1.0.0-beta.27 → 1.0.0-beta.29
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/dist/bg/1.webp +0 -0
- package/dist/bg/10.webp +0 -0
- package/dist/bg/11.webp +0 -0
- package/dist/bg/12.webp +0 -0
- package/dist/bg/13.webp +0 -0
- package/dist/bg/14.webp +0 -0
- package/dist/bg/15.webp +0 -0
- package/dist/bg/16.webp +0 -0
- package/dist/bg/17.webp +0 -0
- package/dist/bg/18.webp +0 -0
- package/dist/bg/19.webp +0 -0
- package/dist/bg/2.webp +0 -0
- package/dist/bg/20.webp +0 -0
- package/dist/bg/21.webp +0 -0
- package/dist/bg/22.webp +0 -0
- package/dist/bg/3.webp +0 -0
- package/dist/bg/4.webp +0 -0
- package/dist/bg/5.webp +0 -0
- package/dist/bg/6.webp +0 -0
- package/dist/bg/7.webp +0 -0
- package/dist/bg/8.webp +0 -0
- package/dist/bg/9.webp +0 -0
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
- package/dist/components/ai/PromptInput/PromptInput.js +7 -143
- package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -88
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
- package/dist/components/canvas/Background.d.ts +19 -0
- package/dist/components/canvas/Background.js +23 -0
- package/dist/components/canvas/BaseNode.d.ts +15 -0
- package/dist/components/canvas/BaseNode.js +20 -0
- package/dist/components/canvas/CanvasToolbar.d.ts +34 -0
- package/dist/components/canvas/CanvasToolbar.js +34 -0
- package/dist/components/canvas/Edge.d.ts +35 -0
- package/dist/components/canvas/Edge.js +97 -0
- package/dist/components/canvas/EdgeLayer.d.ts +18 -0
- package/dist/components/canvas/EdgeLayer.js +111 -0
- package/dist/components/canvas/Handle.d.ts +11 -0
- package/dist/components/canvas/Handle.js +63 -0
- package/dist/components/canvas/MiniMap.d.ts +22 -0
- package/dist/components/canvas/MiniMap.js +105 -0
- package/dist/components/canvas/NodeCanvas.d.ts +10 -0
- package/dist/components/canvas/NodeCanvas.js +477 -0
- package/dist/components/canvas/NodeCanvas.theme.d.ts +7 -0
- package/dist/components/canvas/NodeCanvas.theme.js +9 -0
- package/dist/components/canvas/NodeCanvas.types.d.ts +187 -0
- package/dist/components/canvas/NodeControls.d.ts +25 -0
- package/dist/components/canvas/NodeControls.js +40 -0
- package/dist/components/canvas/NodeRenderer.d.ts +19 -0
- package/dist/components/canvas/NodeRenderer.js +117 -0
- package/dist/components/canvas/changes.d.ts +11 -0
- package/dist/components/canvas/changes.js +76 -0
- package/dist/components/canvas/context/CanvasContext.d.ts +32 -0
- package/dist/components/canvas/context/CanvasContext.js +14 -0
- package/dist/components/canvas/context/ConnectionContext.d.ts +33 -0
- package/dist/components/canvas/context/ConnectionContext.js +13 -0
- package/dist/components/canvas/context/HandleRegistry.d.ts +24 -0
- package/dist/components/canvas/context/HandleRegistry.js +15 -0
- package/dist/components/canvas/context/InteractionContext.d.ts +18 -0
- package/dist/components/canvas/context/InteractionContext.js +14 -0
- package/dist/components/canvas/context/NodeIdContext.d.ts +3 -0
- package/dist/components/canvas/context/NodeIdContext.js +15 -0
- package/dist/components/canvas/hooks/useConnection.d.ts +17 -0
- package/dist/components/canvas/hooks/useConnection.js +29 -0
- package/dist/components/canvas/hooks/useMarquee.d.ts +25 -0
- package/dist/components/canvas/hooks/useMarquee.js +91 -0
- package/dist/components/canvas/hooks/useNodeDrag.d.ts +23 -0
- package/dist/components/canvas/hooks/useNodeDrag.js +110 -0
- package/dist/components/canvas/hooks/usePanZoom.d.ts +30 -0
- package/dist/components/canvas/hooks/usePanZoom.js +189 -0
- package/dist/components/canvas/hooks/useViewport.d.ts +21 -0
- package/dist/components/canvas/hooks/useViewport.js +35 -0
- package/dist/components/canvas/index.d.ts +14 -0
- package/dist/components/canvas/index.js +12 -0
- package/dist/components/canvas/layout.d.ts +22 -0
- package/dist/components/canvas/layout.js +67 -0
- package/dist/components/canvas/utils.d.ts +4 -0
- package/dist/components/canvas/utils.js +16 -0
- package/dist/components/charts/AreaChart/AreaChart.js +136 -101
- package/dist/components/charts/AreaChart/AreaChart.types.d.ts +5 -5
- package/dist/components/charts/AreaChart/AreaChart.types.js +1 -0
- package/dist/components/charts/BarChart/BarChart.js +207 -143
- package/dist/components/charts/BarChart/BarChart.types.d.ts +4 -4
- package/dist/components/charts/BarChart/BarChart.types.js +1 -0
- package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
- package/dist/components/charts/LineChart/LineChart.js +88 -72
- package/dist/components/charts/LineChart/LineChart.types.d.ts +3 -3
- package/dist/components/charts/RadarChart/RadarChart.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.theme.js +5 -2
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +62 -72
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +10 -1
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +3 -9
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +33 -33
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
- package/dist/components/charts/hooks/index.d.ts +2 -0
- package/dist/components/charts/hooks/useChartDimensions.d.ts +29 -0
- package/dist/components/charts/hooks/useChartDimensions.js +42 -0
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +1 -1
- package/dist/components/charts/types/chart.types.d.ts +11 -2
- package/dist/components/charts/types/chart.types.js +10 -3
- package/dist/components/core/Avatar/Avatar.js +5 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.js +5 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +4 -2
- package/dist/components/core/Badge/Badge.js +1 -1
- package/dist/components/core/Badge/Badge.theme.js +16 -15
- package/dist/components/core/Button/Button.js +1 -1
- package/dist/components/core/Button/Button.theme.js +2 -2
- package/dist/components/core/Calendar/Calendar.theme.js +1 -1
- package/dist/components/core/Card/Card.js +7 -3
- package/dist/components/core/Card/Card.theme.js +3 -3
- package/dist/components/core/Card/Card.types.d.ts +27 -2
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +2 -2
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +2 -2
- package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
- package/dist/components/core/Dropdown/Dropdown.theme.js +3 -3
- package/dist/components/core/Dropdown/DropdownMenu.js +57 -29
- package/dist/components/core/HeroCard/HeroCard.d.ts +5 -0
- package/dist/components/core/HeroCard/HeroCard.js +99 -0
- package/dist/components/core/HeroCard/HeroCard.theme.d.ts +3 -0
- package/dist/components/core/HeroCard/HeroCard.theme.js +8 -0
- package/dist/components/core/HeroCard/HeroCard.types.d.ts +70 -0
- package/dist/components/core/HeroCard/index.d.ts +4 -0
- package/dist/components/core/Kbd/Kbd.theme.js +1 -1
- package/dist/components/core/Modal/Modal.d.ts +1 -1
- package/dist/components/core/Modal/Modal.js +2 -7
- package/dist/components/core/Modal/Modal.theme.js +4 -8
- package/dist/components/core/Modal/Modal.types.d.ts +0 -10
- package/dist/components/core/Modal/index.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStack.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStack.types.d.ts +1 -2
- package/dist/components/core/ModalStack/ModalStackModal.d.ts +1 -1
- package/dist/components/core/ModalStack/ModalStackModal.js +2 -7
- package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
- package/dist/components/core/Popover/Popover.theme.js +1 -1
- package/dist/components/core/ScrollArea/ScrollArea.js +242 -4
- package/dist/components/core/ScrollArea/ScrollArea.types.d.ts +12 -1
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +4 -0
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +23 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +4 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.types.d.ts +5 -0
- package/dist/components/core/Segmented/Segmented.theme.js +2 -2
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
- package/dist/components/core/index.d.ts +1 -0
- package/dist/components/core/index.js +2 -0
- package/dist/components/data-display/DescriptionList/DescriptionList.js +23 -7
- package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +10 -3
- package/dist/components/data-display/DescriptionList/DescriptionList.types.d.ts +49 -10
- package/dist/components/data-display/DescriptionList/index.d.ts +1 -1
- package/dist/components/data-display/Feed/Feed.js +28 -5
- package/dist/components/data-display/Feed/Feed.theme.js +1 -1
- package/dist/components/data-display/Feed/Feed.types.d.ts +32 -1
- package/dist/components/data-display/Feed/index.d.ts +1 -1
- package/dist/components/data-display/Metric/Metric.js +8 -8
- package/dist/components/data-display/Metric/Metric.theme.d.ts +3 -2
- package/dist/components/data-display/Metric/Metric.theme.js +50 -68
- package/dist/components/data-display/Metric/Metric.types.d.ts +19 -21
- package/dist/components/data-display/Table/Table.js +2 -2
- package/dist/components/data-display/Table/Table.theme.js +24 -4
- package/dist/components/data-display/Table/Table.types.d.ts +8 -0
- package/dist/components/data-display/Table/TableBody.js +2 -2
- package/dist/components/data-display/Table/TableCell.js +1 -1
- package/dist/components/data-display/Table/TableRow.d.ts +1 -1
- package/dist/components/data-display/Table/TableRow.js +9 -2
- package/dist/components/data-display/Timeline/Timeline.js +27 -5
- package/dist/components/data-display/Timeline/Timeline.theme.d.ts +10 -2
- package/dist/components/data-display/Timeline/Timeline.theme.js +14 -8
- package/dist/components/data-display/Timeline/Timeline.types.d.ts +48 -16
- package/dist/components/data-display/Timeline/Timeline.utils.d.ts +6 -0
- package/dist/components/data-display/Timeline/Timeline.utils.js +11 -0
- package/dist/components/data-display/Timeline/TimelineItem.js +13 -20
- package/dist/components/data-display/Timeline/TimelineMarker.js +10 -8
- package/dist/components/data-display/Timeline/index.d.ts +2 -2
- package/dist/components/effects/3d/index.d.ts +0 -2
- package/dist/components/effects/3d/index.js +0 -1
- package/dist/components/effects/DotPattern/DotPattern.js +1 -1
- package/dist/components/effects/Overlay/Overlay.theme.js +1 -2
- package/dist/components/effects/Preloader/Preloader.animations.d.ts +23 -0
- package/dist/components/effects/Preloader/Preloader.animations.js +150 -0
- package/dist/components/effects/Preloader/Preloader.d.ts +3 -0
- package/dist/components/effects/Preloader/Preloader.js +119 -0
- package/dist/components/effects/Preloader/Preloader.types.d.ts +63 -0
- package/dist/components/effects/Preloader/index.d.ts +2 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +25 -14
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +2 -0
- package/dist/components/effects/TiltCard/TiltCard.d.ts +12 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.d.ts +28 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.js +114 -0
- package/dist/components/effects/TiltCard/TiltCard.js +177 -0
- package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.d.ts → TiltCard/TiltCard.shaders.d.ts} +1 -1
- package/dist/components/effects/{SpotlightBorder/SpotlightBorder.shaders.js → TiltCard/TiltCard.shaders.js} +1 -1
- package/dist/components/effects/TiltCard/TiltCard.types.d.ts +88 -0
- package/dist/components/effects/TiltCard/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +4 -12
- package/dist/components/effects/index.js +2 -6
- package/dist/components/forms/Checkbox/Checkbox.js +7 -1
- package/dist/components/forms/DatePicker/DatePicker.theme.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.js +1 -89
- package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +2 -2
- package/dist/components/forms/Slider/Slider.theme.js +1 -1
- package/dist/components/forms/Switch/Switch.js +27 -15
- package/dist/components/forms/Switch/Switch.theme.d.ts +36 -6
- package/dist/components/forms/Switch/Switch.theme.js +33 -4
- package/dist/components/forms/Switch/Switch.types.d.ts +12 -2
- package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -2
- package/dist/components/forms/TimePicker/TimePickerContent.js +1 -90
- package/dist/components/forms/forms.theme.js +1 -1
- package/dist/components/forms/index.d.ts +0 -4
- package/dist/components/forms/index.js +0 -92
- package/dist/components/generative/GenerativeView.d.ts +21 -0
- package/dist/components/generative/GenerativeView.js +116 -0
- package/dist/components/generative/actions.d.ts +26 -0
- package/dist/components/generative/actions.js +51 -0
- package/dist/components/generative/index.d.ts +11 -0
- package/dist/components/generative/index.js +9 -0
- package/dist/components/generative/registry.d.ts +43 -0
- package/dist/components/generative/registry.js +114 -0
- package/dist/components/generative/resolvers.d.ts +35 -0
- package/dist/components/generative/resolvers.js +93 -0
- package/dist/components/generative/schema.generated.d.ts +2 -0
- package/dist/components/generative/schema.generated.js +1639 -0
- package/dist/components/generative/schemaTypes.d.ts +30 -0
- package/dist/components/generative/streaming.d.ts +39 -0
- package/dist/components/generative/streaming.js +283 -0
- package/dist/components/generative/tools.d.ts +21 -0
- package/dist/components/generative/tools.js +54 -0
- package/dist/components/generative/types.d.ts +41 -0
- package/dist/components/generative/useGenerativeStream.d.ts +37 -0
- package/dist/components/generative/useGenerativeStream.js +36 -0
- package/dist/components/generative/validate.d.ts +24 -0
- package/dist/components/generative/validate.js +259 -0
- package/dist/components/layout/AppShell/AppShell.theme.js +2 -2
- package/dist/components/layout/FormLayout/FormLayout.js +1 -90
- package/dist/components/layout/Grid/Grid.d.ts +3 -0
- package/dist/components/layout/Grid/Grid.js +50 -0
- package/dist/components/layout/Grid/Grid.theme.d.ts +2 -0
- package/dist/components/layout/Grid/Grid.theme.js +35 -0
- package/dist/components/layout/Grid/Grid.types.d.ts +57 -0
- package/dist/components/layout/Grid/index.d.ts +3 -0
- package/dist/components/layout/Section/Section.d.ts +3 -0
- package/dist/components/layout/Section/Section.js +18 -0
- package/dist/components/layout/Section/Section.theme.d.ts +2 -0
- package/dist/components/layout/Section/Section.theme.js +10 -0
- package/dist/components/layout/Section/Section.types.d.ts +34 -0
- package/dist/components/layout/Section/index.d.ts +3 -0
- package/dist/components/layout/Stack/Stack.d.ts +3 -0
- package/dist/components/layout/Stack/Stack.js +19 -0
- package/dist/components/layout/Stack/Stack.theme.d.ts +2 -0
- package/dist/components/layout/Stack/Stack.theme.js +10 -0
- package/dist/components/layout/Stack/Stack.types.d.ts +39 -0
- package/dist/components/layout/Stack/index.d.ts +3 -0
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.js +6 -0
- package/dist/generative.schema.json +1637 -0
- package/dist/index.js +180 -180
- package/dist/registry.json +648 -464
- package/dist/styles.css +1 -1
- package/dist/tools.json +1731 -0
- package/package.json +17 -4
- package/src/global.scss +53 -101
- package/src/styles/theme.css +687 -493
- package/dist/bg/1.jpg +0 -0
- package/dist/bg/10.jpg +0 -0
- package/dist/bg/11.jpg +0 -0
- package/dist/bg/14.jpg +0 -0
- package/dist/bg/15.jpg +0 -0
- package/dist/bg/16.jpg +0 -0
- package/dist/bg/17.jpg +0 -0
- package/dist/bg/18.jpg +0 -0
- package/dist/bg/19.jpg +0 -0
- package/dist/bg/2.jpg +0 -0
- package/dist/bg/20.jpg +0 -0
- package/dist/bg/21.jpg +0 -0
- package/dist/bg/22.jpg +0 -0
- package/dist/bg/23.jpg +0 -0
- package/dist/bg/24.jpg +0 -0
- package/dist/bg/3.jpg +0 -0
- package/dist/bg/4.jpg +0 -0
- package/dist/bg/5.jpg +0 -0
- package/dist/bg/6.jpg +0 -0
- package/dist/bg/7.jpg +0 -0
- package/dist/bg/8.jpg +0 -0
- package/dist/bg/9.jpg +0 -0
- package/dist/components/effects/MorphingText/MorphingText.d.ts +0 -17
- package/dist/components/effects/MorphingText/MorphingText.js +0 -125
- package/dist/components/effects/MorphingText/MorphingText.types.d.ts +0 -18
- package/dist/components/effects/MorphingText/index.d.ts +0 -2
- package/dist/components/effects/PageTransition/PageTransition.animations.d.ts +0 -8
- package/dist/components/effects/PageTransition/PageTransition.animations.js +0 -53
- package/dist/components/effects/PageTransition/PageTransition.d.ts +0 -3
- package/dist/components/effects/PageTransition/PageTransition.js +0 -82
- package/dist/components/effects/PageTransition/PageTransition.types.d.ts +0 -15
- package/dist/components/effects/PageTransition/index.d.ts +0 -2
- package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +0 -26
- package/dist/components/effects/ParallaxSection/ParallaxSection.js +0 -71
- package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +0 -11
- package/dist/components/effects/ParallaxSection/index.d.ts +0 -2
- package/dist/components/effects/Spotlight/Spotlight.d.ts +0 -36
- package/dist/components/effects/Spotlight/Spotlight.js +0 -112
- package/dist/components/effects/Spotlight/Spotlight.types.d.ts +0 -29
- package/dist/components/effects/Spotlight/index.d.ts +0 -2
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.d.ts +0 -18
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.js +0 -213
- package/dist/components/effects/SpotlightBorder/SpotlightBorder.types.d.ts +0 -61
- package/dist/components/effects/SpotlightBorder/index.d.ts +0 -2
- package/dist/components/effects/StickyScroll/StickyScroll.d.ts +0 -30
- package/dist/components/effects/StickyScroll/StickyScroll.js +0 -128
- package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +0 -19
- package/dist/components/effects/StickyScroll/index.d.ts +0 -2
- package/dist/components/forms/CronInput/CronInput.d.ts +0 -3
- package/dist/components/forms/CronInput/CronInput.js +0 -113
- package/dist/components/forms/CronInput/CronInput.theme.d.ts +0 -6
- package/dist/components/forms/CronInput/CronInput.theme.js +0 -75
- package/dist/components/forms/CronInput/CronInput.types.d.ts +0 -109
- package/dist/components/forms/CronInput/CronInput.utils.d.ts +0 -67
- package/dist/components/forms/CronInput/CronInput.utils.js +0 -505
- package/dist/components/forms/CronInput/index.d.ts +0 -4
- /package/dist/components/effects/{SpotlightBorder/SpotlightBorder.types.js → TiltCard/TiltCard.types.js} +0 -0
package/dist/bg/1.jpg
DELETED
|
Binary file
|
package/dist/bg/10.jpg
DELETED
|
Binary file
|
package/dist/bg/11.jpg
DELETED
|
Binary file
|
package/dist/bg/14.jpg
DELETED
|
Binary file
|
package/dist/bg/15.jpg
DELETED
|
Binary file
|
package/dist/bg/16.jpg
DELETED
|
Binary file
|
package/dist/bg/17.jpg
DELETED
|
Binary file
|
package/dist/bg/18.jpg
DELETED
|
Binary file
|
package/dist/bg/19.jpg
DELETED
|
Binary file
|
package/dist/bg/2.jpg
DELETED
|
Binary file
|
package/dist/bg/20.jpg
DELETED
|
Binary file
|
package/dist/bg/21.jpg
DELETED
|
Binary file
|
package/dist/bg/22.jpg
DELETED
|
Binary file
|
package/dist/bg/23.jpg
DELETED
|
Binary file
|
package/dist/bg/24.jpg
DELETED
|
Binary file
|
package/dist/bg/3.jpg
DELETED
|
Binary file
|
package/dist/bg/4.jpg
DELETED
|
Binary file
|
package/dist/bg/5.jpg
DELETED
|
Binary file
|
package/dist/bg/6.jpg
DELETED
|
Binary file
|
package/dist/bg/7.jpg
DELETED
|
Binary file
|
package/dist/bg/8.jpg
DELETED
|
Binary file
|
package/dist/bg/9.jpg
DELETED
|
Binary file
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { MorphingTextProps } from './MorphingText.types';
|
|
3
|
-
/**
|
|
4
|
-
* MorphingText smoothly morphs between different text strings using a blur/fade
|
|
5
|
-
* transition. Two overlapping text layers cross-fade with a Gaussian blur effect
|
|
6
|
-
* to create a seamless morphing appearance.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```tsx
|
|
10
|
-
* <MorphingText
|
|
11
|
-
* texts={["Innovative", "Powerful", "Beautiful"]}
|
|
12
|
-
* interval={3000}
|
|
13
|
-
* transitionDuration={800}
|
|
14
|
-
* />
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
export declare const MorphingText: React.ForwardRefExoticComponent<MorphingTextProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import React__default, { useState, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
|
|
3
|
-
import { useReducedMotion, motion, AnimatePresence } from 'motion/react';
|
|
4
|
-
import { cn } from '../../../utils/cn.js';
|
|
5
|
-
|
|
6
|
-
const useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
|
|
7
|
-
/**
|
|
8
|
-
* MorphingText smoothly morphs between different text strings using a blur/fade
|
|
9
|
-
* transition. Two overlapping text layers cross-fade with a Gaussian blur effect
|
|
10
|
-
* to create a seamless morphing appearance.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```tsx
|
|
14
|
-
* <MorphingText
|
|
15
|
-
* texts={["Innovative", "Powerful", "Beautiful"]}
|
|
16
|
-
* interval={3000}
|
|
17
|
-
* transitionDuration={800}
|
|
18
|
-
* />
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
const MorphingText = React__default.forwardRef(({ texts, interval = 3000, transitionDuration = 800, loop = true, pauseOnHover = false, currentIndex: controlledIndex, onTextChange, className, ...props }, ref) => {
|
|
22
|
-
const shouldReduceMotion = useReducedMotion();
|
|
23
|
-
const isControlled = controlledIndex !== undefined;
|
|
24
|
-
const [internalIndex, setInternalIndex] = useState(0);
|
|
25
|
-
const activeIndex = isControlled ? controlledIndex : internalIndex;
|
|
26
|
-
const measureRefs = useRef([]);
|
|
27
|
-
const [textRects, setTextRects] = useState([]);
|
|
28
|
-
const [isPaused, setIsPaused] = useState(false);
|
|
29
|
-
const intervalRef = useRef(null);
|
|
30
|
-
const hasReachedEnd = useRef(false);
|
|
31
|
-
// Clamp activeIndex to valid range
|
|
32
|
-
const safeIndex = texts.length > 0 ? ((activeIndex % texts.length) + texts.length) % texts.length : 0;
|
|
33
|
-
const advanceIndex = useCallback(() => {
|
|
34
|
-
if (isControlled)
|
|
35
|
-
return;
|
|
36
|
-
setInternalIndex((prev) => {
|
|
37
|
-
const nextIndex = prev + 1;
|
|
38
|
-
if (!loop && nextIndex >= texts.length) {
|
|
39
|
-
hasReachedEnd.current = true;
|
|
40
|
-
return prev;
|
|
41
|
-
}
|
|
42
|
-
const resolvedNext = nextIndex % texts.length;
|
|
43
|
-
onTextChange === null || onTextChange === void 0 ? void 0 : onTextChange(resolvedNext, texts[resolvedNext]);
|
|
44
|
-
return resolvedNext;
|
|
45
|
-
});
|
|
46
|
-
}, [isControlled, loop, texts, onTextChange]);
|
|
47
|
-
// Auto-cycling interval
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (isControlled || isPaused || hasReachedEnd.current) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
intervalRef.current = setInterval(advanceIndex, interval);
|
|
53
|
-
return () => {
|
|
54
|
-
if (intervalRef.current) {
|
|
55
|
-
clearInterval(intervalRef.current);
|
|
56
|
-
intervalRef.current = null;
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}, [isControlled, isPaused, interval, advanceIndex]);
|
|
60
|
-
// Reset hasReachedEnd when loop changes or texts change
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
hasReachedEnd.current = false;
|
|
63
|
-
}, [loop, texts]);
|
|
64
|
-
useIsomorphicLayoutEffect(() => {
|
|
65
|
-
const measure = () => {
|
|
66
|
-
setTextRects(texts.map((_, index) => {
|
|
67
|
-
var _a, _b, _c;
|
|
68
|
-
const rect = (_a = measureRefs.current[index]) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
|
|
69
|
-
return {
|
|
70
|
-
width: (_b = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _b !== void 0 ? _b : 0,
|
|
71
|
-
height: (_c = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _c !== void 0 ? _c : 0,
|
|
72
|
-
};
|
|
73
|
-
}));
|
|
74
|
-
};
|
|
75
|
-
measure();
|
|
76
|
-
if (typeof ResizeObserver === 'undefined') {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const observer = new ResizeObserver(measure);
|
|
80
|
-
measureRefs.current.forEach((element) => {
|
|
81
|
-
if (element)
|
|
82
|
-
observer.observe(element);
|
|
83
|
-
});
|
|
84
|
-
return () => observer.disconnect();
|
|
85
|
-
}, [texts]);
|
|
86
|
-
// Fire onTextChange for controlled index changes
|
|
87
|
-
useEffect(() => {
|
|
88
|
-
if (isControlled) {
|
|
89
|
-
onTextChange === null || onTextChange === void 0 ? void 0 : onTextChange(safeIndex, texts[safeIndex]);
|
|
90
|
-
}
|
|
91
|
-
}, [isControlled, safeIndex, texts, onTextChange]);
|
|
92
|
-
const handleMouseEnter = () => {
|
|
93
|
-
if (pauseOnHover)
|
|
94
|
-
setIsPaused(true);
|
|
95
|
-
};
|
|
96
|
-
const handleMouseLeave = () => {
|
|
97
|
-
if (pauseOnHover)
|
|
98
|
-
setIsPaused(false);
|
|
99
|
-
};
|
|
100
|
-
if (texts.length === 0) {
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
const durationSeconds = transitionDuration / 1000;
|
|
104
|
-
const currentText = texts[safeIndex];
|
|
105
|
-
const currentRect = textRects[safeIndex];
|
|
106
|
-
const measuredSize = (currentRect === null || currentRect === void 0 ? void 0 : currentRect.width) && (currentRect === null || currentRect === void 0 ? void 0 : currentRect.height)
|
|
107
|
-
? { width: currentRect.width, height: currentRect.height }
|
|
108
|
-
: undefined;
|
|
109
|
-
// Reduced motion: instant swap with no animation
|
|
110
|
-
if (shouldReduceMotion) {
|
|
111
|
-
return (jsx("div", { ref: ref, className: cn('relative inline-block', className), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, "aria-live": "polite", "aria-atomic": "true", ...props, children: jsx("span", { children: currentText }) }));
|
|
112
|
-
}
|
|
113
|
-
return (jsx("div", { ref: ref, className: cn('relative inline-block align-bottom', className), onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, "aria-live": "polite", "aria-atomic": "true", ...props, children: jsxs(motion.span, { className: "relative inline-block align-bottom", initial: false, animate: measuredSize, transition: {
|
|
114
|
-
duration: durationSeconds,
|
|
115
|
-
ease: 'easeInOut',
|
|
116
|
-
}, children: [jsx("span", { className: "pointer-events-none invisible absolute left-0 top-0 whitespace-nowrap", "aria-hidden": "true", children: texts.map((text, index) => (jsx("span", { ref: (element) => {
|
|
117
|
-
measureRefs.current[index] = element;
|
|
118
|
-
}, className: "block w-fit whitespace-nowrap", children: text }, `${text}-${index}`))) }), !measuredSize && (jsx("span", { className: "whitespace-nowrap", children: currentText })), measuredSize && (jsx(AnimatePresence, { mode: "popLayout", initial: false, children: jsx(motion.span, { className: "absolute left-0 top-0 flex whitespace-nowrap", initial: { opacity: 0, filter: 'blur(8px)' }, animate: { opacity: 1, filter: 'blur(0px)' }, exit: { opacity: 0, filter: 'blur(8px)' }, transition: {
|
|
119
|
-
duration: durationSeconds,
|
|
120
|
-
ease: 'easeInOut',
|
|
121
|
-
}, children: currentText }, safeIndex) }))] }) }));
|
|
122
|
-
});
|
|
123
|
-
MorphingText.displayName = "MorphingText";
|
|
124
|
-
|
|
125
|
-
export { MorphingText };
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export interface MorphingTextProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
2
|
-
/** Array of text strings to morph between */
|
|
3
|
-
texts: string[];
|
|
4
|
-
/** Time between transitions in ms (default 3000) */
|
|
5
|
-
interval?: number;
|
|
6
|
-
/** Transition duration in ms (default 800) */
|
|
7
|
-
transitionDuration?: number;
|
|
8
|
-
/** Loop continuously (default true) */
|
|
9
|
-
loop?: boolean;
|
|
10
|
-
/** Pause cycling on hover (default false) */
|
|
11
|
-
pauseOnHover?: boolean;
|
|
12
|
-
/** Controlled current index (overrides internal state) */
|
|
13
|
-
currentIndex?: number;
|
|
14
|
-
/** Callback when the active text changes */
|
|
15
|
-
onTextChange?: (index: number, text: string) => void;
|
|
16
|
-
/** Additional class names for the container */
|
|
17
|
-
className?: string;
|
|
18
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { PageTransitionDirection } from './PageTransition.types';
|
|
2
|
-
import type { Variants } from 'motion/react';
|
|
3
|
-
export declare const buildCurtainVariants: (direction: PageTransitionDirection, duration: number) => Variants;
|
|
4
|
-
export declare const buildLogoParallaxVariants: (direction: PageTransitionDirection, duration: number) => Variants;
|
|
5
|
-
export declare const buildSplitVariants: (axis: "h" | "v", duration: number) => {
|
|
6
|
-
panel1: Variants;
|
|
7
|
-
panel2: Variants;
|
|
8
|
-
};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
const exitMap = {
|
|
2
|
-
up: { y: '-100%', x: 0 },
|
|
3
|
-
down: { y: '100%', x: 0 },
|
|
4
|
-
left: { x: '-100%', y: 0 },
|
|
5
|
-
right: { x: '100%', y: 0 },
|
|
6
|
-
};
|
|
7
|
-
const buildCurtainVariants = (direction, duration) => ({
|
|
8
|
-
covered: { y: 0, x: 0 },
|
|
9
|
-
exit: {
|
|
10
|
-
...exitMap[direction],
|
|
11
|
-
transition: {
|
|
12
|
-
duration,
|
|
13
|
-
ease: [0.76, 0, 0.24, 1],
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
});
|
|
17
|
-
// Logo is rendered INSIDE the curtain. These are relative offsets that
|
|
18
|
-
// counteract ~30% of the curtain's motion, making the logo appear to
|
|
19
|
-
// move at ~70% of the curtain's speed (parallax lag effect).
|
|
20
|
-
const logoInnerOffsetMap = {
|
|
21
|
-
up: { y: '30vh', x: 0 },
|
|
22
|
-
down: { y: '-30vh', x: 0 },
|
|
23
|
-
left: { x: '30vw', y: 0 },
|
|
24
|
-
right: { x: '-30vw', y: 0 },
|
|
25
|
-
};
|
|
26
|
-
const buildLogoParallaxVariants = (direction, duration) => ({
|
|
27
|
-
covered: { y: 0, x: 0 },
|
|
28
|
-
exit: {
|
|
29
|
-
...logoInnerOffsetMap[direction],
|
|
30
|
-
transition: {
|
|
31
|
-
duration,
|
|
32
|
-
ease: [0.76, 0, 0.24, 1],
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
const buildSplitVariants = (axis, duration) => ({
|
|
37
|
-
panel1: {
|
|
38
|
-
covered: {},
|
|
39
|
-
exit: {
|
|
40
|
-
[axis === 'h' ? 'y' : 'x']: '-100%',
|
|
41
|
-
transition: { duration, ease: [0.76, 0, 0.24, 1] },
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
panel2: {
|
|
45
|
-
covered: {},
|
|
46
|
-
exit: {
|
|
47
|
-
[axis === 'h' ? 'y' : 'x']: '100%',
|
|
48
|
-
transition: { duration, ease: [0.76, 0, 0.24, 1] },
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
export { buildCurtainVariants, buildLogoParallaxVariants, buildSplitVariants };
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, useRef, useEffect } from 'react';
|
|
3
|
-
import { motion } from 'motion/react';
|
|
4
|
-
import { cn } from '../../../utils/cn.js';
|
|
5
|
-
import { buildCurtainVariants, buildLogoParallaxVariants, buildSplitVariants } from './PageTransition.animations.js';
|
|
6
|
-
|
|
7
|
-
const PageTransition = ({ children, logo, type = "slide", direction = "up", duration = 0.8, delay = 0.8, color = "bg-[var(--color-primary)]", className, parallax = true, onStart, onComplete, }) => {
|
|
8
|
-
const [phase, setPhase] = useState("covered");
|
|
9
|
-
const [completedPanels, setCompletedPanels] = useState(0);
|
|
10
|
-
// Stable refs for callbacks to avoid stale closures without re-running the effect
|
|
11
|
-
const onStartRef = useRef(onStart);
|
|
12
|
-
const onCompleteRef = useRef(onComplete);
|
|
13
|
-
useEffect(() => { onStartRef.current = onStart; }, [onStart]);
|
|
14
|
-
useEffect(() => { onCompleteRef.current = onComplete; }, [onComplete]);
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
if (typeof window === "undefined" || typeof document === "undefined")
|
|
17
|
-
return;
|
|
18
|
-
let cancelled = false;
|
|
19
|
-
const loadPromise = new Promise((resolve) => {
|
|
20
|
-
if (document.readyState === "complete") {
|
|
21
|
-
resolve();
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
window.addEventListener("load", () => resolve(), { once: true });
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
const delayPromise = new Promise((resolve) => {
|
|
28
|
-
setTimeout(resolve, delay * 1000);
|
|
29
|
-
});
|
|
30
|
-
Promise.all([loadPromise, delayPromise]).then(() => {
|
|
31
|
-
if (!cancelled) {
|
|
32
|
-
setPhase("exit");
|
|
33
|
-
setTimeout(() => {
|
|
34
|
-
var _a;
|
|
35
|
-
if (!cancelled)
|
|
36
|
-
(_a = onStartRef.current) === null || _a === void 0 ? void 0 : _a.call(onStartRef);
|
|
37
|
-
}, 250);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
return () => {
|
|
41
|
-
cancelled = true;
|
|
42
|
-
};
|
|
43
|
-
}, [delay]);
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
var _a;
|
|
46
|
-
if (type === "split" && completedPanels === 2) {
|
|
47
|
-
(_a = onCompleteRef.current) === null || _a === void 0 ? void 0 : _a.call(onCompleteRef);
|
|
48
|
-
}
|
|
49
|
-
}, [completedPanels, type]);
|
|
50
|
-
if (type === "split") {
|
|
51
|
-
const axis = direction === "up" || direction === "down" ? "h" : "v";
|
|
52
|
-
const splitVars = buildSplitVariants(axis, duration);
|
|
53
|
-
return (jsxs(Fragment, { children: [children, jsxs("div", { className: "fixed inset-0 z-[9999] pointer-events-none", children: [jsx(motion.div, { className: cn(axis === "h"
|
|
54
|
-
? "absolute inset-x-0 top-0 h-1/2"
|
|
55
|
-
: "absolute inset-y-0 left-0 w-1/2", color, className), variants: splitVars.panel1, initial: "covered", animate: phase, onAnimationComplete: (def) => {
|
|
56
|
-
if (def === "exit")
|
|
57
|
-
setCompletedPanels((n) => n + 1);
|
|
58
|
-
} }), jsx(motion.div, { className: cn(axis === "h"
|
|
59
|
-
? "absolute inset-x-0 bottom-0 h-1/2"
|
|
60
|
-
: "absolute inset-y-0 right-0 w-1/2", color, className), variants: splitVars.panel2, initial: "covered", animate: phase, onAnimationComplete: (def) => {
|
|
61
|
-
if (def === "exit")
|
|
62
|
-
setCompletedPanels((n) => n + 1);
|
|
63
|
-
} }), logo && (jsx("div", { className: "absolute inset-0 flex items-center justify-center z-10 pointer-events-none select-none", children: logo }))] })] }));
|
|
64
|
-
}
|
|
65
|
-
// Default: slide
|
|
66
|
-
const curtainVariants = buildCurtainVariants(direction, duration);
|
|
67
|
-
if (type === "slide" && parallax) {
|
|
68
|
-
const logoVariants = buildLogoParallaxVariants(direction, duration);
|
|
69
|
-
return (jsxs(Fragment, { children: [children, jsx(motion.div, { className: cn("fixed inset-0 z-[9999] flex items-center justify-center", color, className), style: { willChange: "transform" }, variants: curtainVariants, initial: "covered", animate: phase, onAnimationComplete: (def) => {
|
|
70
|
-
var _a;
|
|
71
|
-
if (def === "exit")
|
|
72
|
-
(_a = onCompleteRef.current) === null || _a === void 0 ? void 0 : _a.call(onCompleteRef);
|
|
73
|
-
}, children: logo && (jsx(motion.div, { className: "relative z-10 select-none", variants: logoVariants, initial: "covered", animate: phase, children: logo })) })] }));
|
|
74
|
-
}
|
|
75
|
-
return (jsxs(Fragment, { children: [children, jsx(motion.div, { className: cn("fixed inset-0 z-[9999] flex items-center justify-center", color, className), style: { willChange: "transform" }, variants: curtainVariants, initial: "covered", animate: phase, onAnimationComplete: (def) => {
|
|
76
|
-
var _a;
|
|
77
|
-
if (def === "exit")
|
|
78
|
-
(_a = onCompleteRef.current) === null || _a === void 0 ? void 0 : _a.call(onCompleteRef);
|
|
79
|
-
}, children: logo && jsx("div", { className: "relative z-10 select-none", children: logo }) })] }));
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
export { PageTransition };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export type PageTransitionDirection = 'up' | 'down' | 'left' | 'right';
|
|
2
|
-
export type PageTransitionType = 'slide' | 'split';
|
|
3
|
-
export interface PageTransitionProps {
|
|
4
|
-
children: React.ReactNode;
|
|
5
|
-
logo?: React.ReactNode;
|
|
6
|
-
type?: PageTransitionType;
|
|
7
|
-
direction?: PageTransitionDirection;
|
|
8
|
-
duration?: number;
|
|
9
|
-
delay?: number;
|
|
10
|
-
color?: string;
|
|
11
|
-
className?: string;
|
|
12
|
-
parallax?: boolean;
|
|
13
|
-
onStart?: () => void;
|
|
14
|
-
onComplete?: () => void;
|
|
15
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { ParallaxSectionProps } from './ParallaxSection.types';
|
|
3
|
-
/**
|
|
4
|
-
* ParallaxSection
|
|
5
|
-
*
|
|
6
|
-
* A scroll-driven parallax wrapper that translates its children at a configurable
|
|
7
|
-
* rate relative to normal scroll, creating depth and visual interest.
|
|
8
|
-
*
|
|
9
|
-
* Uses `transform: translate3d` for GPU-accelerated, jank-free animation.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```tsx
|
|
13
|
-
* <ParallaxSection speed={0.3}>
|
|
14
|
-
* <img src="/hero-bg.jpg" alt="" className="w-full h-[600px] object-cover" />
|
|
15
|
-
* </ParallaxSection>
|
|
16
|
-
* ```
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```tsx
|
|
20
|
-
* // Opposite direction
|
|
21
|
-
* <ParallaxSection speed={-0.2} direction="horizontal">
|
|
22
|
-
* <div className="flex gap-4">{items}</div>
|
|
23
|
-
* </ParallaxSection>
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export declare const ParallaxSection: React.ForwardRefExoticComponent<ParallaxSectionProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import React__default, { useRef } from 'react';
|
|
3
|
-
import { useReducedMotion, useScroll, useTransform, motion } from 'motion/react';
|
|
4
|
-
import { cn } from '../../../utils/cn.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* ParallaxSection
|
|
8
|
-
*
|
|
9
|
-
* A scroll-driven parallax wrapper that translates its children at a configurable
|
|
10
|
-
* rate relative to normal scroll, creating depth and visual interest.
|
|
11
|
-
*
|
|
12
|
-
* Uses `transform: translate3d` for GPU-accelerated, jank-free animation.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```tsx
|
|
16
|
-
* <ParallaxSection speed={0.3}>
|
|
17
|
-
* <img src="/hero-bg.jpg" alt="" className="w-full h-[600px] object-cover" />
|
|
18
|
-
* </ParallaxSection>
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```tsx
|
|
23
|
-
* // Opposite direction
|
|
24
|
-
* <ParallaxSection speed={-0.2} direction="horizontal">
|
|
25
|
-
* <div className="flex gap-4">{items}</div>
|
|
26
|
-
* </ParallaxSection>
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
const ParallaxSection = React__default.forwardRef(({ speed = 0.5, direction = 'vertical', scrollRef, className, children, style,
|
|
30
|
-
// Destructure HTML event handlers that conflict with motion's API
|
|
31
|
-
onDrag: _onDrag, onDragStart: _onDragStart, onDragEnd: _onDragEnd, onAnimationStart: _onAnimationStart, ...restProps }, ref) => {
|
|
32
|
-
const shouldReduceMotion = useReducedMotion();
|
|
33
|
-
const internalRef = useRef(null);
|
|
34
|
-
// Track scroll progress of the target element through the viewport.
|
|
35
|
-
// offset: element bottom enters viewport -> element top exits viewport.
|
|
36
|
-
const { scrollYProgress } = useScroll({
|
|
37
|
-
target: internalRef,
|
|
38
|
-
container: scrollRef,
|
|
39
|
-
offset: ['start end', 'end start'],
|
|
40
|
-
});
|
|
41
|
-
// Map 0-1 scroll progress to a pixel displacement.
|
|
42
|
-
// At progress 0 (element just entering) the offset is positive (pushed down),
|
|
43
|
-
// and at progress 1 (element leaving) the offset is negative (pulled up),
|
|
44
|
-
// scaled by the speed multiplier. This creates the classic parallax feel.
|
|
45
|
-
const range = 200 * speed;
|
|
46
|
-
const yTransform = useTransform(scrollYProgress, [0, 1], [range, -range]);
|
|
47
|
-
const xTransform = useTransform(scrollYProgress, [0, 1], [range, -range]);
|
|
48
|
-
// When reduced motion is preferred, render without any parallax.
|
|
49
|
-
if (shouldReduceMotion) {
|
|
50
|
-
return (jsx("div", { ref: (node) => {
|
|
51
|
-
internalRef.current = node;
|
|
52
|
-
if (typeof ref === 'function')
|
|
53
|
-
ref(node);
|
|
54
|
-
else if (ref)
|
|
55
|
-
ref.current = node;
|
|
56
|
-
}, className: cn('will-change-transform', className), style: style, ...restProps, children: children }));
|
|
57
|
-
}
|
|
58
|
-
const motionStyle = direction === 'vertical'
|
|
59
|
-
? { y: yTransform, ...style }
|
|
60
|
-
: { x: xTransform, ...style };
|
|
61
|
-
return (jsx(motion.div, { ref: (node) => {
|
|
62
|
-
internalRef.current = node;
|
|
63
|
-
if (typeof ref === 'function')
|
|
64
|
-
ref(node);
|
|
65
|
-
else if (ref)
|
|
66
|
-
ref.current = node;
|
|
67
|
-
}, className: cn('will-change-transform', className), style: motionStyle, ...restProps, children: children }));
|
|
68
|
-
});
|
|
69
|
-
ParallaxSection.displayName = 'ParallaxSection';
|
|
70
|
-
|
|
71
|
-
export { ParallaxSection };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { RefObject } from 'react';
|
|
2
|
-
export interface ParallaxSectionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
-
/** Parallax speed multiplier. Negative = moves opposite direction. (default 0.5) */
|
|
4
|
-
speed?: number;
|
|
5
|
-
/** Direction of parallax (default 'vertical') */
|
|
6
|
-
direction?: 'vertical' | 'horizontal';
|
|
7
|
-
/** Use scroll container instead of window (ref to container) */
|
|
8
|
-
scrollRef?: RefObject<HTMLElement>;
|
|
9
|
-
className?: string;
|
|
10
|
-
children: React.ReactNode;
|
|
11
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { SpotlightProps } from "./Spotlight.types";
|
|
3
|
-
/**
|
|
4
|
-
* Spotlight Component
|
|
5
|
-
*
|
|
6
|
-
* A mouse-following radial gradient that creates a subtle surface illumination
|
|
7
|
-
* effect. Tracks the mouse position within the parent element and renders a
|
|
8
|
-
* smooth, animated glow that follows the cursor.
|
|
9
|
-
*
|
|
10
|
-
* The parent container should have `position: relative` and `overflow: hidden`.
|
|
11
|
-
*
|
|
12
|
-
* Unlike SpotlightBorder (which highlights borders), this component illuminates
|
|
13
|
-
* the surface area itself with a soft radial gradient.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```tsx
|
|
17
|
-
* <div className="relative overflow-hidden bg-gray-900 rounded-lg p-8">
|
|
18
|
-
* <Spotlight color="var(--color-primary)" intensity={0.2} />
|
|
19
|
-
* <span className="relative z-10">Hover over me</span>
|
|
20
|
-
* </div>
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* @example Custom spring and size
|
|
24
|
-
* ```tsx
|
|
25
|
-
* <div className="relative overflow-hidden bg-slate-800 rounded-xl p-12">
|
|
26
|
-
* <Spotlight
|
|
27
|
-
* size={500}
|
|
28
|
-
* color="#8b5cf6"
|
|
29
|
-
* intensity={0.25}
|
|
30
|
-
* springConfig={{ damping: 20, stiffness: 150 }}
|
|
31
|
-
* />
|
|
32
|
-
* <h2 className="relative z-10 text-white">Interactive card</h2>
|
|
33
|
-
* </div>
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export declare const Spotlight: React.FC<SpotlightProps>;
|