@flikk/ui 1.0.0-beta.31 → 1.0.0-beta.32
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 +295 -22
- package/dist/components/ai/AgentRequest/AgentRequest.animations.d.ts +25 -0
- package/dist/components/ai/AgentRequest/AgentRequest.animations.js +81 -0
- package/dist/components/ai/AgentRequest/AgentRequest.d.ts +3 -0
- package/dist/components/ai/AgentRequest/AgentRequest.js +435 -0
- package/dist/components/ai/AgentRequest/AgentRequest.theme.d.ts +2 -0
- package/dist/components/ai/AgentRequest/AgentRequest.theme.js +106 -0
- package/dist/components/ai/AgentRequest/AgentRequest.types.d.ts +241 -0
- package/dist/components/ai/AgentRequest/index.d.ts +3 -0
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +1 -1
- package/dist/components/ai/PromptInput/PromptInput.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.theme.js +2 -2
- package/dist/components/ai/PromptSuggestion/PromptSuggestion.theme.js +2 -2
- package/dist/components/ai/Reasoning/Reasoning.js +27 -3
- package/dist/components/ai/Reasoning/Reasoning.theme.d.ts +6 -0
- package/dist/components/ai/Reasoning/Reasoning.theme.js +36 -0
- package/dist/components/ai/Reasoning/Reasoning.types.d.ts +58 -5
- package/dist/components/ai/Reasoning/ReasoningTrace.d.ts +11 -0
- package/dist/components/ai/Reasoning/ReasoningTrace.js +84 -0
- package/dist/components/ai/Reasoning/index.d.ts +2 -1
- package/dist/components/ai/StreamingResponse/AnimatedText.d.ts +7 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.js +8 -7
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.d.ts +5 -0
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +4 -4
- package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +2 -2
- package/dist/components/ai/StreamingResponse/StreamingCursor.js +10 -7
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +10 -0
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +59 -33
- package/dist/components/ai/StreamingResponse/StreamingResponse.js +13 -7
- package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +33 -2
- package/dist/components/ai/StreamingResponse/StreamingSurface.d.ts +13 -0
- package/dist/components/ai/StreamingResponse/StreamingSurface.js +38 -0
- package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +5 -0
- package/dist/components/ai/StreamingResponse/WordAnimationContext.js +5 -4
- package/dist/components/ai/StreamingResponse/index.d.ts +4 -2
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
- package/dist/components/ai/index.d.ts +3 -2
- package/dist/components/ai/index.js +4 -0
- package/dist/components/canvas/BaseNode.js +1 -1
- package/dist/components/canvas/CanvasToolbar.js +0 -1
- package/dist/components/canvas/Edge.js +2 -2
- package/dist/components/canvas/NodeControls.js +0 -1
- package/dist/components/canvas/NodeRenderer.js +2 -2
- package/dist/components/charts/ActivityRings/ActivityRings.js +2 -2
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +1 -1
- package/dist/components/charts/AreaChart/AreaChart.js +3 -3
- package/dist/components/charts/AreaChart/AreaChart.theme.js +3 -3
- package/dist/components/charts/BarChart/BarChart.js +4 -4
- package/dist/components/charts/ComboChart/BarRenderer.js +2 -2
- package/dist/components/charts/ComboChart/BarRenderer.types.d.ts +1 -1
- package/dist/components/charts/ComboChart/ComboChartCanvas.js +1 -1
- package/dist/components/charts/ComboChart/LineRenderer.js +1 -1
- package/dist/components/charts/ComboChart/LineRenderer.types.d.ts +1 -1
- package/dist/components/charts/DonutChart/DonutChart.theme.js +4 -4
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
- package/dist/components/charts/Heatmap/Heatmap.js +49 -42
- package/dist/components/charts/Heatmap/Heatmap.theme.d.ts +6 -2
- package/dist/components/charts/Heatmap/Heatmap.theme.js +20 -8
- package/dist/components/charts/Heatmap/Heatmap.types.d.ts +49 -82
- package/dist/components/charts/Heatmap/HeatmapCell.js +30 -81
- package/dist/components/charts/Heatmap/HeatmapLegend.d.ts +7 -6
- package/dist/components/charts/Heatmap/HeatmapLegend.js +6 -6
- package/dist/components/charts/Heatmap/index.d.ts +1 -1
- package/dist/components/charts/Heatmap/utils/heatmapUtils.d.ts +7 -12
- package/dist/components/charts/Heatmap/utils/heatmapUtils.js +16 -61
- package/dist/components/charts/Heatmap/utils/heatmapUtils.test.d.ts +1 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.js +1 -1
- package/dist/components/charts/LineChart/LineChart.js +2 -2
- package/dist/components/charts/LollipopChart/LollipopChart.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.js +1 -1
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +3 -3
- package/dist/components/charts/hooks/useChartAccessibility.js +9 -6
- package/dist/components/charts/index.d.ts +4 -8
- package/dist/components/charts/index.js +2 -4
- package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
- package/dist/components/charts/shared/index.d.ts +1 -1
- package/dist/components/charts/theme/chart.theme.js +3 -3
- package/dist/components/charts/utils/animation-utils.d.ts +12 -7
- package/dist/components/charts/utils/animation-utils.js +19 -19
- package/dist/components/core/Accordion/Accordion.theme.js +1 -1
- package/dist/components/core/Alert/Alert.animations.d.ts +11 -4
- package/dist/components/core/Alert/Alert.animations.js +11 -4
- package/dist/components/core/Alert/Alert.js +16 -2
- package/dist/components/core/Alert/Alert.theme.js +1 -1
- package/dist/components/core/Alert/Alert.types.d.ts +4 -2
- package/dist/components/core/AlertDialog/AlertDialog.js +2 -2
- package/dist/components/core/Avatar/Avatar.theme.js +1 -1
- package/dist/components/core/Badge/Badge.animations.d.ts +0 -5
- package/dist/components/core/Badge/Badge.animations.js +5 -84
- package/dist/components/core/Badge/Badge.d.ts +7 -4
- package/dist/components/core/Badge/Badge.js +27 -64
- package/dist/components/core/Badge/Badge.theme.js +8 -12
- package/dist/components/core/Badge/Badge.types.d.ts +18 -34
- package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +4 -4
- package/dist/components/core/Button/Button.js +7 -43
- package/dist/components/core/Button/Button.theme.js +2 -2
- package/dist/components/core/Button/Button.types.d.ts +8 -12
- package/dist/components/core/Button/index.d.ts +0 -2
- package/dist/components/core/Calendar/Calendar.theme.js +1 -1
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.theme.js +2 -2
- package/dist/components/core/Card/Card.js +7 -2
- package/dist/components/core/Card/Card.theme.js +29 -1
- package/dist/components/core/Card/Card.types.d.ts +20 -0
- package/dist/components/core/Card/CardBody.js +9 -1
- package/dist/components/core/Card/CardContext.d.ts +13 -0
- package/dist/components/core/Card/CardContext.js +14 -0
- package/dist/components/core/Card/CardHeader.js +4 -1
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +4 -3
- package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +8 -1
- package/dist/components/core/ContextMenu/ContextMenuSub.d.ts +11 -1
- package/dist/components/core/ContextMenu/ContextMenuSub.js +35 -22
- package/dist/components/core/ContextMenu/ContextMenuSubBody.js +14 -3
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +21 -8
- package/dist/components/core/DragDrop/DragDrop.theme.js +2 -2
- package/dist/components/core/Drawer/Drawer.theme.js +1 -1
- package/dist/components/core/Drawer/DrawerHeader.js +0 -1
- package/dist/components/core/Dropdown/DropdownMenu.js +22 -7
- package/dist/components/core/Link/Link.js +1 -1
- package/dist/components/core/Masonry/Masonry.theme.js +1 -1
- package/dist/components/core/MenuItem/MenuItem.js +2 -1
- package/dist/components/core/MenuItem/MenuItem.theme.js +13 -1
- package/dist/components/core/Message/Message.js +2 -0
- package/dist/components/core/Message/Message.theme.js +3 -3
- package/dist/components/core/Modal/Modal.animations.d.ts +1 -1
- package/dist/components/core/Modal/Modal.animations.js +50 -11
- package/dist/components/core/Modal/Modal.js +5 -1
- package/dist/components/core/Modal/Modal.theme.js +1 -1
- package/dist/components/core/Modal/ModalHeader.js +0 -1
- package/dist/components/core/ModalStack/ModalStackModal.js +3 -1
- package/dist/components/core/NavItem/NavItem.js +3 -2
- package/dist/components/core/NavItem/NavItem.theme.js +1 -1
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +4 -2
- package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
- package/dist/components/core/Pagination/Pagination.theme.js +2 -2
- package/dist/components/core/Pill/Pill.js +2 -1
- package/dist/components/core/Pill/Pill.theme.js +4 -2
- package/dist/components/core/Popover/PopoverBody.js +16 -5
- package/dist/components/core/Progress/Progress.d.ts +0 -25
- package/dist/components/core/Progress/Progress.js +79 -11
- package/dist/components/core/Progress/Progress.theme.js +17 -0
- package/dist/components/core/Progress/Progress.types.d.ts +47 -1
- package/dist/components/core/Rating/Rating.theme.js +1 -1
- package/dist/components/core/Rating/Rating.types.d.ts +3 -2
- package/dist/components/core/ScrollArea/ScrollArea.js +1 -1
- package/dist/components/core/ScrollArea/ScrollArea.theme.js +1 -1
- package/dist/components/core/Segmented/Segmented.theme.js +3 -3
- package/dist/components/core/Segmented/SegmentedContext.js +1 -0
- package/dist/components/core/Sidebar/Sidebar.js +5 -2
- package/dist/components/core/Sidebar/Sidebar.theme.js +2 -2
- package/dist/components/core/Sidebar/SidebarContent.js +1 -1
- package/dist/components/core/Sidebar/SidebarHeader.js +1 -1
- package/dist/components/core/Sidebar/SidebarSearch.js +2 -2
- package/dist/components/core/Sidebar/SidebarToggle.js +1 -1
- package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -1
- package/dist/components/core/Sortable/Sortable.theme.js +1 -1
- package/dist/components/core/Tabs/Tabs.theme.js +1 -1
- package/dist/components/core/Tag/Tag.theme.js +1 -1
- package/dist/components/core/Toast/ToastProvider.js +1 -1
- package/dist/components/core/Tree/Tree.theme.js +1 -1
- package/dist/components/core/index.d.ts +0 -2
- package/dist/components/core/index.js +0 -4
- package/dist/components/core/shared/ChartTooltip/ChartTooltip.animations.d.ts +4 -0
- package/dist/components/core/shared/ChartTooltip/ChartTooltip.animations.js +20 -0
- package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.js +1 -1
- package/dist/components/core/shared/Ripple.d.ts +16 -0
- package/dist/components/core/shared/Ripple.js +141 -0
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +6 -6
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +1 -1
- package/dist/components/data-display/GanttChart/GanttToolbar.js +0 -1
- package/dist/components/data-display/KPI/KPI.js +11 -20
- package/dist/components/data-display/KPI/KPI.theme.js +8 -4
- package/dist/components/data-display/Metric/Metric.theme.js +4 -4
- package/dist/components/data-display/Table/Table.theme.js +2 -2
- package/dist/components/data-display/Table/TableColumnManager.js +1 -2
- package/dist/components/data-display/Table/TableContext.js +1 -0
- package/dist/components/data-display/Table/TableFilter.js +9 -2
- package/dist/components/data-display/Table/TableSelectionHeader.js +1 -1
- package/dist/components/data-display/Timeline/Timeline.theme.js +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +4 -4
- package/dist/components/effects/Neumorphic/InsetCircleButton.js +1 -1
- package/dist/components/effects/Overlay/Overlay.js +7 -3
- package/dist/components/effects/index.d.ts +0 -32
- package/dist/components/effects/index.js +0 -16
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.d.ts +0 -2
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.js +1 -93
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.types.d.ts +0 -10
- package/dist/components/effects/shared/ShaderCanvas/index.d.ts +1 -1
- package/dist/components/effects/shared/index.d.ts +1 -3
- package/dist/components/effects/shared/shaderNoise.glsl.d.ts +1 -1
- package/dist/components/effects/shared/shaderNoise.glsl.js +2 -11
- package/dist/components/forms/Checkbox/Checkbox.theme.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerHeader.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerImage.js +1 -1
- package/dist/components/forms/Combobox/Combobox.js +2 -0
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +1 -0
- package/dist/components/forms/FileUpload/FileUpload.theme.js +2 -2
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +1 -1
- package/dist/components/forms/InputAddress/InputAddress.types.d.ts +2 -2
- package/dist/components/forms/Radio/Radio.theme.js +1 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +12 -16
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +165 -1680
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.d.ts +12 -56
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +60 -118
- package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +62 -126
- package/dist/components/forms/RichTextEditor/RichTextLinkField.d.ts +18 -0
- package/dist/components/forms/RichTextEditor/RichTextLinkField.js +46 -0
- package/dist/components/forms/RichTextEditor/RichTextToolbar.d.ts +15 -0
- package/dist/components/forms/RichTextEditor/RichTextToolbar.js +93 -0
- package/dist/components/forms/RichTextEditor/editorCommands.d.ts +50 -0
- package/dist/components/forms/RichTextEditor/editorCommands.js +58 -0
- package/dist/components/forms/RichTextEditor/editorState.d.ts +19 -0
- package/dist/components/forms/RichTextEditor/editorState.js +103 -0
- package/dist/components/forms/RichTextEditor/index.d.ts +5 -3
- package/dist/components/forms/RichTextEditor/sanitizeHtml.d.ts +38 -0
- package/dist/components/forms/RichTextEditor/sanitizeHtml.js +179 -0
- package/dist/components/forms/RichTextEditor/sanitizeHtml.test.d.ts +1 -0
- package/dist/components/forms/Select/Select.js +4 -4
- package/dist/components/forms/Select/Select.types.d.ts +70 -7
- package/dist/components/forms/Select/useSelectState.d.ts +9 -3
- package/dist/components/forms/Select/useSelectState.js +4 -1
- package/dist/components/forms/SelectableCard/SelectableCard.js +2 -1
- package/dist/components/forms/SelectableCard/SelectableCard.theme.js +1 -1
- package/dist/components/forms/Switch/Switch.theme.js +2 -2
- package/dist/components/forms/TimePicker/TimePicker.theme.js +1 -1
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
- package/dist/components/forms/forms.theme.js +19 -5
- package/dist/components/forms/index.js +1 -0
- package/dist/components/generative/FormShell.d.ts +22 -0
- package/dist/components/generative/FormShell.js +102 -0
- package/dist/components/generative/GenerativeView.d.ts +52 -1
- package/dist/components/generative/GenerativeView.js +203 -11
- package/dist/components/generative/actions.d.ts +5 -0
- package/dist/components/generative/ai-sdk/index.d.ts +1 -0
- package/dist/components/generative/ai-sdk/index.js +1 -0
- package/dist/components/generative/ai-sdk/useGenerativeChat.d.ts +52 -0
- package/dist/components/generative/ai-sdk/useGenerativeChat.js +73 -0
- package/dist/components/generative/ai-sdk/useGenerativeChat.test.d.ts +1 -0
- package/dist/components/generative/fieldBinding.d.ts +31 -0
- package/dist/components/generative/fieldBinding.js +33 -0
- package/dist/components/generative/fieldBinding.test.d.ts +1 -0
- package/dist/components/generative/formScope.d.ts +71 -0
- package/dist/components/generative/formScope.js +135 -0
- package/dist/components/generative/index.d.ts +4 -0
- package/dist/components/generative/index.js +4 -0
- package/dist/components/generative/registry.d.ts +2 -0
- package/dist/components/generative/registry.js +10 -10
- package/dist/components/generative/schema.generated.js +178 -292
- package/dist/components/generative/toToolResult.d.ts +21 -0
- package/dist/components/generative/toToolResult.js +15 -0
- package/dist/components/generative/toToolResult.test.d.ts +1 -0
- package/dist/components/generative/validate.d.ts +10 -1
- package/dist/components/generative/validate.js +126 -11
- package/dist/components/layout/Grid/Grid.js +1 -0
- package/dist/components/layout/Section/Section.theme.js +1 -1
- package/dist/components/layout/Stack/Stack.js +1 -0
- package/dist/generative.schema.json +178 -292
- package/dist/index.js +1 -4
- package/dist/registry.json +2599 -2375
- package/dist/shadcn-compat.css +5 -5
- package/dist/styles/theme.test.d.ts +1 -0
- package/dist/styles.css +1 -1
- package/dist/test/render.d.ts +17 -0
- package/dist/themes/precision.css +232 -0
- package/dist/tools.json +179 -294
- package/dist/utils/index.d.ts +0 -1
- package/package.json +31 -1
- package/src/global.scss +21 -28
- package/src/styles/theme.css +124 -41
- package/src/styles/theme.test.ts +119 -0
- package/tailwind.preset.cjs +30 -20
- package/dist/components/charts/FunnelChart/FunnelChart.animations.d.ts +0 -35
- package/dist/components/charts/FunnelChart/FunnelChart.animations.js +0 -59
- package/dist/components/charts/FunnelChart/FunnelChart.d.ts +0 -8
- package/dist/components/charts/FunnelChart/FunnelChart.js +0 -410
- package/dist/components/charts/FunnelChart/FunnelChart.theme.d.ts +0 -2
- package/dist/components/charts/FunnelChart/FunnelChart.theme.js +0 -12
- package/dist/components/charts/FunnelChart/FunnelChart.types.d.ts +0 -105
- package/dist/components/charts/FunnelChart/index.d.ts +0 -4
- package/dist/components/charts/ScatterPlot/ScatterPlot.d.ts +0 -9
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +0 -208
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.d.ts +0 -18
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +0 -42
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.d.ts +0 -60
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.js +0 -19
- package/dist/components/charts/ScatterPlot/index.d.ts +0 -3
- package/dist/components/core/Button/Button.ripple.d.ts +0 -71
- package/dist/components/core/Button/Button.ripple.js +0 -236
- package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.d.ts +0 -4
- package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.theme.d.ts +0 -12
- package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.types.d.ts +0 -23
- package/dist/components/core/Calendar/CalendarEvent/index.d.ts +0 -2
- package/dist/components/core/CardStack/CardStack.animations.d.ts +0 -47
- package/dist/components/core/CardStack/CardStack.d.ts +0 -3
- package/dist/components/core/CardStack/CardStack.js +0 -187
- package/dist/components/core/CardStack/CardStack.theme.d.ts +0 -6
- package/dist/components/core/CardStack/CardStack.theme.js +0 -33
- package/dist/components/core/CardStack/CardStack.types.d.ts +0 -139
- package/dist/components/core/CardStack/index.d.ts +0 -7
- package/dist/components/core/Carousel/Carousel.d.ts +0 -3
- package/dist/components/core/Carousel/Carousel.js +0 -83
- package/dist/components/core/Carousel/Carousel.theme.d.ts +0 -10
- package/dist/components/core/Carousel/Carousel.theme.js +0 -20
- package/dist/components/core/Carousel/Carousel.types.d.ts +0 -113
- package/dist/components/core/Carousel/CarouselBody.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselBody.js +0 -59
- package/dist/components/core/Carousel/CarouselContext.d.ts +0 -3
- package/dist/components/core/Carousel/CarouselContext.js +0 -13
- package/dist/components/core/Carousel/CarouselItem.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselItem.js +0 -11
- package/dist/components/core/Carousel/CarouselNext.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselNext.js +0 -16
- package/dist/components/core/Carousel/CarouselPrevious.d.ts +0 -4
- package/dist/components/core/Carousel/CarouselPrevious.js +0 -16
- package/dist/components/core/Carousel/index.d.ts +0 -3
- package/dist/components/effects/ColorPanels/ColorPanels.d.ts +0 -8
- package/dist/components/effects/ColorPanels/ColorPanels.js +0 -66
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.d.ts +0 -12
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.js +0 -218
- package/dist/components/effects/ColorPanels/ColorPanels.types.d.ts +0 -29
- package/dist/components/effects/ColorPanels/ColorPanels.types.js +0 -3
- package/dist/components/effects/ColorPanels/index.d.ts +0 -2
- package/dist/components/effects/FlutedGlass/FlutedGlass.d.ts +0 -9
- package/dist/components/effects/FlutedGlass/FlutedGlass.js +0 -80
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.d.ts +0 -12
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.js +0 -335
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.d.ts +0 -61
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.js +0 -16
- package/dist/components/effects/FlutedGlass/index.d.ts +0 -3
- package/dist/components/effects/GlassEffect/GlassEffect.d.ts +0 -15
- package/dist/components/effects/GlassEffect/GlassEffect.js +0 -38
- package/dist/components/effects/GlassEffect/GlassEffect.types.d.ts +0 -19
- package/dist/components/effects/GlassEffect/index.d.ts +0 -2
- package/dist/components/effects/GlassSurface/GlassSurface.d.ts +0 -8
- package/dist/components/effects/GlassSurface/GlassSurface.js +0 -250
- package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +0 -66
- package/dist/components/effects/GlassSurface/index.d.ts +0 -2
- package/dist/components/effects/GodRays/GodRays.d.ts +0 -8
- package/dist/components/effects/GodRays/GodRays.js +0 -68
- package/dist/components/effects/GodRays/GodRays.shaders.d.ts +0 -10
- package/dist/components/effects/GodRays/GodRays.shaders.js +0 -128
- package/dist/components/effects/GodRays/GodRays.types.d.ts +0 -25
- package/dist/components/effects/GodRays/GodRays.types.js +0 -3
- package/dist/components/effects/GodRays/index.d.ts +0 -2
- package/dist/components/effects/GridPattern/GridPattern.d.ts +0 -18
- package/dist/components/effects/GridPattern/GridPattern.js +0 -65
- package/dist/components/effects/GridPattern/GridPattern.types.d.ts +0 -47
- package/dist/components/effects/GridPattern/index.d.ts +0 -2
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.d.ts +0 -10
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.js +0 -78
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.d.ts +0 -22
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.js +0 -239
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.types.d.ts +0 -52
- package/dist/components/effects/HalftoneCmyk/index.d.ts +0 -2
- package/dist/components/effects/HalftoneDots/HalftoneDots.d.ts +0 -9
- package/dist/components/effects/HalftoneDots/HalftoneDots.js +0 -68
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.d.ts +0 -13
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.js +0 -296
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.d.ts +0 -43
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.js +0 -12
- package/dist/components/effects/HalftoneDots/index.d.ts +0 -3
- package/dist/components/effects/ImageDithering/ImageDithering.d.ts +0 -9
- package/dist/components/effects/ImageDithering/ImageDithering.js +0 -68
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.d.ts +0 -12
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.js +0 -117
- package/dist/components/effects/ImageDithering/ImageDithering.types.d.ts +0 -30
- package/dist/components/effects/ImageDithering/ImageDithering.types.js +0 -8
- package/dist/components/effects/ImageDithering/index.d.ts +0 -3
- package/dist/components/effects/MagneticElement/MagneticElement.d.ts +0 -30
- package/dist/components/effects/MagneticElement/MagneticElement.js +0 -111
- package/dist/components/effects/MagneticElement/MagneticElement.types.d.ts +0 -44
- package/dist/components/effects/MagneticElement/index.d.ts +0 -2
- package/dist/components/effects/Metaballs/Metaballs.d.ts +0 -8
- package/dist/components/effects/Metaballs/Metaballs.js +0 -59
- package/dist/components/effects/Metaballs/Metaballs.shaders.d.ts +0 -10
- package/dist/components/effects/Metaballs/Metaballs.shaders.js +0 -102
- package/dist/components/effects/Metaballs/Metaballs.types.d.ts +0 -16
- package/dist/components/effects/Metaballs/Metaballs.types.js +0 -3
- package/dist/components/effects/Metaballs/index.d.ts +0 -2
- package/dist/components/effects/PaperTexture/PaperTexture.d.ts +0 -9
- package/dist/components/effects/PaperTexture/PaperTexture.js +0 -61
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.d.ts +0 -22
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.js +0 -145
- package/dist/components/effects/PaperTexture/PaperTexture.types.d.ts +0 -19
- package/dist/components/effects/PaperTexture/index.d.ts +0 -2
- package/dist/components/effects/PulsingBorder/PulsingBorder.d.ts +0 -27
- package/dist/components/effects/PulsingBorder/PulsingBorder.js +0 -174
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.d.ts +0 -14
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.js +0 -258
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.d.ts +0 -75
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.js +0 -3
- package/dist/components/effects/PulsingBorder/index.d.ts +0 -2
- package/dist/components/effects/SmokeRing/SmokeRing.d.ts +0 -8
- package/dist/components/effects/SmokeRing/SmokeRing.js +0 -62
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.d.ts +0 -14
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.js +0 -130
- package/dist/components/effects/SmokeRing/SmokeRing.types.d.ts +0 -22
- package/dist/components/effects/SmokeRing/SmokeRing.types.js +0 -3
- package/dist/components/effects/SmokeRing/index.d.ts +0 -2
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.d.ts +0 -9
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.js +0 -59
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.d.ts +0 -14
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.js +0 -129
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.d.ts +0 -23
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.js +0 -3
- package/dist/components/effects/StaticGradientMesh/index.d.ts +0 -2
- package/dist/components/effects/Water/Water.d.ts +0 -9
- package/dist/components/effects/Water/Water.js +0 -65
- package/dist/components/effects/Water/Water.shaders.d.ts +0 -11
- package/dist/components/effects/Water/Water.shaders.js +0 -123
- package/dist/components/effects/Water/Water.types.d.ts +0 -25
- package/dist/components/effects/Water/index.d.ts +0 -2
- package/dist/components/effects/shared/bayerMatrices.glsl.d.ts +0 -10
- package/dist/components/effects/shared/bayerMatrices.glsl.js +0 -44
- package/dist/components/effects/shared/imageUV.glsl.d.ts +0 -12
- package/dist/components/effects/shared/imageUV.glsl.js +0 -26
- package/dist/components/forms/RichTextEditor/RichTextEditor.animations.d.ts +0 -7
- package/dist/components/forms/RichTextEditor/RichTextEditor.animations.js +0 -32
- package/dist/utils/calendarUtils.d.ts +0 -60
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.theme.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.theme.js +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltip.types.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/ChartTooltipContent.d.ts +0 -0
- /package/dist/components/{charts → core}/shared/ChartTooltip/index.d.ts +0 -0
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SmokeRing fragment shader — adapted from paper-design/shaders'
|
|
3
|
-
* `smoke-ring.ts` (https://github.com/paper-design/shaders, Apache License
|
|
4
|
-
* 2.0).
|
|
5
|
-
*
|
|
6
|
-
* Simplified from the original: plain centered/aspect-corrected UV
|
|
7
|
-
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
8
|
-
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
9
|
-
* instead of pre-generated noise-texture sampling. The color-ramp loop also
|
|
10
|
-
* adds an explicit `i > idxLast` bounds check so fewer than the maximum 10
|
|
11
|
-
* colors renders correctly (the unset trailing `u_colors[]` slots are never
|
|
12
|
-
* blended in).
|
|
13
|
-
*/
|
|
14
|
-
export declare const smokeRingFragmentShader = "#version 300 es\nprecision mediump float;\n\nuniform float iTime;\nuniform vec2 iResolution;\n\nuniform vec4 u_colorBack;\nuniform vec4 u_colors[10];\nuniform float u_colorsCount;\n\nuniform float u_thickness;\nuniform float u_radius;\nuniform float u_innerShape;\nuniform float u_noiseScale;\nuniform float u_noiseIterations;\nuniform float u_speed;\n\nout vec4 fragColor;\n\n\nconst float PI = 3.14159265359;\nconst float TWO_PI = 6.28318530718;\n\n\nfloat randomR(vec2 st) {\n return fract(sin(dot(st, vec2(12.9898, 78.233))) * 43758.5453123);\n}\n\n\nfloat valueNoise(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\nvec2 fbm(vec2 n0, vec2 n1) {\n vec2 total = vec2(0.0);\n float amplitude = .4;\n for (int i = 0; i < 8; i++) {\n if (i >= int(u_noiseIterations)) break;\n total.x += valueNoise(n0) * amplitude;\n total.y += valueNoise(n1) * amplitude;\n n0 *= 1.99;\n n1 *= 1.99;\n amplitude *= 0.65;\n }\n return total;\n}\n\nfloat getNoise(vec2 uv, vec2 pUv, float t) {\n vec2 pUvLeft = pUv + .03 * t;\n float period = max(abs(u_noiseScale * TWO_PI), 1e-6);\n vec2 pUvRight = vec2(fract(pUv.x / period) * period, pUv.y) + .03 * t;\n vec2 noiseVal = fbm(pUvLeft, pUvRight);\n return mix(noiseVal.y, noiseVal.x, smoothstep(-.25, .25, uv.x));\n}\n\nfloat getRingShape(vec2 uv) {\n float radius = u_radius;\n float thickness = u_thickness;\n float distance = length(uv);\n float ringValue = 1. - smoothstep(radius, radius + thickness, distance);\n ringValue *= smoothstep(radius - pow(u_innerShape, 3.) * thickness, radius, distance);\n return ringValue;\n}\n\nvoid main() {\n vec2 shape_uv = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);\n\n float t = u_speed * iTime;\n float cycleDuration = 3.;\n float period2 = 2.0 * cycleDuration;\n float localTime1 = fract((0.1 * t + cycleDuration) / period2) * period2;\n float localTime2 = fract((0.1 * t) / period2) * period2;\n float timeBlend = .5 + .5 * sin(.1 * t * PI / cycleDuration - .5 * PI);\n\n float atg = atan(shape_uv.y, shape_uv.x) + .001;\n float l = length(shape_uv);\n float radialOffset = .5 * l - inversesqrt(max(1e-4, l));\n vec2 polar_uv1 = vec2(atg, localTime1 - radialOffset) * u_noiseScale;\n vec2 polar_uv2 = vec2(atg, localTime2 - radialOffset) * u_noiseScale;\n\n float noise1 = getNoise(shape_uv, polar_uv1, t);\n float noise2 = getNoise(shape_uv, polar_uv2, t);\n float noiseVal = mix(noise1, noise2, timeBlend);\n\n shape_uv *= (.8 + 1.2 * noiseVal);\n\n float ringShape = getRingShape(shape_uv);\n\n float mixer = ringShape * ringShape * (u_colorsCount - 1.);\n int idxLast = int(u_colorsCount) - 1;\n vec4 gradient = u_colors[idxLast];\n gradient.rgb *= gradient.a;\n for (int i = 9; i >= 0; i--) {\n if (i > idxLast) continue;\n float localT = clamp(mixer - float(idxLast - i - 1), 0., 1.);\n vec4 c = u_colors[i];\n c.rgb *= c.a;\n gradient = mix(gradient, c, localT);\n }\n\n vec3 color = gradient.rgb * ringShape;\n float opacity = gradient.a * ringShape;\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n color = color + bgColor * (1. - opacity);\n opacity = opacity + u_colorBack.a * (1. - opacity);\n\n fragColor = vec4(color, opacity);\n}\n";
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import 'react/jsx-runtime';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { glslDeclarePI, glslHashFloat } from '../shared/shaderNoise.glsl.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* SmokeRing fragment shader — adapted from paper-design/shaders'
|
|
7
|
-
* `smoke-ring.ts` (https://github.com/paper-design/shaders, Apache License
|
|
8
|
-
* 2.0).
|
|
9
|
-
*
|
|
10
|
-
* Simplified from the original: plain centered/aspect-corrected UV
|
|
11
|
-
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
12
|
-
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
13
|
-
* instead of pre-generated noise-texture sampling. The color-ramp loop also
|
|
14
|
-
* adds an explicit `i > idxLast` bounds check so fewer than the maximum 10
|
|
15
|
-
* colors renders correctly (the unset trailing `u_colors[]` slots are never
|
|
16
|
-
* blended in).
|
|
17
|
-
*/
|
|
18
|
-
const smokeRingFragmentShader = `#version 300 es
|
|
19
|
-
precision mediump float;
|
|
20
|
-
|
|
21
|
-
uniform float iTime;
|
|
22
|
-
uniform vec2 iResolution;
|
|
23
|
-
|
|
24
|
-
uniform vec4 u_colorBack;
|
|
25
|
-
uniform vec4 u_colors[10];
|
|
26
|
-
uniform float u_colorsCount;
|
|
27
|
-
|
|
28
|
-
uniform float u_thickness;
|
|
29
|
-
uniform float u_radius;
|
|
30
|
-
uniform float u_innerShape;
|
|
31
|
-
uniform float u_noiseScale;
|
|
32
|
-
uniform float u_noiseIterations;
|
|
33
|
-
uniform float u_speed;
|
|
34
|
-
|
|
35
|
-
out vec4 fragColor;
|
|
36
|
-
|
|
37
|
-
${glslDeclarePI}
|
|
38
|
-
${glslHashFloat}
|
|
39
|
-
|
|
40
|
-
float valueNoise(vec2 st) {
|
|
41
|
-
vec2 i = floor(st);
|
|
42
|
-
vec2 f = fract(st);
|
|
43
|
-
float a = randomR(i);
|
|
44
|
-
float b = randomR(i + vec2(1.0, 0.0));
|
|
45
|
-
float c = randomR(i + vec2(0.0, 1.0));
|
|
46
|
-
float d = randomR(i + vec2(1.0, 1.0));
|
|
47
|
-
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
48
|
-
float x1 = mix(a, b, u.x);
|
|
49
|
-
float x2 = mix(c, d, u.x);
|
|
50
|
-
return mix(x1, x2, u.y);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
vec2 fbm(vec2 n0, vec2 n1) {
|
|
54
|
-
vec2 total = vec2(0.0);
|
|
55
|
-
float amplitude = .4;
|
|
56
|
-
for (int i = 0; i < 8; i++) {
|
|
57
|
-
if (i >= int(u_noiseIterations)) break;
|
|
58
|
-
total.x += valueNoise(n0) * amplitude;
|
|
59
|
-
total.y += valueNoise(n1) * amplitude;
|
|
60
|
-
n0 *= 1.99;
|
|
61
|
-
n1 *= 1.99;
|
|
62
|
-
amplitude *= 0.65;
|
|
63
|
-
}
|
|
64
|
-
return total;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
float getNoise(vec2 uv, vec2 pUv, float t) {
|
|
68
|
-
vec2 pUvLeft = pUv + .03 * t;
|
|
69
|
-
float period = max(abs(u_noiseScale * TWO_PI), 1e-6);
|
|
70
|
-
vec2 pUvRight = vec2(fract(pUv.x / period) * period, pUv.y) + .03 * t;
|
|
71
|
-
vec2 noiseVal = fbm(pUvLeft, pUvRight);
|
|
72
|
-
return mix(noiseVal.y, noiseVal.x, smoothstep(-.25, .25, uv.x));
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
float getRingShape(vec2 uv) {
|
|
76
|
-
float radius = u_radius;
|
|
77
|
-
float thickness = u_thickness;
|
|
78
|
-
float distance = length(uv);
|
|
79
|
-
float ringValue = 1. - smoothstep(radius, radius + thickness, distance);
|
|
80
|
-
ringValue *= smoothstep(radius - pow(u_innerShape, 3.) * thickness, radius, distance);
|
|
81
|
-
return ringValue;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
void main() {
|
|
85
|
-
vec2 shape_uv = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);
|
|
86
|
-
|
|
87
|
-
float t = u_speed * iTime;
|
|
88
|
-
float cycleDuration = 3.;
|
|
89
|
-
float period2 = 2.0 * cycleDuration;
|
|
90
|
-
float localTime1 = fract((0.1 * t + cycleDuration) / period2) * period2;
|
|
91
|
-
float localTime2 = fract((0.1 * t) / period2) * period2;
|
|
92
|
-
float timeBlend = .5 + .5 * sin(.1 * t * PI / cycleDuration - .5 * PI);
|
|
93
|
-
|
|
94
|
-
float atg = atan(shape_uv.y, shape_uv.x) + .001;
|
|
95
|
-
float l = length(shape_uv);
|
|
96
|
-
float radialOffset = .5 * l - inversesqrt(max(1e-4, l));
|
|
97
|
-
vec2 polar_uv1 = vec2(atg, localTime1 - radialOffset) * u_noiseScale;
|
|
98
|
-
vec2 polar_uv2 = vec2(atg, localTime2 - radialOffset) * u_noiseScale;
|
|
99
|
-
|
|
100
|
-
float noise1 = getNoise(shape_uv, polar_uv1, t);
|
|
101
|
-
float noise2 = getNoise(shape_uv, polar_uv2, t);
|
|
102
|
-
float noiseVal = mix(noise1, noise2, timeBlend);
|
|
103
|
-
|
|
104
|
-
shape_uv *= (.8 + 1.2 * noiseVal);
|
|
105
|
-
|
|
106
|
-
float ringShape = getRingShape(shape_uv);
|
|
107
|
-
|
|
108
|
-
float mixer = ringShape * ringShape * (u_colorsCount - 1.);
|
|
109
|
-
int idxLast = int(u_colorsCount) - 1;
|
|
110
|
-
vec4 gradient = u_colors[idxLast];
|
|
111
|
-
gradient.rgb *= gradient.a;
|
|
112
|
-
for (int i = 9; i >= 0; i--) {
|
|
113
|
-
if (i > idxLast) continue;
|
|
114
|
-
float localT = clamp(mixer - float(idxLast - i - 1), 0., 1.);
|
|
115
|
-
vec4 c = u_colors[i];
|
|
116
|
-
c.rgb *= c.a;
|
|
117
|
-
gradient = mix(gradient, c, localT);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
vec3 color = gradient.rgb * ringShape;
|
|
121
|
-
float opacity = gradient.a * ringShape;
|
|
122
|
-
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
123
|
-
color = color + bgColor * (1. - opacity);
|
|
124
|
-
opacity = opacity + u_colorBack.a * (1. - opacity);
|
|
125
|
-
|
|
126
|
-
fragColor = vec4(color, opacity);
|
|
127
|
-
}
|
|
128
|
-
`;
|
|
129
|
-
|
|
130
|
-
export { smokeRingFragmentShader };
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type React from "react";
|
|
2
|
-
export declare const SMOKE_RING_MAX_COLORS = 10;
|
|
3
|
-
export declare const SMOKE_RING_MAX_NOISE_ITERATIONS = 8;
|
|
4
|
-
export interface SmokeRingProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
/** Background CSS color. Default: 'var(--color-background)'. */
|
|
6
|
-
colorBack?: string;
|
|
7
|
-
/** Ring color ramp, up to 10. Default: a 3-stop primary ramp. */
|
|
8
|
-
colors?: string[];
|
|
9
|
-
/** Turbulence scale of the ring's noise distortion. Default: 1. */
|
|
10
|
-
noiseScale?: number;
|
|
11
|
-
/** Ring thickness. Default: 0.3. */
|
|
12
|
-
thickness?: number;
|
|
13
|
-
/** Ring radius. Default: 0.35. */
|
|
14
|
-
radius?: number;
|
|
15
|
-
/** Inner-edge softness/shape, 0-1. Default: 0.5. */
|
|
16
|
-
innerShape?: number;
|
|
17
|
-
/** fbm octave count, 1-8 (higher = more detailed turbulence). Default: 4. */
|
|
18
|
-
noiseIterations?: number;
|
|
19
|
-
/** Animation speed multiplier. Default: 1. */
|
|
20
|
-
speed?: number;
|
|
21
|
-
className?: string;
|
|
22
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { StaticGradientMeshProps } from "./StaticGradientMesh.types";
|
|
3
|
-
/**
|
|
4
|
-
* Non-animated blob mesh gradient — a static arrangement of weighted color
|
|
5
|
-
* blobs blended into a soft organic gradient, with subtle grain. WebGL2-
|
|
6
|
-
* powered; falls back to a static CSS gradient when WebGL2 is unavailable.
|
|
7
|
-
* Being static, it needs no `prefers-reduced-motion` handling.
|
|
8
|
-
*/
|
|
9
|
-
export declare const StaticGradientMesh: React.FC<StaticGradientMeshProps>;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMemo, useRef } 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 { resolveShaderColors } from '../shared/resolveShaderColor.js';
|
|
10
|
-
import { staticGradientMeshFragmentShader } from './StaticGradientMesh.shaders.js';
|
|
11
|
-
import { STATIC_GRADIENT_MESH_MAX_COLORS } from './StaticGradientMesh.types.js';
|
|
12
|
-
|
|
13
|
-
const DEFAULT_COLORS = ["var(--color-primary-300)", "var(--color-primary)", "var(--color-primary-700)"];
|
|
14
|
-
function useWebgl2Supported() {
|
|
15
|
-
return useMemo(() => {
|
|
16
|
-
if (typeof document === "undefined")
|
|
17
|
-
return false;
|
|
18
|
-
try {
|
|
19
|
-
return !!document.createElement("canvas").getContext("webgl2");
|
|
20
|
-
}
|
|
21
|
-
catch (_a) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
}, []);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Non-animated blob mesh gradient — a static arrangement of weighted color
|
|
28
|
-
* blobs blended into a soft organic gradient, with subtle grain. WebGL2-
|
|
29
|
-
* powered; falls back to a static CSS gradient when WebGL2 is unavailable.
|
|
30
|
-
* Being static, it needs no `prefers-reduced-motion` handling.
|
|
31
|
-
*/
|
|
32
|
-
const StaticGradientMesh = ({ colors = DEFAULT_COLORS, positions = 0, waveX = 0.3, waveXShift = 0, waveY = 0.3, waveYShift = 0, mixing = 0.5, grainMixer = 0.2, grainOverlay = 0.1, className, style, ...props }) => {
|
|
33
|
-
var _a, _b;
|
|
34
|
-
const isClient = useIsClient();
|
|
35
|
-
const isDark = useDarkMode();
|
|
36
|
-
const webglSupported = useWebgl2Supported();
|
|
37
|
-
const safeColors = colors.length > 0 ? colors.slice(0, STATIC_GRADIENT_MESH_MAX_COLORS) : DEFAULT_COLORS;
|
|
38
|
-
const resolvedColors = useMemo(() => resolveShaderColors(safeColors),
|
|
39
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
-
[safeColors.join("|"), isDark]);
|
|
41
|
-
const uniformsRef = useRef({});
|
|
42
|
-
for (let i = 0; i < STATIC_GRADIENT_MESH_MAX_COLORS; i++) {
|
|
43
|
-
uniformsRef.current[`u_colors[${i}]`] =
|
|
44
|
-
(_b = (_a = resolvedColors[i]) !== null && _a !== void 0 ? _a : resolvedColors[resolvedColors.length - 1]) !== null && _b !== void 0 ? _b : [0, 0, 0, 0];
|
|
45
|
-
}
|
|
46
|
-
uniformsRef.current.u_colorsCount = resolvedColors.length;
|
|
47
|
-
uniformsRef.current.u_positions = positions;
|
|
48
|
-
uniformsRef.current.u_waveX = waveX;
|
|
49
|
-
uniformsRef.current.u_waveXShift = waveXShift;
|
|
50
|
-
uniformsRef.current.u_waveY = waveY;
|
|
51
|
-
uniformsRef.current.u_waveYShift = waveYShift;
|
|
52
|
-
uniformsRef.current.u_mixing = mixing;
|
|
53
|
-
uniformsRef.current.u_grainMixer = grainMixer;
|
|
54
|
-
uniformsRef.current.u_grainOverlay = grainOverlay;
|
|
55
|
-
const fallbackGradient = `linear-gradient(135deg, ${safeColors.join(", ")})`;
|
|
56
|
-
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: staticGradientMeshFragmentShader, uniformsRef: uniformsRef })) : (jsx("div", { className: "absolute inset-0", style: { background: fallbackGradient } })) }));
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export { StaticGradientMesh };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* StaticGradientMesh fragment shader — adapted from paper-design/shaders'
|
|
3
|
-
* `static-mesh-gradient.ts` (https://github.com/paper-design/shaders, Apache
|
|
4
|
-
* License 2.0). Renamed from paper-design's "Static Mesh Gradient" to avoid
|
|
5
|
-
* a naming collision with this library's existing `MeshGradient` (an
|
|
6
|
-
* unrelated SVG-based deterministic seed→blob avatar generator).
|
|
7
|
-
*
|
|
8
|
-
* Simplified from the original: plain centered/aspect-corrected UV
|
|
9
|
-
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
10
|
-
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
11
|
-
* instead of pre-generated noise-texture sampling. Non-animated — a fixed
|
|
12
|
-
* `positions` seed substitutes for time, matching the original's design.
|
|
13
|
-
*/
|
|
14
|
-
export declare const staticGradientMeshFragmentShader = "#version 300 es\nprecision mediump float;\n\nuniform vec2 iResolution;\n\nuniform vec4 u_colors[10];\nuniform float u_colorsCount;\nuniform float u_positions;\nuniform float u_waveX;\nuniform float u_waveXShift;\nuniform float u_waveY;\nuniform float u_waveYShift;\nuniform float u_mixing;\nuniform float u_grainMixer;\nuniform float u_grainOverlay;\n\nout vec4 fragColor;\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\nfloat hash21(vec2 p) {\n return randomR(p);\n}\n\nfloat valueNoise(vec2 st) {\n vec2 i = floor(st);\n vec2 f = fract(st);\n float a = hash21(i);\n float b = hash21(i + vec2(1.0, 0.0));\n float c = hash21(i + vec2(0.0, 1.0));\n float d = hash21(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\nfloat noise(vec2 n, vec2 seedOffset) {\n return valueNoise(n + seedOffset);\n}\n\nvec2 getPosition(int i, float t) {\n float a = float(i) * .37;\n float b = .6 + mod(float(i), 3.) * .3;\n float c = .8 + mod(float(i + 1), 4.) * 0.25;\n float x = sin(t * b + a);\n float y = cos(t * c + a * 1.5);\n return .5 + .5 * vec2(x, y);\n}\n\nvoid main() {\n vec2 uv = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);\n uv += .5;\n vec2 grainUV = uv * 1000.;\n\n float grain = noise(grainUV, vec2(0.));\n float mixerGrain = .4 * u_grainMixer * (grain - .5);\n\n float radius = smoothstep(0., 1., length(uv - .5));\n float center = 1. - radius;\n for (float i = 1.; i <= 2.; i++) {\n uv.x += u_waveX * center / i * cos(TWO_PI * u_waveXShift + i * 2. * smoothstep(.0, 1., uv.y));\n uv.y += u_waveY * center / i * cos(TWO_PI * u_waveYShift + i * 2. * smoothstep(.0, 1., uv.x));\n }\n\n vec3 color = vec3(0.);\n float opacity = 0.;\n float totalWeight = 0.;\n float positionSeed = 25. + .33 * u_positions;\n\n for (int i = 0; i < 10; i++) {\n if (i >= int(u_colorsCount)) break;\n vec2 pos = getPosition(i, positionSeed) + mixerGrain;\n float dist = length(uv - pos);\n vec3 colorFraction = u_colors[i].rgb * u_colors[i].a;\n float opacityFraction = u_colors[i].a;\n\n float mixing = pow(u_mixing, .7);\n float power = mix(2., 1., mixing);\n dist = pow(dist, power);\n\n float w = 1. / (dist + 1e-3);\n float baseSharpness = mix(.0, 8., clamp(w, 0., 1.));\n float sharpness = mix(baseSharpness, 1., mixing);\n w = pow(w, sharpness);\n color += colorFraction * w;\n opacity += opacityFraction * w;\n totalWeight += w;\n }\n color /= max(1e-4, totalWeight);\n opacity /= max(1e-4, totalWeight);\n\n float grainOverlay = valueNoise(rotate(grainUV, 1.) + vec2(3.));\n grainOverlay = mix(grainOverlay, valueNoise(rotate(grainUV, 2.) + vec2(-1.)), .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, .35 * grainOverlayStrength);\n opacity += .5 * grainOverlayStrength;\n opacity = clamp(opacity, 0., 1.);\n\n fragColor = vec4(color, opacity);\n}\n";
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import 'react/jsx-runtime';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { glslRotate2, glslHashFloat } from '../shared/shaderNoise.glsl.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* StaticGradientMesh fragment shader — adapted from paper-design/shaders'
|
|
7
|
-
* `static-mesh-gradient.ts` (https://github.com/paper-design/shaders, Apache
|
|
8
|
-
* License 2.0). Renamed from paper-design's "Static Mesh Gradient" to avoid
|
|
9
|
-
* a naming collision with this library's existing `MeshGradient` (an
|
|
10
|
-
* unrelated SVG-based deterministic 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. Non-animated — a fixed
|
|
16
|
-
* `positions` seed substitutes for time, matching the original's design.
|
|
17
|
-
*/
|
|
18
|
-
const staticGradientMeshFragmentShader = `#version 300 es
|
|
19
|
-
precision mediump float;
|
|
20
|
-
|
|
21
|
-
uniform vec2 iResolution;
|
|
22
|
-
|
|
23
|
-
uniform vec4 u_colors[10];
|
|
24
|
-
uniform float u_colorsCount;
|
|
25
|
-
uniform float u_positions;
|
|
26
|
-
uniform float u_waveX;
|
|
27
|
-
uniform float u_waveXShift;
|
|
28
|
-
uniform float u_waveY;
|
|
29
|
-
uniform float u_waveYShift;
|
|
30
|
-
uniform float u_mixing;
|
|
31
|
-
uniform float u_grainMixer;
|
|
32
|
-
uniform float u_grainOverlay;
|
|
33
|
-
|
|
34
|
-
out vec4 fragColor;
|
|
35
|
-
|
|
36
|
-
const float PI = 3.14159265359;
|
|
37
|
-
const float TWO_PI = 6.28318530718;
|
|
38
|
-
|
|
39
|
-
${glslRotate2}
|
|
40
|
-
${glslHashFloat}
|
|
41
|
-
|
|
42
|
-
float hash21(vec2 p) {
|
|
43
|
-
return randomR(p);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
float valueNoise(vec2 st) {
|
|
47
|
-
vec2 i = floor(st);
|
|
48
|
-
vec2 f = fract(st);
|
|
49
|
-
float a = hash21(i);
|
|
50
|
-
float b = hash21(i + vec2(1.0, 0.0));
|
|
51
|
-
float c = hash21(i + vec2(0.0, 1.0));
|
|
52
|
-
float d = hash21(i + vec2(1.0, 1.0));
|
|
53
|
-
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
54
|
-
float x1 = mix(a, b, u.x);
|
|
55
|
-
float x2 = mix(c, d, u.x);
|
|
56
|
-
return mix(x1, x2, u.y);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
float noise(vec2 n, vec2 seedOffset) {
|
|
60
|
-
return valueNoise(n + seedOffset);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
vec2 getPosition(int i, float t) {
|
|
64
|
-
float a = float(i) * .37;
|
|
65
|
-
float b = .6 + mod(float(i), 3.) * .3;
|
|
66
|
-
float c = .8 + mod(float(i + 1), 4.) * 0.25;
|
|
67
|
-
float x = sin(t * b + a);
|
|
68
|
-
float y = cos(t * c + a * 1.5);
|
|
69
|
-
return .5 + .5 * vec2(x, y);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
void main() {
|
|
73
|
-
vec2 uv = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);
|
|
74
|
-
uv += .5;
|
|
75
|
-
vec2 grainUV = uv * 1000.;
|
|
76
|
-
|
|
77
|
-
float grain = noise(grainUV, vec2(0.));
|
|
78
|
-
float mixerGrain = .4 * u_grainMixer * (grain - .5);
|
|
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_waveX * center / i * cos(TWO_PI * u_waveXShift + i * 2. * smoothstep(.0, 1., uv.y));
|
|
84
|
-
uv.y += u_waveY * center / i * cos(TWO_PI * u_waveYShift + i * 2. * smoothstep(.0, 1., uv.x));
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
vec3 color = vec3(0.);
|
|
88
|
-
float opacity = 0.;
|
|
89
|
-
float totalWeight = 0.;
|
|
90
|
-
float positionSeed = 25. + .33 * u_positions;
|
|
91
|
-
|
|
92
|
-
for (int i = 0; i < 10; i++) {
|
|
93
|
-
if (i >= int(u_colorsCount)) break;
|
|
94
|
-
vec2 pos = getPosition(i, positionSeed) + mixerGrain;
|
|
95
|
-
float dist = length(uv - pos);
|
|
96
|
-
vec3 colorFraction = u_colors[i].rgb * u_colors[i].a;
|
|
97
|
-
float opacityFraction = u_colors[i].a;
|
|
98
|
-
|
|
99
|
-
float mixing = pow(u_mixing, .7);
|
|
100
|
-
float power = mix(2., 1., mixing);
|
|
101
|
-
dist = pow(dist, power);
|
|
102
|
-
|
|
103
|
-
float w = 1. / (dist + 1e-3);
|
|
104
|
-
float baseSharpness = mix(.0, 8., clamp(w, 0., 1.));
|
|
105
|
-
float sharpness = mix(baseSharpness, 1., mixing);
|
|
106
|
-
w = pow(w, sharpness);
|
|
107
|
-
color += colorFraction * w;
|
|
108
|
-
opacity += opacityFraction * w;
|
|
109
|
-
totalWeight += w;
|
|
110
|
-
}
|
|
111
|
-
color /= max(1e-4, totalWeight);
|
|
112
|
-
opacity /= max(1e-4, totalWeight);
|
|
113
|
-
|
|
114
|
-
float grainOverlay = valueNoise(rotate(grainUV, 1.) + vec2(3.));
|
|
115
|
-
grainOverlay = mix(grainOverlay, valueNoise(rotate(grainUV, 2.) + vec2(-1.)), .5);
|
|
116
|
-
grainOverlay = pow(grainOverlay, 1.3);
|
|
117
|
-
float grainOverlayV = grainOverlay * 2. - 1.;
|
|
118
|
-
vec3 grainOverlayColor = vec3(step(0., grainOverlayV));
|
|
119
|
-
float grainOverlayStrength = u_grainOverlay * abs(grainOverlayV);
|
|
120
|
-
grainOverlayStrength = pow(grainOverlayStrength, .8);
|
|
121
|
-
color = mix(color, grainOverlayColor, .35 * grainOverlayStrength);
|
|
122
|
-
opacity += .5 * grainOverlayStrength;
|
|
123
|
-
opacity = clamp(opacity, 0., 1.);
|
|
124
|
-
|
|
125
|
-
fragColor = vec4(color, opacity);
|
|
126
|
-
}
|
|
127
|
-
`;
|
|
128
|
-
|
|
129
|
-
export { staticGradientMeshFragmentShader };
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type React from "react";
|
|
2
|
-
export declare const STATIC_GRADIENT_MESH_MAX_COLORS = 10;
|
|
3
|
-
export interface StaticGradientMeshProps 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
|
-
/** Seeds the (fixed) blob layout — change to get a different arrangement. Default: 0. */
|
|
7
|
-
positions?: number;
|
|
8
|
-
/** Horizontal wave warp strength. Default: 0.3. */
|
|
9
|
-
waveX?: number;
|
|
10
|
-
/** Horizontal wave phase shift, 0-1. Default: 0. */
|
|
11
|
-
waveXShift?: number;
|
|
12
|
-
/** Vertical wave warp strength. Default: 0.3. */
|
|
13
|
-
waveY?: number;
|
|
14
|
-
/** Vertical wave phase shift, 0-1. Default: 0. */
|
|
15
|
-
waveYShift?: number;
|
|
16
|
-
/** Blend sharpness between blobs, 0-1 (0 = sharp, 1 = soft). Default: 0.5. */
|
|
17
|
-
mixing?: number;
|
|
18
|
-
/** Grain influence on blob positions, 0-1. Default: 0.2. */
|
|
19
|
-
grainMixer?: number;
|
|
20
|
-
/** Post-composite grain overlay strength, 0-1. Default: 0.1. */
|
|
21
|
-
grainOverlay?: number;
|
|
22
|
-
className?: string;
|
|
23
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { WaterProps } from "./Water.types";
|
|
3
|
-
/**
|
|
4
|
-
* Animated water-caustic image filter — distorts a source image with
|
|
5
|
-
* ripple/wave displacement and caustic light highlights. WebGL2-powered;
|
|
6
|
-
* falls back to the plain source image (via `object-fit: cover`) when
|
|
7
|
-
* WebGL2 is unavailable or the user prefers reduced motion.
|
|
8
|
-
*/
|
|
9
|
-
export declare const Water: React.FC<WaterProps>;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useState, useMemo, useRef, useCallback } 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 { resolveShaderColor } from '../shared/resolveShaderColor.js';
|
|
10
|
-
import { waterFragmentShader } from './Water.shaders.js';
|
|
11
|
-
|
|
12
|
-
const DEFAULT_COLOR_BACK = "var(--color-surface-sunken)";
|
|
13
|
-
const DEFAULT_COLOR_HIGHLIGHT = "var(--color-primary-50)";
|
|
14
|
-
function useWebgl2Supported(disabled) {
|
|
15
|
-
return useMemo(() => {
|
|
16
|
-
if (disabled || typeof document === "undefined")
|
|
17
|
-
return false;
|
|
18
|
-
try {
|
|
19
|
-
return !!document.createElement("canvas").getContext("webgl2");
|
|
20
|
-
}
|
|
21
|
-
catch (_a) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
}, [disabled]);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Animated water-caustic image filter — distorts a source image with
|
|
28
|
-
* ripple/wave displacement and caustic light highlights. WebGL2-powered;
|
|
29
|
-
* falls back to the plain source image (via `object-fit: cover`) when
|
|
30
|
-
* WebGL2 is unavailable or the user prefers reduced motion.
|
|
31
|
-
*/
|
|
32
|
-
const Water = ({ image, colorBack = DEFAULT_COLOR_BACK, colorHighlight = DEFAULT_COLOR_HIGHLIGHT, highlights = 0.5, layering = 0.3, edges = 0, caustic = 1, waves = 0.3, size = 0.3, speed = 1, className, style, ...props }) => {
|
|
33
|
-
const isClient = useIsClient();
|
|
34
|
-
const shouldReduceMotion = useReducedMotion();
|
|
35
|
-
const isDark = useDarkMode();
|
|
36
|
-
const webglSupported = useWebgl2Supported(!!shouldReduceMotion);
|
|
37
|
-
const [imageAspectRatio, setImageAspectRatio] = useState(16 / 9);
|
|
38
|
-
const resolvedBack = useMemo(() => resolveShaderColor(colorBack),
|
|
39
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
-
[colorBack, isDark]);
|
|
41
|
-
const resolvedHighlight = useMemo(() => resolveShaderColor(colorHighlight),
|
|
42
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
43
|
-
[colorHighlight, isDark]);
|
|
44
|
-
const texturesRef = useRef({ u_image: image });
|
|
45
|
-
texturesRef.current.u_image = image;
|
|
46
|
-
const handleTextureLoad = useCallback((name, aspectRatio) => {
|
|
47
|
-
if (name === "u_image")
|
|
48
|
-
setImageAspectRatio(aspectRatio);
|
|
49
|
-
}, []);
|
|
50
|
-
const uniformsRef = useRef({});
|
|
51
|
-
uniformsRef.current.u_colorBack = resolvedBack;
|
|
52
|
-
uniformsRef.current.u_colorHighlight = resolvedHighlight;
|
|
53
|
-
uniformsRef.current.u_imageAspectRatio = imageAspectRatio;
|
|
54
|
-
uniformsRef.current.u_highlights = highlights;
|
|
55
|
-
uniformsRef.current.u_layering = layering;
|
|
56
|
-
uniformsRef.current.u_edges = edges;
|
|
57
|
-
uniformsRef.current.u_caustic = caustic;
|
|
58
|
-
uniformsRef.current.u_waves = waves;
|
|
59
|
-
uniformsRef.current.u_size = size;
|
|
60
|
-
uniformsRef.current.u_speed = speed;
|
|
61
|
-
const imageSrc = typeof image === "string" ? image : image.src;
|
|
62
|
-
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: waterFragmentShader, uniformsRef: uniformsRef, texturesRef: texturesRef, onTextureLoad: handleTextureLoad })) : (jsx("img", { src: imageSrc, alt: "", className: "absolute inset-0 w-full h-full object-cover" })) }));
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
export { Water };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Water fragment shader — adapted from paper-design/shaders' `water.ts`
|
|
3
|
-
* (https://github.com/paper-design/shaders, Apache License 2.0). An image
|
|
4
|
-
* filter: distorts a source image with caustic-noise ripples and wave
|
|
5
|
-
* displacement.
|
|
6
|
-
*
|
|
7
|
-
* Simplified from the original: image UV computed via the shared
|
|
8
|
-
* `getImageCoverUV` cover-fit helper (see shared/imageUV.glsl.ts) instead of
|
|
9
|
-
* paper-design's ShaderSizingParams fit/scale/rotation engine.
|
|
10
|
-
*/
|
|
11
|
-
export declare const waterFragmentShader = "#version 300 es\nprecision mediump float;\n\nuniform float iTime;\nuniform vec2 iResolution;\n\nuniform vec4 u_colorBack;\nuniform vec4 u_colorHighlight;\n\nuniform sampler2D u_image;\nuniform float u_imageAspectRatio;\n\nuniform float u_size;\nuniform float u_highlights;\nuniform float u_layering;\nuniform float u_edges;\nuniform float u_caustic;\nuniform float u_waves;\nuniform float u_speed;\n\nout vec4 fragColor;\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\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\nfloat getUvFrame(vec2 uv) {\n float aax = 2. * fwidth(uv.x);\n float aay = 2. * fwidth(uv.y);\n\n float left = smoothstep(0., aax, uv.x);\n float right = 1.0 - smoothstep(1. - aax, 1., uv.x);\n float bottom = smoothstep(0., aay, uv.y);\n float top = 1.0 - smoothstep(1. - aay, 1., uv.y);\n\n return left * right * bottom * top;\n}\n\nmat2 rotate2D(float r) {\n return mat2(cos(r), sin(r), -sin(r), cos(r));\n}\n\nfloat getCausticNoise(vec2 uv, float t, float scale) {\n vec2 n = vec2(.1);\n vec2 N = vec2(.1);\n mat2 m = rotate2D(.5);\n for (int j = 0; j < 6; j++) {\n uv *= m;\n n *= m;\n vec2 q = uv * scale + float(j) + n + (.5 + .5 * float(j)) * (mod(float(j), 2.) - 1.) * t;\n n += sin(q);\n N += cos(q) / scale;\n scale *= 1.1;\n }\n return (N.x + N.y + 1.);\n}\n\nvoid main() {\n vec2 fragUV = gl_FragCoord.xy / iResolution.xy;\n vec2 imageUV = getImageCoverUV(fragUV, iResolution, u_imageAspectRatio);\n vec2 patternUV = imageUV - .5;\n patternUV = (patternUV * vec2(u_imageAspectRatio, 1.));\n patternUV /= (.01 + .09 * u_size);\n\n float t = u_speed * iTime;\n\n float wavesNoise = snoise((.3 + .1 * sin(t)) * .1 * patternUV + vec2(0., .4 * t));\n\n float causticNoise = getCausticNoise(patternUV + u_waves * vec2(1., -1.) * wavesNoise, 2. * t, 1.5);\n causticNoise += u_layering * getCausticNoise(patternUV + 2. * u_waves * vec2(1., -1.) * wavesNoise, 1.5 * t, 2.);\n causticNoise = causticNoise * causticNoise;\n\n float edgesDistortion = smoothstep(0., .1, imageUV.x);\n edgesDistortion *= smoothstep(0., .1, imageUV.y);\n edgesDistortion *= (smoothstep(1., 1.1, imageUV.x) + (1.0 - smoothstep(.8, .95, imageUV.x)));\n edgesDistortion *= (1.0 - smoothstep(.9, 1., imageUV.y));\n edgesDistortion = mix(edgesDistortion, 1., u_edges);\n\n float causticNoiseDistortion = .02 * causticNoise * edgesDistortion;\n float wavesDistortion = .1 * u_waves * wavesNoise;\n\n imageUV += vec2(wavesDistortion, -wavesDistortion);\n imageUV += (u_caustic * causticNoiseDistortion);\n\n float frame = getUvFrame(imageUV);\n vec4 image = texture(u_image, imageUV);\n vec4 backColor = u_colorBack;\n backColor.rgb *= backColor.a;\n\n vec3 color = mix(backColor.rgb, image.rgb, image.a * frame);\n float opacity = backColor.a + image.a * frame;\n\n causticNoise = max(-.2, causticNoise);\n\n float hightlight = .025 * u_highlights * causticNoise;\n hightlight *= u_colorHighlight.a;\n color = mix(color, u_colorHighlight.rgb, .05 * u_highlights * causticNoise);\n opacity += hightlight;\n\n color += hightlight * (.5 + .5 * wavesNoise);\n opacity += hightlight * (.5 + .5 * wavesNoise);\n\n opacity = clamp(opacity, 0., 1.);\n\n fragColor = vec4(color, opacity);\n}\n";
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import 'react/jsx-runtime';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { glslSimplexNoise2D } from '../shared/shaderNoise.glsl.js';
|
|
4
|
-
import { glslImageCoverUV } from '../shared/imageUV.glsl.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Water fragment shader — adapted from paper-design/shaders' `water.ts`
|
|
8
|
-
* (https://github.com/paper-design/shaders, Apache License 2.0). An image
|
|
9
|
-
* filter: distorts a source image with caustic-noise ripples and wave
|
|
10
|
-
* displacement.
|
|
11
|
-
*
|
|
12
|
-
* Simplified from the original: image UV computed via the shared
|
|
13
|
-
* `getImageCoverUV` cover-fit helper (see shared/imageUV.glsl.ts) instead of
|
|
14
|
-
* paper-design's ShaderSizingParams fit/scale/rotation engine.
|
|
15
|
-
*/
|
|
16
|
-
const waterFragmentShader = `#version 300 es
|
|
17
|
-
precision mediump float;
|
|
18
|
-
|
|
19
|
-
uniform float iTime;
|
|
20
|
-
uniform vec2 iResolution;
|
|
21
|
-
|
|
22
|
-
uniform vec4 u_colorBack;
|
|
23
|
-
uniform vec4 u_colorHighlight;
|
|
24
|
-
|
|
25
|
-
uniform sampler2D u_image;
|
|
26
|
-
uniform float u_imageAspectRatio;
|
|
27
|
-
|
|
28
|
-
uniform float u_size;
|
|
29
|
-
uniform float u_highlights;
|
|
30
|
-
uniform float u_layering;
|
|
31
|
-
uniform float u_edges;
|
|
32
|
-
uniform float u_caustic;
|
|
33
|
-
uniform float u_waves;
|
|
34
|
-
uniform float u_speed;
|
|
35
|
-
|
|
36
|
-
out vec4 fragColor;
|
|
37
|
-
|
|
38
|
-
${glslSimplexNoise2D}
|
|
39
|
-
${glslImageCoverUV}
|
|
40
|
-
|
|
41
|
-
float getUvFrame(vec2 uv) {
|
|
42
|
-
float aax = 2. * fwidth(uv.x);
|
|
43
|
-
float aay = 2. * fwidth(uv.y);
|
|
44
|
-
|
|
45
|
-
float left = smoothstep(0., aax, uv.x);
|
|
46
|
-
float right = 1.0 - smoothstep(1. - aax, 1., uv.x);
|
|
47
|
-
float bottom = smoothstep(0., aay, uv.y);
|
|
48
|
-
float top = 1.0 - smoothstep(1. - aay, 1., uv.y);
|
|
49
|
-
|
|
50
|
-
return left * right * bottom * top;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
mat2 rotate2D(float r) {
|
|
54
|
-
return mat2(cos(r), sin(r), -sin(r), cos(r));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
float getCausticNoise(vec2 uv, float t, float scale) {
|
|
58
|
-
vec2 n = vec2(.1);
|
|
59
|
-
vec2 N = vec2(.1);
|
|
60
|
-
mat2 m = rotate2D(.5);
|
|
61
|
-
for (int j = 0; j < 6; j++) {
|
|
62
|
-
uv *= m;
|
|
63
|
-
n *= m;
|
|
64
|
-
vec2 q = uv * scale + float(j) + n + (.5 + .5 * float(j)) * (mod(float(j), 2.) - 1.) * t;
|
|
65
|
-
n += sin(q);
|
|
66
|
-
N += cos(q) / scale;
|
|
67
|
-
scale *= 1.1;
|
|
68
|
-
}
|
|
69
|
-
return (N.x + N.y + 1.);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
void main() {
|
|
73
|
-
vec2 fragUV = gl_FragCoord.xy / iResolution.xy;
|
|
74
|
-
vec2 imageUV = getImageCoverUV(fragUV, iResolution, u_imageAspectRatio);
|
|
75
|
-
vec2 patternUV = imageUV - .5;
|
|
76
|
-
patternUV = (patternUV * vec2(u_imageAspectRatio, 1.));
|
|
77
|
-
patternUV /= (.01 + .09 * u_size);
|
|
78
|
-
|
|
79
|
-
float t = u_speed * iTime;
|
|
80
|
-
|
|
81
|
-
float wavesNoise = snoise((.3 + .1 * sin(t)) * .1 * patternUV + vec2(0., .4 * t));
|
|
82
|
-
|
|
83
|
-
float causticNoise = getCausticNoise(patternUV + u_waves * vec2(1., -1.) * wavesNoise, 2. * t, 1.5);
|
|
84
|
-
causticNoise += u_layering * getCausticNoise(patternUV + 2. * u_waves * vec2(1., -1.) * wavesNoise, 1.5 * t, 2.);
|
|
85
|
-
causticNoise = causticNoise * causticNoise;
|
|
86
|
-
|
|
87
|
-
float edgesDistortion = smoothstep(0., .1, imageUV.x);
|
|
88
|
-
edgesDistortion *= smoothstep(0., .1, imageUV.y);
|
|
89
|
-
edgesDistortion *= (smoothstep(1., 1.1, imageUV.x) + (1.0 - smoothstep(.8, .95, imageUV.x)));
|
|
90
|
-
edgesDistortion *= (1.0 - smoothstep(.9, 1., imageUV.y));
|
|
91
|
-
edgesDistortion = mix(edgesDistortion, 1., u_edges);
|
|
92
|
-
|
|
93
|
-
float causticNoiseDistortion = .02 * causticNoise * edgesDistortion;
|
|
94
|
-
float wavesDistortion = .1 * u_waves * wavesNoise;
|
|
95
|
-
|
|
96
|
-
imageUV += vec2(wavesDistortion, -wavesDistortion);
|
|
97
|
-
imageUV += (u_caustic * causticNoiseDistortion);
|
|
98
|
-
|
|
99
|
-
float frame = getUvFrame(imageUV);
|
|
100
|
-
vec4 image = texture(u_image, imageUV);
|
|
101
|
-
vec4 backColor = u_colorBack;
|
|
102
|
-
backColor.rgb *= backColor.a;
|
|
103
|
-
|
|
104
|
-
vec3 color = mix(backColor.rgb, image.rgb, image.a * frame);
|
|
105
|
-
float opacity = backColor.a + image.a * frame;
|
|
106
|
-
|
|
107
|
-
causticNoise = max(-.2, causticNoise);
|
|
108
|
-
|
|
109
|
-
float hightlight = .025 * u_highlights * causticNoise;
|
|
110
|
-
hightlight *= u_colorHighlight.a;
|
|
111
|
-
color = mix(color, u_colorHighlight.rgb, .05 * u_highlights * causticNoise);
|
|
112
|
-
opacity += hightlight;
|
|
113
|
-
|
|
114
|
-
color += hightlight * (.5 + .5 * wavesNoise);
|
|
115
|
-
opacity += hightlight * (.5 + .5 * wavesNoise);
|
|
116
|
-
|
|
117
|
-
opacity = clamp(opacity, 0., 1.);
|
|
118
|
-
|
|
119
|
-
fragColor = vec4(color, opacity);
|
|
120
|
-
}
|
|
121
|
-
`;
|
|
122
|
-
|
|
123
|
-
export { waterFragmentShader };
|