@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,127 @@
|
|
|
1
|
+
import 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
3
|
+
import { glslDeclarePI, glslRotate2, glslHashFloat } from '../shared/shaderNoise.glsl.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* GradientMesh fragment shader — adapted from paper-design/shaders' `mesh-gradient.ts`
|
|
7
|
+
* (https://github.com/paper-design/shaders, Apache License 2.0). Renamed from
|
|
8
|
+
* paper-design's "Mesh Gradient" to avoid a naming collision with this
|
|
9
|
+
* library's existing `MeshGradient` (an unrelated SVG-based deterministic
|
|
10
|
+
* seed→blob avatar generator).
|
|
11
|
+
*
|
|
12
|
+
* Simplified from the original: plain centered/aspect-corrected UV
|
|
13
|
+
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
14
|
+
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
15
|
+
* instead of pre-generated noise-texture sampling. This shader's own UV
|
|
16
|
+
* convention already matched a roughly unit-scale range, so its magic
|
|
17
|
+
* numbers (grain UV *1000, distance^3.5, etc.) port over unchanged.
|
|
18
|
+
*/
|
|
19
|
+
const gradientMeshFragmentShader = `#version 300 es
|
|
20
|
+
precision mediump float;
|
|
21
|
+
|
|
22
|
+
uniform float iTime;
|
|
23
|
+
uniform vec2 iResolution;
|
|
24
|
+
|
|
25
|
+
uniform vec4 u_colors[10];
|
|
26
|
+
uniform float u_colorsCount;
|
|
27
|
+
uniform float u_distortion;
|
|
28
|
+
uniform float u_swirl;
|
|
29
|
+
uniform float u_grainMixer;
|
|
30
|
+
uniform float u_grainOverlay;
|
|
31
|
+
uniform float u_speed;
|
|
32
|
+
|
|
33
|
+
out vec4 fragColor;
|
|
34
|
+
|
|
35
|
+
${glslDeclarePI}
|
|
36
|
+
${glslRotate2}
|
|
37
|
+
${glslHashFloat}
|
|
38
|
+
|
|
39
|
+
float hash21(vec2 p) {
|
|
40
|
+
return randomR(p);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
float valueNoise(vec2 st) {
|
|
44
|
+
vec2 i = floor(st);
|
|
45
|
+
vec2 f = fract(st);
|
|
46
|
+
float a = hash21(i);
|
|
47
|
+
float b = hash21(i + vec2(1.0, 0.0));
|
|
48
|
+
float c = hash21(i + vec2(0.0, 1.0));
|
|
49
|
+
float d = hash21(i + vec2(1.0, 1.0));
|
|
50
|
+
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
51
|
+
float x1 = mix(a, b, u.x);
|
|
52
|
+
float x2 = mix(c, d, u.x);
|
|
53
|
+
return mix(x1, x2, u.y);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
float noise(vec2 n, vec2 seedOffset) {
|
|
57
|
+
return valueNoise(n + seedOffset);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
vec2 getPosition(int i, float t) {
|
|
61
|
+
float a = float(i) * .37;
|
|
62
|
+
float b = .6 + fract(float(i) / 3.) * .9;
|
|
63
|
+
float c = .8 + fract(float(i + 1) / 4.);
|
|
64
|
+
float x = sin(t * b + a);
|
|
65
|
+
float y = cos(t * c + a * 1.5);
|
|
66
|
+
return .5 + .5 * vec2(x, y);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void main() {
|
|
70
|
+
vec2 uv = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);
|
|
71
|
+
uv += .5;
|
|
72
|
+
vec2 grainUV = uv * 1000.;
|
|
73
|
+
|
|
74
|
+
float grain = noise(grainUV, vec2(0.));
|
|
75
|
+
float mixerGrain = .4 * u_grainMixer * (grain - .5);
|
|
76
|
+
|
|
77
|
+
const float firstFrameOffset = 41.5;
|
|
78
|
+
float t = .5 * u_speed * iTime + firstFrameOffset;
|
|
79
|
+
|
|
80
|
+
float radius = smoothstep(0., 1., length(uv - .5));
|
|
81
|
+
float center = 1. - radius;
|
|
82
|
+
for (float i = 1.; i <= 2.; i++) {
|
|
83
|
+
uv.x += u_distortion * center / i * sin(t + i * .4 * smoothstep(.0, 1., uv.y)) * cos(.2 * t + i * 2.4 * smoothstep(.0, 1., uv.y));
|
|
84
|
+
uv.y += u_distortion * center / i * cos(t + i * 2. * smoothstep(.0, 1., uv.x));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
vec2 uvRotated = uv;
|
|
88
|
+
uvRotated -= vec2(.5);
|
|
89
|
+
float angle = 3. * u_swirl * radius;
|
|
90
|
+
uvRotated = rotate(uvRotated, -angle);
|
|
91
|
+
uvRotated += vec2(.5);
|
|
92
|
+
|
|
93
|
+
vec3 color = vec3(0.);
|
|
94
|
+
float opacity = 0.;
|
|
95
|
+
float totalWeight = 0.;
|
|
96
|
+
|
|
97
|
+
for (int i = 0; i < 10; i++) {
|
|
98
|
+
if (i >= int(u_colorsCount)) break;
|
|
99
|
+
vec2 pos = getPosition(i, t) + mixerGrain;
|
|
100
|
+
vec3 colorFraction = u_colors[i].rgb * u_colors[i].a;
|
|
101
|
+
float opacityFraction = u_colors[i].a;
|
|
102
|
+
float dist = length(uvRotated - pos);
|
|
103
|
+
dist = pow(dist, 3.5);
|
|
104
|
+
float weight = 1. / (dist + 1e-3);
|
|
105
|
+
color += colorFraction * weight;
|
|
106
|
+
opacity += opacityFraction * weight;
|
|
107
|
+
totalWeight += weight;
|
|
108
|
+
}
|
|
109
|
+
color /= max(1e-4, totalWeight);
|
|
110
|
+
opacity /= max(1e-4, totalWeight);
|
|
111
|
+
|
|
112
|
+
float grainOverlay = valueNoise(rotate(grainUV, 1.) + vec2(3.));
|
|
113
|
+
grainOverlay = mix(grainOverlay, valueNoise(rotate(grainUV, 2.) + vec2(-1.)), .5);
|
|
114
|
+
grainOverlay = pow(grainOverlay, 1.3);
|
|
115
|
+
float grainOverlayV = grainOverlay * 2. - 1.;
|
|
116
|
+
vec3 grainOverlayColor = vec3(step(0., grainOverlayV));
|
|
117
|
+
float grainOverlayStrength = u_grainOverlay * abs(grainOverlayV);
|
|
118
|
+
grainOverlayStrength = pow(grainOverlayStrength, .8);
|
|
119
|
+
color = mix(color, grainOverlayColor, .35 * grainOverlayStrength);
|
|
120
|
+
opacity += .5 * grainOverlayStrength;
|
|
121
|
+
opacity = clamp(opacity, 0., 1.);
|
|
122
|
+
|
|
123
|
+
fragColor = vec4(color, opacity);
|
|
124
|
+
}
|
|
125
|
+
`;
|
|
126
|
+
|
|
127
|
+
export { gradientMeshFragmentShader };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export declare const GRADIENT_MESH_MAX_COLORS = 10;
|
|
3
|
+
export interface GradientMeshProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/** Blob colors (hex, rgb(), named, or var(--...)), up to 10. Default: a 3-stop primary ramp. */
|
|
5
|
+
colors?: string[];
|
|
6
|
+
/** Domain-warp strength, 0-1+. Default: 0.4. */
|
|
7
|
+
distortion?: number;
|
|
8
|
+
/** Swirl/rotation strength, 0-1+. Default: 0.3. */
|
|
9
|
+
swirl?: number;
|
|
10
|
+
/** Grain influence on blob positions, 0-1. Default: 0.2. */
|
|
11
|
+
grainMixer?: number;
|
|
12
|
+
/** Post-composite grain overlay strength, 0-1. Default: 0.1. */
|
|
13
|
+
grainOverlay?: number;
|
|
14
|
+
/** Animation speed multiplier. Default: 1. */
|
|
15
|
+
speed?: number;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { GrainGradientProps } from "./GrainGradient.types";
|
|
3
|
+
/**
|
|
4
|
+
* Animated grainy color-band gradient — a shaped mask (corners/ripple/blob/
|
|
5
|
+
* sphere) blended through a colored ramp with a film-grain distortion.
|
|
6
|
+
* WebGL2-powered; falls back to a static CSS gradient when WebGL2 is
|
|
7
|
+
* unavailable or the user prefers reduced motion.
|
|
8
|
+
*/
|
|
9
|
+
export declare const GrainGradient: React.FC<GrainGradientProps>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useMemo, useRef } 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 { grainGradientFragmentShader } from './GrainGradient.shaders.js';
|
|
11
|
+
import { GRAIN_GRADIENT_MAX_COLORS, GRAIN_GRADIENT_SHAPES } from './GrainGradient.types.js';
|
|
12
|
+
|
|
13
|
+
const DEFAULT_COLORS = ["var(--color-primary-300)", "var(--color-primary)", "var(--color-primary-700)"];
|
|
14
|
+
const DEFAULT_COLOR_BACK = "var(--color-background)";
|
|
15
|
+
function useWebgl2Supported(disabled) {
|
|
16
|
+
return useMemo(() => {
|
|
17
|
+
if (disabled || typeof document === "undefined")
|
|
18
|
+
return false;
|
|
19
|
+
try {
|
|
20
|
+
return !!document.createElement("canvas").getContext("webgl2");
|
|
21
|
+
}
|
|
22
|
+
catch (_a) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}, [disabled]);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Animated grainy color-band gradient — a shaped mask (corners/ripple/blob/
|
|
29
|
+
* sphere) blended through a colored ramp with a film-grain distortion.
|
|
30
|
+
* WebGL2-powered; falls back to a static CSS gradient when WebGL2 is
|
|
31
|
+
* unavailable or the user prefers reduced motion.
|
|
32
|
+
*/
|
|
33
|
+
const GrainGradient = ({ colorBack = DEFAULT_COLOR_BACK, colors = DEFAULT_COLORS, shape = "blob", softness = 0.4, intensity = 0.3, noise = 0.15, speed = 1, className, style, ...props }) => {
|
|
34
|
+
var _a, _b;
|
|
35
|
+
const isClient = useIsClient();
|
|
36
|
+
const shouldReduceMotion = useReducedMotion();
|
|
37
|
+
const isDark = useDarkMode();
|
|
38
|
+
const webglSupported = useWebgl2Supported(!!shouldReduceMotion);
|
|
39
|
+
const safeColors = colors.length > 0 ? colors.slice(0, GRAIN_GRADIENT_MAX_COLORS) : DEFAULT_COLORS;
|
|
40
|
+
const resolvedColors = useMemo(() => resolveShaderColors(safeColors),
|
|
41
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
+
[safeColors.join("|"), isDark]);
|
|
43
|
+
const resolvedBack = useMemo(() => resolveShaderColor(colorBack),
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
+
[colorBack, isDark]);
|
|
46
|
+
const uniformsRef = useRef({});
|
|
47
|
+
for (let i = 0; i < GRAIN_GRADIENT_MAX_COLORS; i++) {
|
|
48
|
+
uniformsRef.current[`u_colors[${i}]`] =
|
|
49
|
+
(_b = (_a = resolvedColors[i]) !== null && _a !== void 0 ? _a : resolvedColors[resolvedColors.length - 1]) !== null && _b !== void 0 ? _b : [0, 0, 0, 0];
|
|
50
|
+
}
|
|
51
|
+
uniformsRef.current.u_colorsCount = resolvedColors.length;
|
|
52
|
+
uniformsRef.current.u_colorBack = resolvedBack;
|
|
53
|
+
uniformsRef.current.u_shape = GRAIN_GRADIENT_SHAPES[shape];
|
|
54
|
+
uniformsRef.current.u_softness = softness;
|
|
55
|
+
uniformsRef.current.u_intensity = intensity;
|
|
56
|
+
uniformsRef.current.u_noise = noise;
|
|
57
|
+
uniformsRef.current.u_speed = speed;
|
|
58
|
+
const fallbackGradient = `linear-gradient(135deg, ${safeColors.join(", ")}, ${colorBack})`;
|
|
59
|
+
return (jsx("div", { className: cn("absolute inset-0 overflow-hidden pointer-events-none select-none", className), style: style, "aria-hidden": "true", ...props, children: isClient && webglSupported ? (jsx(ShaderCanvas, { fragmentShader: grainGradientFragmentShader, uniformsRef: uniformsRef })) : (jsx("div", { className: "absolute inset-0", style: { background: fallbackGradient } })) }));
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { GrainGradient };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GrainGradient fragment shader — adapted from paper-design/shaders'
|
|
3
|
+
* `grain-gradient.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.
|
|
10
|
+
*
|
|
11
|
+
* Shape variants trimmed for v1: the original ships 7 (wave, dots, truchet,
|
|
12
|
+
* corners, ripple, blob, sphere) — this port ships 4 (corners, ripple, blob,
|
|
13
|
+
* sphere), the ones whose shape-space UV mapping is simplest to port onto a
|
|
14
|
+
* plain object-space UV without paper-design's separate pattern-tiling fit
|
|
15
|
+
* engine. wave/dots/truchet may be added later as a follow-up.
|
|
16
|
+
*/
|
|
17
|
+
export declare const grainGradientFragmentShader = "#version 300 es\nprecision lowp float;\n\nuniform float iTime;\nuniform vec2 iResolution;\n\nuniform vec4 u_colorBack;\nuniform vec4 u_colors[7];\nuniform float u_colorsCount;\nuniform float u_softness;\nuniform float u_intensity;\nuniform float u_noise;\nuniform float u_shape;\nuniform float u_speed;\n\nout vec4 fragColor;\n\n\nconst float PI = 3.14159265359;\nconst float TWO_PI = 6.28318530718;\n\n\nvec2 rotate(vec2 v, float angle) {\n float s = sin(angle);\n float c = cos(angle);\n return mat2(c, -s, s, c) * v;\n}\n\n\nfloat randomR(vec2 st) {\n return fract(sin(dot(st, vec2(12.9898, 78.233))) * 43758.5453123);\n}\n\n\nvec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec2 mod289(vec2 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }\nvec3 permute(vec3 x) { return mod289(((x * 34.0) + 1.0) * x); }\n\nfloat snoise(vec2 v) {\n const vec4 C = vec4(0.211324865405187, 0.366025403784439,\n -0.577350269189626, 0.024390243902439);\n vec2 i = floor(v + dot(v, C.yy));\n vec2 x0 = v - i + dot(i, C.xx);\n\n vec2 i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\n vec4 x12 = x0.xyxy + C.xxzz;\n x12.xy -= i1;\n\n i = mod289(i);\n vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0));\n\n vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0);\n m = m * m;\n m = m * m;\n\n vec3 x = 2.0 * fract(p * C.www) - 1.0;\n vec3 h = abs(x) - 0.5;\n vec3 ox = floor(x + 0.5);\n vec3 a0 = x - ox;\n\n m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h);\n\n vec3 g;\n g.x = a0.x * x0.x + h.x * x0.y;\n g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n return 130.0 * dot(m, g);\n}\n\n\nfloat valueNoiseR(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = randomR(i);\n float b = randomR(i + vec2(1.0, 0.0));\n float c = randomR(i + vec2(0.0, 1.0));\n float d = randomR(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n float x1 = mix(a, b, u.x);\n float x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\n\nvec4 fbmR(vec2 n0, vec2 n1, vec2 n2, vec2 n3) {\n float amplitude = 0.2;\n vec4 total = vec4(0.);\n for (int i = 0; i < 3; i++) {\n n0 = rotate(n0, 0.3);\n n1 = rotate(n1, 0.3);\n n2 = rotate(n2, 0.3);\n n3 = rotate(n3, 0.3);\n total.x += valueNoiseR(n0) * amplitude;\n total.y += valueNoiseR(n1) * amplitude;\n total.z += valueNoiseR(n2) * amplitude;\n total.w += valueNoiseR(n3) * amplitude;\n n0 *= 1.99;\n n1 *= 1.99;\n n2 *= 1.99;\n n3 *= 1.99;\n amplitude *= 0.6;\n }\n return total;\n}\n\nvoid main() {\n const float firstFrameOffset = 7.;\n float t = .1 * u_speed * iTime + firstFrameOffset;\n\n vec2 shape_uv = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);\n vec2 grain_uv = shape_uv * .7;\n\n float shape = 0.;\n if (u_shape < 1.5) {\n // corners\n shape_uv *= .6;\n vec2 outer = vec2(.5);\n vec2 bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * sin(5.25 * t)));\n vec2 tr = smoothstep(vec2(0.), outer, 1. - shape_uv);\n shape = 1. - bl.x * bl.y * tr.x * tr.y;\n shape_uv = -shape_uv;\n bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * cos(5.25 * t)));\n tr = smoothstep(vec2(0.), outer, 1. - shape_uv);\n shape -= bl.x * bl.y * tr.x * tr.y;\n shape = 1. - smoothstep(0., 1., shape);\n } else if (u_shape < 2.5) {\n // ripple\n shape_uv *= 2.;\n float dist = length(.4 * shape_uv);\n float waves = sin(pow(dist, 1.2) * 5. - 3. * t) * .5 + .5;\n shape = waves;\n } else if (u_shape < 3.5) {\n // blob\n float t2 = t * 2.;\n vec2 f1_traj = .25 * vec2(1.3 * sin(t2), .2 + 1.3 * cos(.6 * t2 + 4.));\n vec2 f2_traj = .2 * vec2(1.2 * sin(-t2), 1.3 * sin(1.6 * t2));\n vec2 f3_traj = .25 * vec2(1.7 * cos(-.6 * t2), cos(-1.6 * t2));\n vec2 f4_traj = .3 * vec2(1.4 * cos(.8 * t2), 1.2 * sin(-.6 * t2 - 3.));\n shape = .5 * pow(1. - clamp(length(shape_uv + f1_traj), 0., 1.), 5.);\n shape += .5 * pow(1. - clamp(length(shape_uv + f2_traj), 0., 1.), 5.);\n shape += .5 * pow(1. - clamp(length(shape_uv + f3_traj), 0., 1.), 5.);\n shape += .5 * pow(1. - clamp(length(shape_uv + f4_traj), 0., 1.), 5.);\n shape = smoothstep(.0, .9, shape);\n float edge = smoothstep(.25, .3, shape);\n shape = mix(.0, shape, edge);\n } else {\n // sphere\n shape_uv *= 2.;\n float d = 1. - pow(length(shape_uv), 2.);\n vec3 pos = vec3(shape_uv, sqrt(max(d, 0.)));\n vec3 lightPos = normalize(vec3(cos(1.5 * t), .8, sin(1.25 * t)));\n shape = .5 + .5 * dot(lightPos, pos);\n shape *= step(0., d);\n }\n\n float baseNoise = snoise(grain_uv * .5);\n vec4 fbmVals = fbmR(\n .002 * grain_uv + 10.,\n .003 * grain_uv,\n .001 * grain_uv,\n rotate(.4 * grain_uv, 2.)\n );\n float grainDist = baseNoise * snoise(grain_uv * .2) - fbmVals.x - fbmVals.y;\n float rawNoise = .75 * baseNoise - fbmVals.w - fbmVals.z;\n float noiseVal = clamp(rawNoise, 0., 1.);\n\n shape += u_intensity * 2. / u_colorsCount * (grainDist + .5);\n shape += u_noise * 10. / u_colorsCount * noiseVal;\n\n float aa = fwidth(shape);\n shape = clamp(shape - .5 / u_colorsCount, 0., 1.);\n float totalShape = smoothstep(0., u_softness + 2. * aa, clamp(shape * u_colorsCount, 0., 1.));\n float mixer = shape * (u_colorsCount - 1.);\n\n int cntStop = int(u_colorsCount) - 1;\n vec4 gradient = u_colors[0];\n gradient.rgb *= gradient.a;\n for (int i = 1; i < 7; i++) {\n if (i > cntStop) break;\n float localT = clamp(mixer - float(i - 1), 0., 1.);\n localT = smoothstep(.5 - .5 * u_softness - aa, .5 + .5 * u_softness + aa, localT);\n vec4 c = u_colors[i];\n c.rgb *= c.a;\n gradient = mix(gradient, c, localT);\n }\n\n vec3 color = gradient.rgb * totalShape;\n float opacity = gradient.a * totalShape;\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n color = color + bgColor * (1.0 - opacity);\n opacity = opacity + u_colorBack.a * (1.0 - opacity);\n\n fragColor = vec4(color, opacity);\n}\n";
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
3
|
+
import { glslDeclarePI, glslRotate2, glslHashFloat, glslSimplexNoise2D } from '../shared/shaderNoise.glsl.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* GrainGradient fragment shader — adapted from paper-design/shaders'
|
|
7
|
+
* `grain-gradient.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.
|
|
14
|
+
*
|
|
15
|
+
* Shape variants trimmed for v1: the original ships 7 (wave, dots, truchet,
|
|
16
|
+
* corners, ripple, blob, sphere) — this port ships 4 (corners, ripple, blob,
|
|
17
|
+
* sphere), the ones whose shape-space UV mapping is simplest to port onto a
|
|
18
|
+
* plain object-space UV without paper-design's separate pattern-tiling fit
|
|
19
|
+
* engine. wave/dots/truchet may be added later as a follow-up.
|
|
20
|
+
*/
|
|
21
|
+
const grainGradientFragmentShader = `#version 300 es
|
|
22
|
+
precision lowp float;
|
|
23
|
+
|
|
24
|
+
uniform float iTime;
|
|
25
|
+
uniform vec2 iResolution;
|
|
26
|
+
|
|
27
|
+
uniform vec4 u_colorBack;
|
|
28
|
+
uniform vec4 u_colors[7];
|
|
29
|
+
uniform float u_colorsCount;
|
|
30
|
+
uniform float u_softness;
|
|
31
|
+
uniform float u_intensity;
|
|
32
|
+
uniform float u_noise;
|
|
33
|
+
uniform float u_shape;
|
|
34
|
+
uniform float u_speed;
|
|
35
|
+
|
|
36
|
+
out vec4 fragColor;
|
|
37
|
+
|
|
38
|
+
${glslDeclarePI}
|
|
39
|
+
${glslRotate2}
|
|
40
|
+
${glslHashFloat}
|
|
41
|
+
${glslSimplexNoise2D}
|
|
42
|
+
|
|
43
|
+
float valueNoiseR(vec2 st) {
|
|
44
|
+
vec2 i = floor(st);
|
|
45
|
+
vec2 f = fract(st);
|
|
46
|
+
float a = randomR(i);
|
|
47
|
+
float b = randomR(i + vec2(1.0, 0.0));
|
|
48
|
+
float c = randomR(i + vec2(0.0, 1.0));
|
|
49
|
+
float d = randomR(i + vec2(1.0, 1.0));
|
|
50
|
+
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
51
|
+
float x1 = mix(a, b, u.x);
|
|
52
|
+
float x2 = mix(c, d, u.x);
|
|
53
|
+
return mix(x1, x2, u.y);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
vec4 fbmR(vec2 n0, vec2 n1, vec2 n2, vec2 n3) {
|
|
57
|
+
float amplitude = 0.2;
|
|
58
|
+
vec4 total = vec4(0.);
|
|
59
|
+
for (int i = 0; i < 3; i++) {
|
|
60
|
+
n0 = rotate(n0, 0.3);
|
|
61
|
+
n1 = rotate(n1, 0.3);
|
|
62
|
+
n2 = rotate(n2, 0.3);
|
|
63
|
+
n3 = rotate(n3, 0.3);
|
|
64
|
+
total.x += valueNoiseR(n0) * amplitude;
|
|
65
|
+
total.y += valueNoiseR(n1) * amplitude;
|
|
66
|
+
total.z += valueNoiseR(n2) * amplitude;
|
|
67
|
+
total.w += valueNoiseR(n3) * amplitude;
|
|
68
|
+
n0 *= 1.99;
|
|
69
|
+
n1 *= 1.99;
|
|
70
|
+
n2 *= 1.99;
|
|
71
|
+
n3 *= 1.99;
|
|
72
|
+
amplitude *= 0.6;
|
|
73
|
+
}
|
|
74
|
+
return total;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
void main() {
|
|
78
|
+
const float firstFrameOffset = 7.;
|
|
79
|
+
float t = .1 * u_speed * iTime + firstFrameOffset;
|
|
80
|
+
|
|
81
|
+
vec2 shape_uv = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);
|
|
82
|
+
vec2 grain_uv = shape_uv * .7;
|
|
83
|
+
|
|
84
|
+
float shape = 0.;
|
|
85
|
+
if (u_shape < 1.5) {
|
|
86
|
+
// corners
|
|
87
|
+
shape_uv *= .6;
|
|
88
|
+
vec2 outer = vec2(.5);
|
|
89
|
+
vec2 bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * sin(5.25 * t)));
|
|
90
|
+
vec2 tr = smoothstep(vec2(0.), outer, 1. - shape_uv);
|
|
91
|
+
shape = 1. - bl.x * bl.y * tr.x * tr.y;
|
|
92
|
+
shape_uv = -shape_uv;
|
|
93
|
+
bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * cos(5.25 * t)));
|
|
94
|
+
tr = smoothstep(vec2(0.), outer, 1. - shape_uv);
|
|
95
|
+
shape -= bl.x * bl.y * tr.x * tr.y;
|
|
96
|
+
shape = 1. - smoothstep(0., 1., shape);
|
|
97
|
+
} else if (u_shape < 2.5) {
|
|
98
|
+
// ripple
|
|
99
|
+
shape_uv *= 2.;
|
|
100
|
+
float dist = length(.4 * shape_uv);
|
|
101
|
+
float waves = sin(pow(dist, 1.2) * 5. - 3. * t) * .5 + .5;
|
|
102
|
+
shape = waves;
|
|
103
|
+
} else if (u_shape < 3.5) {
|
|
104
|
+
// blob
|
|
105
|
+
float t2 = t * 2.;
|
|
106
|
+
vec2 f1_traj = .25 * vec2(1.3 * sin(t2), .2 + 1.3 * cos(.6 * t2 + 4.));
|
|
107
|
+
vec2 f2_traj = .2 * vec2(1.2 * sin(-t2), 1.3 * sin(1.6 * t2));
|
|
108
|
+
vec2 f3_traj = .25 * vec2(1.7 * cos(-.6 * t2), cos(-1.6 * t2));
|
|
109
|
+
vec2 f4_traj = .3 * vec2(1.4 * cos(.8 * t2), 1.2 * sin(-.6 * t2 - 3.));
|
|
110
|
+
shape = .5 * pow(1. - clamp(length(shape_uv + f1_traj), 0., 1.), 5.);
|
|
111
|
+
shape += .5 * pow(1. - clamp(length(shape_uv + f2_traj), 0., 1.), 5.);
|
|
112
|
+
shape += .5 * pow(1. - clamp(length(shape_uv + f3_traj), 0., 1.), 5.);
|
|
113
|
+
shape += .5 * pow(1. - clamp(length(shape_uv + f4_traj), 0., 1.), 5.);
|
|
114
|
+
shape = smoothstep(.0, .9, shape);
|
|
115
|
+
float edge = smoothstep(.25, .3, shape);
|
|
116
|
+
shape = mix(.0, shape, edge);
|
|
117
|
+
} else {
|
|
118
|
+
// sphere
|
|
119
|
+
shape_uv *= 2.;
|
|
120
|
+
float d = 1. - pow(length(shape_uv), 2.);
|
|
121
|
+
vec3 pos = vec3(shape_uv, sqrt(max(d, 0.)));
|
|
122
|
+
vec3 lightPos = normalize(vec3(cos(1.5 * t), .8, sin(1.25 * t)));
|
|
123
|
+
shape = .5 + .5 * dot(lightPos, pos);
|
|
124
|
+
shape *= step(0., d);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
float baseNoise = snoise(grain_uv * .5);
|
|
128
|
+
vec4 fbmVals = fbmR(
|
|
129
|
+
.002 * grain_uv + 10.,
|
|
130
|
+
.003 * grain_uv,
|
|
131
|
+
.001 * grain_uv,
|
|
132
|
+
rotate(.4 * grain_uv, 2.)
|
|
133
|
+
);
|
|
134
|
+
float grainDist = baseNoise * snoise(grain_uv * .2) - fbmVals.x - fbmVals.y;
|
|
135
|
+
float rawNoise = .75 * baseNoise - fbmVals.w - fbmVals.z;
|
|
136
|
+
float noiseVal = clamp(rawNoise, 0., 1.);
|
|
137
|
+
|
|
138
|
+
shape += u_intensity * 2. / u_colorsCount * (grainDist + .5);
|
|
139
|
+
shape += u_noise * 10. / u_colorsCount * noiseVal;
|
|
140
|
+
|
|
141
|
+
float aa = fwidth(shape);
|
|
142
|
+
shape = clamp(shape - .5 / u_colorsCount, 0., 1.);
|
|
143
|
+
float totalShape = smoothstep(0., u_softness + 2. * aa, clamp(shape * u_colorsCount, 0., 1.));
|
|
144
|
+
float mixer = shape * (u_colorsCount - 1.);
|
|
145
|
+
|
|
146
|
+
int cntStop = int(u_colorsCount) - 1;
|
|
147
|
+
vec4 gradient = u_colors[0];
|
|
148
|
+
gradient.rgb *= gradient.a;
|
|
149
|
+
for (int i = 1; i < 7; i++) {
|
|
150
|
+
if (i > cntStop) break;
|
|
151
|
+
float localT = clamp(mixer - float(i - 1), 0., 1.);
|
|
152
|
+
localT = smoothstep(.5 - .5 * u_softness - aa, .5 + .5 * u_softness + aa, localT);
|
|
153
|
+
vec4 c = u_colors[i];
|
|
154
|
+
c.rgb *= c.a;
|
|
155
|
+
gradient = mix(gradient, c, localT);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
vec3 color = gradient.rgb * totalShape;
|
|
159
|
+
float opacity = gradient.a * totalShape;
|
|
160
|
+
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
161
|
+
color = color + bgColor * (1.0 - opacity);
|
|
162
|
+
opacity = opacity + u_colorBack.a * (1.0 - opacity);
|
|
163
|
+
|
|
164
|
+
fragColor = vec4(color, opacity);
|
|
165
|
+
}
|
|
166
|
+
`;
|
|
167
|
+
|
|
168
|
+
export { grainGradientFragmentShader };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export declare const GRAIN_GRADIENT_MAX_COLORS = 7;
|
|
3
|
+
export declare const GRAIN_GRADIENT_SHAPES: {
|
|
4
|
+
readonly corners: 1;
|
|
5
|
+
readonly ripple: 2;
|
|
6
|
+
readonly blob: 3;
|
|
7
|
+
readonly sphere: 4;
|
|
8
|
+
};
|
|
9
|
+
export type GrainGradientShape = keyof typeof GRAIN_GRADIENT_SHAPES;
|
|
10
|
+
export interface GrainGradientProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
11
|
+
/** Background CSS color. Default: 'var(--color-background)'. */
|
|
12
|
+
colorBack?: string;
|
|
13
|
+
/** Gradient ramp colors, up to 7. Default: a 3-stop primary ramp. */
|
|
14
|
+
colors?: string[];
|
|
15
|
+
/** Underlying animated shape mask. Default: 'blob'. */
|
|
16
|
+
shape?: GrainGradientShape;
|
|
17
|
+
/** Blend softness between color stops, 0-1. Default: 0.4. */
|
|
18
|
+
softness?: number;
|
|
19
|
+
/** Grain-driven color-band distortion, 0-1+. Default: 0.3. */
|
|
20
|
+
intensity?: number;
|
|
21
|
+
/** Fine grain texture strength, 0-1. Default: 0.15. */
|
|
22
|
+
noise?: number;
|
|
23
|
+
/** Animation speed multiplier. Default: 1. */
|
|
24
|
+
speed?: number;
|
|
25
|
+
className?: string;
|
|
26
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { HalftoneCmykProps } from "./HalftoneCmyk.types";
|
|
3
|
+
/**
|
|
4
|
+
* CMYK halftone image filter — separates a source image into 4 classic
|
|
5
|
+
* print-screen-angled ink dot layers (cyan/magenta/yellow/black). WebGL2-
|
|
6
|
+
* powered; falls back to the plain source image (via `object-fit: cover`)
|
|
7
|
+
* when WebGL2 is unavailable. The most GPU-expensive effect in this
|
|
8
|
+
* library — avoid using it as a full-page background at low `size` values.
|
|
9
|
+
*/
|
|
10
|
+
export declare const HalftoneCmyk: React.FC<HalftoneCmykProps>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { useState, useMemo, useRef, useCallback } from 'react';
|
|
4
|
+
import { useIsClient } from '../../../hooks/useIsClient.js';
|
|
5
|
+
import 'motion/react';
|
|
6
|
+
import { useDarkMode } from '../../../hooks/useDarkMode.js';
|
|
7
|
+
import { cn } from '../../../utils/cn.js';
|
|
8
|
+
import { ShaderCanvas } from '../shared/ShaderCanvas/ShaderCanvas.js';
|
|
9
|
+
import { resolveShaderColor } from '../shared/resolveShaderColor.js';
|
|
10
|
+
import { halftoneCmykFragmentShader } from './HalftoneCmyk.shaders.js';
|
|
11
|
+
|
|
12
|
+
const DEFAULT_COLOR_BACK = "var(--color-background)";
|
|
13
|
+
const DEFAULT_COLOR_C = "#00b7eb";
|
|
14
|
+
const DEFAULT_COLOR_M = "#e4007c";
|
|
15
|
+
const DEFAULT_COLOR_Y = "#ffe800";
|
|
16
|
+
const DEFAULT_COLOR_K = "var(--color-text-primary)";
|
|
17
|
+
function useWebgl2Supported() {
|
|
18
|
+
return useMemo(() => {
|
|
19
|
+
if (typeof document === "undefined")
|
|
20
|
+
return false;
|
|
21
|
+
try {
|
|
22
|
+
return !!document.createElement("canvas").getContext("webgl2");
|
|
23
|
+
}
|
|
24
|
+
catch (_a) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}, []);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* CMYK halftone image filter — separates a source image into 4 classic
|
|
31
|
+
* print-screen-angled ink dot layers (cyan/magenta/yellow/black). WebGL2-
|
|
32
|
+
* powered; falls back to the plain source image (via `object-fit: cover`)
|
|
33
|
+
* when WebGL2 is unavailable. The most GPU-expensive effect in this
|
|
34
|
+
* library — avoid using it as a full-page background at low `size` values.
|
|
35
|
+
*/
|
|
36
|
+
const HalftoneCmyk = ({ image, colorBack = DEFAULT_COLOR_BACK, colorC = DEFAULT_COLOR_C, colorM = DEFAULT_COLOR_M, colorY = DEFAULT_COLOR_Y, colorK = DEFAULT_COLOR_K, size = 0.6, contrast = 1, softness = 0.3, gridNoise = 0.1, grainSize = 0.5, grainMixer = 0, grainOverlay = 0, floodC = 0, floodM = 0, floodY = 0, floodK = 0, gainC = 0, gainM = 0, gainY = 0, gainK = 0, className, style, ...props }) => {
|
|
37
|
+
const isClient = useIsClient();
|
|
38
|
+
const isDark = useDarkMode();
|
|
39
|
+
const webglSupported = useWebgl2Supported();
|
|
40
|
+
const [imageAspectRatio, setImageAspectRatio] = useState(16 / 9);
|
|
41
|
+
const resolvedBack = useMemo(() => resolveShaderColor(colorBack), [colorBack, isDark]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
42
|
+
const resolvedC = useMemo(() => resolveShaderColor(colorC), [colorC, isDark]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
43
|
+
const resolvedM = useMemo(() => resolveShaderColor(colorM), [colorM, isDark]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
44
|
+
const resolvedY = useMemo(() => resolveShaderColor(colorY), [colorY, isDark]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
45
|
+
const resolvedK = useMemo(() => resolveShaderColor(colorK), [colorK, isDark]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
46
|
+
const texturesRef = useRef({ u_image: image });
|
|
47
|
+
texturesRef.current.u_image = image;
|
|
48
|
+
const handleTextureLoad = useCallback((name, aspectRatio) => {
|
|
49
|
+
if (name === "u_image")
|
|
50
|
+
setImageAspectRatio(aspectRatio);
|
|
51
|
+
}, []);
|
|
52
|
+
const uniformsRef = useRef({});
|
|
53
|
+
uniformsRef.current.u_colorBack = resolvedBack;
|
|
54
|
+
uniformsRef.current.u_colorC = resolvedC;
|
|
55
|
+
uniformsRef.current.u_colorM = resolvedM;
|
|
56
|
+
uniformsRef.current.u_colorY = resolvedY;
|
|
57
|
+
uniformsRef.current.u_colorK = resolvedK;
|
|
58
|
+
uniformsRef.current.u_imageAspectRatio = imageAspectRatio;
|
|
59
|
+
uniformsRef.current.u_size = size;
|
|
60
|
+
uniformsRef.current.u_contrast = contrast;
|
|
61
|
+
uniformsRef.current.u_softness = softness;
|
|
62
|
+
uniformsRef.current.u_gridNoise = gridNoise;
|
|
63
|
+
uniformsRef.current.u_grainSize = grainSize;
|
|
64
|
+
uniformsRef.current.u_grainMixer = grainMixer;
|
|
65
|
+
uniformsRef.current.u_grainOverlay = grainOverlay;
|
|
66
|
+
uniformsRef.current.u_floodC = floodC;
|
|
67
|
+
uniformsRef.current.u_floodM = floodM;
|
|
68
|
+
uniformsRef.current.u_floodY = floodY;
|
|
69
|
+
uniformsRef.current.u_floodK = floodK;
|
|
70
|
+
uniformsRef.current.u_gainC = gainC;
|
|
71
|
+
uniformsRef.current.u_gainM = gainM;
|
|
72
|
+
uniformsRef.current.u_gainY = gainY;
|
|
73
|
+
uniformsRef.current.u_gainK = gainK;
|
|
74
|
+
const imageSrc = typeof image === "string" ? image : image.src;
|
|
75
|
+
return (jsx("div", { className: cn("absolute inset-0 overflow-hidden pointer-events-none select-none", className), style: style, "aria-hidden": "true", ...props, children: isClient && webglSupported ? (jsx(ShaderCanvas, { fragmentShader: halftoneCmykFragmentShader, uniformsRef: uniformsRef, texturesRef: texturesRef, onTextureLoad: handleTextureLoad })) : (jsx("img", { src: imageSrc, alt: "", className: "absolute inset-0 w-full h-full object-cover" })) }));
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export { HalftoneCmyk };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HalftoneCmyk fragment shader — adapted from paper-design/shaders'
|
|
3
|
+
* `halftone-cmyk.ts` (https://github.com/paper-design/shaders, Apache
|
|
4
|
+
* License 2.0). An image filter: separates a source image into 4
|
|
5
|
+
* classic-print-screen-angled CMYK halftone dot layers.
|
|
6
|
+
*
|
|
7
|
+
* Highest-complexity/cost effect in this port (up to ~36 texture reads per
|
|
8
|
+
* pixel across 4 channels × a 3×3 cell neighborhood) — build/verify last,
|
|
9
|
+
* most scrutiny, and keep the default `size` conservative.
|
|
10
|
+
*
|
|
11
|
+
* Trimmed for v1: paper-design's `ink`/`sharp` modes are omitted — this
|
|
12
|
+
* ships the `dots` mode only (separate, discrete halftone dots; the
|
|
13
|
+
* classic print look), which also lets this port drop the entire
|
|
14
|
+
* single-pixel-sample "sharp" code path and its `RGBAtoCMYK`/contrast
|
|
15
|
+
* machinery, cutting real per-pixel cost, not just API surface.
|
|
16
|
+
*
|
|
17
|
+
* Simplified from the original: image UV computed via the shared
|
|
18
|
+
* `getImageCoverUV` cover-fit helper (see shared/imageUV.glsl.ts) instead of
|
|
19
|
+
* paper-design's ShaderSizingParams fit engine; pure-hash GLSL instead of
|
|
20
|
+
* pre-generated noise-texture sampling.
|
|
21
|
+
*/
|
|
22
|
+
export declare const halftoneCmykFragmentShader = "#version 300 es\nprecision mediump float;\n\nuniform vec2 iResolution;\n\nuniform sampler2D u_image;\nuniform float u_imageAspectRatio;\n\nuniform vec4 u_colorBack;\nuniform vec4 u_colorC;\nuniform vec4 u_colorM;\nuniform vec4 u_colorY;\nuniform vec4 u_colorK;\nuniform float u_size;\nuniform float u_contrast;\nuniform float u_grainSize;\nuniform float u_grainMixer;\nuniform float u_grainOverlay;\nuniform float u_gridNoise;\nuniform float u_softness;\nuniform float u_floodC;\nuniform float u_floodM;\nuniform float u_floodY;\nuniform float u_floodK;\nuniform float u_gainC;\nuniform float u_gainM;\nuniform float u_gainY;\nuniform float u_gainK;\n\nout vec4 fragColor;\n\nconst float shiftC = -.5;\nconst float shiftM = -.25;\nconst float shiftY = .2;\nconst float shiftK = 0.;\n\nconst float cosC = 0.9659258;\nconst float sinC = 0.2588190;\nconst float cosM = 0.2588190;\nconst float sinM = 0.9659258;\nconst float cosY = 1.0;\nconst float sinY = 0.0;\nconst float cosK = 0.7071068;\nconst float sinK = 0.7071068;\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\nvec2 getImageCoverUV(vec2 fragUV, vec2 resolution, float imageAspectRatio) {\n float containerAspect = resolution.x / resolution.y;\n // Container wider (relative to its height) than the image: sample a\n // narrower vertical slice of the image (crop top/bottom) so it fills the\n // container width with no letterboxing. Container narrower/taller than\n // the image: sample a narrower horizontal slice (crop left/right) instead.\n vec2 scale = containerAspect > imageAspectRatio\n ? vec2(1.0, imageAspectRatio / containerAspect)\n : vec2(containerAspect / imageAspectRatio, 1.0);\n return (fragUV - 0.5) * scale + 0.5;\n}\n\n\nvec3 hash23(vec2 p) {\n vec3 p3 = fract(vec3(p.xyx) * vec3(0.3183099, 0.3678794, 0.3141592)) + 0.1;\n p3 += dot(p3, p3.yzx + 19.19);\n return fract(vec3(p3.x * p3.y, p3.y * p3.z, p3.z * p3.x));\n}\n\nfloat sst(float edge0, float edge1, float x) {\n return smoothstep(edge0, edge1, x);\n}\n\nvec3 valueNoise3(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n vec3 a = hash23(i);\n vec3 b = hash23(i + vec2(1.0, 0.0));\n vec3 c = hash23(i + vec2(0.0, 1.0));\n vec3 d = hash23(i + vec2(1.0, 1.0));\n vec2 u = f * f * (3.0 - 2.0 * f);\n vec3 x1 = mix(a, b, u.x);\n vec3 x2 = mix(c, d, u.x);\n return mix(x1, x2, u.y);\n}\n\nfloat getUvFrame(vec2 uv, vec2 pad) {\n float left = smoothstep(-pad.x, 0., uv.x);\n float right = smoothstep(1. + pad.x, 1., uv.x);\n float bottom = smoothstep(-pad.y, 0., uv.y);\n float top = smoothstep(1. + pad.y, 1., uv.y);\n return left * right * bottom * top;\n}\n\nfloat getCyan(vec4 rgba) {\n vec3 c = clamp((rgba.rgb - 0.5) * u_contrast + 0.5, 0.0, 1.0);\n float maxRGB = max(max(c.r, c.g), c.b);\n return (maxRGB > 1e-5 ? (maxRGB - c.r) / maxRGB : 0.) * rgba.a;\n}\nfloat getMagenta(vec4 rgba) {\n vec3 c = clamp((rgba.rgb - 0.5) * u_contrast + 0.5, 0.0, 1.0);\n float maxRGB = max(max(c.r, c.g), c.b);\n return (maxRGB > 1e-5 ? (maxRGB - c.g) / maxRGB : 0.) * rgba.a;\n}\nfloat getYellow(vec4 rgba) {\n vec3 c = clamp((rgba.rgb - 0.5) * u_contrast + 0.5, 0.0, 1.0);\n float maxRGB = max(max(c.r, c.g), c.b);\n return (maxRGB > 1e-5 ? (maxRGB - c.b) / maxRGB : 0.) * rgba.a;\n}\nfloat getBlack(vec4 rgba) {\n vec3 c = clamp((rgba.rgb - 0.5) * u_contrast + 0.5, 0.0, 1.0);\n return (1. - max(max(c.r, c.g), c.b)) * rgba.a;\n}\n\nvec2 cellCenterPos(vec2 uv, vec2 cellOffset, float channelIdx) {\n vec2 cellCenter = floor(uv) + .5 + cellOffset;\n return cellCenter + (randomGB(cellCenter + channelIdx * 50.) - .5) * u_gridNoise;\n}\n\nvec2 gridToImageUV(vec2 cellCenter, float cosA, float sinA, float shift, vec2 pad) {\n vec2 uvGridToImage = mat2(cosA, -sinA, sinA, cosA) * (cellCenter - shift);\n return uvGridToImage * pad + 0.5;\n}\n\nvoid colorMask(vec2 pos, vec2 cellCenter, float rad, float transparency, float grain, float channelAddon, float channelgain, float generalComp, inout float outMask) {\n float dist = length(pos - cellCenter);\n\n float radius = rad;\n radius *= (1. + generalComp);\n radius += (.15 + channelgain * radius);\n radius = max(0., radius);\n radius = mix(0., radius, transparency);\n radius += channelAddon;\n radius *= (1. - grain);\n\n float mask = 1. - sst(0., radius, dist);\n mask = sst(.5 - .5 * u_softness, .51 + .49 * u_softness, mask);\n mask *= mix(1., mix(.5, 1., 1.5 * radius), u_softness);\n outMask += mask;\n}\n\nvec3 applyInk(vec3 paper, vec3 inkColor, float cov) {\n vec3 inkEffect = mix(vec3(1.0), inkColor, clamp(cov, 0.0, 1.0));\n return paper * inkEffect;\n}\n\nvoid main() {\n vec2 fragUV = gl_FragCoord.xy / iResolution.xy;\n vec2 uv = getImageCoverUV(fragUV, iResolution, u_imageAspectRatio);\n\n float cellsPerSide = mix(400.0, 7.0, pow(u_size, 0.7));\n float cellSizeY = 1.0 / cellsPerSide;\n vec2 pad = cellSizeY * vec2(1.0 / u_imageAspectRatio, 1.0);\n vec2 uvGrid = (uv - .5) / pad;\n float insideImageBox = getUvFrame(uv, pad);\n\n float generalComp = .1 * u_softness + .1 * u_gridNoise + .15;\n\n vec2 uvC = mat2(cosC, sinC, -sinC, cosC) * uvGrid + shiftC;\n vec2 uvM = mat2(cosM, sinM, -sinM, cosM) * uvGrid + shiftM;\n vec2 uvY = mat2(cosY, sinY, -sinY, cosY) * uvGrid + shiftY;\n vec2 uvK = mat2(cosK, sinK, -sinK, cosK) * uvGrid + shiftK;\n\n vec2 grainSize = mix(2000., 200., u_grainSize) * vec2(1., 1. / u_imageAspectRatio);\n vec2 grainUV = (fragUV - .5) * grainSize + .5;\n vec3 noiseValues = valueNoise3(grainUV);\n float grain = sst(.55, 1., noiseValues.r);\n grain *= u_grainMixer;\n\n vec4 outMask = vec4(0.);\n\n for (int dy = -1; dy <= 1; dy++) {\n for (int dx = -1; dx <= 1; dx++) {\n vec2 cellOffset = vec2(float(dx), float(dy));\n\n vec2 cellCenterC = cellCenterPos(uvC, cellOffset, 0.);\n vec4 texC = texture(u_image, gridToImageUV(cellCenterC, cosC, sinC, shiftC, pad));\n colorMask(uvC, cellCenterC, getCyan(texC), insideImageBox * texC.a, grain, u_floodC, u_gainC, generalComp, outMask[0]);\n\n vec2 cellCenterM = cellCenterPos(uvM, cellOffset, 1.);\n vec4 texM = texture(u_image, gridToImageUV(cellCenterM, cosM, sinM, shiftM, pad));\n colorMask(uvM, cellCenterM, getMagenta(texM), insideImageBox * texM.a, grain, u_floodM, u_gainM, generalComp, outMask[1]);\n\n vec2 cellCenterY = cellCenterPos(uvY, cellOffset, 2.);\n vec4 texY = texture(u_image, gridToImageUV(cellCenterY, cosY, sinY, shiftY, pad));\n colorMask(uvY, cellCenterY, getYellow(texY), insideImageBox * texY.a, grain, u_floodY, u_gainY, generalComp, outMask[2]);\n\n vec2 cellCenterK = cellCenterPos(uvK, cellOffset, 3.);\n vec4 texK = texture(u_image, gridToImageUV(cellCenterK, cosK, sinK, shiftK, pad));\n colorMask(uvK, cellCenterK, getBlack(texK), insideImageBox * texK.a, grain, u_floodK, u_gainK, generalComp, outMask[3]);\n }\n }\n\n float C = outMask[0] * u_colorC.a;\n float M = outMask[1] * u_colorM.a;\n float Y = outMask[2] * u_colorY.a;\n float K = outMask[3] * u_colorK.a;\n\n vec3 ink = vec3(1.);\n ink = applyInk(ink, u_colorK.rgb, K);\n ink = applyInk(ink, u_colorC.rgb, C);\n ink = applyInk(ink, u_colorM.rgb, M);\n ink = applyInk(ink, u_colorY.rgb, Y);\n\n float shape = clamp(max(max(C, M), max(Y, K)), 0., 1.);\n\n vec3 color = u_colorBack.rgb * u_colorBack.a;\n float opacity = u_colorBack.a;\n color = mix(color, ink, shape);\n opacity += shape;\n opacity = clamp(opacity, 0., 1.);\n\n float grainOverlay = mix(noiseValues.g, noiseValues.b, .5);\n grainOverlay = pow(grainOverlay, 1.3);\n float grainOverlayV = grainOverlay * 2. - 1.;\n vec3 grainOverlayColor = vec3(step(0., grainOverlayV));\n float grainOverlayStrength = u_grainOverlay * abs(grainOverlayV);\n grainOverlayStrength = pow(grainOverlayStrength, .8);\n color = mix(color, grainOverlayColor, .5 * grainOverlayStrength);\n\n opacity += .5 * grainOverlayStrength;\n opacity = clamp(opacity, 0., 1.);\n\n fragColor = vec4(color, opacity);\n}\n";
|