@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
|
@@ -5,12 +5,18 @@ const tableTheme = {
|
|
|
5
5
|
// Light: white background | Dark: neutral-900 background
|
|
6
6
|
baseStyle: "w-full border-separate border-spacing-0 text-sm",
|
|
7
7
|
// Variant styles
|
|
8
|
-
// Each variant gets dark mode border colors and alternate row colors
|
|
8
|
+
// Each variant gets dark mode border colors and alternate row colors.
|
|
9
|
+
// Non-grid variants (default/striped/compact) drop the bottom border on the
|
|
10
|
+
// last body row — the closing line is then carried by the surrounding card
|
|
11
|
+
// border, or by the pagination footer's `border-t` when pagination is shown.
|
|
12
|
+
// `bordered` is a full grid and keeps its closing edge.
|
|
9
13
|
variants: {
|
|
10
14
|
default: "border-[var(--color-border)] dark:border-[var(--color-neutral-700)] " +
|
|
15
|
+
"[&>tbody>tr:last-child>td]:border-b-0 " +
|
|
11
16
|
"[&_td]:px-3 [&_td]:py-2.5 [&_th]:px-3 [&_th]:py-2.5",
|
|
12
17
|
striped: "border-[var(--color-border)] dark:border-[var(--color-neutral-700)] " +
|
|
13
18
|
"[&>tbody>tr:nth-child(odd)]:bg-[var(--color-neutral-50)] dark:[&>tbody>tr:nth-child(odd)]:bg-[var(--color-neutral-800)] " +
|
|
19
|
+
"[&>tbody>tr:last-child>td]:border-b-0 " +
|
|
14
20
|
"[&_td]:px-3 [&_td]:py-2.5 [&_th]:px-3 [&_th]:py-2.5",
|
|
15
21
|
bordered: "border-t border-l border-[var(--color-border)] dark:border-[var(--color-neutral-700)] " +
|
|
16
22
|
"[&_td]:border-b [&_td]:border-r [&_th]:border-b [&_th]:border-r " +
|
|
@@ -18,6 +24,7 @@ const tableTheme = {
|
|
|
18
24
|
"dark:[&_td]:border-[var(--color-neutral-700)] dark:[&_th]:border-[var(--color-neutral-700)] " +
|
|
19
25
|
"[&_td]:px-3 [&_td]:py-2.5 [&_th]:px-3 [&_th]:py-2.5",
|
|
20
26
|
compact: "border-[var(--color-border)] dark:border-[var(--color-neutral-700)] " +
|
|
27
|
+
"[&>tbody>tr:last-child>td]:border-b-0 " +
|
|
21
28
|
"[&_td]:px-3 [&_td]:py-1 [&_th]:px-3 [&_th]:py-1",
|
|
22
29
|
},
|
|
23
30
|
// Edge-padding modes — applied at the table root via descendant selectors so they
|
|
@@ -28,12 +35,25 @@ const tableTheme = {
|
|
|
28
35
|
paddingStyles: {
|
|
29
36
|
default: "",
|
|
30
37
|
flush: "[&_th:first-child]:pl-0 [&_th:last-child]:pr-0 " +
|
|
31
|
-
"[&_td:first-child]:pl-0 [&_td:last-child]:pr-0"
|
|
38
|
+
"[&_td:first-child]:pl-0 [&_td:last-child]:pr-0 " +
|
|
39
|
+
// Hover inset on ONLY the hovered row's edge cells, with NO column reflow.
|
|
40
|
+
// Padding can't do this (a table shares one width per column across all
|
|
41
|
+
// rows, so padding one cell widens the whole column). Instead we shift the
|
|
42
|
+
// cell's content with `transform`, which is layout-free — it can't resize a
|
|
43
|
+
// column, so auto table-layout / responsive sizing is fully preserved and
|
|
44
|
+
// no other row moves. The row divider is moved from the cells onto the
|
|
45
|
+
// <tr> (inset shadow) so a shifted cell can't drag a notch into it.
|
|
46
|
+
"[&>tbody>tr>td]:border-b-0 " +
|
|
47
|
+
"[&>tbody>tr]:shadow-[inset_0_-1px_0_0_var(--color-border)] [&>tbody>tr:last-child]:shadow-none " +
|
|
48
|
+
"[&>tbody>tr>td]:transition-transform [&>tbody>tr>td]:duration-300 " +
|
|
49
|
+
// first cell eases right (its left padding); last cell eases left only when
|
|
50
|
+
// right-aligned (matches `pr-4` — invisible on left-aligned content).
|
|
51
|
+
"[&>tbody>tr:hover>td:first-child]:translate-x-2 " +
|
|
52
|
+
"[&>tbody>tr:hover>td:last-child.text-right]:-translate-x-2",
|
|
32
53
|
},
|
|
33
54
|
// Header styles
|
|
34
55
|
// Light: primary text, light border | Dark: neutral-200 text, neutral-700 border
|
|
35
|
-
headerStyle: "text-left
|
|
36
|
-
"text-[var(--color-text-secondary)]/80 text-sm border-[var(--color-border)] ",
|
|
56
|
+
headerStyle: "text-left sticky top-0 border-b first:pl-4 last:pr-4 text-[var(--color-text-primary)]/60 text-xs font-semibold border-[var(--color-border)] ",
|
|
37
57
|
// Cell styles — borders on cells (not rows) so sticky columns keep them
|
|
38
58
|
// Light: primary text | Dark: neutral-300 text
|
|
39
59
|
cellStyle: "border-b border-b-[var(--color-border)] first:pl-4 last:pr-4 " +
|
|
@@ -55,12 +75,10 @@ const tableTheme = {
|
|
|
55
75
|
"shadow-lg shadow-[var(--color-neutral-200)]/50 " +
|
|
56
76
|
"dark:shadow-[var(--color-neutral-900)]/50",
|
|
57
77
|
// Utility controls - Column manager button
|
|
58
|
-
//
|
|
78
|
+
// Surface-like control; surface/border/hover tokens flip automatically between light/dark
|
|
59
79
|
columnManagerButton: "inline-flex items-center gap-2 rounded-[calc(var(--radius-base)*0.75)] px-3 py-2 text-sm font-medium " +
|
|
60
|
-
"focus:outline-none focus:ring-2 focus:ring-[var(--color-primary-500)] focus:ring-offset-2 " +
|
|
61
|
-
"
|
|
62
|
-
"bg-white border border-[var(--color-neutral-300)] text-[var(--color-text-primary)] hover:bg-[var(--color-neutral-50)] " +
|
|
63
|
-
"dark:bg-[var(--color-neutral-800)] dark:border-[var(--color-neutral-600)] dark:text-[var(--color-neutral-200)] dark:hover:bg-[var(--color-neutral-700)]",
|
|
80
|
+
"focus:outline-none focus:ring-2 focus:ring-[var(--color-primary-500)] focus:ring-offset-2 focus:ring-offset-[var(--color-surface)] " +
|
|
81
|
+
"bg-[var(--color-surface)] border border-[var(--color-border)] text-[var(--color-text-primary)] hover:bg-[var(--color-surface-hover)]",
|
|
64
82
|
columnManagerContainer: "mb-4 flex items-center justify-end gap-2",
|
|
65
83
|
};
|
|
66
84
|
|
|
@@ -155,6 +155,12 @@ export interface TableProps<T = unknown> {
|
|
|
155
155
|
* Provides consistent component identity during row reordering or updates.
|
|
156
156
|
*/
|
|
157
157
|
rowKey?: keyof T | ((row: T, index: number) => string | number);
|
|
158
|
+
/**
|
|
159
|
+
* Row-level click handler (data-driven API). When provided, body rows get a
|
|
160
|
+
* pointer cursor, keyboard focus (Enter/Space activates), and call back with
|
|
161
|
+
* the row record. Selection/expansion controls stop propagation as before.
|
|
162
|
+
*/
|
|
163
|
+
onRowClick?: (row: T) => void;
|
|
158
164
|
/** Visual variant for different table styles */
|
|
159
165
|
variant?: TableVariant;
|
|
160
166
|
/**
|
|
@@ -267,6 +273,7 @@ export interface InternalTableBodyProps<T> {
|
|
|
267
273
|
data: T[];
|
|
268
274
|
columns: Column<T>[];
|
|
269
275
|
rowKey?: keyof T | ((row: T, index: number) => string | number);
|
|
276
|
+
onRowClick?: (row: T) => void;
|
|
270
277
|
expandedRowRender?: (row: T) => ReactNode;
|
|
271
278
|
expandedRows?: string[];
|
|
272
279
|
onExpandedRowsChange?: (expandedRows: string[]) => void;
|
|
@@ -282,6 +289,7 @@ export interface InternalTableRowProps<T> {
|
|
|
282
289
|
row: T;
|
|
283
290
|
rowId: string;
|
|
284
291
|
columns: Column<T>[];
|
|
292
|
+
onRowClick?: (row: T) => void;
|
|
285
293
|
expandedRowRender?: (row: T) => ReactNode;
|
|
286
294
|
isExpanded?: boolean;
|
|
287
295
|
onExpandChange?: (expanded: boolean) => void;
|
|
@@ -4,7 +4,7 @@ import { getRowId } from './Table.utils.js';
|
|
|
4
4
|
import { useTableExpansion } from './hooks/useTableExpansion.js';
|
|
5
5
|
import { useTableSelection } from './hooks/useTableSelection.js';
|
|
6
6
|
|
|
7
|
-
function TableBodyComponent({ data, columns, rowKey, expandedRowRender, expandedRows = [], onExpandedRowsChange, selectable, selectionType, selectedRows = [], onSelectionChange, freezeFirstColumn, freezeLastColumn, theme, }) {
|
|
7
|
+
function TableBodyComponent({ data, columns, rowKey, onRowClick, expandedRowRender, expandedRows = [], onExpandedRowsChange, selectable, selectionType, selectedRows = [], onSelectionChange, freezeFirstColumn, freezeLastColumn, theme, }) {
|
|
8
8
|
const { handleExpandChange } = useTableExpansion({
|
|
9
9
|
expandedRows,
|
|
10
10
|
onExpandedRowsChange,
|
|
@@ -18,7 +18,7 @@ function TableBodyComponent({ data, columns, rowKey, expandedRowRender, expanded
|
|
|
18
18
|
});
|
|
19
19
|
return (jsx("tbody", { children: data.map((row, index) => {
|
|
20
20
|
const rowId = getRowId(row, index, rowKey);
|
|
21
|
-
return (jsx(TableRow, { row: row, rowId: rowId, columns: columns, expandedRowRender: expandedRowRender, isExpanded: expandedRows.includes(rowId), onExpandChange: (expanded) => handleExpandChange(rowId, expanded), selectable: selectable, selectionType: selectionType, isSelected: selectedRows.includes(rowId), onSelectionChange: (selected) => handleSelectionChange(rowId, selected), freezeFirstColumn: freezeFirstColumn, freezeLastColumn: freezeLastColumn, theme: theme }, rowId));
|
|
21
|
+
return (jsx(TableRow, { row: row, rowId: rowId, columns: columns, onRowClick: onRowClick, expandedRowRender: expandedRowRender, isExpanded: expandedRows.includes(rowId), onExpandChange: (expanded) => handleExpandChange(rowId, expanded), selectable: selectable, selectionType: selectionType, isSelected: selectedRows.includes(rowId), onSelectionChange: (selected) => handleSelectionChange(rowId, selected), freezeFirstColumn: freezeFirstColumn, freezeLastColumn: freezeLastColumn, theme: theme }, rowId));
|
|
22
22
|
}) }));
|
|
23
23
|
}
|
|
24
24
|
const TableBody = TableBodyComponent;
|
|
@@ -12,7 +12,7 @@ import { TableContext } from './Table.js';
|
|
|
12
12
|
*/
|
|
13
13
|
function TableCellComponent({ column, row, rowId, isHeader = false, isFrozen = false, isLastFrozen = false, isSelected = false, theme, children, }) {
|
|
14
14
|
const { isOverflowing } = useContext(TableContext);
|
|
15
|
-
const overflowFrozenStyle = isOverflowing ? "backdrop-blur-
|
|
15
|
+
const overflowFrozenStyle = isOverflowing ? "backdrop-blur-md" : undefined;
|
|
16
16
|
const Cell = isHeader ? 'th' : 'td';
|
|
17
17
|
const isUtilityColumn = column.id === UTILITY_COLUMN_ID;
|
|
18
18
|
// For header cells, render the column header content
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InternalTableRowProps } from "./Table.types";
|
|
2
|
-
declare function TableRowComponent<T extends Record<string, any>>({ row, rowId, columns, expandedRowRender, isExpanded, onExpandChange, selectable, selectionType, isSelected, onSelectionChange, freezeFirstColumn, freezeLastColumn, theme, }: InternalTableRowProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
declare function TableRowComponent<T extends Record<string, any>>({ row, rowId, columns, onRowClick, expandedRowRender, isExpanded, onExpandChange, selectable, selectionType, isSelected, onSelectionChange, freezeFirstColumn, freezeLastColumn, theme, }: InternalTableRowProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
declare namespace TableRowComponent {
|
|
4
4
|
var displayName: string;
|
|
5
5
|
}
|
|
@@ -10,14 +10,21 @@ import { UTILITY_COLUMN_WIDTH, UTILITY_COLUMN_ID } from './Table.utils.js';
|
|
|
10
10
|
import { cn } from '../../../utils/cn.js';
|
|
11
11
|
import { tableExpandAnimations, tableExpandContentAnimations } from './Table.animations.js';
|
|
12
12
|
|
|
13
|
-
function TableRowComponent({ row, rowId, columns, expandedRowRender, isExpanded = false, onExpandChange, selectable, selectionType, isSelected = false, onSelectionChange, freezeFirstColumn, freezeLastColumn, theme, }) {
|
|
13
|
+
function TableRowComponent({ row, rowId, columns, onRowClick, expandedRowRender, isExpanded = false, onExpandChange, selectable, selectionType, isSelected = false, onSelectionChange, freezeFirstColumn, freezeLastColumn, theme, }) {
|
|
14
14
|
const rowClasses = cn(theme === null || theme === void 0 ? void 0 : theme.rowStyle, isSelected && (theme === null || theme === void 0 ? void 0 : theme.selectedRowStyle));
|
|
15
15
|
const handleExpandClick = (e) => {
|
|
16
16
|
e.stopPropagation();
|
|
17
17
|
onExpandChange === null || onExpandChange === void 0 ? void 0 : onExpandChange(!isExpanded);
|
|
18
18
|
};
|
|
19
19
|
const colSpan = columns.length + (selectable || !!expandedRowRender ? 1 : 0);
|
|
20
|
-
return (jsxs(Fragment, { children: [jsxs("tr", { className: rowClasses, "data-selected": isSelected, role: "row", "aria-selected": selectable ? isSelected : undefined, "aria-expanded": Boolean(expandedRowRender) ? isExpanded : undefined,
|
|
20
|
+
return (jsxs(Fragment, { children: [jsxs("tr", { className: cn(rowClasses, onRowClick && "cursor-pointer"), "data-selected": isSelected, role: "row", "aria-selected": selectable ? isSelected : undefined, "aria-expanded": Boolean(expandedRowRender) ? isExpanded : undefined, tabIndex: onRowClick ? 0 : undefined, onClick: onRowClick ? () => onRowClick(row) : undefined, onKeyDown: onRowClick
|
|
21
|
+
? (e) => {
|
|
22
|
+
if (e.target === e.currentTarget && (e.key === "Enter" || e.key === " ")) {
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
onRowClick(row);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
: undefined, children: [(selectable || expandedRowRender) && (jsx(TableCell, { column: {
|
|
21
28
|
id: UTILITY_COLUMN_ID,
|
|
22
29
|
header: "",
|
|
23
30
|
accessor: () => "",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import React__default, { useContext, createContext, useMemo } from 'react';
|
|
3
3
|
import { cn } from '../../../utils/cn.js';
|
|
4
4
|
import { timelineTheme } from './Timeline.theme.js';
|
|
@@ -14,7 +14,15 @@ const useTimelineContext = () => {
|
|
|
14
14
|
throw new Error("Timeline compound components must be used within <Timeline>");
|
|
15
15
|
return ctx;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Render a single data-driven item to the compound primitives. Keeps one
|
|
19
|
+
* rendering path: `items` and the compound API both produce `Timeline.Item`s.
|
|
20
|
+
*/
|
|
21
|
+
function renderItemData(item, index, theme) {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
return (jsxs(TimelineItem, { status: item.status, className: item.className, children: [jsx(TimelineMarker, { icon: item.icon }), jsx(TimelineContent, { children: (_a = item.content) !== null && _a !== void 0 ? _a : (jsxs(Fragment, { children: [item.title != null && (jsx("p", { className: theme.titleStyle, children: item.title })), item.description != null && (jsx("p", { className: theme.descriptionStyle, children: item.description })), item.timestamp != null && (jsx("p", { className: theme.timestampStyle, children: item.timestamp }))] })) })] }, (_b = item.key) !== null && _b !== void 0 ? _b : index));
|
|
24
|
+
}
|
|
25
|
+
const TimelineRoot = React__default.forwardRef(({ children, items, className, layout = "vertical", theme: themeOverrides, ...props }, ref) => {
|
|
18
26
|
// Merge theme with any overrides
|
|
19
27
|
const theme = useMemo(() => ({
|
|
20
28
|
...timelineTheme,
|
|
@@ -24,8 +32,22 @@ const TimelineRoot = React__default.forwardRef(({ children, className, layout =
|
|
|
24
32
|
...((themeOverrides === null || themeOverrides === void 0 ? void 0 : themeOverrides.markerStatuses) || {}),
|
|
25
33
|
},
|
|
26
34
|
}), [themeOverrides]);
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
if (process.env.NODE_ENV !== "production" &&
|
|
36
|
+
items &&
|
|
37
|
+
React__default.Children.count(children) > 0) {
|
|
38
|
+
console.warn("[Timeline]: both `items` and children were provided — `items` takes precedence and children are ignored.");
|
|
39
|
+
}
|
|
40
|
+
// Data-driven path renders to the same compound primitives as the
|
|
41
|
+
// composition path, so everything downstream is identical.
|
|
42
|
+
const baseChildren = items
|
|
43
|
+
? items.map((item, i) => renderItemData(item, i, theme))
|
|
44
|
+
: children;
|
|
45
|
+
// Inject each item's index from a single source of truth (the rendered
|
|
46
|
+
// children array) — no DOM measurement, no IntersectionObserver-derived order.
|
|
47
|
+
const indexedChildren = React__default.Children.map(baseChildren, (child, index) => React__default.isValidElement(child)
|
|
48
|
+
? React__default.cloneElement(child, { _index: index })
|
|
49
|
+
: child);
|
|
50
|
+
const totalItems = React__default.Children.count(baseChildren);
|
|
29
51
|
// Context value to be provided to children
|
|
30
52
|
const contextValue = useMemo(() => ({
|
|
31
53
|
layout,
|
|
@@ -33,7 +55,7 @@ const TimelineRoot = React__default.forwardRef(({ children, className, layout =
|
|
|
33
55
|
totalItems,
|
|
34
56
|
}), [layout, theme, totalItems]);
|
|
35
57
|
const isHorizontal = layout === "horizontal";
|
|
36
|
-
return (jsx(TimelineContext.Provider, { value: contextValue, children: jsx("div", { ref: ref, className: cn(isHorizontal ? theme.baseStyleHorizontal : theme.baseStyle, className), "data-layout": layout, role: "list", "aria-label": "Timeline", ...props, children:
|
|
58
|
+
return (jsx(TimelineContext.Provider, { value: contextValue, children: jsx("div", { ref: ref, className: cn(isHorizontal ? theme.baseStyleHorizontal : theme.baseStyle, className), "data-layout": layout, role: "list", "aria-label": "Timeline", ...props, children: indexedChildren }) }));
|
|
37
59
|
});
|
|
38
60
|
TimelineRoot.displayName = "Timeline";
|
|
39
61
|
// Attach compound subcomponents
|
|
@@ -7,12 +7,20 @@ export interface TimelineTheme {
|
|
|
7
7
|
baseStyleHorizontal: string;
|
|
8
8
|
itemStyle: string;
|
|
9
9
|
itemStyleHorizontal: string;
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
/** Connector line between markers — vertical layout */
|
|
11
|
+
connectorStyle: string;
|
|
12
|
+
/** Connector line between markers — horizontal layout */
|
|
13
|
+
connectorStyleHorizontal: string;
|
|
14
|
+
/** Color override applied to the connector when the item is completed */
|
|
15
|
+
connectorCompletedStyle: string;
|
|
12
16
|
markerStyle: string;
|
|
13
17
|
markerStatuses: Record<TimelineItemStatus, string>;
|
|
14
18
|
contentStyle: string;
|
|
15
19
|
contentStyleHorizontal: string;
|
|
20
|
+
/** Default typography for the data-driven (`items`) API content */
|
|
21
|
+
titleStyle: string;
|
|
22
|
+
descriptionStyle: string;
|
|
23
|
+
timestampStyle: string;
|
|
16
24
|
}
|
|
17
25
|
/**
|
|
18
26
|
* Default theme for Timeline components
|
|
@@ -11,22 +11,28 @@ const timelineTheme = {
|
|
|
11
11
|
itemStyle: "relative flex gap-4",
|
|
12
12
|
// Individual timeline item - horizontal
|
|
13
13
|
itemStyleHorizontal: "relative flex flex-col items-center flex-1 gap-3",
|
|
14
|
-
// Connector line - vertical (
|
|
15
|
-
|
|
16
|
-
// Connector line - horizontal
|
|
17
|
-
|
|
14
|
+
// Connector line - vertical (stretches down below the marker)
|
|
15
|
+
connectorStyle: "w-0.5 flex-1 min-h-4 bg-[var(--color-border)]",
|
|
16
|
+
// Connector line - horizontal (spans from this item's center to the next)
|
|
17
|
+
connectorStyleHorizontal: "absolute top-1/2 -translate-y-1/2 left-1/2 h-0.5 w-full bg-[var(--color-border)]",
|
|
18
|
+
// Completed connector color (overrides the base connector background)
|
|
19
|
+
connectorCompletedStyle: "bg-[var(--color-success)]",
|
|
18
20
|
// Marker base styles (shared across statuses)
|
|
19
|
-
markerStyle: "relative z-10 flex items-center justify-center shrink-0 rounded-full border-2 transition-colors duration-200",
|
|
21
|
+
markerStyle: "relative z-10 flex items-center justify-center shrink-0 rounded-full border-2 transition-colors duration-200 ring-4 ring-[var(--color-surface)] backdrop-blur-sm",
|
|
20
22
|
// Marker status-specific styles
|
|
21
23
|
markerStatuses: {
|
|
22
|
-
completed: "
|
|
23
|
-
active: "
|
|
24
|
-
pending: "
|
|
24
|
+
completed: "size-8 bg-[var(--color-success)] border-[var(--color-success)] text-[var(--color-success-contrast)]",
|
|
25
|
+
active: "size-8 bg-[var(--color-primary)]/0 border-[var(--color-primary)] text-[var(--color-primary)] ",
|
|
26
|
+
pending: "size-8 bg-[var(--color-background)] border-[var(--color-border)] text-[var(--color-text-muted)]",
|
|
25
27
|
},
|
|
26
28
|
// Content area - vertical
|
|
27
29
|
contentStyle: "pb-8 pt-0.5 min-w-0",
|
|
28
30
|
// Content area - horizontal
|
|
29
31
|
contentStyleHorizontal: "text-center px-2 min-w-0",
|
|
32
|
+
// Data-driven (`items`) content typography
|
|
33
|
+
titleStyle: "text-sm font-medium text-[var(--color-text-primary)]",
|
|
34
|
+
descriptionStyle: "text-sm text-[var(--color-text-secondary)] mt-1",
|
|
35
|
+
timestampStyle: "text-xs text-[var(--color-text-placeholder)] mt-1",
|
|
30
36
|
};
|
|
31
37
|
|
|
32
38
|
export { timelineTheme };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import type { TimelineTheme } from "./Timeline.theme";
|
|
2
3
|
/**
|
|
3
4
|
* Layout orientation for the Timeline
|
|
4
5
|
*/
|
|
@@ -18,12 +19,44 @@ export interface TimelineThemeOverrides {
|
|
|
18
19
|
baseStyleHorizontal?: string;
|
|
19
20
|
itemStyle?: string;
|
|
20
21
|
itemStyleHorizontal?: string;
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
connectorStyle?: string;
|
|
23
|
+
connectorStyleHorizontal?: string;
|
|
24
|
+
connectorCompletedStyle?: string;
|
|
23
25
|
markerStyle?: string;
|
|
24
26
|
markerStatuses?: Partial<Record<TimelineItemStatus, string>>;
|
|
25
27
|
contentStyle?: string;
|
|
26
28
|
contentStyleHorizontal?: string;
|
|
29
|
+
titleStyle?: string;
|
|
30
|
+
descriptionStyle?: string;
|
|
31
|
+
timestampStyle?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A single timeline item for the data-driven (`items`) API.
|
|
35
|
+
* Maps internally to `Timeline.Item` → `Timeline.Marker` + `Timeline.Content`,
|
|
36
|
+
* so it stays fully serializable (no JSX composition required). This is the
|
|
37
|
+
* generative-UI / model-friendly entry path; the compound API remains for
|
|
38
|
+
* hand-authored timelines that need full control.
|
|
39
|
+
*/
|
|
40
|
+
export interface TimelineItemData {
|
|
41
|
+
/** @default 'pending' */
|
|
42
|
+
status?: TimelineItemStatus;
|
|
43
|
+
/** Heading line (rendered with the theme's `titleStyle`) */
|
|
44
|
+
title?: React.ReactNode;
|
|
45
|
+
/** Body line (rendered with the theme's `descriptionStyle`) */
|
|
46
|
+
description?: React.ReactNode;
|
|
47
|
+
/** Trailing meta line, e.g. a date (rendered with the theme's `timestampStyle`) */
|
|
48
|
+
timestamp?: React.ReactNode;
|
|
49
|
+
/** Icon element shown inside the marker. Pass a ReactNode (resolve name→icon upstream). */
|
|
50
|
+
icon?: React.ReactNode;
|
|
51
|
+
/**
|
|
52
|
+
* Escape hatch — when provided, replaces the default title/description/timestamp
|
|
53
|
+
* rendering with arbitrary content (matches the compound `Timeline.Content` body).
|
|
54
|
+
*/
|
|
55
|
+
content?: React.ReactNode;
|
|
56
|
+
/** Optional className forwarded to the item wrapper */
|
|
57
|
+
className?: string;
|
|
58
|
+
/** Stable React key (falls back to the array index) */
|
|
59
|
+
key?: string | number;
|
|
27
60
|
}
|
|
28
61
|
/**
|
|
29
62
|
* Timeline root component props
|
|
@@ -34,32 +67,26 @@ export interface TimelineProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
34
67
|
* @default 'vertical'
|
|
35
68
|
*/
|
|
36
69
|
layout?: TimelineLayout;
|
|
70
|
+
/**
|
|
71
|
+
* Data-driven items. When provided, the timeline renders from this array and
|
|
72
|
+
* any `children` are ignored (dev-warns). Omit it to use the compound API.
|
|
73
|
+
*/
|
|
74
|
+
items?: TimelineItemData[];
|
|
37
75
|
/**
|
|
38
76
|
* Theme overrides for customizing styles
|
|
39
77
|
*/
|
|
40
78
|
theme?: TimelineThemeOverrides;
|
|
41
79
|
/**
|
|
42
|
-
* Children
|
|
80
|
+
* Children — `Timeline.Item` components (compound API). Optional when `items` is used.
|
|
43
81
|
*/
|
|
44
|
-
children
|
|
82
|
+
children?: React.ReactNode;
|
|
45
83
|
}
|
|
46
84
|
/**
|
|
47
85
|
* Context value shared between Timeline compound components
|
|
48
86
|
*/
|
|
49
87
|
export interface TimelineContextValue {
|
|
50
88
|
layout: TimelineLayout;
|
|
51
|
-
theme:
|
|
52
|
-
baseStyle: string;
|
|
53
|
-
baseStyleHorizontal: string;
|
|
54
|
-
itemStyle: string;
|
|
55
|
-
itemStyleHorizontal: string;
|
|
56
|
-
lineStyle: string;
|
|
57
|
-
lineStyleHorizontal: string;
|
|
58
|
-
markerStyle: string;
|
|
59
|
-
markerStatuses: Record<TimelineItemStatus, string>;
|
|
60
|
-
contentStyle: string;
|
|
61
|
-
contentStyleHorizontal: string;
|
|
62
|
-
};
|
|
89
|
+
theme: TimelineTheme;
|
|
63
90
|
totalItems: number;
|
|
64
91
|
}
|
|
65
92
|
/**
|
|
@@ -79,6 +106,11 @@ export interface TimelineItemProps extends React.HTMLAttributes<HTMLDivElement>
|
|
|
79
106
|
* Item content - should include Timeline.Marker and Timeline.Content
|
|
80
107
|
*/
|
|
81
108
|
children: React.ReactNode;
|
|
109
|
+
/**
|
|
110
|
+
* @internal Index within the timeline, injected by the root via cloneElement.
|
|
111
|
+
* Do not set this manually.
|
|
112
|
+
*/
|
|
113
|
+
_index?: number;
|
|
82
114
|
}
|
|
83
115
|
/**
|
|
84
116
|
* Context value for individual Timeline items
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip the DOM drag/animation handlers that collide with `motion.*` element
|
|
3
|
+
* props, so the remaining `...rest` can be safely spread onto a motion element.
|
|
4
|
+
* Shared by TimelineItem and TimelineMarker (both render a `motion.div`).
|
|
5
|
+
*/
|
|
6
|
+
export declare function stripMotionConflicts<T extends Record<string, unknown>>(props: T): Omit<T, "onDrag" | "onDragEnd" | "onDragStart" | "onAnimationStart" | "onAnimationEnd">;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip the DOM drag/animation handlers that collide with `motion.*` element
|
|
3
|
+
* props, so the remaining `...rest` can be safely spread onto a motion element.
|
|
4
|
+
* Shared by TimelineItem and TimelineMarker (both render a `motion.div`).
|
|
5
|
+
*/
|
|
6
|
+
function stripMotionConflicts(props) {
|
|
7
|
+
const { onDrag: _onDrag, onDragEnd: _onDragEnd, onDragStart: _onDragStart, onAnimationStart: _onAnimationStart, onAnimationEnd: _onAnimationEnd, ...rest } = props;
|
|
8
|
+
return rest;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { stripMotionConflicts };
|
|
@@ -4,6 +4,7 @@ import { useReducedMotion, motion } from 'motion/react';
|
|
|
4
4
|
import { cn } from '../../../utils/cn.js';
|
|
5
5
|
import { useTimelineContext } from './Timeline.js';
|
|
6
6
|
import { timelineHorizontalItemVariants, timelineItemVariants } from './Timeline.animations.js';
|
|
7
|
+
import { stripMotionConflicts } from './Timeline.utils.js';
|
|
7
8
|
|
|
8
9
|
// Create context for TimelineItem
|
|
9
10
|
const TimelineItemContext = createContext(undefined);
|
|
@@ -14,26 +15,22 @@ const useTimelineItemContext = () => {
|
|
|
14
15
|
throw new Error("Timeline.Marker and Timeline.Content must be used within Timeline.Item");
|
|
15
16
|
return ctx;
|
|
16
17
|
};
|
|
17
|
-
const TimelineItem = React__default.forwardRef(({ children, className, status = "pending", ...props }, ref) => {
|
|
18
|
+
const TimelineItem = React__default.forwardRef(({ children, className, status = "pending", _index = 0, ...props }, ref) => {
|
|
18
19
|
const { layout, theme, totalItems } = useTimelineContext();
|
|
19
20
|
const shouldReduceMotion = useReducedMotion();
|
|
20
21
|
const itemRef = useRef(null);
|
|
21
22
|
const [isVisible, setIsVisible] = useState(false);
|
|
22
|
-
//
|
|
23
|
+
// Index/first/last come from the root (single source of truth), not the DOM.
|
|
24
|
+
const index = _index;
|
|
25
|
+
const isFirst = index === 0;
|
|
26
|
+
const isLast = index === totalItems - 1;
|
|
27
|
+
const isHorizontal = layout === "horizontal";
|
|
23
28
|
const resolvedRef = ref || itemRef;
|
|
24
|
-
//
|
|
25
|
-
const [index, setIndex] = useState(0);
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
const element = resolvedRef && "current" in resolvedRef ? resolvedRef.current : itemRef.current;
|
|
28
|
-
if (element === null || element === void 0 ? void 0 : element.parentElement) {
|
|
29
|
-
const siblings = Array.from(element.parentElement.children);
|
|
30
|
-
const idx = siblings.indexOf(element);
|
|
31
|
-
setIndex(idx);
|
|
32
|
-
}
|
|
33
|
-
}, [resolvedRef]);
|
|
34
|
-
// IntersectionObserver for scroll-triggered animation
|
|
29
|
+
// IntersectionObserver for scroll-triggered entry animation
|
|
35
30
|
useEffect(() => {
|
|
36
|
-
const element = resolvedRef && "current" in resolvedRef
|
|
31
|
+
const element = resolvedRef && "current" in resolvedRef
|
|
32
|
+
? resolvedRef.current
|
|
33
|
+
: itemRef.current;
|
|
37
34
|
if (!element)
|
|
38
35
|
return;
|
|
39
36
|
const observer = new IntersectionObserver(([entry]) => {
|
|
@@ -45,9 +42,6 @@ const TimelineItem = React__default.forwardRef(({ children, className, status =
|
|
|
45
42
|
observer.observe(element);
|
|
46
43
|
return () => observer.disconnect();
|
|
47
44
|
}, [resolvedRef]);
|
|
48
|
-
const isFirst = index === 0;
|
|
49
|
-
const isLast = index === totalItems - 1;
|
|
50
|
-
const isHorizontal = layout === "horizontal";
|
|
51
45
|
// Select animation variants based on layout
|
|
52
46
|
const getVariants = () => {
|
|
53
47
|
if (shouldReduceMotion)
|
|
@@ -63,10 +57,9 @@ const TimelineItem = React__default.forwardRef(({ children, className, status =
|
|
|
63
57
|
isFirst,
|
|
64
58
|
isLast,
|
|
65
59
|
};
|
|
66
|
-
|
|
67
|
-
const { onDrag, onDragEnd, onDragStart, onAnimationStart, onAnimationEnd, ...safeProps } = props;
|
|
60
|
+
const safeProps = stripMotionConflicts(props);
|
|
68
61
|
const variants = getVariants();
|
|
69
|
-
return (jsx(TimelineItemContext.Provider, { value: contextValue, children: jsx(motion.div, { ref: ref || itemRef, className: cn(isHorizontal ? theme.itemStyleHorizontal : theme.itemStyle, className), "data-status": status, "data-layout": layout, role: "listitem", initial: variants ? "hidden" : undefined, animate: variants && isVisible ? "visible" : variants ? "hidden" : undefined, variants: variants, ...safeProps, children: children }) }));
|
|
62
|
+
return (jsx(TimelineItemContext.Provider, { value: contextValue, children: jsx(motion.div, { ref: ref || itemRef, className: cn(isHorizontal ? theme.itemStyleHorizontal : theme.itemStyle, className), "data-status": status, "data-layout": layout, role: "listitem", "aria-current": status === "active" ? "step" : undefined, initial: variants ? "hidden" : undefined, animate: variants && isVisible ? "visible" : variants ? "hidden" : undefined, variants: variants, ...safeProps, children: children }) }));
|
|
70
63
|
});
|
|
71
64
|
TimelineItem.displayName = "TimelineItem";
|
|
72
65
|
|
|
@@ -6,7 +6,14 @@ import { cn } from '../../../utils/cn.js';
|
|
|
6
6
|
import { useTimelineContext } from './Timeline.js';
|
|
7
7
|
import { useTimelineItemContext } from './TimelineItem.js';
|
|
8
8
|
import { timelineMarkerVariants } from './Timeline.animations.js';
|
|
9
|
+
import { stripMotionConflicts } from './Timeline.utils.js';
|
|
9
10
|
|
|
11
|
+
// Screen-reader status text so status isn't conveyed by color/icon alone.
|
|
12
|
+
const STATUS_LABEL = {
|
|
13
|
+
completed: "Completed",
|
|
14
|
+
active: "In progress",
|
|
15
|
+
pending: "Pending",
|
|
16
|
+
};
|
|
10
17
|
const TimelineMarker = React__default.forwardRef(({ icon, className, ...props }, ref) => {
|
|
11
18
|
const { theme, layout } = useTimelineContext();
|
|
12
19
|
const { status, isLast } = useTimelineItemContext();
|
|
@@ -19,20 +26,15 @@ const TimelineMarker = React__default.forwardRef(({ icon, className, ...props },
|
|
|
19
26
|
return jsx(CheckIcon, { className: "w-4 h-4" });
|
|
20
27
|
}
|
|
21
28
|
if (status === "active") {
|
|
22
|
-
return jsx("span", { className: "w-2 h-2 rounded-full bg-
|
|
29
|
+
return (jsx("span", { className: "w-2 h-2 rounded-full bg-[var(--color-primary)]" }));
|
|
23
30
|
}
|
|
24
31
|
// Pending: small neutral dot
|
|
25
32
|
return (jsx("span", { className: "w-2 h-2 rounded-full bg-[var(--color-text-muted)]" }));
|
|
26
33
|
};
|
|
27
34
|
const isHorizontal = layout === "horizontal";
|
|
28
35
|
const variants = shouldReduceMotion ? undefined : timelineMarkerVariants;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return (jsxs("div", { className: cn("relative flex flex-col items-center", isHorizontal && "w-full"), children: [jsx(motion.div, { ref: ref, className: cn(theme.markerStyle, theme.markerStatuses[status], className), "data-status": status, "aria-label": `${status} step`, initial: variants ? "hidden" : undefined, animate: variants ? "visible" : undefined, variants: variants, ...safeProps, children: renderIcon() }), !isLast && !isHorizontal && (jsx("div", { className: cn("w-0.5 flex-1 min-h-4", status === "completed"
|
|
32
|
-
? "bg-[var(--color-success)]"
|
|
33
|
-
: "bg-[var(--color-border)]"), "aria-hidden": "true" })), !isLast && isHorizontal && (jsx("div", { className: cn("absolute top-1/2 -translate-y-1/2 left-1/2 h-0.5 w-full", status === "completed"
|
|
34
|
-
? "bg-[var(--color-success)]"
|
|
35
|
-
: "bg-[var(--color-border)]"), "aria-hidden": "true" }))] }));
|
|
36
|
+
const safeProps = stripMotionConflicts(props);
|
|
37
|
+
return (jsxs("div", { className: cn("relative flex flex-col items-center", isHorizontal && "w-full"), children: [jsxs(motion.div, { ref: ref, className: cn(theme.markerStyle, theme.markerStatuses[status], className), "data-status": status, initial: variants ? "hidden" : undefined, animate: variants ? "visible" : undefined, variants: variants, ...safeProps, children: [jsx("span", { className: "sr-only", children: STATUS_LABEL[status] }), jsx("span", { "aria-hidden": "true", className: "flex items-center justify-center", children: renderIcon() })] }), !isLast && !isHorizontal && (jsx("div", { className: cn(theme.connectorStyle, status === "completed" && theme.connectorCompletedStyle), "aria-hidden": "true" })), !isLast && isHorizontal && (jsx("div", { className: cn(theme.connectorStyleHorizontal, status === "completed" && theme.connectorCompletedStyle), "aria-hidden": "true" }))] }));
|
|
36
38
|
});
|
|
37
39
|
TimelineMarker.displayName = "TimelineMarker";
|
|
38
40
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Timeline } from "./Timeline";
|
|
2
|
-
import { TimelineProps, TimelineItemProps, TimelineMarkerProps, TimelineContentProps, TimelineContextValue, TimelineItemContextValue, TimelineThemeOverrides, TimelineLayout, TimelineItemStatus } from "./Timeline.types";
|
|
2
|
+
import { TimelineProps, TimelineItemProps, TimelineItemData, TimelineMarkerProps, TimelineContentProps, TimelineContextValue, TimelineItemContextValue, TimelineThemeOverrides, TimelineLayout, TimelineItemStatus } from "./Timeline.types";
|
|
3
3
|
export { Timeline };
|
|
4
|
-
export type { TimelineProps, TimelineItemProps, TimelineMarkerProps, TimelineContentProps, TimelineContextValue, TimelineItemContextValue, TimelineThemeOverrides, TimelineLayout, TimelineItemStatus, };
|
|
4
|
+
export type { TimelineProps, TimelineItemProps, TimelineItemData, TimelineMarkerProps, TimelineContentProps, TimelineContextValue, TimelineItemContextValue, TimelineThemeOverrides, TimelineLayout, TimelineItemStatus, };
|
|
@@ -2,5 +2,3 @@ export { AIOrb } from "../AIOrb";
|
|
|
2
2
|
export type { AIOrbProps, OrbState, DotSphereProps, LiquidProps, AuraProps } from "../AIOrb";
|
|
3
3
|
export { Particles } from "../Particles";
|
|
4
4
|
export type { ParticlesProps } from "../Particles";
|
|
5
|
-
export { SpotlightBorder } from "../SpotlightBorder";
|
|
6
|
-
export type { SpotlightBorderProps, SpotlightBorderVariation, } from "../SpotlightBorder";
|
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { AuroraProps } from './Aurora.types';
|
|
3
3
|
/**
|
|
4
|
-
* Aurora creates
|
|
4
|
+
* Aurora creates a highly vibrant, WebGL-powered multi-color gradient background effect.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* and
|
|
6
|
+
* It uses a hardware-accelerated domain-warping Simplex Noise shader executing 100% on
|
|
7
|
+
* the GPU, achieving absolute 60/120 FPS butter-smooth rendering on all high-DPI screens.
|
|
8
|
+
* Features full support for custom blend modes and built-in stardust texture.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* The parent element should have `position: relative` and `overflow: hidden`.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```tsx
|
|
16
|
-
* <div className="relative overflow-hidden h-96 bg-gray-950">
|
|
17
|
-
* <Aurora />
|
|
18
|
-
* <div className="relative z-10 text-white p-8">
|
|
19
|
-
* <h1>Hero Content</h1>
|
|
20
|
-
* </div>
|
|
21
|
-
* </div>
|
|
22
|
-
* ```
|
|
10
|
+
* If WebGL is unavailable or reduced motion is preferred, the component gracefully falls back
|
|
11
|
+
* to a gorgeous static CSS gradient layout to preserve SEO, styling, and accessibility.
|
|
23
12
|
*/
|
|
24
13
|
export declare const Aurora: React.FC<AuroraProps>;
|