@flikk/ui 1.0.0-beta.26 → 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 -140
- package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -85
- 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 +3 -3
- 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/CommandItem.js +4 -5
- package/dist/components/core/CommandPalette/CommandPalette.js +1 -1
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +11 -13
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +0 -2
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +14 -15
- package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +1 -1
- package/dist/components/core/DotSeparator/DotSeparator.d.ts +3 -0
- package/dist/components/core/DotSeparator/DotSeparator.js +19 -0
- package/dist/components/core/DotSeparator/DotSeparator.theme.d.ts +2 -0
- package/dist/components/core/DotSeparator/DotSeparator.theme.js +10 -0
- package/dist/components/core/DotSeparator/DotSeparator.types.d.ts +25 -0
- package/dist/components/core/DotSeparator/index.d.ts +3 -0
- package/dist/components/core/Dropdown/Dropdown.theme.js +5 -6
- package/dist/components/core/Dropdown/DropdownItem.js +1 -1
- package/dist/components/core/Dropdown/DropdownMenu.js +58 -30
- 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/MenuItem/MenuItem.js +5 -2
- package/dist/components/core/MenuItem/MenuItem.theme.d.ts +6 -0
- package/dist/components/core/MenuItem/MenuItem.theme.js +19 -16
- package/dist/components/core/MenuItem/MenuItem.types.d.ts +2 -0
- 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/NavItem/NavItem.js +20 -4
- package/dist/components/core/NavItem/NavItem.theme.js +13 -2
- package/dist/components/core/PageHeading/PageHeading.theme.js +2 -2
- package/dist/components/core/Popover/Popover.theme.js +1 -1
- package/dist/components/core/Popover/Popover.types.d.ts +6 -2
- package/dist/components/core/Popover/PopoverBody.js +10 -3
- 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/Sidebar/Sidebar.d.ts +2 -0
- package/dist/components/core/Sidebar/Sidebar.js +15 -7
- package/dist/components/core/Sidebar/Sidebar.types.d.ts +92 -4
- package/dist/components/core/Sidebar/SidebarCard.d.ts +25 -0
- package/dist/components/core/Sidebar/SidebarCard.js +68 -0
- package/dist/components/core/Sidebar/SidebarCard.theme.d.ts +8 -0
- package/dist/components/core/Sidebar/SidebarCard.theme.js +18 -0
- package/dist/components/core/Sidebar/SidebarContent.js +5 -1
- package/dist/components/core/Sidebar/SidebarContext.js +1 -1
- package/dist/components/core/Sidebar/SidebarHeader.js +10 -2
- package/dist/components/core/Sidebar/SidebarLogo.js +38 -3
- package/dist/components/core/Sidebar/SidebarSearch.d.ts +22 -0
- package/dist/components/core/Sidebar/SidebarSearch.js +135 -0
- package/dist/components/core/Sidebar/SidebarToggle.js +1 -1
- package/dist/components/core/Sidebar/SidebarUserProfile.js +2 -2
- package/dist/components/core/Sidebar/index.d.ts +3 -1
- package/dist/components/core/Tag/Tag.js +29 -5
- package/dist/components/core/Tag/Tag.theme.js +13 -8
- package/dist/components/core/Tag/Tag.types.d.ts +7 -0
- package/dist/components/core/Tooltip/Tooltip.js +1 -1
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -2
- package/dist/components/core/index.d.ts +2 -0
- package/dist/components/core/index.js +6 -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/GanttChart/GanttChart.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttChart.js +31 -4
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +19 -17
- package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +19 -0
- package/dist/components/data-display/GanttChart/GanttChart.utils.js +1 -1
- package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +3 -3
- package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +7 -4
- package/dist/components/data-display/GanttChart/GanttMilestone.js +5 -5
- package/dist/components/data-display/GanttChart/GanttTablePanel.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +37 -16
- package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +35 -11
- package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -2
- package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +3 -2
- package/dist/components/data-display/GanttChart/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 +27 -9
- 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/Aurora/Aurora.d.ts +6 -17
- package/dist/components/effects/Aurora/Aurora.js +297 -131
- package/dist/components/effects/Aurora/Aurora.types.d.ts +6 -0
- 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/Combobox/Combobox.js +1 -1
- package/dist/components/forms/Combobox/Combobox.theme.js +2 -4
- package/dist/components/forms/DatePicker/DatePicker.theme.js +11 -18
- package/dist/components/forms/DatePicker/DatePickerTrigger.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +6 -13
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.animations.d.ts +29 -0
- package/dist/components/forms/FileUpload/FileUpload.animations.js +19 -0
- package/dist/components/forms/FileUpload/FileUpload.js +85 -134
- package/dist/components/forms/FileUpload/FileUpload.theme.d.ts +2 -10
- package/dist/components/forms/FileUpload/FileUpload.theme.js +16 -30
- package/dist/components/forms/FileUpload/FileUpload.types.d.ts +26 -10
- package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
- package/dist/components/forms/Input/Input.theme.js +13 -10
- package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
- package/dist/components/forms/Mention/Mention.js +152 -57
- package/dist/components/forms/Mention/Mention.theme.js +16 -23
- package/dist/components/forms/Mention/Mention.types.d.ts +12 -12
- package/dist/components/forms/Mention/Mention.utils.js +32 -4
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +3 -3
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +5 -5
- package/dist/components/forms/Select/Select.js +2 -2
- package/dist/components/forms/Select/Select.theme.js +3 -3
- 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 -87
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
- package/dist/components/forms/forms.theme.js +21 -16
- package/dist/components/forms/index.d.ts +0 -4
- package/dist/components/forms/index.js +0 -89
- 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.d.ts +10 -0
- package/dist/components/layout/AppShell/AppShell.js +84 -0
- package/dist/components/layout/AppShell/AppShell.theme.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShell.theme.js +42 -0
- package/dist/components/layout/AppShell/AppShell.types.d.ts +127 -0
- package/dist/components/layout/AppShell/AppShellContext.d.ts +14 -0
- package/dist/components/layout/AppShell/AppShellContext.js +19 -0
- package/dist/components/layout/AppShell/AppShellFooter.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellFooter.js +12 -0
- package/dist/components/layout/AppShell/AppShellHeader.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellHeader.js +12 -0
- package/dist/components/layout/AppShell/AppShellMain.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellMain.js +19 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.js +16 -0
- package/dist/components/layout/AppShell/AppShellSidebar.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellSidebar.js +16 -0
- package/dist/components/layout/AppShell/AppShellTopbar.d.ts +3 -0
- package/dist/components/layout/AppShell/AppShellTopbar.js +12 -0
- package/dist/components/layout/AppShell/index.d.ts +3 -0
- package/dist/components/layout/FormLayout/FormLayout.js +1 -87
- 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 +4 -0
- package/dist/components/layout/index.js +8 -0
- package/dist/generative.schema.json +1637 -0
- package/dist/hooks/useSelectPortal.d.ts +10 -2
- package/dist/hooks/useSelectPortal.js +45 -24
- package/dist/index.js +180 -174
- package/dist/registry.json +10205 -0
- package/dist/styles.css +1 -1
- package/dist/tools.json +1731 -0
- package/dist/utils/dateUtils.js +11 -1
- package/package.json +19 -4
- package/src/global.scss +82 -109
- package/src/styles/theme.css +707 -474
- 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 -84
- 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
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
const CURTAIN_EASE = [0.76, 0, 0.24, 1];
|
|
2
|
+
const exitTransition = (duration, delay = 0) => ({
|
|
3
|
+
duration,
|
|
4
|
+
ease: CURTAIN_EASE,
|
|
5
|
+
delay,
|
|
6
|
+
});
|
|
7
|
+
const exitMap = {
|
|
8
|
+
up: { y: '-100%', x: 0 },
|
|
9
|
+
down: { y: '100%', x: 0 },
|
|
10
|
+
left: { x: '-100%', y: 0 },
|
|
11
|
+
right: { x: '100%', y: 0 },
|
|
12
|
+
};
|
|
13
|
+
const buildCurtainVariants = (direction, duration) => ({
|
|
14
|
+
covered: { y: 0, x: 0 },
|
|
15
|
+
exit: {
|
|
16
|
+
...exitMap[direction],
|
|
17
|
+
transition: exitTransition(duration),
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
// Logo is rendered INSIDE the curtain. These are relative offsets that
|
|
21
|
+
// counteract ~30% of the curtain's motion, making the logo appear to
|
|
22
|
+
// move at ~70% of the curtain's speed (parallax lag effect). It also
|
|
23
|
+
// fades out so the mark dissolves while lagging instead of riding the
|
|
24
|
+
// curtain edge off-screen.
|
|
25
|
+
const logoInnerOffsetMap = {
|
|
26
|
+
up: { y: '30vh', x: 0 },
|
|
27
|
+
down: { y: '-30vh', x: 0 },
|
|
28
|
+
left: { x: '30vw', y: 0 },
|
|
29
|
+
right: { x: '-30vw', y: 0 },
|
|
30
|
+
};
|
|
31
|
+
const buildLogoParallaxVariants = (direction, duration) => ({
|
|
32
|
+
covered: { y: 0, x: 0, opacity: 1 },
|
|
33
|
+
exit: {
|
|
34
|
+
...logoInnerOffsetMap[direction],
|
|
35
|
+
opacity: 0,
|
|
36
|
+
transition: exitTransition(duration),
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
// Plain fade-out for logos that don't translate on their own: every
|
|
40
|
+
// non-slide type renders the logo in a static centered layer over the
|
|
41
|
+
// panels, so it must fade or it would linger over the revealed page.
|
|
42
|
+
// Slightly faster than the panels so the mark is gone before the
|
|
43
|
+
// reveal completes.
|
|
44
|
+
const buildLogoFadeVariants = (duration) => ({
|
|
45
|
+
covered: { opacity: 1 },
|
|
46
|
+
exit: {
|
|
47
|
+
opacity: 0,
|
|
48
|
+
transition: { duration: duration * 0.5, ease: CURTAIN_EASE },
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
// Strips travel slightly past their own span so sub-pixel rounding never
|
|
52
|
+
// leaves a hairline of curtain at the edge.
|
|
53
|
+
const STRIP_EXIT = 102;
|
|
54
|
+
const buildStripDescriptors = ({ type, direction, duration, panels, stagger, }) => {
|
|
55
|
+
// Strips orient perpendicular to the exit axis: up/down → vertical strips
|
|
56
|
+
// translating Y; left/right → horizontal strips translating X.
|
|
57
|
+
const axis = direction === 'left' || direction === 'right' ? 'x' : 'y';
|
|
58
|
+
const sign = direction === 'up' || direction === 'left' ? -1 : 1;
|
|
59
|
+
const size = 100 / panels;
|
|
60
|
+
return Array.from({ length: panels }, (_, i) => {
|
|
61
|
+
// +0.4% overlap so adjacent strips never show a seam between them
|
|
62
|
+
const span = `${size + (i < panels - 1 ? 0.4 : 0)}%`;
|
|
63
|
+
const offset = `${i * size}%`;
|
|
64
|
+
const panelSign = type === 'shutters' && i % 2 === 1 ? -sign : sign;
|
|
65
|
+
return {
|
|
66
|
+
key: `strip-${i}`,
|
|
67
|
+
style: axis === 'y'
|
|
68
|
+
? { top: 0, bottom: 0, left: offset, width: span, willChange: 'transform' }
|
|
69
|
+
: { left: 0, right: 0, top: offset, height: span, willChange: 'transform' },
|
|
70
|
+
variants: {
|
|
71
|
+
covered: { x: 0, y: 0 },
|
|
72
|
+
exit: {
|
|
73
|
+
[axis]: `${panelSign * STRIP_EXIT}%`,
|
|
74
|
+
transition: exitTransition(duration, i * stagger),
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
const buildLayerDescriptors = ({ direction, duration, panels, stagger, color, }) => {
|
|
81
|
+
const base = color !== null && color !== void 0 ? color : 'var(--color-primary)';
|
|
82
|
+
return Array.from({ length: panels }, (_, i) => ({
|
|
83
|
+
key: `layer-${i}`,
|
|
84
|
+
// First-leaving layer sits on top; deeper layers get progressively lighter
|
|
85
|
+
style: { inset: 0, zIndex: panels - i, willChange: 'transform' },
|
|
86
|
+
backgroundColor: i === 0 ? color : `color-mix(in oklab, ${base}, white ${Math.min(i * 30, 75)}%)`,
|
|
87
|
+
variants: {
|
|
88
|
+
covered: { x: 0, y: 0 },
|
|
89
|
+
exit: {
|
|
90
|
+
...exitMap[direction],
|
|
91
|
+
transition: exitTransition(duration, i * stagger),
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
}));
|
|
95
|
+
};
|
|
96
|
+
const buildSplitDescriptors = ({ direction, duration, }) => {
|
|
97
|
+
const make = (key, place, exit) => ({
|
|
98
|
+
key,
|
|
99
|
+
style: { ...place, willChange: 'transform' },
|
|
100
|
+
variants: {
|
|
101
|
+
covered: {},
|
|
102
|
+
exit: { ...exit, transition: exitTransition(duration) },
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
return direction === 'up' || direction === 'down'
|
|
106
|
+
? [
|
|
107
|
+
make('split-1', { top: 0, left: 0, right: 0, height: '50%' }, { y: '-100%' }),
|
|
108
|
+
make('split-2', { bottom: 0, left: 0, right: 0, height: '50%' }, { y: '100%' }),
|
|
109
|
+
]
|
|
110
|
+
: [
|
|
111
|
+
make('split-1', { top: 0, bottom: 0, left: 0, width: '50%' }, { x: '-100%' }),
|
|
112
|
+
make('split-2', { top: 0, bottom: 0, right: 0, width: '50%' }, { x: '100%' }),
|
|
113
|
+
];
|
|
114
|
+
};
|
|
115
|
+
const buildPanelDescriptors = (opts) => {
|
|
116
|
+
switch (opts.type) {
|
|
117
|
+
case 'blinds':
|
|
118
|
+
case 'shutters':
|
|
119
|
+
return buildStripDescriptors(opts);
|
|
120
|
+
case 'layers':
|
|
121
|
+
return buildLayerDescriptors(opts);
|
|
122
|
+
case 'iris':
|
|
123
|
+
return [
|
|
124
|
+
{
|
|
125
|
+
key: 'iris',
|
|
126
|
+
style: { inset: 0 },
|
|
127
|
+
variants: {
|
|
128
|
+
covered: { clipPath: 'circle(125% at 50% 50%)' },
|
|
129
|
+
exit: {
|
|
130
|
+
clipPath: 'circle(0% at 50% 50%)',
|
|
131
|
+
transition: exitTransition(opts.duration),
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
];
|
|
136
|
+
case 'split':
|
|
137
|
+
return buildSplitDescriptors(opts);
|
|
138
|
+
case 'slide':
|
|
139
|
+
default:
|
|
140
|
+
return [
|
|
141
|
+
{
|
|
142
|
+
key: 'curtain',
|
|
143
|
+
style: { inset: 0, willChange: 'transform' },
|
|
144
|
+
variants: buildCurtainVariants(opts.direction, opts.duration),
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export { CURTAIN_EASE, buildCurtainVariants, buildLogoFadeVariants, buildLogoParallaxVariants, buildPanelDescriptors };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useEffect } from 'react';
|
|
3
|
+
import { useReducedMotion, motion } from 'motion/react';
|
|
4
|
+
import { cn } from '../../../utils/cn.js';
|
|
5
|
+
import { buildPanelDescriptors, buildLogoParallaxVariants, buildLogoFadeVariants } from './Preloader.animations.js';
|
|
6
|
+
|
|
7
|
+
const DEFAULT_COLOR_CLASS = "bg-[var(--color-primary)]";
|
|
8
|
+
const PANEL_DEFAULTS = {
|
|
9
|
+
blinds: 5,
|
|
10
|
+
shutters: 4,
|
|
11
|
+
layers: 3,
|
|
12
|
+
};
|
|
13
|
+
const STAGGER_DEFAULTS = {
|
|
14
|
+
blinds: 0.08,
|
|
15
|
+
shutters: 0.08,
|
|
16
|
+
layers: 0.14,
|
|
17
|
+
};
|
|
18
|
+
const Preloader = ({ children, logo, type = "slide", direction = "up", duration = 0.8, delay = 0.8, color, className, parallax = true, contained = false, panels, stagger, onStart, onComplete, }) => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const [phase, setPhase] = useState("covered");
|
|
21
|
+
const [completedPanels, setCompletedPanels] = useState(0);
|
|
22
|
+
const shouldReduceMotion = useReducedMotion();
|
|
23
|
+
const isMultiPanel = type === "blinds" || type === "shutters" || type === "layers";
|
|
24
|
+
let panelCount = (_a = PANEL_DEFAULTS[type]) !== null && _a !== void 0 ? _a : (type === "split" ? 2 : 1);
|
|
25
|
+
if (isMultiPanel && panels !== undefined) {
|
|
26
|
+
if (process.env.NODE_ENV !== "production" && (panels < 2 || panels > 12)) {
|
|
27
|
+
console.warn("[Preloader]: panels must be between 2 and 12; clamping.");
|
|
28
|
+
}
|
|
29
|
+
panelCount = Math.min(12, Math.max(2, Math.round(panels)));
|
|
30
|
+
}
|
|
31
|
+
const resolvedStagger = isMultiPanel ? (_b = stagger !== null && stagger !== void 0 ? stagger : STAGGER_DEFAULTS[type]) !== null && _b !== void 0 ? _b : 0 : 0;
|
|
32
|
+
// Stable refs for callbacks/reduced-motion to avoid stale closures without re-running the effect
|
|
33
|
+
const onStartRef = useRef(onStart);
|
|
34
|
+
const onCompleteRef = useRef(onComplete);
|
|
35
|
+
const reducedMotionRef = useRef(shouldReduceMotion);
|
|
36
|
+
// Guards against re-triggering the exit if the effect re-runs (e.g. `delay` change)
|
|
37
|
+
const startedRef = useRef(false);
|
|
38
|
+
useEffect(() => { onStartRef.current = onStart; }, [onStart]);
|
|
39
|
+
useEffect(() => { onCompleteRef.current = onComplete; }, [onComplete]);
|
|
40
|
+
useEffect(() => { reducedMotionRef.current = shouldReduceMotion; }, [shouldReduceMotion]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (typeof window === "undefined" || typeof document === "undefined")
|
|
43
|
+
return;
|
|
44
|
+
let cancelled = false;
|
|
45
|
+
let delayTimer;
|
|
46
|
+
let loadListener;
|
|
47
|
+
const loadPromise = new Promise((resolve) => {
|
|
48
|
+
if (document.readyState === "complete") {
|
|
49
|
+
resolve();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
loadListener = () => resolve();
|
|
53
|
+
window.addEventListener("load", loadListener, { once: true });
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const delayPromise = new Promise((resolve) => {
|
|
57
|
+
delayTimer = setTimeout(resolve, delay * 1000);
|
|
58
|
+
});
|
|
59
|
+
Promise.all([loadPromise, delayPromise]).then(() => {
|
|
60
|
+
var _a, _b;
|
|
61
|
+
if (cancelled || startedRef.current)
|
|
62
|
+
return;
|
|
63
|
+
startedRef.current = true;
|
|
64
|
+
if (reducedMotionRef.current) {
|
|
65
|
+
// Skip the animation entirely but keep the callback contract
|
|
66
|
+
(_a = onStartRef.current) === null || _a === void 0 ? void 0 : _a.call(onStartRef);
|
|
67
|
+
setPhase("done");
|
|
68
|
+
(_b = onCompleteRef.current) === null || _b === void 0 ? void 0 : _b.call(onCompleteRef);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
setPhase("exit");
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return () => {
|
|
75
|
+
cancelled = true;
|
|
76
|
+
if (delayTimer !== undefined)
|
|
77
|
+
clearTimeout(delayTimer);
|
|
78
|
+
if (loadListener)
|
|
79
|
+
window.removeEventListener("load", loadListener);
|
|
80
|
+
};
|
|
81
|
+
}, [delay]);
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
var _a;
|
|
84
|
+
if (completedPanels >= panelCount) {
|
|
85
|
+
setPhase("done");
|
|
86
|
+
(_a = onCompleteRef.current) === null || _a === void 0 ? void 0 : _a.call(onCompleteRef);
|
|
87
|
+
}
|
|
88
|
+
}, [completedPanels, panelCount]);
|
|
89
|
+
if (phase === "done") {
|
|
90
|
+
return jsx(Fragment, { children: children });
|
|
91
|
+
}
|
|
92
|
+
const positionClass = contained ? "absolute inset-0" : "fixed inset-0";
|
|
93
|
+
const descriptors = buildPanelDescriptors({
|
|
94
|
+
type,
|
|
95
|
+
direction,
|
|
96
|
+
duration,
|
|
97
|
+
panels: panelCount,
|
|
98
|
+
stagger: resolvedStagger,
|
|
99
|
+
color,
|
|
100
|
+
});
|
|
101
|
+
const handleExitStart = (def) => {
|
|
102
|
+
var _a;
|
|
103
|
+
if (def === "exit")
|
|
104
|
+
(_a = onStartRef.current) === null || _a === void 0 ? void 0 : _a.call(onStartRef);
|
|
105
|
+
};
|
|
106
|
+
// Slide carries its logo inside the curtain (parallax lag or plain fade);
|
|
107
|
+
// every other type renders it in the static centered layer below.
|
|
108
|
+
const slideLogoNode = type === "slide" && logo ? (parallax ? (jsx(motion.div, { className: "relative z-10 select-none", variants: buildLogoParallaxVariants(direction, duration), initial: "covered", animate: phase, children: logo })) : (jsx(motion.div, { className: "relative z-10 select-none", variants: buildLogoFadeVariants(duration), initial: "covered", animate: phase, children: logo }))) : null;
|
|
109
|
+
return (jsxs(Fragment, { children: [children, jsxs("div", { "aria-hidden": "true", className: cn(positionClass, "z-[9999] pointer-events-none"), children: [descriptors.map((d, i) => {
|
|
110
|
+
var _a;
|
|
111
|
+
const bg = (_a = d.backgroundColor) !== null && _a !== void 0 ? _a : color;
|
|
112
|
+
return (jsx(motion.div, { className: cn("absolute pointer-events-auto", type === "slide" && "flex items-center justify-center", !bg && DEFAULT_COLOR_CLASS, className), style: { ...d.style, ...(bg ? { backgroundColor: bg } : undefined) }, variants: d.variants, initial: "covered", animate: phase, onAnimationStart: i === 0 ? handleExitStart : undefined, onAnimationComplete: (def) => {
|
|
113
|
+
if (def === "exit")
|
|
114
|
+
setCompletedPanels((n) => n + 1);
|
|
115
|
+
}, children: slideLogoNode }, d.key));
|
|
116
|
+
}), type !== "slide" && logo && (jsx(motion.div, { className: "absolute inset-0 flex items-center justify-center select-none", style: { zIndex: 50 }, variants: buildLogoFadeVariants(duration), initial: "covered", animate: phase, children: logo }))] })] }));
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export { Preloader };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export type PreloaderDirection = 'up' | 'down' | 'left' | 'right';
|
|
2
|
+
export type PreloaderType = 'slide' | 'split' | 'blinds' | 'shutters' | 'layers' | 'iris';
|
|
3
|
+
export interface PreloaderProps {
|
|
4
|
+
/** Page content revealed once the curtain exits. */
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/** Decorative mark centered on the curtain (hidden from assistive tech). */
|
|
7
|
+
logo?: React.ReactNode;
|
|
8
|
+
/**
|
|
9
|
+
* `slide` = one full curtain exits; `split` = two half panels part in
|
|
10
|
+
* opposite directions; `blinds` = staggered strips sweep the same way;
|
|
11
|
+
* `shutters` = strips alternate directions; `layers` = stacked curtains
|
|
12
|
+
* trail each other in lightening shades; `iris` = a circular mask closes
|
|
13
|
+
* on the curtain from the edges to the center.
|
|
14
|
+
*/
|
|
15
|
+
type?: PreloaderType;
|
|
16
|
+
/**
|
|
17
|
+
* Exit direction. For `split`, `up`/`down` split along the horizontal seam
|
|
18
|
+
* and `left`/`right` along the vertical seam (the two are equivalent per axis).
|
|
19
|
+
* For `blinds`/`shutters`, strips orient perpendicular to the exit axis.
|
|
20
|
+
* Ignored by `iris` (always closes to center).
|
|
21
|
+
*/
|
|
22
|
+
direction?: PreloaderDirection;
|
|
23
|
+
/**
|
|
24
|
+
* Exit animation duration in seconds (not ms), per panel. For staggered
|
|
25
|
+
* types the total exit time is `duration + (panels - 1) * stagger`.
|
|
26
|
+
*/
|
|
27
|
+
duration?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Minimum hold time in seconds (not ms). The curtain exits once BOTH the
|
|
30
|
+
* window `load` event has fired and this delay has elapsed.
|
|
31
|
+
*/
|
|
32
|
+
delay?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Curtain fill as a CSS color value (e.g. `"var(--color-primary-900)"`, `"#0a0a0a"`).
|
|
35
|
+
* Applied as an inline `background-color`, so it wins over `className`.
|
|
36
|
+
* When omitted, the curtain uses `bg-[var(--color-primary)]` as a class,
|
|
37
|
+
* which `className` background utilities can override.
|
|
38
|
+
*/
|
|
39
|
+
color?: string;
|
|
40
|
+
className?: string;
|
|
41
|
+
/** Slide only: the logo lags behind the curtain for a depth effect. */
|
|
42
|
+
parallax?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Position the overlay `absolute` within the nearest positioned ancestor
|
|
45
|
+
* instead of `fixed` to the viewport. Use when embedding the transition in
|
|
46
|
+
* a container (demos, hero sections) rather than covering the whole page.
|
|
47
|
+
*/
|
|
48
|
+
contained?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Strip/slat/layer count for `blinds` (default 5), `shutters` (default 4),
|
|
51
|
+
* and `layers` (default 3). Clamped to 2–12. Ignored by other types.
|
|
52
|
+
*/
|
|
53
|
+
panels?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Seconds between successive panels for `blinds`/`shutters` (default 0.08)
|
|
56
|
+
* and `layers` (default 0.14). Ignored by other types.
|
|
57
|
+
*/
|
|
58
|
+
stagger?: number;
|
|
59
|
+
/** Fires when the exit animation starts (immediately if reduced motion is on). */
|
|
60
|
+
onStart?: () => void;
|
|
61
|
+
/** Fires once the reveal finishes; the overlay unmounts from the DOM. */
|
|
62
|
+
onComplete?: () => void;
|
|
63
|
+
}
|
|
@@ -24,27 +24,27 @@ const GRADIENT_DIRECTIONS = {
|
|
|
24
24
|
*/
|
|
25
25
|
const BlurInstance = forwardRef(({ position, blurLevels, size, theme, className, style, ...rest }, ref) => {
|
|
26
26
|
const isVertical = position === "top" || position === "bottom";
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
...style,
|
|
32
|
-
};
|
|
33
|
-
return (jsx("div", { ref: ref, className: cn(theme.baseStyle, theme.positions[position], className), style: containerStyle, ...rest, children: blurLevels.map((blur, i) => {
|
|
27
|
+
const layerStyles = useMemo(() => {
|
|
28
|
+
const direction = GRADIENT_DIRECTIONS[position];
|
|
29
|
+
const step = 100 / blurLevels.length;
|
|
30
|
+
return blurLevels.map((blur, i) => {
|
|
34
31
|
// MagicUI mask formula: each layer has a 1-step fade-in, 1-step solid,
|
|
35
32
|
// and 1-step fade-out. Adjacent layers overlap by 2 steps, creating
|
|
36
33
|
// smooth transitions. Values beyond 100% are clamped by the browser.
|
|
37
|
-
const step = 100 / n;
|
|
38
34
|
const gradient = `linear-gradient(${direction}, transparent ${i * step}%, black ${(i + 1) * step}%, black ${(i + 2) * step}%, transparent ${(i + 3) * step}%)`;
|
|
39
|
-
|
|
35
|
+
return {
|
|
40
36
|
maskImage: gradient,
|
|
41
37
|
WebkitMaskImage: gradient,
|
|
42
38
|
backdropFilter: `blur(${blur}px)`,
|
|
43
39
|
WebkitBackdropFilter: `blur(${blur}px)`,
|
|
44
|
-
zIndex: i + 1,
|
|
45
40
|
};
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
});
|
|
42
|
+
}, [position, blurLevels]);
|
|
43
|
+
const containerStyle = {
|
|
44
|
+
...(isVertical ? { height: size } : { width: size }),
|
|
45
|
+
...style,
|
|
46
|
+
};
|
|
47
|
+
return (jsx("div", { ref: ref, "aria-hidden": "true", className: cn(theme.baseStyle, theme.positions[position], className), style: containerStyle, ...rest, children: layerStyles.map((layerStyle, i) => (jsx("div", { className: theme.layerStyle, style: layerStyle }, i))) }));
|
|
48
48
|
});
|
|
49
49
|
BlurInstance.displayName = "BlurInstance";
|
|
50
50
|
const ProgressiveBlur = forwardRef(({ position = "bottom", blurLevels: blurLevelsProp, layers = DEFAULT_LAYERS, blurIntensity = DEFAULT_MAX_BLUR, size = DEFAULT_SIZE, className, theme: themeOverrides, ...rest }, ref) => {
|
|
@@ -59,10 +59,21 @@ const ProgressiveBlur = forwardRef(({ position = "bottom", blurLevels: blurLevel
|
|
|
59
59
|
layerStyle: (_b = themeOverrides === null || themeOverrides === void 0 ? void 0 : themeOverrides.layerStyle) !== null && _b !== void 0 ? _b : progressiveBlurTheme.layerStyle,
|
|
60
60
|
});
|
|
61
61
|
}, [themeOverrides]);
|
|
62
|
-
const blurLevels = useMemo(() =>
|
|
62
|
+
const blurLevels = useMemo(() => {
|
|
63
|
+
if (blurLevelsProp)
|
|
64
|
+
return blurLevelsProp;
|
|
65
|
+
const count = Math.max(1, Math.floor(layers));
|
|
66
|
+
if (process.env.NODE_ENV !== "production" && count !== layers) {
|
|
67
|
+
console.warn(`[ProgressiveBlur]: \`layers\` must be a positive integer; received ${layers}, using ${count}.`);
|
|
68
|
+
}
|
|
69
|
+
return generateBlurLevels(count, blurIntensity);
|
|
70
|
+
}, [blurLevelsProp, layers, blurIntensity]);
|
|
63
71
|
const positions = Array.isArray(position)
|
|
64
|
-
? position
|
|
72
|
+
? Array.from(new Set(position))
|
|
65
73
|
: [position];
|
|
74
|
+
if (process.env.NODE_ENV !== "production" && ref && positions.length > 1) {
|
|
75
|
+
console.warn("[ProgressiveBlur]: `ref` is ignored when `position` is an array — render one ProgressiveBlur per position if you need element refs.");
|
|
76
|
+
}
|
|
66
77
|
// Single position — render directly, forward ref and remaining props
|
|
67
78
|
if (positions.length === 1) {
|
|
68
79
|
return (jsx(BlurInstance, { ref: ref, position: positions[0], blurLevels: blurLevels, size: size, theme: theme, className: className, ...rest }));
|
|
@@ -4,6 +4,8 @@ export interface ProgressiveBlurProps extends React.HTMLAttributes<HTMLDivElemen
|
|
|
4
4
|
/**
|
|
5
5
|
* Position(s) where the blur effect should be applied.
|
|
6
6
|
* Can be a single position or array of positions.
|
|
7
|
+
* With an array, one element renders per position, so `ref` is not
|
|
8
|
+
* forwarded and `id`/event props apply to every instance.
|
|
7
9
|
* @default "bottom"
|
|
8
10
|
*/
|
|
9
11
|
position?: ProgressiveBlurPosition | ProgressiveBlurPosition[];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { TiltCardProps } from "./TiltCard.types";
|
|
3
|
+
/**
|
|
4
|
+
* TiltCard wraps content in a damped 3D mouse tilt. The tilt is a pure CSS
|
|
5
|
+
* transform — no WebGL. The optional `glow` spotlight border lazy-loads the
|
|
6
|
+
* `three` peer dependency on demand (see TiltCard.glow.ts).
|
|
7
|
+
*
|
|
8
|
+
* The animation loop is demand-driven: it runs only while the pointer is near
|
|
9
|
+
* the card or the damped values are still settling, then stops — an idle
|
|
10
|
+
* TiltCard costs nothing per frame.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TiltCard: React.FC<TiltCardProps>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type TiltCardVariation } from "./TiltCard.types";
|
|
2
|
+
/**
|
|
3
|
+
* WebGL spotlight-border renderer for TiltCard. Kept in its own module so the
|
|
4
|
+
* `three` optional peer dependency is only loaded (dynamic import) when a
|
|
5
|
+
* TiltCard actually enables `glow` — tilt-only cards never touch WebGL.
|
|
6
|
+
*/
|
|
7
|
+
export interface GlowParams {
|
|
8
|
+
glowColor: string;
|
|
9
|
+
spotlightSize: number;
|
|
10
|
+
spotlightEdge: number;
|
|
11
|
+
glowIntensity: number;
|
|
12
|
+
borderWidth: number;
|
|
13
|
+
}
|
|
14
|
+
export interface GlowEffect {
|
|
15
|
+
/** Render one frame with the damped mouse position (content-local px). */
|
|
16
|
+
render(mouseX: number, mouseY: number): void;
|
|
17
|
+
/** Re-measure the content box and update sizes/uniforms. */
|
|
18
|
+
resize(): void;
|
|
19
|
+
setParams(params: GlowParams): void;
|
|
20
|
+
dispose(): void;
|
|
21
|
+
}
|
|
22
|
+
export declare function createGlowEffect(opts: {
|
|
23
|
+
host: HTMLElement;
|
|
24
|
+
content: HTMLElement;
|
|
25
|
+
variation: TiltCardVariation;
|
|
26
|
+
glowExtent: number;
|
|
27
|
+
rounded?: string;
|
|
28
|
+
}): GlowEffect;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { fragmentShader, vertexShader } from './TiltCard.shaders.js';
|
|
3
|
+
import { variationMap } from './TiltCard.types.js';
|
|
4
|
+
|
|
5
|
+
function createGlowEffect(opts) {
|
|
6
|
+
var _a;
|
|
7
|
+
const { host, content, variation, glowExtent, rounded } = opts;
|
|
8
|
+
const scene = new THREE.Scene();
|
|
9
|
+
const camera = new THREE.OrthographicCamera();
|
|
10
|
+
camera.position.z = 1;
|
|
11
|
+
const renderer = new THREE.WebGLRenderer({ alpha: true });
|
|
12
|
+
renderer.setClearColor(0x000000, 0);
|
|
13
|
+
const canvas = renderer.domElement;
|
|
14
|
+
canvas.style.position = "absolute";
|
|
15
|
+
canvas.style.pointerEvents = "none";
|
|
16
|
+
canvas.style.zIndex = "10";
|
|
17
|
+
host.appendChild(canvas);
|
|
18
|
+
const geo = new THREE.PlaneGeometry(1, 1);
|
|
19
|
+
const material = new THREE.ShaderMaterial({
|
|
20
|
+
vertexShader,
|
|
21
|
+
fragmentShader,
|
|
22
|
+
uniforms: {
|
|
23
|
+
u_mouse: { value: new THREE.Vector2(-1e4, -1e4) },
|
|
24
|
+
u_resolution: { value: new THREE.Vector2() },
|
|
25
|
+
u_contentResolution: { value: new THREE.Vector2() },
|
|
26
|
+
u_offset: { value: new THREE.Vector2() },
|
|
27
|
+
u_pixelRatio: { value: 1 },
|
|
28
|
+
u_color: { value: new THREE.Color("#ffffff") },
|
|
29
|
+
u_shapeSize: { value: 1.0 },
|
|
30
|
+
u_roundness: { value: 0.0 },
|
|
31
|
+
u_borderSize: { value: 0.0 },
|
|
32
|
+
u_spotlightSize: { value: 0.4 },
|
|
33
|
+
u_spotlightEdge: { value: 0.5 },
|
|
34
|
+
u_glowIntensity: { value: 0.6 },
|
|
35
|
+
},
|
|
36
|
+
defines: { VAR: (_a = variationMap[variation]) !== null && _a !== void 0 ? _a : 0 },
|
|
37
|
+
transparent: true,
|
|
38
|
+
});
|
|
39
|
+
const quad = new THREE.Mesh(geo, material);
|
|
40
|
+
scene.add(quad);
|
|
41
|
+
let borderWidthPx = 2;
|
|
42
|
+
let contextLost = false;
|
|
43
|
+
const onContextLost = (e) => {
|
|
44
|
+
e.preventDefault();
|
|
45
|
+
contextLost = true;
|
|
46
|
+
};
|
|
47
|
+
const onContextRestored = () => {
|
|
48
|
+
contextLost = false;
|
|
49
|
+
resize();
|
|
50
|
+
};
|
|
51
|
+
canvas.addEventListener("webglcontextlost", onContextLost);
|
|
52
|
+
canvas.addEventListener("webglcontextrestored", onContextRestored);
|
|
53
|
+
const resize = () => {
|
|
54
|
+
var _a;
|
|
55
|
+
const w = content.clientWidth;
|
|
56
|
+
const h = content.clientHeight;
|
|
57
|
+
if (w === 0 || h === 0)
|
|
58
|
+
return;
|
|
59
|
+
const dpr = Math.min(window.devicePixelRatio || 1, 2);
|
|
60
|
+
const canvasW = w + glowExtent * 2;
|
|
61
|
+
const canvasH = h + glowExtent * 2;
|
|
62
|
+
renderer.setSize(canvasW, canvasH);
|
|
63
|
+
renderer.setPixelRatio(dpr);
|
|
64
|
+
canvas.style.top = `-${glowExtent}px`;
|
|
65
|
+
canvas.style.left = `-${glowExtent}px`;
|
|
66
|
+
canvas.style.width = `${canvasW}px`;
|
|
67
|
+
canvas.style.height = `${canvasH}px`;
|
|
68
|
+
camera.left = -canvasW / 2;
|
|
69
|
+
camera.right = canvasW / 2;
|
|
70
|
+
camera.top = canvasH / 2;
|
|
71
|
+
camera.bottom = -canvasH / 2;
|
|
72
|
+
camera.updateProjectionMatrix();
|
|
73
|
+
quad.scale.set(canvasW, canvasH, 1);
|
|
74
|
+
material.uniforms.u_resolution.value.set(canvasW, canvasH).multiplyScalar(dpr);
|
|
75
|
+
material.uniforms.u_contentResolution.value.set(w, h).multiplyScalar(dpr);
|
|
76
|
+
material.uniforms.u_offset.value.set(glowExtent, glowExtent).multiplyScalar(dpr);
|
|
77
|
+
material.uniforms.u_pixelRatio.value = dpr;
|
|
78
|
+
const shortestDim = Math.min(w, h);
|
|
79
|
+
const radiusSource = rounded ? host : ((_a = content.firstElementChild) !== null && _a !== void 0 ? _a : host);
|
|
80
|
+
const radiusPx = parseFloat(getComputedStyle(radiusSource).borderRadius) || 0;
|
|
81
|
+
material.uniforms.u_roundness.value = Math.min((radiusPx / shortestDim) * 2, 1);
|
|
82
|
+
material.uniforms.u_borderSize.value = borderWidthPx / shortestDim;
|
|
83
|
+
};
|
|
84
|
+
return {
|
|
85
|
+
render(mouseX, mouseY) {
|
|
86
|
+
if (contextLost)
|
|
87
|
+
return;
|
|
88
|
+
material.uniforms.u_mouse.value.set(mouseX, mouseY);
|
|
89
|
+
renderer.render(scene, camera);
|
|
90
|
+
},
|
|
91
|
+
resize,
|
|
92
|
+
setParams({ glowColor, spotlightSize, spotlightEdge, glowIntensity, borderWidth }) {
|
|
93
|
+
material.uniforms.u_color.value.set(glowColor);
|
|
94
|
+
material.uniforms.u_spotlightSize.value = spotlightSize;
|
|
95
|
+
material.uniforms.u_spotlightEdge.value = spotlightEdge;
|
|
96
|
+
material.uniforms.u_glowIntensity.value = glowIntensity;
|
|
97
|
+
borderWidthPx = borderWidth;
|
|
98
|
+
const shortestDim = Math.min(content.clientWidth, content.clientHeight);
|
|
99
|
+
if (shortestDim > 0)
|
|
100
|
+
material.uniforms.u_borderSize.value = borderWidthPx / shortestDim;
|
|
101
|
+
},
|
|
102
|
+
dispose() {
|
|
103
|
+
canvas.removeEventListener("webglcontextlost", onContextLost);
|
|
104
|
+
canvas.removeEventListener("webglcontextrestored", onContextRestored);
|
|
105
|
+
if (host.contains(canvas))
|
|
106
|
+
host.removeChild(canvas);
|
|
107
|
+
renderer.dispose();
|
|
108
|
+
geo.dispose();
|
|
109
|
+
material.dispose();
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export { createGlowEffect };
|