@flikk/ui 1.0.0-beta.29 → 1.0.0-beta.30
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/CHANGELOG.md +1184 -0
- package/dist/components/ai/CodeBlock/CodeBlock.js +21 -4
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +0 -1
- package/dist/components/ai/CodeBlock/CodeBlock.types.d.ts +0 -2
- package/dist/components/ai/CodeBlock/LanguageIcon.js +1 -0
- package/dist/components/ai/PromptInput/PromptInput.js +13 -9
- package/dist/components/ai/PromptInput/PromptInput.theme.js +19 -2
- package/dist/components/ai/PromptInput/VoiceRecorder.d.ts +1 -0
- package/dist/components/ai/PromptInput/VoiceRecorder.js +154 -7
- package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.js +1 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.js +1 -0
- package/dist/components/ai/StreamingResponse/ErrorDisplay.js +1 -0
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +1 -0
- package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +2 -2
- package/dist/components/ai/StreamingResponse/StreamingCursor.js +14 -3
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +2 -2
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +17 -11
- package/dist/components/ai/StreamingResponse/StreamingResponse.js +3 -3
- package/dist/components/ai/StreamingResponse/WordAnimationContext.js +3 -1
- package/dist/components/ai/TokenCounter/TokenCounter.js +1 -0
- package/dist/components/ai/index.d.ts +2 -2
- package/dist/components/ai/index.js +4 -5
- package/dist/components/canvas/Background.js +3 -2
- package/dist/components/canvas/CanvasToolbar.js +3 -2
- package/dist/components/canvas/Edge.d.ts +2 -5
- package/dist/components/canvas/Edge.js +18 -2
- package/dist/components/canvas/EdgeLayer.d.ts +2 -1
- package/dist/components/canvas/EdgeLayer.js +20 -10
- package/dist/components/canvas/Handle.js +3 -2
- package/dist/components/canvas/MiniMap.js +1 -0
- package/dist/components/canvas/NodeCanvas.js +19 -15
- package/dist/components/canvas/NodeCanvas.types.d.ts +5 -1
- package/dist/components/canvas/NodeControls.js +3 -2
- package/dist/components/canvas/NodeRenderer.d.ts +4 -1
- package/dist/components/canvas/NodeRenderer.js +18 -9
- package/dist/components/canvas/changes.test.d.ts +1 -0
- package/dist/components/canvas/context/CanvasContext.d.ts +10 -1
- package/dist/components/canvas/context/CanvasContext.js +27 -7
- package/dist/components/canvas/context/ConnectionContext.js +1 -0
- package/dist/components/canvas/context/HandleRegistry.js +1 -0
- package/dist/components/canvas/context/InteractionContext.js +1 -0
- package/dist/components/canvas/context/NodeIdContext.js +1 -0
- package/dist/components/canvas/hooks/useConnection.js +1 -0
- package/dist/components/canvas/hooks/useMarquee.js +1 -0
- package/dist/components/canvas/hooks/useNodeDrag.js +3 -2
- package/dist/components/canvas/hooks/usePanZoom.js +7 -1
- package/dist/components/canvas/hooks/useViewport.js +1 -0
- package/dist/components/canvas/layout.test.d.ts +1 -0
- package/dist/components/canvas/utils.test.d.ts +1 -0
- package/dist/components/charts/ActivityRings/ActivityRings.js +28 -17
- package/dist/components/charts/ActivityRings/ActivityRings.types.d.ts +2 -3
- package/dist/components/charts/ActivityRings/ActivityRings.types.js +2 -1
- package/dist/components/charts/AreaChart/AreaChart.js +170 -157
- package/dist/components/charts/BarChart/BarChart.js +114 -124
- package/dist/components/charts/ChartContainer.d.ts +7 -0
- package/dist/components/charts/ChartContainer.js +10 -7
- package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.d.ts +3 -1
- package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.js +137 -102
- package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.types.d.ts +17 -5
- package/dist/components/charts/ComboChart/ComboChart.js +26 -9
- package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
- package/dist/components/charts/ComboChart/ComboChart.types.js +4 -0
- package/dist/components/charts/ComboChart/ComboChartCanvas.d.ts +98 -0
- package/dist/components/charts/{shared/ChartContainer/ChartContainer.js → ComboChart/ComboChartCanvas.js} +41 -44
- package/dist/components/charts/{shared/ChartContainer/ChartContainer.types.d.ts → ComboChart/ComboChartCanvas.types.d.ts} +23 -3
- package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.d.ts +3 -1
- package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.js +27 -14
- package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.types.d.ts +11 -5
- package/dist/components/charts/DonutChart/DonutChart.js +2 -1
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +8 -22
- package/dist/components/charts/DonutChart/donut-utils.js +1 -0
- package/dist/components/charts/FunnelChart/FunnelChart.animations.js +1 -48
- package/dist/components/charts/FunnelChart/FunnelChart.d.ts +3 -4
- package/dist/components/charts/FunnelChart/FunnelChart.js +306 -358
- package/dist/components/charts/Heatmap/Heatmap.js +29 -36
- package/dist/components/charts/Heatmap/HeatmapCell.js +1 -0
- package/dist/components/charts/LineChart/LineChart.js +163 -132
- package/dist/components/charts/LineChart/LineChart.types.d.ts +1 -1
- package/dist/components/charts/RadarChart/RadarChart.js +10 -2
- package/dist/components/charts/RadarChart/RadarChart.theme.js +0 -8
- package/dist/components/charts/RadarChart/RadarChart.types.d.ts +0 -8
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +12 -3
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.d.ts +0 -4
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +0 -5
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +79 -42
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.js +3 -0
- package/dist/components/charts/hooks/index.d.ts +1 -1
- package/dist/components/charts/hooks/useChartAccessibility.js +1 -0
- package/dist/components/charts/hooks/useChartDimensions.js +1 -0
- package/dist/components/charts/hooks/useChartScales.js +1 -1
- package/dist/components/charts/hooks/useChartTheme.js +1 -0
- package/dist/components/charts/hooks/useChartValidation.d.ts +0 -8
- package/dist/components/charts/hooks/useChartValidation.js +1 -0
- package/dist/components/charts/hooks/useTooltipPosition.js +1 -0
- package/dist/components/charts/index.d.ts +3 -3
- package/dist/components/charts/index.js +1 -3
- package/dist/components/charts/shared/ChartCrosshair/ChartCrosshair.js +5 -12
- package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -0
- package/dist/components/charts/shared/ChartLegend/ChartLegend.d.ts +5 -2
- package/dist/components/charts/shared/ChartLegend/ChartLegend.js +15 -22
- package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +6 -23
- package/dist/components/charts/shared/ChartLegend/index.d.ts +2 -3
- package/dist/components/charts/shared/ChartMarker/ChartMarker.js +1 -0
- package/dist/components/charts/shared/ChartText/ChartText.js +1 -0
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.js +4 -13
- package/dist/components/charts/shared/index.d.ts +0 -7
- package/dist/components/charts/theme/chart.theme.js +6 -0
- package/dist/components/charts/types/chart.types.d.ts +15 -0
- package/dist/components/charts/utils/animation-utils.d.ts +95 -0
- package/dist/components/charts/utils/animation-utils.js +150 -2
- package/dist/components/charts/utils/bar-emphasis.d.ts +80 -0
- package/dist/components/charts/utils/bar-emphasis.js +69 -0
- package/dist/components/charts/utils/chart-validation.js +7 -0
- package/dist/components/core/Accordion/Accordion.d.ts +3 -3
- package/dist/components/core/Accordion/Accordion.js +21 -17
- package/dist/components/core/Accordion/Accordion.types.d.ts +35 -1
- package/dist/components/core/Accordion/AccordionBody.js +2 -1
- package/dist/components/core/Accordion/AccordionContext.d.ts +3 -0
- package/dist/components/core/Accordion/AccordionContext.js +15 -0
- package/dist/components/core/Accordion/AccordionItem.js +12 -8
- package/dist/components/core/Accordion/AccordionTrigger.js +7 -4
- package/dist/components/core/Accordion/index.d.ts +2 -2
- package/dist/components/core/Alert/Alert.animations.js +1 -0
- package/dist/components/core/Alert/Alert.js +4 -4
- package/dist/components/core/Alert/Alert.theme.js +0 -5
- package/dist/components/core/Alert/Alert.types.d.ts +0 -8
- package/dist/components/core/Alert/index.d.ts +1 -1
- package/dist/components/core/AlertDialog/AlertDialog.js +15 -1
- package/dist/components/core/Avatar/Avatar.js +58 -14
- package/dist/components/core/Avatar/Avatar.types.d.ts +26 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +1 -0
- package/dist/components/core/AvatarGroup/AvatarGroup.js +1 -0
- package/dist/components/core/Badge/Badge.animations.js +1 -0
- package/dist/components/core/Badge/Badge.js +6 -6
- package/dist/components/core/Badge/Badge.theme.js +32 -28
- package/dist/components/core/Badge/Badge.types.d.ts +12 -1
- package/dist/components/core/Breadcrumbs/Breadcrumbs.js +8 -2
- package/dist/components/core/Button/Button.js +23 -17
- package/dist/components/core/Button/Button.ripple.js +1 -4
- package/dist/components/core/Button/Button.theme.d.ts +0 -2
- package/dist/components/core/Button/Button.theme.js +16 -92
- package/dist/components/core/Button/Button.types.d.ts +5 -6
- package/dist/components/core/Calendar/Calendar.animations.js +1 -0
- package/dist/components/core/Calendar/Calendar.js +87 -4
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.animations.js +1 -0
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +3 -1
- package/dist/components/core/Card/Card.js +9 -2
- package/dist/components/core/Card/Card.theme.js +3 -1
- package/dist/components/core/Card/Card.types.d.ts +8 -0
- package/dist/components/core/CardStack/CardStack.js +1 -0
- package/dist/components/core/Carousel/Carousel.js +1 -0
- package/dist/components/core/Carousel/CarouselBody.js +5 -2
- package/dist/components/core/Carousel/CarouselContext.js +1 -0
- package/dist/components/core/Carousel/CarouselNext.js +1 -0
- package/dist/components/core/Carousel/CarouselPrevious.js +1 -0
- package/dist/components/core/CommandPalette/CommandItem.js +1 -0
- package/dist/components/core/CommandPalette/CommandPalette.animations.js +1 -0
- package/dist/components/core/CommandPalette/CommandPalette.js +55 -11
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +3 -1
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +8 -0
- package/dist/components/core/ContextMenu/ContextMenu.js +27 -5
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +8 -7
- package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +17 -0
- package/dist/components/core/ContextMenu/ContextMenuBody.js +11 -5
- package/dist/components/core/ContextMenu/ContextMenuContext.js +1 -0
- package/dist/components/core/ContextMenu/ContextMenuItem.js +17 -7
- package/dist/components/core/ContextMenu/ContextMenuLabel.js +1 -0
- package/dist/components/core/ContextMenu/ContextMenuSeparator.js +1 -0
- package/dist/components/core/ContextMenu/ContextMenuSub.js +4 -3
- package/dist/components/core/ContextMenu/ContextMenuSubBody.js +7 -3
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +3 -2
- package/dist/components/core/ContextMenu/ContextMenuTrigger.js +8 -0
- package/dist/components/core/DotSeparator/DotSeparator.js +1 -0
- package/dist/components/core/DragDrop/DragDrop.js +50 -31
- package/dist/components/core/Drawer/Drawer.animations.js +9 -8
- package/dist/components/core/Drawer/Drawer.d.ts +3 -3
- package/dist/components/core/Drawer/Drawer.js +14 -15
- package/dist/components/core/Drawer/Drawer.theme.js +8 -6
- package/dist/components/core/Drawer/Drawer.types.d.ts +8 -0
- package/dist/components/core/Drawer/DrawerBody.js +2 -1
- package/dist/components/core/Drawer/DrawerContext.d.ts +3 -0
- package/dist/components/core/Drawer/DrawerContext.js +15 -0
- package/dist/components/core/Drawer/DrawerFooter.js +2 -1
- package/dist/components/core/Drawer/DrawerHeader.js +3 -2
- package/dist/components/core/Drawer/DrawerSubtitle.js +2 -1
- package/dist/components/core/Drawer/DrawerTitle.js +2 -1
- package/dist/components/core/Dropdown/Dropdown.js +23 -9
- package/dist/components/core/Dropdown/Dropdown.theme.js +4 -3
- package/dist/components/core/Dropdown/Dropdown.types.d.ts +8 -0
- package/dist/components/core/Dropdown/DropdownContext.js +1 -0
- package/dist/components/core/Dropdown/DropdownItem.js +1 -0
- package/dist/components/core/Dropdown/DropdownMenu.js +22 -22
- package/dist/components/core/Dropdown/DropdownSection.js +1 -0
- package/dist/components/core/Dropdown/DropdownSeparator.js +1 -0
- package/dist/components/core/Dropdown/DropdownTrigger.js +21 -1
- package/dist/components/core/HeroCard/HeroCard.js +1 -0
- package/dist/components/core/HeroCard/HeroCard.theme.js +1 -1
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.js +11 -2
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.js +2 -2
- package/dist/components/core/Link/Link.d.ts +1 -1
- package/dist/components/core/Link/Link.js +58 -29
- package/dist/components/core/Link/Link.types.d.ts +25 -8
- package/dist/components/core/Masonry/Masonry.js +87 -75
- package/dist/components/core/Masonry/Masonry.theme.js +10 -4
- package/dist/components/core/MenuItem/MenuItem.js +17 -1
- package/dist/components/core/MenuItem/MenuItem.theme.js +6 -2
- package/dist/components/core/Message/Message.js +2 -1
- package/dist/components/core/Message/MessageActions.js +1 -0
- package/dist/components/core/Message/MessageAudio.js +2 -1
- package/dist/components/core/Message/MessageAvatar.js +1 -0
- package/dist/components/core/Message/MessageBody.js +1 -0
- package/dist/components/core/Message/MessageContext.js +1 -0
- package/dist/components/core/Message/MessageFile.js +1 -0
- package/dist/components/core/Message/MessageImage.js +1 -0
- package/dist/components/core/Message/MessageList.js +1 -0
- package/dist/components/core/Message/MessageReactions.js +1 -0
- package/dist/components/core/Message/MessageStatusIndicator.js +3 -2
- package/dist/components/core/Message/MessageTimestamp.js +1 -0
- package/dist/components/core/Message/TypeWriter.d.ts +1 -1
- package/dist/components/core/Message/TypeWriter.js +74 -9
- package/dist/components/core/Modal/Modal.animations.d.ts +1 -1
- package/dist/components/core/Modal/Modal.animations.js +10 -25
- package/dist/components/core/Modal/Modal.d.ts +3 -5
- package/dist/components/core/Modal/Modal.js +15 -15
- package/dist/components/core/Modal/Modal.theme.js +7 -5
- package/dist/components/core/Modal/Modal.types.d.ts +8 -0
- package/dist/components/core/Modal/ModalBody.js +2 -1
- package/dist/components/core/Modal/ModalContext.d.ts +3 -0
- package/dist/components/core/Modal/ModalContext.js +16 -0
- package/dist/components/core/Modal/ModalFooter.js +3 -2
- package/dist/components/core/Modal/ModalHeader.js +3 -2
- package/dist/components/core/Modal/ModalSubtitle.js +2 -1
- package/dist/components/core/Modal/ModalTitle.js +2 -1
- package/dist/components/core/ModalStack/ModalStack.animations.js +1 -0
- package/dist/components/core/ModalStack/ModalStack.js +2 -1
- package/dist/components/core/ModalStack/ModalStackModal.js +18 -10
- package/dist/components/core/NavItem/NavItem.js +15 -3
- package/dist/components/core/OfflineIndicator/OfflineIndicator.js +1 -0
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +1 -1
- package/dist/components/core/PageHeading/PageHeading.js +8 -3
- package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
- package/dist/components/core/PageHeading/PageHeading.types.d.ts +12 -1
- package/dist/components/core/PageHeading/PageHeadingBackButton.js +3 -2
- package/dist/components/core/Pagination/Pagination.js +8 -2
- package/dist/components/core/Pagination/Pagination.theme.d.ts +2 -10
- package/dist/components/core/Pagination/Pagination.types.d.ts +11 -1
- package/dist/components/core/Pill/Pill.animations.js +2 -11
- package/dist/components/core/Pill/Pill.js +14 -5
- package/dist/components/core/Pill/Pill.theme.js +8 -8
- package/dist/components/core/Popover/Popover.js +6 -5
- package/dist/components/core/Popover/Popover.theme.js +4 -2
- package/dist/components/core/Popover/Popover.types.d.ts +8 -0
- package/dist/components/core/Popover/PopoverBody.js +19 -21
- package/dist/components/core/Popover/PopoverContext.js +1 -0
- package/dist/components/core/Popover/PopoverTrigger.js +1 -0
- package/dist/components/core/Progress/Progress.js +1 -0
- package/dist/components/core/Rating/Rating.js +13 -5
- package/dist/components/core/ScrollArea/ScrollArea.js +1 -0
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +1 -0
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +14 -3
- package/dist/components/core/ScrollArea/smooth/SnapPointDetector.js +1 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +1 -0
- package/dist/components/core/Segmented/Segmented.js +3 -2
- package/dist/components/core/Segmented/SegmentedItem.js +2 -1
- package/dist/components/core/Separator/Separator.js +1 -0
- package/dist/components/core/Sidebar/Sidebar.js +1 -0
- package/dist/components/core/Sidebar/SidebarCard.js +1 -0
- package/dist/components/core/Sidebar/SidebarContent.js +1 -0
- package/dist/components/core/Sidebar/SidebarContext.js +1 -0
- package/dist/components/core/Sidebar/SidebarFooter.js +1 -0
- package/dist/components/core/Sidebar/SidebarHeader.js +1 -0
- package/dist/components/core/Sidebar/SidebarLogo.js +1 -0
- package/dist/components/core/Sidebar/SidebarMobileTrigger.js +1 -0
- package/dist/components/core/Sidebar/SidebarNav.js +3 -1
- package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -0
- package/dist/components/core/Sidebar/SidebarSearch.js +1 -0
- package/dist/components/core/Sidebar/SidebarToggle.js +1 -0
- package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -0
- package/dist/components/core/SlidingNumber/SlidingNumber.js +3 -1
- package/dist/components/core/Sortable/Sortable.animations.js +1 -0
- package/dist/components/core/Sortable/Sortable.js +1 -0
- package/dist/components/core/Spinner/Spinner.js +1 -0
- package/dist/components/core/Tabs/Tabs.animations.js +1 -0
- package/dist/components/core/Tabs/Tabs.js +1 -0
- package/dist/components/core/Tabs/Tabs.theme.js +3 -3
- package/dist/components/core/Tabs/TabsBody.js +1 -0
- package/dist/components/core/Tabs/TabsContext.js +1 -0
- package/dist/components/core/Tabs/TabsList.js +1 -0
- package/dist/components/core/Tabs/TabsTrigger.js +34 -10
- package/dist/components/core/Tag/Tag.js +2 -1
- package/dist/components/core/Tag/Tag.theme.js +2 -2
- package/dist/components/core/Toast/Toast.animations.d.ts +3 -2
- package/dist/components/core/Toast/Toast.animations.js +20 -17
- package/dist/components/core/Toast/Toast.js +42 -20
- package/dist/components/core/Toast/Toast.theme.js +5 -8
- package/dist/components/core/Toast/Toast.types.d.ts +30 -20
- package/dist/components/core/Toast/ToastProvider.js +5 -1
- package/dist/components/core/Toast/index.d.ts +1 -1
- package/dist/components/core/Toast/useToast.js +5 -6
- package/dist/components/core/Tooltip/Tooltip.animations.js +19 -53
- package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/core/Tooltip/Tooltip.js +39 -18
- package/dist/components/core/Tooltip/Tooltip.theme.js +4 -2
- package/dist/components/core/Tooltip/Tooltip.types.d.ts +8 -0
- package/dist/components/core/Tree/Tree.animations.d.ts +1 -2
- package/dist/components/core/Tree/Tree.animations.js +20 -58
- package/dist/components/core/Tree/Tree.js +7 -5
- package/dist/components/data-display/DescriptionList/DescriptionList.js +1 -0
- package/dist/components/data-display/Feed/Feed.js +1 -0
- package/dist/components/data-display/GanttChart/GanttChart.d.ts +2 -3
- package/dist/components/data-display/GanttChart/GanttChart.js +5 -21
- package/dist/components/data-display/GanttChart/GanttChartContext.d.ts +5 -0
- package/dist/components/data-display/GanttChart/GanttChartContext.js +26 -0
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +2 -1
- package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +2 -1
- package/dist/components/data-display/GanttChart/GanttGroupBar.js +2 -1
- package/dist/components/data-display/GanttChart/GanttMilestone.js +2 -1
- package/dist/components/data-display/GanttChart/GanttSplitter.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTableHeader.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTablePanel.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +2 -1
- package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -1
- package/dist/components/data-display/GanttChart/hooks/useGanttDates.js +1 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +1 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttLayout.js +1 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.js +1 -0
- package/dist/components/data-display/KPI/KPI.js +1 -0
- package/dist/components/data-display/Metric/Metric.js +2 -2
- package/dist/components/data-display/Metric/Metric.theme.js +2 -14
- package/dist/components/data-display/Metric/Metric.types.d.ts +1 -3
- package/dist/components/data-display/Table/Table.animations.js +1 -0
- package/dist/components/data-display/Table/Table.d.ts +2 -7
- package/dist/components/data-display/Table/Table.js +14 -14
- package/dist/components/data-display/Table/Table.types.d.ts +2 -0
- package/dist/components/data-display/Table/TableActions.js +3 -2
- package/dist/components/data-display/Table/TableActionsMenu.js +1 -0
- package/dist/components/data-display/Table/TableBody.js +1 -0
- package/dist/components/data-display/Table/TableCell.d.ts +1 -1
- package/dist/components/data-display/Table/TableCell.js +8 -3
- package/dist/components/data-display/Table/TableColumnManager.js +1 -0
- package/dist/components/data-display/Table/TableContext.d.ts +11 -0
- package/dist/components/data-display/Table/TableContext.js +21 -0
- package/dist/components/data-display/Table/TableDeclarative.js +3 -2
- package/dist/components/data-display/Table/TableFilter.js +9 -5
- package/dist/components/data-display/Table/TableHeader.js +2 -1
- package/dist/components/data-display/Table/TablePagination.js +1 -0
- package/dist/components/data-display/Table/TableRow.js +1 -0
- package/dist/components/data-display/Table/TableSelectionHeader.js +4 -2
- package/dist/components/data-display/Table/hooks/useTableColumns.js +1 -0
- package/dist/components/data-display/Table/hooks/useTableExpansion.js +1 -0
- package/dist/components/data-display/Table/hooks/useTableFilter.js +1 -0
- package/dist/components/data-display/Table/hooks/useTablePagination.js +1 -0
- package/dist/components/data-display/Table/hooks/useTableSelection.js +1 -0
- package/dist/components/data-display/Table/index.js +1 -2
- package/dist/components/data-display/Timeline/Timeline.animations.js +1 -0
- package/dist/components/data-display/Timeline/Timeline.d.ts +2 -2
- package/dist/components/data-display/Timeline/Timeline.js +5 -10
- package/dist/components/data-display/Timeline/Timeline.theme.d.ts +2 -24
- package/dist/components/data-display/Timeline/Timeline.types.d.ts +25 -1
- package/dist/components/data-display/Timeline/TimelineContent.js +2 -1
- package/dist/components/data-display/Timeline/TimelineContext.d.ts +3 -0
- package/dist/components/data-display/Timeline/TimelineContext.js +16 -0
- package/dist/components/data-display/Timeline/TimelineItem.js +5 -4
- package/dist/components/data-display/Timeline/TimelineMarker.js +2 -1
- package/dist/components/effects/AIOrb/hooks/useOrbState.js +1 -0
- package/dist/components/effects/AIOrb/variants/Aura/Aura.js +13 -4
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.d.ts +7 -0
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.d.ts +3 -0
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.js +176 -0
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.js +29 -161
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.d.ts +8 -0
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.d.ts +3 -0
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.js +140 -0
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.js +29 -127
- package/dist/components/effects/Animated/Animated.d.ts +2 -2
- package/dist/components/effects/Animated/Animated.js +5 -6
- package/dist/components/effects/Animated/AnimatedContext.d.ts +3 -0
- package/dist/components/effects/Animated/AnimatedContext.js +12 -0
- package/dist/components/effects/Animated/AnimatedItem.js +2 -1
- package/dist/components/effects/Aurora/Aurora.js +27 -5
- package/dist/components/effects/ColorPanels/ColorPanels.d.ts +8 -0
- package/dist/components/effects/ColorPanels/ColorPanels.js +66 -0
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.d.ts +12 -0
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.js +218 -0
- package/dist/components/effects/ColorPanels/ColorPanels.types.d.ts +29 -0
- package/dist/components/effects/ColorPanels/ColorPanels.types.js +3 -0
- package/dist/components/effects/ColorPanels/index.d.ts +2 -0
- package/dist/components/effects/CustomCursor/CustomCursor.js +1 -0
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +0 -2
- package/dist/components/effects/Dithering/Dithering.d.ts +10 -0
- package/dist/components/effects/Dithering/Dithering.js +62 -0
- package/dist/components/effects/Dithering/Dithering.shaders.d.ts +11 -0
- package/dist/components/effects/Dithering/Dithering.shaders.js +166 -0
- package/dist/components/effects/Dithering/Dithering.types.d.ts +31 -0
- package/dist/components/effects/Dithering/Dithering.types.js +17 -0
- package/dist/components/effects/Dithering/index.d.ts +3 -0
- package/dist/components/effects/DotPattern/DotPattern.js +1 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.d.ts +9 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.js +80 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.d.ts +12 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.js +335 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.d.ts +61 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.js +16 -0
- package/dist/components/effects/FlutedGlass/index.d.ts +3 -0
- package/dist/components/effects/GemSmoke/GemSmoke.d.ts +8 -0
- package/dist/components/effects/GemSmoke/GemSmoke.js +70 -0
- package/dist/components/effects/GemSmoke/GemSmoke.shaders.d.ts +18 -0
- package/dist/components/effects/GemSmoke/GemSmoke.shaders.js +181 -0
- package/dist/components/effects/GemSmoke/GemSmoke.types.d.ts +37 -0
- package/dist/components/effects/GemSmoke/GemSmoke.types.js +10 -0
- package/dist/components/effects/GemSmoke/index.d.ts +3 -0
- package/dist/components/effects/GlassEffect/GlassEffect.js +1 -1
- package/dist/components/effects/GlassSurface/GlassSurface.js +2 -16
- package/dist/components/effects/GodRays/GodRays.d.ts +8 -0
- package/dist/components/effects/GodRays/GodRays.js +68 -0
- package/dist/components/effects/GodRays/GodRays.shaders.d.ts +10 -0
- package/dist/components/effects/GodRays/GodRays.shaders.js +128 -0
- package/dist/components/effects/GodRays/GodRays.types.d.ts +25 -0
- package/dist/components/effects/GodRays/GodRays.types.js +3 -0
- package/dist/components/effects/GodRays/index.d.ts +2 -0
- package/dist/components/effects/GradientMesh/GradientMesh.d.ts +9 -0
- package/dist/components/effects/GradientMesh/GradientMesh.js +56 -0
- package/dist/components/effects/GradientMesh/GradientMesh.shaders.d.ts +15 -0
- package/dist/components/effects/GradientMesh/GradientMesh.shaders.js +127 -0
- package/dist/components/effects/GradientMesh/GradientMesh.types.d.ts +17 -0
- package/dist/components/effects/GradientMesh/GradientMesh.types.js +3 -0
- package/dist/components/effects/GradientMesh/index.d.ts +2 -0
- package/dist/components/effects/GrainGradient/GrainGradient.d.ts +9 -0
- package/dist/components/effects/GrainGradient/GrainGradient.js +62 -0
- package/dist/components/effects/GrainGradient/GrainGradient.shaders.d.ts +17 -0
- package/dist/components/effects/GrainGradient/GrainGradient.shaders.js +168 -0
- package/dist/components/effects/GrainGradient/GrainGradient.types.d.ts +26 -0
- package/dist/components/effects/GrainGradient/GrainGradient.types.js +9 -0
- package/dist/components/effects/GrainGradient/index.d.ts +3 -0
- package/dist/components/effects/GridPattern/GridPattern.js +1 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.d.ts +10 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.js +78 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.d.ts +22 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.js +239 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.types.d.ts +52 -0
- package/dist/components/effects/HalftoneCmyk/index.d.ts +2 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.d.ts +9 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.js +68 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.d.ts +13 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.js +296 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.d.ts +43 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.js +12 -0
- package/dist/components/effects/HalftoneDots/index.d.ts +3 -0
- package/dist/components/effects/ImageDithering/ImageDithering.d.ts +9 -0
- package/dist/components/effects/ImageDithering/ImageDithering.js +68 -0
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.d.ts +12 -0
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.js +117 -0
- package/dist/components/effects/ImageDithering/ImageDithering.types.d.ts +30 -0
- package/dist/components/effects/ImageDithering/ImageDithering.types.js +8 -0
- package/dist/components/effects/ImageDithering/index.d.ts +3 -0
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +1 -0
- package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +1 -0
- package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +1 -0
- package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +1 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +1 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +1 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +1 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.d.ts +9 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.js +61 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.d.ts +19 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.js +202 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.types.d.ts +34 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.types.js +9 -0
- package/dist/components/effects/LiquidMetal/index.d.ts +3 -0
- package/dist/components/effects/MagneticElement/MagneticElement.js +1 -0
- package/dist/components/effects/MeshGradient/MeshGradient.d.ts +25 -0
- package/dist/components/effects/MeshGradient/MeshGradient.js +47 -0
- package/dist/components/effects/MeshGradient/MeshGradient.types.d.ts +40 -0
- package/dist/components/effects/MeshGradient/MeshGradient.utils.d.ts +83 -0
- package/dist/components/effects/MeshGradient/MeshGradient.utils.js +112 -0
- package/dist/components/effects/MeshGradient/index.d.ts +4 -0
- package/dist/components/effects/Metaballs/Metaballs.d.ts +8 -0
- package/dist/components/effects/Metaballs/Metaballs.js +59 -0
- package/dist/components/effects/Metaballs/Metaballs.shaders.d.ts +10 -0
- package/dist/components/effects/Metaballs/Metaballs.shaders.js +102 -0
- package/dist/components/effects/Metaballs/Metaballs.types.d.ts +16 -0
- package/dist/components/effects/Metaballs/Metaballs.types.js +3 -0
- package/dist/components/effects/Metaballs/index.d.ts +2 -0
- package/dist/components/effects/Neumorphic/InsetCircleButton.js +1 -0
- package/dist/components/effects/Neumorphic/InsetPill.js +1 -0
- package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +1 -0
- package/dist/components/effects/Overlay/Overlay.js +1 -0
- package/dist/components/effects/PaperTexture/PaperTexture.d.ts +9 -0
- package/dist/components/effects/PaperTexture/PaperTexture.js +61 -0
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.d.ts +22 -0
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.js +145 -0
- package/dist/components/effects/PaperTexture/PaperTexture.types.d.ts +19 -0
- package/dist/components/effects/PaperTexture/index.d.ts +2 -0
- package/dist/components/effects/Particles/Particles.js +1 -0
- package/dist/components/effects/Particles/Particles.scene.js +1 -0
- package/dist/components/effects/Preloader/Preloader.js +1 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +1 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.d.ts +27 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.js +174 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.d.ts +14 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.js +258 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.d.ts +75 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.js +3 -0
- package/dist/components/effects/PulsingBorder/index.d.ts +2 -0
- package/dist/components/effects/ScrollReveal/ScrollReveal.js +1 -0
- package/dist/components/effects/Shimmer/Shimmer.d.ts +21 -0
- package/dist/components/effects/Shimmer/Shimmer.js +44 -0
- package/dist/components/effects/Shimmer/Shimmer.types.d.ts +49 -0
- package/dist/components/effects/Shimmer/index.d.ts +2 -0
- package/dist/components/effects/SmokeRing/SmokeRing.d.ts +8 -0
- package/dist/components/effects/SmokeRing/SmokeRing.js +62 -0
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.d.ts +14 -0
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.js +130 -0
- package/dist/components/effects/SmokeRing/SmokeRing.types.d.ts +22 -0
- package/dist/components/effects/SmokeRing/SmokeRing.types.js +3 -0
- package/dist/components/effects/SmokeRing/index.d.ts +2 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.d.ts +9 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.js +59 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.d.ts +14 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.js +129 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.d.ts +23 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.js +3 -0
- package/dist/components/effects/StaticGradientMesh/index.d.ts +2 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.d.ts +9 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.js +66 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.d.ts +13 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.js +169 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.d.ts +29 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.js +3 -0
- package/dist/components/effects/StaticRadialGradient/index.d.ts +2 -0
- package/dist/components/effects/StripePattern/StripePattern.js +1 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.js +1 -0
- package/dist/components/effects/TiltCard/TiltCard.js +1 -0
- package/dist/components/effects/Water/Water.d.ts +9 -0
- package/dist/components/effects/Water/Water.js +65 -0
- package/dist/components/effects/Water/Water.shaders.d.ts +11 -0
- package/dist/components/effects/Water/Water.shaders.js +123 -0
- package/dist/components/effects/Water/Water.types.d.ts +25 -0
- package/dist/components/effects/Water/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +40 -0
- package/dist/components/effects/index.js +21 -0
- package/dist/components/effects/{AIOrb/variants/Aura → shared/ShaderCanvas}/ShaderCanvas.d.ts +4 -8
- package/dist/components/effects/{AIOrb/variants/Aura → shared/ShaderCanvas}/ShaderCanvas.js +109 -3
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.types.d.ts +18 -0
- package/dist/components/effects/shared/ShaderCanvas/index.d.ts +2 -0
- package/dist/components/effects/shared/bayerMatrices.glsl.d.ts +10 -0
- package/dist/components/effects/shared/bayerMatrices.glsl.js +44 -0
- package/dist/components/effects/shared/imageUV.glsl.d.ts +12 -0
- package/dist/components/effects/shared/imageUV.glsl.js +26 -0
- package/dist/components/effects/shared/index.d.ts +7 -0
- package/dist/components/effects/shared/resolveShaderColor.d.ts +13 -0
- package/dist/components/effects/shared/resolveShaderColor.js +62 -0
- package/dist/components/effects/shared/resolveShaderColor.test.d.ts +1 -0
- package/dist/components/effects/shared/shaderNoise.glsl.d.ts +34 -0
- package/dist/components/effects/shared/shaderNoise.glsl.js +84 -0
- package/dist/components/forms/Checkbox/Checkbox.animations.js +1 -0
- package/dist/components/forms/Checkbox/Checkbox.js +8 -8
- package/dist/components/forms/Checkbox/Checkbox.theme.js +5 -4
- package/dist/components/forms/Checkbox/CheckboxContext.js +1 -0
- package/dist/components/forms/Checkbox/CheckboxGroup.js +4 -1
- package/dist/components/forms/ColorPicker/ColorPicker.js +21 -5
- package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +8 -0
- package/dist/components/forms/ColorPicker/ColorPicker2DCanvas.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerBody.js +3 -2
- package/dist/components/forms/ColorPicker/ColorPickerContext.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerFormatSelector.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerGradient.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerHeader.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerImage.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerInput.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerPresets.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerSliders.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerSwatch.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerTrigger.js +17 -2
- package/dist/components/forms/Combobox/Combobox.js +81 -37
- package/dist/components/forms/Combobox/Combobox.types.d.ts +8 -0
- package/dist/components/forms/DatePicker/DatePicker.animations.js +1 -0
- package/dist/components/forms/DatePicker/DatePicker.d.ts +3 -27
- package/dist/components/forms/DatePicker/DatePicker.js +5 -4
- package/dist/components/forms/DatePicker/DatePicker.theme.js +5 -5
- package/dist/components/forms/DatePicker/DatePicker.types.d.ts +15 -0
- package/dist/components/forms/DatePicker/DatePickerBody.js +26 -21
- package/dist/components/forms/DatePicker/DatePickerContext.d.ts +29 -0
- package/dist/components/forms/DatePicker/DatePickerContext.js +6 -0
- package/dist/components/forms/DatePicker/DatePickerPresets.js +2 -1
- package/dist/components/forms/DatePicker/DatePickerTrigger.js +2 -1
- package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +3 -23
- package/dist/components/forms/DateRangePicker/DateRangePicker.js +18 -7
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +21 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +18 -13
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.d.ts +24 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +5 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +2 -1
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +2 -1
- package/dist/components/forms/FileUpload/FileUpload.js +2 -1
- package/dist/components/forms/FileUpload/FileUploadProgress.js +4 -3
- package/dist/components/forms/Input/Input.js +7 -3
- package/dist/components/forms/Input/Input.theme.js +11 -5
- package/dist/components/forms/Input/Input.types.d.ts +6 -0
- package/dist/components/forms/Input/index.d.ts +1 -0
- package/dist/components/forms/Input/inputMasks.d.ts +24 -0
- package/dist/components/forms/Input/inputMasks.js +61 -5
- package/dist/components/forms/InputAddress/InputAddress.d.ts +5 -0
- package/dist/components/forms/InputAddress/InputAddress.js +95 -13
- package/dist/components/forms/InputAddress/InputAddress.theme.js +4 -4
- package/dist/components/forms/InputAddress/InputAddress.types.d.ts +8 -2
- package/dist/components/forms/InputAddress/index.d.ts +1 -1
- package/dist/components/forms/InputCounter/InputCounter.js +63 -44
- package/dist/components/forms/InputCounter/InputCounter.types.d.ts +6 -0
- package/dist/components/forms/InputCreditCard/InputCreditCard.js +9 -3
- package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +4 -4
- package/dist/components/forms/InputCreditCard/InputCreditCard.types.d.ts +5 -1
- package/dist/components/forms/InputCreditCard/index.d.ts +1 -0
- package/dist/components/forms/InputDate/InputDate.js +1 -0
- package/dist/components/forms/InputOTP/InputOTP.js +21 -9
- package/dist/components/forms/InputOTP/InputOTP.types.d.ts +7 -1
- package/dist/components/forms/InputTag/InputTag.js +65 -21
- package/dist/components/forms/InputTag/InputTag.theme.js +2 -1
- package/dist/components/forms/InputTag/InputTag.types.d.ts +8 -0
- package/dist/components/forms/Mention/Mention.js +12 -5
- package/dist/components/forms/Mention/Mention.theme.js +2 -1
- package/dist/components/forms/Mention/Mention.types.d.ts +8 -0
- package/dist/components/forms/Mention/Mention.utils.js +1 -0
- package/dist/components/forms/Radio/Radio.animations.js +1 -0
- package/dist/components/forms/Radio/Radio.js +5 -1
- package/dist/components/forms/Radio/Radio.theme.js +9 -7
- package/dist/components/forms/Radio/RadioContext.js +1 -0
- package/dist/components/forms/Radio/RadioGroup.js +4 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.animations.js +1 -0
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +70 -60
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +3 -2
- package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +14 -0
- package/dist/components/forms/Select/Select.animations.js +17 -25
- package/dist/components/forms/Select/Select.d.ts +3 -1
- package/dist/components/forms/Select/Select.js +55 -21
- package/dist/components/forms/Select/Select.theme.js +2 -2
- package/dist/components/forms/Select/Select.types.d.ts +28 -1
- package/dist/components/forms/Select/useSelectState.js +7 -0
- package/dist/components/forms/SelectableCard/SelectableCard.js +1 -0
- package/dist/components/forms/SelectableCard/SelectableCardContext.js +1 -0
- package/dist/components/forms/SelectableCard/SelectableCardGroup.js +1 -0
- package/dist/components/forms/Signature/Signature.js +13 -3
- package/dist/components/forms/Signature/Signature.types.d.ts +6 -0
- package/dist/components/forms/Slider/Slider.js +2 -1
- package/dist/components/forms/Switch/Switch.js +9 -2
- package/dist/components/forms/Switch/Switch.theme.js +5 -3
- package/dist/components/forms/Textarea/Textarea.js +7 -3
- package/dist/components/forms/Textarea/Textarea.types.d.ts +6 -0
- package/dist/components/forms/TimePicker/TimePicker.d.ts +2 -12
- package/dist/components/forms/TimePicker/TimePicker.js +8 -5
- package/dist/components/forms/TimePicker/TimePicker.theme.js +4 -5
- package/dist/components/forms/TimePicker/TimePicker.types.d.ts +15 -0
- package/dist/components/forms/TimePicker/TimePickerContent.js +12 -7
- package/dist/components/forms/TimePicker/TimePickerContext.d.ts +15 -0
- package/dist/components/forms/TimePicker/TimePickerContext.js +6 -0
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +18 -4
- package/dist/components/forms/TimePicker/WheelColumn.js +1 -0
- package/dist/components/forms/TimePicker/useWheelPicker.js +1 -0
- package/dist/components/forms/forms.theme.d.ts +1 -0
- package/dist/components/forms/forms.theme.js +55 -18
- package/dist/components/forms/index.d.ts +1 -0
- package/dist/components/forms/index.js +6 -2
- package/dist/components/generative/GenerativeView.js +1 -0
- package/dist/components/generative/actions.test.d.ts +1 -0
- package/dist/components/generative/registry.js +24 -6
- package/dist/components/generative/schema.generated.js +450 -35
- package/dist/components/generative/streaming.test.d.ts +1 -0
- package/dist/components/generative/tools.test.d.ts +1 -0
- package/dist/components/generative/useGenerativeStream.js +1 -0
- package/dist/components/generative/validate.d.ts +1 -1
- package/dist/components/generative/validate.js +121 -29
- package/dist/components/generative/validate.test.d.ts +1 -0
- package/dist/components/layout/AppShell/AppShell.js +1 -0
- package/dist/components/layout/AppShell/AppShellContext.js +1 -0
- package/dist/components/layout/AppShell/AppShellMain.js +1 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.js +1 -0
- package/dist/components/layout/AppShell/AppShellSidebar.js +1 -0
- package/dist/components/layout/FormLayout/FormLayout.js +1 -1
- package/dist/components/layout/FormLayout/FormLayoutSection.js +1 -0
- package/dist/components/layout/Grid/Grid.d.ts +1 -1
- package/dist/components/layout/Grid/Grid.js +11 -3
- package/dist/components/layout/Grid/Grid.types.d.ts +15 -1
- package/dist/components/layout/Grid/index.d.ts +1 -1
- package/dist/components/layout/Section/Section.js +1 -0
- package/dist/components/layout/Stack/Stack.d.ts +1 -1
- package/dist/components/layout/Stack/Stack.js +11 -3
- package/dist/components/layout/Stack/Stack.types.d.ts +9 -2
- package/dist/components/layout/index.d.ts +0 -1
- package/dist/components/layout/index.js +0 -2
- package/dist/generative.schema.json +450 -35
- package/dist/hooks/useClickOutside.js +1 -0
- package/dist/hooks/useDarkMode.js +1 -0
- package/dist/hooks/useFocusTrap.js +1 -0
- package/dist/hooks/useIsClient.js +1 -0
- package/dist/hooks/useMediaQuery.js +1 -0
- package/dist/hooks/useNetworkStatus.d.ts +0 -4
- package/dist/hooks/useNetworkStatus.js +2 -5
- package/dist/hooks/useOverlay.js +1 -0
- package/dist/hooks/useScaleBackground.js +1 -0
- package/dist/hooks/useSelectPortal.js +1 -0
- package/dist/hooks/useSlidingNumber.js +1 -0
- package/dist/hooks/useStreamingSSE.d.ts +0 -5
- package/dist/hooks/useStreamingSSE.js +1 -5
- package/dist/hooks/useTypewriter.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +189 -180
- package/dist/registry.json +1945 -681
- package/dist/styles.css +1 -1
- package/dist/test/render.d.ts +11 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/theme/SurfaceContext.d.ts +98 -0
- package/dist/theme/SurfaceContext.js +114 -0
- package/dist/theme/ThemeContext.js +19 -0
- package/dist/theme/animations.d.ts +75 -0
- package/dist/theme/animations.js +132 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/tools.json +458 -35
- package/dist/utils/actionQueue.d.ts +0 -4
- package/dist/utils/actionQueue.js +1 -4
- package/dist/utils/cn.js +21 -1
- package/dist/utils/colorUtils.d.ts +31 -1
- package/dist/utils/colorUtils.js +49 -4
- package/dist/utils/dateUtils.js +21 -16
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/performanceMonitor.js +1 -0
- package/dist/utils/smoothScrollUtils.js +1 -0
- package/package.json +23 -5
- package/src/global.scss +87 -0
- package/src/styles/theme.css +263 -156
- package/dist/components/charts/shared/BarRenderer/index.d.ts +0 -3
- package/dist/components/charts/shared/ChartContainer/ChartContainer.d.ts +0 -85
- package/dist/components/charts/shared/ChartContainer/index.d.ts +0 -3
- package/dist/components/charts/shared/ChartLegend/ChartLegendContent.d.ts +0 -7
- package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +0 -18
- package/dist/components/charts/shared/LineRenderer/index.d.ts +0 -2
- package/dist/components/core/Popover/Popover.animations.js +0 -13
- package/dist/components/layout/PageLayout/PageLayout.d.ts +0 -7
- package/dist/components/layout/PageLayout/PageLayout.js +0 -51
- package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayout.theme.js +0 -39
- package/dist/components/layout/PageLayout/PageLayout.types.d.ts +0 -84
- package/dist/components/layout/PageLayout/PageLayoutContent.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayoutContent.js +0 -14
- package/dist/components/layout/PageLayout/PageLayoutHeader.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayoutHeader.js +0 -12
- package/dist/components/layout/PageLayout/PageLayoutSidebar.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayoutSidebar.js +0 -14
- package/dist/components/layout/PageLayout/index.d.ts +0 -3
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.d.ts +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.d.ts +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.js +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.types.d.ts +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/index.d.ts +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { PulsingBorderProps } from "./PulsingBorder.types";
|
|
3
|
+
/**
|
|
4
|
+
* Map a px corner radius to the shader's normalized `u_roundness`.
|
|
5
|
+
* The shader computes the radius against the post-margin border rect, so
|
|
6
|
+
* `minDimension` must be the smaller dimension of the rect the border hugs —
|
|
7
|
+
* the HOST element (wrapper minus 2·glow per axis when a `glow` halo is set).
|
|
8
|
+
* px → normalized is `2·px / minDimension`, clamped to the shader's 0–1
|
|
9
|
+
* domain. (Exact at the default `margin` of 0.)
|
|
10
|
+
*/
|
|
11
|
+
export declare const pxToRoundness: (px: number, minDimension: number) => number;
|
|
12
|
+
/**
|
|
13
|
+
* Map a px border width to the shader's normalized `u_thickness`.
|
|
14
|
+
* The shader computes thickness BEFORE margins, so `minDimension` must be the
|
|
15
|
+
* smaller dimension of the full CANVAS (the wrapper, including any `glow`
|
|
16
|
+
* halo). `thicknessUV = 0.5 * u_thickness * 0.5` — so px → normalized is
|
|
17
|
+
* `4·px / minDimension` (the shader accepts values past 1).
|
|
18
|
+
*/
|
|
19
|
+
export declare const pxToThickness: (px: number, minDimension: number) => number;
|
|
20
|
+
/**
|
|
21
|
+
* Animated glowing pulsing border — colored spots sweep around a rounded
|
|
22
|
+
* rectangle's edge with a beat-driven pulse and bloom. An accent effect for
|
|
23
|
+
* cards, CTAs, and AI-active states — not a background. WebGL2-powered;
|
|
24
|
+
* falls back to a static CSS border glow when WebGL2 is unavailable or the
|
|
25
|
+
* user prefers reduced motion.
|
|
26
|
+
*/
|
|
27
|
+
export declare const PulsingBorder: React.FC<PulsingBorderProps>;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useRef, useState, useMemo, useLayoutEffect, useEffect } from 'react';
|
|
4
|
+
import { useReducedMotion } from 'motion/react';
|
|
5
|
+
import { useIsClient } from '../../../hooks/useIsClient.js';
|
|
6
|
+
import { useDarkMode } from '../../../hooks/useDarkMode.js';
|
|
7
|
+
import { cn } from '../../../utils/cn.js';
|
|
8
|
+
import { ShaderCanvas } from '../shared/ShaderCanvas/ShaderCanvas.js';
|
|
9
|
+
import { resolveShaderColors, resolveShaderColor } from '../shared/resolveShaderColor.js';
|
|
10
|
+
import { pulsingBorderFragmentShader } from './PulsingBorder.shaders.js';
|
|
11
|
+
import { PULSING_BORDER_MAX_COLORS } from './PulsingBorder.types.js';
|
|
12
|
+
|
|
13
|
+
const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
|
|
14
|
+
/**
|
|
15
|
+
* Map a px corner radius to the shader's normalized `u_roundness`.
|
|
16
|
+
* The shader computes the radius against the post-margin border rect, so
|
|
17
|
+
* `minDimension` must be the smaller dimension of the rect the border hugs —
|
|
18
|
+
* the HOST element (wrapper minus 2·glow per axis when a `glow` halo is set).
|
|
19
|
+
* px → normalized is `2·px / minDimension`, clamped to the shader's 0–1
|
|
20
|
+
* domain. (Exact at the default `margin` of 0.)
|
|
21
|
+
*/
|
|
22
|
+
const pxToRoundness = (px, minDimension) => Math.min(Math.max((2 * px) / minDimension, 0), 1);
|
|
23
|
+
/**
|
|
24
|
+
* Map a px border width to the shader's normalized `u_thickness`.
|
|
25
|
+
* The shader computes thickness BEFORE margins, so `minDimension` must be the
|
|
26
|
+
* smaller dimension of the full CANVAS (the wrapper, including any `glow`
|
|
27
|
+
* halo). `thicknessUV = 0.5 * u_thickness * 0.5` — so px → normalized is
|
|
28
|
+
* `4·px / minDimension` (the shader accepts values past 1).
|
|
29
|
+
*/
|
|
30
|
+
const pxToThickness = (px, minDimension) => Math.max((4 * px) / minDimension, 0);
|
|
31
|
+
const DEFAULT_COLORS = ["var(--color-primary-300)", "var(--color-primary)", "var(--color-primary-700)"];
|
|
32
|
+
const DEFAULT_COLOR_BACK = "transparent";
|
|
33
|
+
function useWebgl2Supported(disabled) {
|
|
34
|
+
return useMemo(() => {
|
|
35
|
+
if (disabled || typeof document === "undefined")
|
|
36
|
+
return false;
|
|
37
|
+
try {
|
|
38
|
+
return !!document.createElement("canvas").getContext("webgl2");
|
|
39
|
+
}
|
|
40
|
+
catch (_a) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}, [disabled]);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Animated glowing pulsing border — colored spots sweep around a rounded
|
|
47
|
+
* rectangle's edge with a beat-driven pulse and bloom. An accent effect for
|
|
48
|
+
* cards, CTAs, and AI-active states — not a background. WebGL2-powered;
|
|
49
|
+
* falls back to a static CSS border glow when WebGL2 is unavailable or the
|
|
50
|
+
* user prefers reduced motion.
|
|
51
|
+
*/
|
|
52
|
+
const PulsingBorder = ({ colorBack = DEFAULT_COLOR_BACK, colors = DEFAULT_COLORS, radius, borderWidth, glow = 0, offset = 0, lineOpacity = 0, animation = "pulse", roundness, thickness = 0.15, margin = 0, marginLeft, marginRight, marginTop, marginBottom, aspectRatio = 0, softness = 0.3, intensity = 0.3, bloom = 0.3, spotSize = 0.4, spots = 3, pulse = 0.3, speed = 1, className, style, ...props }) => {
|
|
53
|
+
var _a, _b, _c, _d;
|
|
54
|
+
const isClient = useIsClient();
|
|
55
|
+
const shouldReduceMotion = useReducedMotion();
|
|
56
|
+
const isDark = useDarkMode();
|
|
57
|
+
const webglSupported = useWebgl2Supported(!!shouldReduceMotion);
|
|
58
|
+
// The HOST element (our parent) is measured — size for the px→uniform
|
|
59
|
+
// conversions, computed border-radius for the auto radius match (same trick
|
|
60
|
+
// as TiltCard's glow). Measuring the parent instead of our own wrapper
|
|
61
|
+
// avoids a feedback loop with the auto halo expanding the wrapper.
|
|
62
|
+
const rootRef = useRef(null);
|
|
63
|
+
const [host, setHost] = useState({ width: 0, height: 0, radiusPx: 0 });
|
|
64
|
+
useIsomorphicLayoutEffect(() => {
|
|
65
|
+
var _a;
|
|
66
|
+
const el = (_a = rootRef.current) === null || _a === void 0 ? void 0 : _a.parentElement;
|
|
67
|
+
if (!el)
|
|
68
|
+
return;
|
|
69
|
+
const measure = () => {
|
|
70
|
+
// offsetWidth/Height = LAYOUT px, immune to ancestor scale() transforms
|
|
71
|
+
// (NodeCanvas zoom!). getBoundingClientRect returns visually-scaled px,
|
|
72
|
+
// which would put the halo geometry at the wrong scale under zoom.
|
|
73
|
+
const width = el.offsetWidth;
|
|
74
|
+
const height = el.offsetHeight;
|
|
75
|
+
const radiusPx = parseFloat(getComputedStyle(el).borderRadius) || 0;
|
|
76
|
+
setHost((prev) => prev.width === width && prev.height === height && prev.radiusPx === radiusPx
|
|
77
|
+
? prev
|
|
78
|
+
: { width, height, radiusPx });
|
|
79
|
+
};
|
|
80
|
+
measure();
|
|
81
|
+
if (typeof ResizeObserver === "undefined")
|
|
82
|
+
return;
|
|
83
|
+
const observer = new ResizeObserver(measure);
|
|
84
|
+
observer.observe(el);
|
|
85
|
+
return () => observer.disconnect();
|
|
86
|
+
}, []);
|
|
87
|
+
const hostMin = Math.min(host.width, host.height);
|
|
88
|
+
const measured = hostMin > 0;
|
|
89
|
+
// The border line sits fully OUTSIDE the host: its center is outset from
|
|
90
|
+
// the host edge by half the line width plus the optional `offset` gap, so
|
|
91
|
+
// it never overlaps the host's content.
|
|
92
|
+
const thicknessPx = borderWidth !== null && borderWidth !== void 0 ? borderWidth : 0.25 * thickness * hostMin;
|
|
93
|
+
const outset = measured ? thicknessPx / 2 + offset : 0;
|
|
94
|
+
// A glow must fade out, never crop: the wrapper auto-expands past the host
|
|
95
|
+
// by enough room for the outset line plus the wider of the soft band
|
|
96
|
+
// (3·softness·thickness, from the shader's band math) and the neon `glow`
|
|
97
|
+
// falloff. Padded ~15% + 2px for AA/bloom smear.
|
|
98
|
+
const halo = measured
|
|
99
|
+
? Math.ceil((offset + thicknessPx + Math.max(3 * softness * thicknessPx, glow)) * 1.15) + 2
|
|
100
|
+
: 0;
|
|
101
|
+
const canvasMin = Math.min(host.width + 2 * halo, host.height + 2 * halo);
|
|
102
|
+
const haloFracX = halo > 0 ? (halo - outset) / (host.width + 2 * halo) : 0;
|
|
103
|
+
const haloFracY = halo > 0 ? (halo - outset) / (host.height + 2 * halo) : 0;
|
|
104
|
+
// Radius precedence: explicit px `radius` › explicit normalized `roundness`
|
|
105
|
+
// › auto (host's computed border-radius) › shader default 0.4. The border
|
|
106
|
+
// rect is `outset` bigger than the host per side, so its radius grows by
|
|
107
|
+
// the same amount to stay concentric.
|
|
108
|
+
const radiusPx = radius !== null && radius !== void 0 ? radius : (roundness === undefined && host.radiusPx > 0 ? host.radiusPx : undefined);
|
|
109
|
+
const resolvedRoundness = radiusPx !== undefined && measured
|
|
110
|
+
? pxToRoundness(radiusPx + outset, hostMin + 2 * outset)
|
|
111
|
+
: (roundness !== null && roundness !== void 0 ? roundness : 0.4);
|
|
112
|
+
// Normalized thickness stays host-relative (scaled down by the halo-grown
|
|
113
|
+
// canvas) so the auto halo doesn't visually thicken the border.
|
|
114
|
+
const resolvedThickness = measured
|
|
115
|
+
? borderWidth !== undefined
|
|
116
|
+
? pxToThickness(borderWidth, canvasMin)
|
|
117
|
+
: thickness * (hostMin / canvasMin)
|
|
118
|
+
: thickness;
|
|
119
|
+
// Only explicit px props are meaningless before measurement — gate the
|
|
120
|
+
// shader on those (like charts' `measured` flag) so it never paints one
|
|
121
|
+
// frame at the wrong scale. Auto radius/halo just kick in once measured.
|
|
122
|
+
const waitingForMeasure = (radius !== undefined || borderWidth !== undefined) && !measured;
|
|
123
|
+
const safeColors = colors.length > 0 ? colors.slice(0, PULSING_BORDER_MAX_COLORS) : DEFAULT_COLORS;
|
|
124
|
+
const resolvedColors = useMemo(() => resolveShaderColors(safeColors),
|
|
125
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
126
|
+
[safeColors.join("|"), isDark]);
|
|
127
|
+
const resolvedBack = useMemo(() => resolveShaderColor(colorBack, [0, 0, 0, 0]),
|
|
128
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
129
|
+
[colorBack, isDark]);
|
|
130
|
+
const uniformsRef = useRef({});
|
|
131
|
+
for (let i = 0; i < PULSING_BORDER_MAX_COLORS; i++) {
|
|
132
|
+
uniformsRef.current[`u_colors[${i}]`] =
|
|
133
|
+
(_b = (_a = resolvedColors[i]) !== null && _a !== void 0 ? _a : resolvedColors[resolvedColors.length - 1]) !== null && _b !== void 0 ? _b : [0, 0, 0, 0];
|
|
134
|
+
}
|
|
135
|
+
uniformsRef.current.u_colorsCount = resolvedColors.length;
|
|
136
|
+
uniformsRef.current.u_colorBack = resolvedBack;
|
|
137
|
+
uniformsRef.current.u_roundness = resolvedRoundness;
|
|
138
|
+
uniformsRef.current.u_thickness = resolvedThickness;
|
|
139
|
+
uniformsRef.current.u_marginLeft = (marginLeft !== null && marginLeft !== void 0 ? marginLeft : margin) + haloFracX;
|
|
140
|
+
uniformsRef.current.u_marginRight = (marginRight !== null && marginRight !== void 0 ? marginRight : margin) + haloFracX;
|
|
141
|
+
uniformsRef.current.u_marginTop = (marginTop !== null && marginTop !== void 0 ? marginTop : margin) + haloFracY;
|
|
142
|
+
uniformsRef.current.u_marginBottom = (marginBottom !== null && marginBottom !== void 0 ? marginBottom : margin) + haloFracY;
|
|
143
|
+
uniformsRef.current.u_aspectRatio = aspectRatio;
|
|
144
|
+
uniformsRef.current.u_glow = measured && glow > 0 ? glow / canvasMin : 0;
|
|
145
|
+
uniformsRef.current.u_lineOpacity = lineOpacity;
|
|
146
|
+
uniformsRef.current.u_sweep = animation === "sweep" ? 1 : 0;
|
|
147
|
+
uniformsRef.current.u_softness = softness;
|
|
148
|
+
uniformsRef.current.u_intensity = intensity;
|
|
149
|
+
uniformsRef.current.u_bloom = bloom;
|
|
150
|
+
uniformsRef.current.u_spotSize = spotSize;
|
|
151
|
+
uniformsRef.current.u_spots = spots;
|
|
152
|
+
uniformsRef.current.u_pulse = pulse;
|
|
153
|
+
uniformsRef.current.u_speed = speed;
|
|
154
|
+
return (jsx("div", { ref: rootRef, className: cn("absolute inset-0 overflow-hidden pointer-events-none select-none", className), style: halo > 0
|
|
155
|
+
? {
|
|
156
|
+
inset: -halo,
|
|
157
|
+
// Concentric outer rounding so overflow-hidden never clips the
|
|
158
|
+
// halo against the host's (smaller) radius.
|
|
159
|
+
borderRadius: radiusPx !== undefined ? radiusPx + halo : undefined,
|
|
160
|
+
...style,
|
|
161
|
+
}
|
|
162
|
+
: style, "aria-hidden": "true", ...props, children: isClient && webglSupported && !waitingForMeasure ? (jsx(ShaderCanvas, { fragmentShader: pulsingBorderFragmentShader, uniformsRef: uniformsRef })) : (jsx("div", { className: "absolute inset-0 rounded-[inherit]", style: {
|
|
163
|
+
// With a halo the wrapper is bigger than the host — inset the
|
|
164
|
+
// static border back to the outset line's box so its outer shadow
|
|
165
|
+
// can render in the halo band instead of being clipped.
|
|
166
|
+
inset: halo > 0 ? halo - outset : undefined,
|
|
167
|
+
borderRadius: radiusPx !== undefined ? radiusPx + outset : undefined,
|
|
168
|
+
// Outer blur ≤ halo so the shadow fades out before the wrapper's
|
|
169
|
+
// overflow-hidden edge (a larger blur would clip to a hard line).
|
|
170
|
+
boxShadow: `inset 0 0 0 ${borderWidth !== null && borderWidth !== void 0 ? borderWidth : 2}px ${(_c = safeColors[0]) !== null && _c !== void 0 ? _c : "var(--color-primary)"}, 0 0 ${halo > 0 ? halo : 24}px ${(_d = safeColors[safeColors.length - 1]) !== null && _d !== void 0 ? _d : "var(--color-primary)"}`,
|
|
171
|
+
} })) }));
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export { PulsingBorder, pxToRoundness, pxToThickness };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PulsingBorder fragment shader — adapted from paper-design/shaders'
|
|
3
|
+
* `pulsing-border.ts` (https://github.com/paper-design/shaders, Apache
|
|
4
|
+
* License 2.0).
|
|
5
|
+
*
|
|
6
|
+
* Simplified from the original: plain centered/aspect-corrected UV
|
|
7
|
+
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
8
|
+
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
9
|
+
* instead of pre-generated noise-texture sampling. The `smoke`/`smokeSize`
|
|
10
|
+
* secondary noise layer is omitted for v1 to reduce first-pass GLSL
|
|
11
|
+
* complexity on an already-dense shader — the core rounded-border +
|
|
12
|
+
* per-spot pulsing glow + bloom is unaffected.
|
|
13
|
+
*/
|
|
14
|
+
export declare const pulsingBorderFragmentShader = "#version 300 es\nprecision lowp float;\n\nuniform float iTime;\nuniform vec2 iResolution;\n\nuniform vec4 u_colorBack;\nuniform vec4 u_colors[5];\nuniform float u_colorsCount;\nuniform float u_roundness;\nuniform float u_thickness;\nuniform float u_marginLeft;\nuniform float u_marginRight;\nuniform float u_marginTop;\nuniform float u_marginBottom;\nuniform float u_aspectRatio;\nuniform float u_softness;\nuniform float u_glow;\nuniform float u_lineOpacity;\nuniform float u_sweep;\nuniform float u_intensity;\nuniform float u_bloom;\nuniform float u_spotSize;\nuniform float u_spots;\nuniform float u_pulse;\nuniform float u_speed;\n\nout vec4 fragColor;\n\n\nconst float PI = 3.14159265359;\nconst float TWO_PI = 6.28318530718;\n\n\nvec2 randomGB(vec2 st) {\n return vec2(\n fract(sin(dot(st, vec2(12.9898, 78.233))) * 43758.5453123),\n fract(sin(dot(st, vec2(93.9898, 67.345))) * 24634.6345123)\n );\n}\n\n\nfloat beat(float time) {\n float first = pow(abs(sin(time * TWO_PI)), 10.);\n float second = pow(abs(sin((time - .15) * TWO_PI)), 10.);\n return clamp(first + 0.6 * second, 0.0, 1.0);\n}\n\nfloat sst(float edge0, float edge1, float x) {\n return smoothstep(edge0, edge1, x);\n}\n\nfloat roundedBox(vec2 uv, vec2 halfSize, float distance, float cornerDistance, float thickness, float softness) {\n float borderDistance = abs(distance);\n float aa = 2. * fwidth(distance);\n float border = 1. - sst(min(mix(thickness, -thickness, softness), thickness + aa), max(mix(thickness, -thickness, softness), thickness + aa), borderDistance);\n float cornerFadeCircles = 0.;\n cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv + halfSize) / thickness)));\n cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv - vec2(-halfSize.x, halfSize.y)) / thickness)));\n cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv - vec2(halfSize.x, -halfSize.y)) / thickness)));\n cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv - halfSize) / thickness)));\n aa = fwidth(cornerDistance);\n float cornerFade = sst(0., mix(aa, thickness, softness), cornerDistance);\n cornerFade *= cornerFadeCircles;\n border += cornerFade;\n return border;\n}\n\nvoid main() {\n const float firstFrameOffset = 109.;\n float t = 1.2 * u_speed * iTime + firstFrameOffset;\n\n float canvasRatio = iResolution.x / iResolution.y;\n vec2 halfSize = vec2(max(canvasRatio, 1.) * .5, .5 / min(canvasRatio, 1.));\n vec2 borderUV = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);\n\n float pulse = u_pulse * beat(.18 * u_speed * iTime);\n\n float mL = u_marginLeft;\n float mR = u_marginRight;\n float mT = u_marginTop;\n float mB = u_marginBottom;\n float mX = mL + mR;\n float mY = mT + mB;\n\n if (u_aspectRatio > 0.) {\n float shapeRatio = canvasRatio * (1. - mX) / max(1. - mY, 1e-6);\n float freeX = shapeRatio > 1. ? (1. - mX) * (1. - 1. / max(abs(shapeRatio), 1e-6)) : 0.;\n float freeY = shapeRatio < 1. ? (1. - mY) * (1. - shapeRatio) : 0.;\n mL += freeX * 0.5;\n mR += freeX * 0.5;\n mT += freeY * 0.5;\n mB += freeY * 0.5;\n mX = mL + mR;\n mY = mT + mB;\n }\n\n float thickness = .5 * u_thickness * min(halfSize.x, halfSize.y);\n\n halfSize.x *= (1. - mX);\n halfSize.y *= (1. - mY);\n\n vec2 centerShift = vec2(\n (mL - mR) * max(canvasRatio, 1.) * 0.5,\n (mB - mT) / min(canvasRatio, 1.) * 0.5\n );\n\n borderUV -= centerShift;\n halfSize -= mix(thickness, 0., u_softness);\n\n float radius = mix(0., min(halfSize.x, halfSize.y), u_roundness);\n vec2 d = abs(borderUV) - halfSize + radius;\n float outsideDistance = length(max(d, .0001)) - radius;\n float insideDistance = min(max(d.x, d.y), .0001);\n float cornerDistance = abs(min(max(d.x, d.y) - .45 * radius, .0));\n float distance = outsideDistance + insideDistance;\n\n float borderThickness = mix(thickness, 3. * thickness, u_softness);\n float border = roundedBox(borderUV, halfSize, distance, cornerDistance, borderThickness, u_softness);\n border = pow(border, 1. + u_softness);\n\n border = clamp(border, 0., 1.);\n\n // Neon halo: a soft luminous falloff radiating OUTWARD from the border\n // line (u_glow = falloff width in UV units, 0 = off). One-sided: it fades\n // to nothing just inside the line so the host card stays clean - the glow\n // reads as if the effect sits behind the card. Only the sweeping spots\n // light it (spotMask), so the crisp hairline below stays thin.\n float spotMask = border;\n if (u_glow > 0.) {\n float halo = 1. - sst(0., u_glow, max(distance, 0.));\n halo *= sst(-3. * thickness, 0., distance);\n halo = pow(halo, 2.5);\n spotMask = max(spotMask, .5 * halo);\n }\n spotMask = clamp(spotMask, 0., 1.);\n\n vec3 blendColor = vec3(0.);\n float blendAlpha = 0.;\n vec3 addColor = vec3(0.);\n float addAlpha = 0.;\n\n float bloom = 4. * u_bloom;\n float intensity = 1. + (1. + 4. * u_softness) * u_intensity;\n\n float angle = atan(borderUV.y, borderUV.x) / TWO_PI;\n\n // Sweep mode: ONE soft luminous beam anchored to a stretch of the border,\n // orbiting at constant speed with a long fade on both sides - no flicker,\n // no multiple spots. Its color glides through u_colors as it travels, so\n // the border changes color over each lap. Subtle beat breathing via\n // u_pulse; u_spotSize sets the beam's arc length; u_spots is ignored.\n if (u_sweep > .5) {\n // Starts at TOP CENTER (angle .25 turns) and orbits from there.\n float head = fract(.25 - .084 * u_speed * iTime);\n float pos = fract(angle - head + .5);\n float arc = .22 + .6 * pow(u_spotSize, 2.);\n float beam = sst(.5 - arc, .5, pos) * (1. - sst(.5, .5 + arc, pos));\n beam = pow(beam, 1.5);\n beam *= spotMask;\n beam *= (1. - .4 * u_pulse + .4 * pulse);\n beam *= intensity;\n beam = clamp(beam, 0., 1.);\n\n float cPos = head * u_colorsCount;\n int ci = int(floor(cPos));\n int cj = ci + 1;\n if (cj >= int(u_colorsCount)) cj = 0;\n vec4 beamC = mix(u_colors[ci], u_colors[cj], fract(cPos));\n blendColor = beamC.rgb * beamC.a * beam;\n blendAlpha = beamC.a * beam;\n addColor = blendColor;\n addAlpha = blendAlpha;\n } else {\n for (int colorIdx = 0; colorIdx < 5; colorIdx++) {\n if (colorIdx >= int(u_colorsCount)) break;\n float colorIdxF = float(colorIdx);\n\n vec3 c = u_colors[colorIdx].rgb * u_colors[colorIdx].a;\n float a = u_colors[colorIdx].a;\n\n for (int spotIdx = 0; spotIdx < 4; spotIdx++) {\n if (spotIdx >= int(u_spots)) break;\n float spotIdxF = float(spotIdx);\n\n vec2 randVal = randomGB(vec2(spotIdxF * 10. + 2., 40. + colorIdxF));\n\n float time = (.1 + .15 * abs(sin(spotIdxF * (2. + colorIdxF)) * cos(spotIdxF * (2. + 2.5 * colorIdxF)))) * t + randVal.x * 3.;\n time *= mix(1., -1., step(.5, randVal.y));\n\n float mask = .5 + .5 * mix(\n sin(t + spotIdxF * (5. - 1.5 * colorIdxF)),\n cos(t + spotIdxF * (3. + 1.3 * colorIdxF)),\n step(mod(colorIdxF, 2.), .5)\n );\n\n float p = clamp(2. * u_pulse - randVal.x, 0., 1.);\n mask = mix(mask, pulse, p);\n\n float atg1 = fract(angle + time);\n float spotSize = .05 + .6 * pow(u_spotSize, 2.) + .05 * randVal.x;\n spotSize = mix(spotSize, .1, p);\n float sector = sst(.5 - spotSize, .5, atg1) * (1. - sst(.5, .5 + spotSize, atg1));\n\n sector *= mask;\n sector *= spotMask;\n sector *= intensity;\n sector = clamp(sector, 0., 1.);\n\n vec3 srcColor = c * sector;\n float srcAlpha = a * sector;\n\n blendColor += ((1. - blendAlpha) * srcColor);\n blendAlpha = blendAlpha + (1. - blendAlpha) * srcAlpha;\n addColor += srcColor;\n addAlpha += srcAlpha;\n }\n }\n }\n\n vec3 accumColor = mix(blendColor, addColor, bloom);\n float accumAlpha = mix(blendAlpha, addAlpha, bloom);\n accumAlpha = clamp(accumAlpha, 0., 1.);\n\n // Always-visible hairline (u_lineOpacity 0 = off): the crisp border line\n // at a faint constant opacity, tinted by blending u_colors around the\n // perimeter (a subtle gradient ring), rendered UNDER the sweeping spots.\n if (u_lineOpacity > 0.) {\n float cPos = fract(angle + .5) * u_colorsCount;\n int ci = int(floor(cPos));\n int cj = ci + 1;\n if (cj >= int(u_colorsCount)) cj = 0;\n vec4 lineC = mix(u_colors[ci], u_colors[cj], fract(cPos));\n float lineA = lineC.a * u_lineOpacity * border;\n accumColor += (1. - accumAlpha) * lineC.rgb * lineA;\n accumAlpha = accumAlpha + (1. - accumAlpha) * lineA;\n }\n\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n vec3 color = accumColor + (1. - accumAlpha) * bgColor;\n float opacity = accumAlpha + (1. - accumAlpha) * u_colorBack.a;\n\n // accumColor is PREMULTIPLIED, but ShaderCanvas composites with straight\n // alpha (blendFunc SRC_ALPHA + premultipliedAlpha:false) - emitting it\n // as-is multiplies by alpha twice, crushing every soft pixel (the glow\n // falloff was invisible). Un-premultiply before output.\n fragColor = vec4(color / max(opacity, 1e-4), opacity);\n}\n";
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
3
|
+
import { glslDeclarePI, glslHashVec2 } from '../shared/shaderNoise.glsl.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* PulsingBorder fragment shader — adapted from paper-design/shaders'
|
|
7
|
+
* `pulsing-border.ts` (https://github.com/paper-design/shaders, Apache
|
|
8
|
+
* License 2.0).
|
|
9
|
+
*
|
|
10
|
+
* Simplified from the original: plain centered/aspect-corrected UV
|
|
11
|
+
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
12
|
+
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
13
|
+
* instead of pre-generated noise-texture sampling. The `smoke`/`smokeSize`
|
|
14
|
+
* secondary noise layer is omitted for v1 to reduce first-pass GLSL
|
|
15
|
+
* complexity on an already-dense shader — the core rounded-border +
|
|
16
|
+
* per-spot pulsing glow + bloom is unaffected.
|
|
17
|
+
*/
|
|
18
|
+
const pulsingBorderFragmentShader = `#version 300 es
|
|
19
|
+
precision lowp float;
|
|
20
|
+
|
|
21
|
+
uniform float iTime;
|
|
22
|
+
uniform vec2 iResolution;
|
|
23
|
+
|
|
24
|
+
uniform vec4 u_colorBack;
|
|
25
|
+
uniform vec4 u_colors[5];
|
|
26
|
+
uniform float u_colorsCount;
|
|
27
|
+
uniform float u_roundness;
|
|
28
|
+
uniform float u_thickness;
|
|
29
|
+
uniform float u_marginLeft;
|
|
30
|
+
uniform float u_marginRight;
|
|
31
|
+
uniform float u_marginTop;
|
|
32
|
+
uniform float u_marginBottom;
|
|
33
|
+
uniform float u_aspectRatio;
|
|
34
|
+
uniform float u_softness;
|
|
35
|
+
uniform float u_glow;
|
|
36
|
+
uniform float u_lineOpacity;
|
|
37
|
+
uniform float u_sweep;
|
|
38
|
+
uniform float u_intensity;
|
|
39
|
+
uniform float u_bloom;
|
|
40
|
+
uniform float u_spotSize;
|
|
41
|
+
uniform float u_spots;
|
|
42
|
+
uniform float u_pulse;
|
|
43
|
+
uniform float u_speed;
|
|
44
|
+
|
|
45
|
+
out vec4 fragColor;
|
|
46
|
+
|
|
47
|
+
${glslDeclarePI}
|
|
48
|
+
${glslHashVec2}
|
|
49
|
+
|
|
50
|
+
float beat(float time) {
|
|
51
|
+
float first = pow(abs(sin(time * TWO_PI)), 10.);
|
|
52
|
+
float second = pow(abs(sin((time - .15) * TWO_PI)), 10.);
|
|
53
|
+
return clamp(first + 0.6 * second, 0.0, 1.0);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
float sst(float edge0, float edge1, float x) {
|
|
57
|
+
return smoothstep(edge0, edge1, x);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
float roundedBox(vec2 uv, vec2 halfSize, float distance, float cornerDistance, float thickness, float softness) {
|
|
61
|
+
float borderDistance = abs(distance);
|
|
62
|
+
float aa = 2. * fwidth(distance);
|
|
63
|
+
float border = 1. - sst(min(mix(thickness, -thickness, softness), thickness + aa), max(mix(thickness, -thickness, softness), thickness + aa), borderDistance);
|
|
64
|
+
float cornerFadeCircles = 0.;
|
|
65
|
+
cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv + halfSize) / thickness)));
|
|
66
|
+
cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv - vec2(-halfSize.x, halfSize.y)) / thickness)));
|
|
67
|
+
cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv - vec2(halfSize.x, -halfSize.y)) / thickness)));
|
|
68
|
+
cornerFadeCircles = mix(1., cornerFadeCircles, sst(0., 1., length((uv - halfSize) / thickness)));
|
|
69
|
+
aa = fwidth(cornerDistance);
|
|
70
|
+
float cornerFade = sst(0., mix(aa, thickness, softness), cornerDistance);
|
|
71
|
+
cornerFade *= cornerFadeCircles;
|
|
72
|
+
border += cornerFade;
|
|
73
|
+
return border;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
void main() {
|
|
77
|
+
const float firstFrameOffset = 109.;
|
|
78
|
+
float t = 1.2 * u_speed * iTime + firstFrameOffset;
|
|
79
|
+
|
|
80
|
+
float canvasRatio = iResolution.x / iResolution.y;
|
|
81
|
+
vec2 halfSize = vec2(max(canvasRatio, 1.) * .5, .5 / min(canvasRatio, 1.));
|
|
82
|
+
vec2 borderUV = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);
|
|
83
|
+
|
|
84
|
+
float pulse = u_pulse * beat(.18 * u_speed * iTime);
|
|
85
|
+
|
|
86
|
+
float mL = u_marginLeft;
|
|
87
|
+
float mR = u_marginRight;
|
|
88
|
+
float mT = u_marginTop;
|
|
89
|
+
float mB = u_marginBottom;
|
|
90
|
+
float mX = mL + mR;
|
|
91
|
+
float mY = mT + mB;
|
|
92
|
+
|
|
93
|
+
if (u_aspectRatio > 0.) {
|
|
94
|
+
float shapeRatio = canvasRatio * (1. - mX) / max(1. - mY, 1e-6);
|
|
95
|
+
float freeX = shapeRatio > 1. ? (1. - mX) * (1. - 1. / max(abs(shapeRatio), 1e-6)) : 0.;
|
|
96
|
+
float freeY = shapeRatio < 1. ? (1. - mY) * (1. - shapeRatio) : 0.;
|
|
97
|
+
mL += freeX * 0.5;
|
|
98
|
+
mR += freeX * 0.5;
|
|
99
|
+
mT += freeY * 0.5;
|
|
100
|
+
mB += freeY * 0.5;
|
|
101
|
+
mX = mL + mR;
|
|
102
|
+
mY = mT + mB;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
float thickness = .5 * u_thickness * min(halfSize.x, halfSize.y);
|
|
106
|
+
|
|
107
|
+
halfSize.x *= (1. - mX);
|
|
108
|
+
halfSize.y *= (1. - mY);
|
|
109
|
+
|
|
110
|
+
vec2 centerShift = vec2(
|
|
111
|
+
(mL - mR) * max(canvasRatio, 1.) * 0.5,
|
|
112
|
+
(mB - mT) / min(canvasRatio, 1.) * 0.5
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
borderUV -= centerShift;
|
|
116
|
+
halfSize -= mix(thickness, 0., u_softness);
|
|
117
|
+
|
|
118
|
+
float radius = mix(0., min(halfSize.x, halfSize.y), u_roundness);
|
|
119
|
+
vec2 d = abs(borderUV) - halfSize + radius;
|
|
120
|
+
float outsideDistance = length(max(d, .0001)) - radius;
|
|
121
|
+
float insideDistance = min(max(d.x, d.y), .0001);
|
|
122
|
+
float cornerDistance = abs(min(max(d.x, d.y) - .45 * radius, .0));
|
|
123
|
+
float distance = outsideDistance + insideDistance;
|
|
124
|
+
|
|
125
|
+
float borderThickness = mix(thickness, 3. * thickness, u_softness);
|
|
126
|
+
float border = roundedBox(borderUV, halfSize, distance, cornerDistance, borderThickness, u_softness);
|
|
127
|
+
border = pow(border, 1. + u_softness);
|
|
128
|
+
|
|
129
|
+
border = clamp(border, 0., 1.);
|
|
130
|
+
|
|
131
|
+
// Neon halo: a soft luminous falloff radiating OUTWARD from the border
|
|
132
|
+
// line (u_glow = falloff width in UV units, 0 = off). One-sided: it fades
|
|
133
|
+
// to nothing just inside the line so the host card stays clean - the glow
|
|
134
|
+
// reads as if the effect sits behind the card. Only the sweeping spots
|
|
135
|
+
// light it (spotMask), so the crisp hairline below stays thin.
|
|
136
|
+
float spotMask = border;
|
|
137
|
+
if (u_glow > 0.) {
|
|
138
|
+
float halo = 1. - sst(0., u_glow, max(distance, 0.));
|
|
139
|
+
halo *= sst(-3. * thickness, 0., distance);
|
|
140
|
+
halo = pow(halo, 2.5);
|
|
141
|
+
spotMask = max(spotMask, .5 * halo);
|
|
142
|
+
}
|
|
143
|
+
spotMask = clamp(spotMask, 0., 1.);
|
|
144
|
+
|
|
145
|
+
vec3 blendColor = vec3(0.);
|
|
146
|
+
float blendAlpha = 0.;
|
|
147
|
+
vec3 addColor = vec3(0.);
|
|
148
|
+
float addAlpha = 0.;
|
|
149
|
+
|
|
150
|
+
float bloom = 4. * u_bloom;
|
|
151
|
+
float intensity = 1. + (1. + 4. * u_softness) * u_intensity;
|
|
152
|
+
|
|
153
|
+
float angle = atan(borderUV.y, borderUV.x) / TWO_PI;
|
|
154
|
+
|
|
155
|
+
// Sweep mode: ONE soft luminous beam anchored to a stretch of the border,
|
|
156
|
+
// orbiting at constant speed with a long fade on both sides - no flicker,
|
|
157
|
+
// no multiple spots. Its color glides through u_colors as it travels, so
|
|
158
|
+
// the border changes color over each lap. Subtle beat breathing via
|
|
159
|
+
// u_pulse; u_spotSize sets the beam's arc length; u_spots is ignored.
|
|
160
|
+
if (u_sweep > .5) {
|
|
161
|
+
// Starts at TOP CENTER (angle .25 turns) and orbits from there.
|
|
162
|
+
float head = fract(.25 - .084 * u_speed * iTime);
|
|
163
|
+
float pos = fract(angle - head + .5);
|
|
164
|
+
float arc = .22 + .6 * pow(u_spotSize, 2.);
|
|
165
|
+
float beam = sst(.5 - arc, .5, pos) * (1. - sst(.5, .5 + arc, pos));
|
|
166
|
+
beam = pow(beam, 1.5);
|
|
167
|
+
beam *= spotMask;
|
|
168
|
+
beam *= (1. - .4 * u_pulse + .4 * pulse);
|
|
169
|
+
beam *= intensity;
|
|
170
|
+
beam = clamp(beam, 0., 1.);
|
|
171
|
+
|
|
172
|
+
float cPos = head * u_colorsCount;
|
|
173
|
+
int ci = int(floor(cPos));
|
|
174
|
+
int cj = ci + 1;
|
|
175
|
+
if (cj >= int(u_colorsCount)) cj = 0;
|
|
176
|
+
vec4 beamC = mix(u_colors[ci], u_colors[cj], fract(cPos));
|
|
177
|
+
blendColor = beamC.rgb * beamC.a * beam;
|
|
178
|
+
blendAlpha = beamC.a * beam;
|
|
179
|
+
addColor = blendColor;
|
|
180
|
+
addAlpha = blendAlpha;
|
|
181
|
+
} else {
|
|
182
|
+
for (int colorIdx = 0; colorIdx < 5; colorIdx++) {
|
|
183
|
+
if (colorIdx >= int(u_colorsCount)) break;
|
|
184
|
+
float colorIdxF = float(colorIdx);
|
|
185
|
+
|
|
186
|
+
vec3 c = u_colors[colorIdx].rgb * u_colors[colorIdx].a;
|
|
187
|
+
float a = u_colors[colorIdx].a;
|
|
188
|
+
|
|
189
|
+
for (int spotIdx = 0; spotIdx < 4; spotIdx++) {
|
|
190
|
+
if (spotIdx >= int(u_spots)) break;
|
|
191
|
+
float spotIdxF = float(spotIdx);
|
|
192
|
+
|
|
193
|
+
vec2 randVal = randomGB(vec2(spotIdxF * 10. + 2., 40. + colorIdxF));
|
|
194
|
+
|
|
195
|
+
float time = (.1 + .15 * abs(sin(spotIdxF * (2. + colorIdxF)) * cos(spotIdxF * (2. + 2.5 * colorIdxF)))) * t + randVal.x * 3.;
|
|
196
|
+
time *= mix(1., -1., step(.5, randVal.y));
|
|
197
|
+
|
|
198
|
+
float mask = .5 + .5 * mix(
|
|
199
|
+
sin(t + spotIdxF * (5. - 1.5 * colorIdxF)),
|
|
200
|
+
cos(t + spotIdxF * (3. + 1.3 * colorIdxF)),
|
|
201
|
+
step(mod(colorIdxF, 2.), .5)
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
float p = clamp(2. * u_pulse - randVal.x, 0., 1.);
|
|
205
|
+
mask = mix(mask, pulse, p);
|
|
206
|
+
|
|
207
|
+
float atg1 = fract(angle + time);
|
|
208
|
+
float spotSize = .05 + .6 * pow(u_spotSize, 2.) + .05 * randVal.x;
|
|
209
|
+
spotSize = mix(spotSize, .1, p);
|
|
210
|
+
float sector = sst(.5 - spotSize, .5, atg1) * (1. - sst(.5, .5 + spotSize, atg1));
|
|
211
|
+
|
|
212
|
+
sector *= mask;
|
|
213
|
+
sector *= spotMask;
|
|
214
|
+
sector *= intensity;
|
|
215
|
+
sector = clamp(sector, 0., 1.);
|
|
216
|
+
|
|
217
|
+
vec3 srcColor = c * sector;
|
|
218
|
+
float srcAlpha = a * sector;
|
|
219
|
+
|
|
220
|
+
blendColor += ((1. - blendAlpha) * srcColor);
|
|
221
|
+
blendAlpha = blendAlpha + (1. - blendAlpha) * srcAlpha;
|
|
222
|
+
addColor += srcColor;
|
|
223
|
+
addAlpha += srcAlpha;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
vec3 accumColor = mix(blendColor, addColor, bloom);
|
|
229
|
+
float accumAlpha = mix(blendAlpha, addAlpha, bloom);
|
|
230
|
+
accumAlpha = clamp(accumAlpha, 0., 1.);
|
|
231
|
+
|
|
232
|
+
// Always-visible hairline (u_lineOpacity 0 = off): the crisp border line
|
|
233
|
+
// at a faint constant opacity, tinted by blending u_colors around the
|
|
234
|
+
// perimeter (a subtle gradient ring), rendered UNDER the sweeping spots.
|
|
235
|
+
if (u_lineOpacity > 0.) {
|
|
236
|
+
float cPos = fract(angle + .5) * u_colorsCount;
|
|
237
|
+
int ci = int(floor(cPos));
|
|
238
|
+
int cj = ci + 1;
|
|
239
|
+
if (cj >= int(u_colorsCount)) cj = 0;
|
|
240
|
+
vec4 lineC = mix(u_colors[ci], u_colors[cj], fract(cPos));
|
|
241
|
+
float lineA = lineC.a * u_lineOpacity * border;
|
|
242
|
+
accumColor += (1. - accumAlpha) * lineC.rgb * lineA;
|
|
243
|
+
accumAlpha = accumAlpha + (1. - accumAlpha) * lineA;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
247
|
+
vec3 color = accumColor + (1. - accumAlpha) * bgColor;
|
|
248
|
+
float opacity = accumAlpha + (1. - accumAlpha) * u_colorBack.a;
|
|
249
|
+
|
|
250
|
+
// accumColor is PREMULTIPLIED, but ShaderCanvas composites with straight
|
|
251
|
+
// alpha (blendFunc SRC_ALPHA + premultipliedAlpha:false) - emitting it
|
|
252
|
+
// as-is multiplies by alpha twice, crushing every soft pixel (the glow
|
|
253
|
+
// falloff was invisible). Un-premultiply before output.
|
|
254
|
+
fragColor = vec4(color / max(opacity, 1e-4), opacity);
|
|
255
|
+
}
|
|
256
|
+
`;
|
|
257
|
+
|
|
258
|
+
export { pulsingBorderFragmentShader };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export declare const PULSING_BORDER_MAX_COLORS = 5;
|
|
3
|
+
export declare const PULSING_BORDER_MAX_SPOTS = 4;
|
|
4
|
+
export interface PulsingBorderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
+
/** Background CSS color (shows through the non-border area). Default: 'transparent'. */
|
|
6
|
+
colorBack?: string;
|
|
7
|
+
/** Pulsing spot colors, up to 5. Default: a 3-stop primary ramp. */
|
|
8
|
+
colors?: string[];
|
|
9
|
+
/**
|
|
10
|
+
* Corner radius in px (e.g. 12) — constant at any element size, unlike
|
|
11
|
+
* `roundness`. Wins over `roundness` and the auto-detected host radius.
|
|
12
|
+
* Default: auto — the host element's computed CSS border-radius, so the
|
|
13
|
+
* border hugs the card it wraps with zero configuration.
|
|
14
|
+
*/
|
|
15
|
+
radius?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Border thickness in px (e.g. 2) — constant at any element size, unlike
|
|
18
|
+
* `thickness`. Wins over `thickness` when both are set. Also used by the
|
|
19
|
+
* static no-WebGL fallback border.
|
|
20
|
+
*/
|
|
21
|
+
borderWidth?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Neon halo width in px (e.g. 24): a luminous falloff radiating outward
|
|
24
|
+
* from the border line, lit by the sweeping spots. The effect auto-expands
|
|
25
|
+
* past the host so the halo always fades out, never crops. Default: 0.
|
|
26
|
+
*/
|
|
27
|
+
glow?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Extra gap in px between the host's edge and the border line. The line
|
|
30
|
+
* always sits fully OUTSIDE the host (inner edge touching at 0). Default: 0.
|
|
31
|
+
*/
|
|
32
|
+
offset?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Opacity (0-1) of an always-visible hairline tracing the full border —
|
|
35
|
+
* tinted as a subtle gradient through `colors` — under the sweeping spots.
|
|
36
|
+
* 0 (default) = the line only lights up where spots pass.
|
|
37
|
+
*/
|
|
38
|
+
lineOpacity?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Spot motion. `'pulse'` (default) — spots flicker and drift with the beat
|
|
41
|
+
* (the original look). `'sweep'` — ONE soft beam anchored to a stretch of
|
|
42
|
+
* the border orbits it at constant speed with a long fade on both sides;
|
|
43
|
+
* its color glides through `colors` each lap. `spotSize` sets the beam's
|
|
44
|
+
* arc, `speed` the orbit rate, `pulse` a subtle breathing; `spots` is
|
|
45
|
+
* ignored. The polished running-state look.
|
|
46
|
+
*/
|
|
47
|
+
animation?: "pulse" | "sweep";
|
|
48
|
+
/** Corner roundness, 0-1 of the element's smaller half-dimension (size-relative — prefer `radius` for a fixed px value). Default: auto from the host's border-radius, else 0.4. */
|
|
49
|
+
roundness?: number;
|
|
50
|
+
/** Border thickness, 0-1+ (size-relative — prefer `borderWidth` for a fixed px value). Default: 0.15. */
|
|
51
|
+
thickness?: number;
|
|
52
|
+
/** Inset margin on all sides, 0-1 (overridable per-side). Default: 0. */
|
|
53
|
+
margin?: number;
|
|
54
|
+
marginLeft?: number;
|
|
55
|
+
marginRight?: number;
|
|
56
|
+
marginTop?: number;
|
|
57
|
+
marginBottom?: number;
|
|
58
|
+
/** Force a specific aspect ratio for the border rect: 0 = auto (fill container), 1 = square. Default: 0. */
|
|
59
|
+
aspectRatio?: number;
|
|
60
|
+
/** Edge softness, 0-1. Default: 0.3. */
|
|
61
|
+
softness?: number;
|
|
62
|
+
/** Glow intensity. Default: 0.3. */
|
|
63
|
+
intensity?: number;
|
|
64
|
+
/** Additive-vs-alpha blend for overlapping spots, 0-1. Default: 0.3. */
|
|
65
|
+
bloom?: number;
|
|
66
|
+
/** Individual spot size, 0-1. Default: 0.4. */
|
|
67
|
+
spotSize?: number;
|
|
68
|
+
/** Number of pulsing spots per color, 1-4. Default: 3. */
|
|
69
|
+
spots?: number;
|
|
70
|
+
/** Beat-driven pulse strength, 0-1. Default: 0.3. */
|
|
71
|
+
pulse?: number;
|
|
72
|
+
/** Animation speed multiplier. Default: 1. */
|
|
73
|
+
speed?: number;
|
|
74
|
+
className?: string;
|
|
75
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ShimmerProps } from "./Shimmer.types";
|
|
3
|
+
/**
|
|
4
|
+
* Shimmer applies a CSS-only shimmer effect to text or any box — the "AI
|
|
5
|
+
* thinking" look you see in chat apps, plus a surface sweep for loading
|
|
6
|
+
* placeholders. Pure CSS (`background-clip: text` for text, a compositor-only
|
|
7
|
+
* `translateX` sweep for surfaces), so it is cheap and smooth, and it respects
|
|
8
|
+
* `prefers-reduced-motion` automatically.
|
|
9
|
+
*
|
|
10
|
+
* Use the polymorphic `as` prop to render Shimmer *as* the element instead of
|
|
11
|
+
* wrapping it (no extra DOM node).
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <Shimmer>Thinking…</Shimmer>
|
|
16
|
+
* <Shimmer as="h1" className="text-2xl font-semibold">Generating report</Shimmer>
|
|
17
|
+
* <Shimmer active={isLoading}>Searching the web…</Shimmer>
|
|
18
|
+
* <Shimmer variant="surface" className="h-40 w-full rounded-xl bg-[var(--color-surface-sunken)]" />
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare const Shimmer: React.ForwardRefExoticComponent<ShimmerProps & React.RefAttributes<HTMLElement>>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { cn } from '../../../utils/cn.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Shimmer applies a CSS-only shimmer effect to text or any box — the "AI
|
|
6
|
+
* thinking" look you see in chat apps, plus a surface sweep for loading
|
|
7
|
+
* placeholders. Pure CSS (`background-clip: text` for text, a compositor-only
|
|
8
|
+
* `translateX` sweep for surfaces), so it is cheap and smooth, and it respects
|
|
9
|
+
* `prefers-reduced-motion` automatically.
|
|
10
|
+
*
|
|
11
|
+
* Use the polymorphic `as` prop to render Shimmer *as* the element instead of
|
|
12
|
+
* wrapping it (no extra DOM node).
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <Shimmer>Thinking…</Shimmer>
|
|
17
|
+
* <Shimmer as="h1" className="text-2xl font-semibold">Generating report</Shimmer>
|
|
18
|
+
* <Shimmer active={isLoading}>Searching the web…</Shimmer>
|
|
19
|
+
* <Shimmer variant="surface" className="h-40 w-full rounded-xl bg-[var(--color-surface-sunken)]" />
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
const Shimmer = React__default.forwardRef(({ as, variant = "text", active = true, duration, spread, color, highlightColor, className, style, children, ...rest }, ref) => {
|
|
23
|
+
const Component = (as !== null && as !== void 0 ? as : (variant === "surface" ? "div" : "span"));
|
|
24
|
+
const cssVars = {};
|
|
25
|
+
if (duration != null)
|
|
26
|
+
cssVars["--shimmer-duration"] = `${duration}s`;
|
|
27
|
+
if (spread != null)
|
|
28
|
+
cssVars["--shimmer-spread"] = `${spread}%`;
|
|
29
|
+
if (color != null)
|
|
30
|
+
cssVars["--shimmer-color"] = color;
|
|
31
|
+
if (highlightColor != null) {
|
|
32
|
+
cssVars[variant === "surface" ? "--shimmer-surface-highlight" : "--shimmer-highlight"] =
|
|
33
|
+
highlightColor;
|
|
34
|
+
}
|
|
35
|
+
return React__default.createElement(Component, {
|
|
36
|
+
ref,
|
|
37
|
+
className: cn(active && (variant === "surface" ? "flikk-shimmer-surface" : "flikk-shimmer-text"), className),
|
|
38
|
+
style: { ...cssVars, ...style },
|
|
39
|
+
...rest,
|
|
40
|
+
}, children);
|
|
41
|
+
});
|
|
42
|
+
Shimmer.displayName = "Shimmer";
|
|
43
|
+
|
|
44
|
+
export { Shimmer };
|