@flikk/ui 1.0.0-beta.30 → 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 +375 -5
- 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/AgentStatus/AgentStatus.d.ts +3 -0
- package/dist/components/ai/AgentStatus/AgentStatus.js +144 -0
- package/dist/components/ai/AgentStatus/AgentStatus.theme.d.ts +2 -0
- package/dist/components/ai/AgentStatus/AgentStatus.theme.js +37 -0
- package/dist/components/ai/AgentStatus/AgentStatus.types.d.ts +116 -0
- package/dist/components/ai/AgentStatus/index.d.ts +3 -0
- package/dist/components/ai/CodeBlock/CodeBlock.js +3 -3
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.js +13 -14
- package/dist/components/ai/PromptInput/PromptInput.theme.js +3 -3
- package/dist/components/ai/PromptInput/VoiceRecorder.js +3 -3
- package/dist/components/ai/PromptSuggestion/PromptSuggestion.theme.js +2 -2
- package/dist/components/ai/Reasoning/Reasoning.d.ts +5 -0
- package/dist/components/ai/Reasoning/Reasoning.js +40 -0
- 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 +73 -0
- 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 +3 -0
- package/dist/components/ai/SourceCitation/SourceCitation.d.ts +4 -0
- package/dist/components/ai/SourceCitation/SourceCitation.js +29 -0
- package/dist/components/ai/SourceCitation/SourceCitation.theme.d.ts +2 -0
- package/dist/components/ai/SourceCitation/SourceCitation.theme.js +23 -0
- package/dist/components/ai/SourceCitation/SourceCitation.types.d.ts +55 -0
- package/dist/components/ai/SourceCitation/index.d.ts +3 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.d.ts +7 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.js +8 -7
- package/dist/components/ai/StreamingResponse/ErrorDisplay.js +2 -2
- 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 +14 -10
- package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +3 -1
- 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.js +2 -2
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
- package/dist/components/ai/index.d.ts +6 -2
- package/dist/components/ai/index.js +10 -3
- package/dist/components/ai/shared/StatusIndicator.d.ts +8 -0
- package/dist/components/ai/shared/StatusIndicator.js +34 -0
- package/dist/components/canvas/BaseNode.js +1 -1
- package/dist/components/canvas/CanvasToolbar.js +2 -3
- package/dist/components/canvas/Edge.js +2 -2
- package/dist/components/canvas/NodeControls.js +2 -3
- package/dist/components/canvas/NodeRenderer.js +4 -4
- package/dist/components/charts/ActivityRings/ActivityRings.js +4 -4
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +1 -1
- package/dist/components/charts/AreaChart/AreaChart.js +24 -35
- package/dist/components/charts/AreaChart/AreaChart.theme.d.ts +1 -6
- package/dist/components/charts/AreaChart/AreaChart.theme.js +10 -22
- package/dist/components/charts/AreaChart/AreaChart.types.d.ts +18 -11
- package/dist/components/charts/AreaChart/AreaChart.types.js +10 -3
- package/dist/components/charts/AreaChart/index.d.ts +1 -1
- package/dist/components/charts/BarChart/BarChart.js +13 -32
- package/dist/components/charts/BarChart/BarChart.types.d.ts +20 -16
- package/dist/components/charts/BarChart/BarChart.types.js +11 -4
- package/dist/components/charts/ComboChart/BarRenderer.js +10 -7
- package/dist/components/charts/ComboChart/BarRenderer.types.d.ts +1 -1
- package/dist/components/charts/ComboChart/ComboChart.js +11 -24
- package/dist/components/charts/ComboChart/ComboChart.types.d.ts +15 -13
- package/dist/components/charts/ComboChart/ComboChart.types.js +14 -2
- package/dist/components/charts/ComboChart/ComboChartCanvas.js +1 -1
- package/dist/components/charts/ComboChart/LineRenderer.js +16 -11
- 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.d.ts +16 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.js +237 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.types.d.ts +62 -0
- package/dist/components/charts/HorizontalBarChart/HorizontalBarChart.types.js +21 -0
- package/dist/components/charts/HorizontalBarChart/index.d.ts +3 -0
- package/dist/components/charts/LineChart/LineChart.js +11 -28
- package/dist/components/charts/LineChart/LineChart.types.d.ts +11 -14
- package/dist/components/charts/LineChart/LineChart.types.js +11 -3
- package/dist/components/charts/LollipopChart/LollipopChart.d.ts +3 -0
- package/dist/components/charts/LollipopChart/LollipopChart.js +361 -0
- package/dist/components/charts/LollipopChart/LollipopChart.types.d.ts +42 -0
- package/dist/components/charts/LollipopChart/LollipopChart.types.js +12 -0
- package/dist/components/charts/LollipopChart/index.d.ts +3 -0
- package/dist/components/charts/RadarChart/RadarChart.js +1 -1
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +151 -133
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +20 -18
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.js +10 -4
- package/dist/components/charts/hooks/useChartAccessibility.d.ts +1 -1
- package/dist/components/charts/hooks/useChartAccessibility.js +12 -6
- package/dist/components/charts/hooks/useTooltipPosition.js +18 -6
- package/dist/components/charts/index.d.ts +10 -8
- package/dist/components/charts/index.js +8 -4
- package/dist/components/charts/shared/ChartAxis/CategoryYAxis.d.ts +14 -0
- package/dist/components/charts/shared/ChartAxis/CategoryYAxis.js +35 -0
- package/dist/components/charts/shared/ChartAxis/ChartAxis.types.d.ts +69 -8
- package/dist/components/charts/shared/ChartAxis/ValueXAxis.d.ts +14 -0
- package/dist/components/charts/shared/ChartAxis/ValueXAxis.js +64 -0
- package/dist/components/charts/shared/ChartAxis/XAxis.js +1 -1
- package/dist/components/charts/shared/ChartAxis/YAxis.js +2 -2
- package/dist/components/charts/shared/ChartAxis/index.d.ts +3 -1
- package/dist/components/charts/shared/ChartGrid/HorizontalGrid.d.ts +0 -2
- package/dist/components/charts/shared/ChartGrid/HorizontalGrid.js +1 -1
- package/dist/components/charts/shared/ChartGrid/VerticalGrid.d.ts +29 -0
- package/dist/components/charts/shared/ChartGrid/VerticalGrid.js +26 -0
- package/dist/components/charts/shared/ChartGrid/index.d.ts +2 -0
- package/dist/components/charts/shared/ChartMarker/ChartMarker.js +7 -1
- 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 +21 -26
- package/dist/components/charts/types/chart.types.d.ts +9 -5
- package/dist/components/charts/types/chart.types.js +1 -7
- package/dist/components/charts/utils/animation-utils.d.ts +12 -7
- package/dist/components/charts/utils/animation-utils.js +19 -21
- package/dist/components/charts/utils/bar-emphasis.d.ts +32 -3
- package/dist/components/charts/utils/bar-emphasis.js +24 -8
- package/dist/components/charts/utils/index.d.ts +1 -0
- package/dist/components/charts/utils/series-color.d.ts +7 -0
- package/dist/components/charts/utils/series-color.js +20 -0
- package/dist/components/core/Accordion/Accordion.theme.js +3 -3
- package/dist/components/core/Accordion/AccordionTrigger.js +2 -2
- package/dist/components/core/Alert/Alert.animations.d.ts +11 -3
- package/dist/components/core/Alert/Alert.animations.js +30 -8
- package/dist/components/core/Alert/Alert.js +23 -9
- 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.js +50 -42
- package/dist/components/core/Avatar/Avatar.theme.d.ts +8 -4
- package/dist/components/core/Avatar/Avatar.theme.js +64 -8
- package/dist/components/core/Avatar/Avatar.types.d.ts +13 -2
- package/dist/components/core/Avatar/index.d.ts +1 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.js +6 -8
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.d.ts +1 -2
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +2 -6
- package/dist/components/core/AvatarGroup/AvatarGroup.types.d.ts +0 -6
- package/dist/components/core/AvatarGroup/index.d.ts +1 -1
- package/dist/components/core/Badge/Badge.animations.d.ts +0 -5
- package/dist/components/core/Badge/Badge.animations.js +5 -82
- package/dist/components/core/Badge/Badge.d.ts +7 -4
- package/dist/components/core/Badge/Badge.js +33 -65
- package/dist/components/core/Badge/Badge.theme.js +26 -24
- package/dist/components/core/Badge/Badge.types.d.ts +18 -34
- package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.d.ts +1 -4
- package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +6 -6
- package/dist/components/core/Button/Button.js +14 -58
- package/dist/components/core/Button/Button.theme.d.ts +2 -0
- package/dist/components/core/Button/Button.theme.js +35 -22
- package/dist/components/core/Button/Button.types.d.ts +26 -13
- package/dist/components/core/Button/index.d.ts +0 -2
- package/dist/components/core/Calendar/Calendar.js +20 -5
- package/dist/components/core/Calendar/Calendar.theme.js +15 -23
- package/dist/components/core/Calendar/Calendar.types.d.ts +0 -1
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +3 -3
- 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 +40 -4
- 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/CardFooter.js +1 -1
- package/dist/components/core/Card/CardHeader.js +4 -1
- package/dist/components/core/CommandPalette/CommandPalette.js +5 -4
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +3 -7
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +2 -0
- 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/ContextMenuItem.js +2 -2
- 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 +22 -9
- package/dist/components/core/DragDrop/DragDrop.theme.js +2 -2
- package/dist/components/core/Drawer/Drawer.theme.js +7 -4
- package/dist/components/core/Drawer/DrawerHeader.js +2 -3
- package/dist/components/core/Dropdown/Dropdown.theme.js +3 -1
- package/dist/components/core/Dropdown/DropdownItem.js +2 -2
- package/dist/components/core/Dropdown/DropdownMenu.js +22 -7
- package/dist/components/core/Dropdown/DropdownTrigger.js +16 -5
- package/dist/components/core/HeroCard/HeroCard.theme.js +5 -2
- package/dist/components/core/Kbd/Kbd.theme.js +4 -2
- package/dist/components/core/Link/Link.js +7 -5
- 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 +4 -2
- package/dist/components/core/Message/Message.theme.js +8 -10
- package/dist/components/core/Message/MessageAudio.js +2 -2
- package/dist/components/core/Message/MessageFile.js +2 -2
- package/dist/components/core/Message/MessageLink.js +2 -2
- package/dist/components/core/Message/MessageStatusIndicator.js +5 -5
- 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.d.ts +1 -1
- package/dist/components/core/Modal/Modal.js +6 -2
- package/dist/components/core/Modal/Modal.theme.js +9 -4
- package/dist/components/core/Modal/ModalHeader.js +2 -3
- package/dist/components/core/ModalStack/ModalStackModal.js +4 -2
- package/dist/components/core/NavItem/NavItem.js +8 -7
- package/dist/components/core/NavItem/NavItem.theme.js +1 -1
- package/dist/components/core/OfflineIndicator/OfflineIndicator.animations.d.ts +22 -0
- package/dist/components/core/OfflineIndicator/OfflineIndicator.animations.js +54 -0
- package/dist/components/core/OfflineIndicator/OfflineIndicator.js +23 -24
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +27 -6
- package/dist/components/core/OfflineIndicator/OfflineIndicator.types.d.ts +17 -0
- package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
- package/dist/components/core/PageHeading/PageHeadingBackButton.js +2 -2
- package/dist/components/core/Pagination/Pagination.js +3 -3
- package/dist/components/core/Pagination/Pagination.theme.js +5 -5
- package/dist/components/core/Pill/Pill.js +5 -2
- package/dist/components/core/Pill/Pill.theme.js +9 -5
- 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.js +4 -5
- package/dist/components/core/Rating/Rating.theme.js +2 -2
- 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 +10 -7
- 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/Sidebar.types.d.ts +4 -2
- package/dist/components/core/Sidebar/SidebarContent.js +1 -1
- package/dist/components/core/Sidebar/SidebarHeader.js +3 -3
- package/dist/components/core/Sidebar/SidebarMobileTrigger.js +2 -2
- package/dist/components/core/Sidebar/SidebarSearch.js +4 -4
- package/dist/components/core/Sidebar/SidebarToggle.js +3 -3
- package/dist/components/core/Sidebar/SidebarUserProfile.js +3 -3
- package/dist/components/core/Sortable/Sortable.js +2 -2
- 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.js +2 -2
- package/dist/components/core/Tag/Tag.theme.js +5 -3
- package/dist/components/core/Toast/Toast.js +3 -3
- package/dist/components/core/Toast/Toast.types.d.ts +1 -1
- package/dist/components/core/Toast/ToastProvider.js +1 -1
- package/dist/components/core/Toast/useToast.js +5 -5
- package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/core/Tooltip/Tooltip.js +42 -10
- package/dist/components/core/Tooltip/Tooltip.types.d.ts +25 -0
- package/dist/components/core/Tree/Tree.js +2 -2
- 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/core/shared/interaction.animations.d.ts +51 -0
- package/dist/components/core/shared/interaction.animations.js +59 -0
- package/dist/components/data-display/Feed/Feed.js +2 -2
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +7 -7
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +3 -3
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +1 -1
- package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -3
- package/dist/components/data-display/KPI/KPI.js +12 -21
- package/dist/components/data-display/KPI/KPI.theme.js +8 -4
- package/dist/components/data-display/Metric/Metric.js +2 -2
- package/dist/components/data-display/Metric/Metric.theme.js +25 -8
- package/dist/components/data-display/Metric/Metric.types.d.ts +1 -1
- package/dist/components/data-display/Table/Table.theme.js +11 -11
- package/dist/components/data-display/Table/TableActions.js +2 -2
- package/dist/components/data-display/Table/TableActionsMenu.js +1 -1
- package/dist/components/data-display/Table/TableColumnManager.js +2 -3
- package/dist/components/data-display/Table/TableContext.js +1 -0
- package/dist/components/data-display/Table/TableDeclarative.js +3 -3
- package/dist/components/data-display/Table/TableFilter.js +13 -6
- package/dist/components/data-display/Table/TableHeader.js +3 -3
- package/dist/components/data-display/Table/TableRow.js +2 -2
- package/dist/components/data-display/Table/TableSelectionHeader.js +4 -4
- package/dist/components/data-display/Timeline/Timeline.theme.js +1 -1
- package/dist/components/data-display/Timeline/TimelineMarker.js +2 -2
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.js +3 -3
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +4 -4
- package/dist/components/effects/DotPattern/DotPattern.js +6 -0
- package/dist/components/effects/DotPattern/DotPattern.types.d.ts +4 -2
- package/dist/components/effects/MeshGradient/MeshGradient.utils.d.ts +1 -1
- package/dist/components/effects/MeshGradient/MeshGradient.utils.js +1 -1
- 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.js +2 -1
- package/dist/components/forms/Checkbox/Checkbox.theme.js +3 -3
- package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerGradient.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerHeader.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerImage.js +3 -3
- package/dist/components/forms/ColorPicker/ColorPickerInput.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerPresets.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +2 -2
- package/dist/components/forms/Combobox/Combobox.js +5 -3
- package/dist/components/forms/Combobox/Combobox.theme.js +2 -2
- package/dist/components/forms/DatePicker/DatePicker.animations.js +16 -25
- package/dist/components/forms/DatePicker/DatePicker.theme.js +2 -2
- package/dist/components/forms/DatePicker/DatePickerBody.js +1 -1
- package/dist/components/forms/DatePicker/DatePickerTrigger.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +4 -4
- package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +1 -1
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +1 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +2 -2
- package/dist/components/forms/FileUpload/FileUpload.js +4 -4
- package/dist/components/forms/FileUpload/FileUpload.theme.js +7 -3
- package/dist/components/forms/FileUpload/FileUploadProgress.js +7 -7
- package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +1 -1
- package/dist/components/forms/Input/Input.js +6 -7
- package/dist/components/forms/Input/Input.theme.js +19 -15
- package/dist/components/forms/InputAddress/InputAddress.js +10 -3
- package/dist/components/forms/InputAddress/InputAddress.types.d.ts +2 -2
- package/dist/components/forms/InputCounter/InputCounter.js +3 -3
- package/dist/components/forms/InputOTP/InputOTP.d.ts +3 -12
- package/dist/components/forms/InputOTP/InputOTP.js +140 -151
- package/dist/components/forms/InputOTP/InputOTP.theme.d.ts +5 -1
- package/dist/components/forms/InputOTP/InputOTP.theme.js +40 -5
- package/dist/components/forms/InputOTP/InputOTP.types.d.ts +45 -2
- package/dist/components/forms/InputOTP/index.d.ts +1 -1
- package/dist/components/forms/InputTag/InputTag.js +5 -5
- package/dist/components/forms/InputTag/InputTag.theme.js +1 -2
- package/dist/components/forms/Mention/Mention.theme.js +3 -5
- package/dist/components/forms/Radio/Radio.js +3 -2
- package/dist/components/forms/Radio/Radio.theme.js +3 -3
- package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +12 -16
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +165 -1681
- 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.d.ts +5 -1
- package/dist/components/forms/Select/Select.js +14 -13
- package/dist/components/forms/Select/Select.theme.js +4 -4
- package/dist/components/forms/Select/Select.types.d.ts +74 -8
- 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.animations.d.ts +1 -2
- package/dist/components/forms/SelectableCard/SelectableCard.animations.js +6 -7
- package/dist/components/forms/SelectableCard/SelectableCard.js +3 -2
- package/dist/components/forms/SelectableCard/SelectableCard.theme.js +1 -1
- package/dist/components/forms/Signature/Signature.js +1 -1
- package/dist/components/forms/Slider/Slider.js +24 -11
- package/dist/components/forms/Slider/Slider.theme.js +9 -3
- package/dist/components/forms/Switch/Switch.theme.js +3 -3
- package/dist/components/forms/TimePicker/TimePicker.theme.js +7 -8
- package/dist/components/forms/TimePicker/TimePickerContent.js +1 -1
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +3 -3
- package/dist/components/forms/forms.theme.js +38 -13
- package/dist/components/forms/index.js +2 -1
- 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 +197 -4
- package/dist/components/generative/resolvers.js +16 -16
- package/dist/components/generative/schema.generated.js +2522 -328
- 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 +2522 -328
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/useElapsedTime.d.ts +28 -0
- package/dist/hooks/useElapsedTime.js +37 -0
- package/dist/hooks/useSelectPortal.d.ts +10 -2
- package/dist/hooks/useSelectPortal.js +6 -3
- package/dist/index.js +2 -5
- package/dist/registry.json +3262 -2464
- package/dist/shadcn-compat.css +6 -6
- 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/theme.css +5 -1
- package/dist/themes/ember.css +131 -0
- package/dist/themes/iris.css +94 -0
- package/dist/themes/jade.css +139 -0
- package/dist/themes/precision.css +232 -0
- package/dist/tools.json +2557 -328
- package/dist/utils/colorUtils.d.ts +6 -6
- package/dist/utils/colorUtils.js +8 -8
- package/dist/utils/index.d.ts +0 -1
- package/package.json +39 -6
- package/src/global.scss +32 -28
- package/src/styles/theme.css +547 -176
- package/src/styles/theme.test.ts +119 -0
- package/tailwind.preset.cjs +66 -38
- 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 -207
- 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 -65
- package/dist/components/charts/ScatterPlot/ScatterPlot.types.js +0 -12
- 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/core/Pill/Pill.animations.d.ts +0 -32
- package/dist/components/core/Pill/Pill.animations.js +0 -16
- 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,111 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { forwardRef, useRef, useCallback } from 'react';
|
|
4
|
-
import { useReducedMotion, useMotionValue, useSpring, motion } from 'motion/react';
|
|
5
|
-
import { cn } from '../../../utils/cn.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* MagneticElement
|
|
9
|
-
*
|
|
10
|
-
* A wrapper component that adds a magnetic pull effect to its children.
|
|
11
|
-
* When the cursor moves over the element, it subtly translates toward
|
|
12
|
-
* the cursor position, creating an engaging interactive effect.
|
|
13
|
-
*
|
|
14
|
-
* The component uses spring-based animations for smooth, natural movement
|
|
15
|
-
* and respects the user's reduced motion preferences.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* <MagneticElement strength={0.3}>
|
|
20
|
-
* <Button>Hover me</Button>
|
|
21
|
-
* </MagneticElement>
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```tsx
|
|
26
|
-
* // With parallax inner content
|
|
27
|
-
* <MagneticElement strength={0.4} innerStrength={2}>
|
|
28
|
-
* <div className="p-4">
|
|
29
|
-
* <span>Pull me closer</span>
|
|
30
|
-
* </div>
|
|
31
|
-
* </MagneticElement>
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
const MagneticElement = forwardRef(({ strength = 0.3, distance = 100, damping = 15, stiffness = 150, innerStrength = 1.5, disabled = false, className, children, onDrag: _onDrag, onDragStart: _onDragStart, onDragEnd: _onDragEnd, onAnimationStart: _onAnimationStart, ...restProps }, ref) => {
|
|
35
|
-
const elementRef = useRef(null);
|
|
36
|
-
const shouldReduceMotion = useReducedMotion();
|
|
37
|
-
const isDisabled = disabled || shouldReduceMotion;
|
|
38
|
-
// Motion values for outer wrapper translation
|
|
39
|
-
const x = useMotionValue(0);
|
|
40
|
-
const y = useMotionValue(0);
|
|
41
|
-
// Spring-animated versions of x and y for smooth movement
|
|
42
|
-
const springConfig = { damping, stiffness, mass: 1 };
|
|
43
|
-
const springX = useSpring(x, springConfig);
|
|
44
|
-
const springY = useSpring(y, springConfig);
|
|
45
|
-
// Motion values for inner content (parallax effect)
|
|
46
|
-
const innerX = useMotionValue(0);
|
|
47
|
-
const innerY = useMotionValue(0);
|
|
48
|
-
const innerSpringX = useSpring(innerX, springConfig);
|
|
49
|
-
const innerSpringY = useSpring(innerY, springConfig);
|
|
50
|
-
const handleMouseMove = useCallback((event) => {
|
|
51
|
-
var _a;
|
|
52
|
-
if (isDisabled)
|
|
53
|
-
return;
|
|
54
|
-
const element = elementRef.current;
|
|
55
|
-
if (!element)
|
|
56
|
-
return;
|
|
57
|
-
const rect = element.getBoundingClientRect();
|
|
58
|
-
const centerX = rect.left + rect.width / 2;
|
|
59
|
-
const centerY = rect.top + rect.height / 2;
|
|
60
|
-
// Calculate distance from cursor to element center
|
|
61
|
-
const deltaX = event.clientX - centerX;
|
|
62
|
-
const deltaY = event.clientY - centerY;
|
|
63
|
-
const distanceFromCenter = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
|
|
64
|
-
// Only apply effect within the configured distance
|
|
65
|
-
const maxDistance = Math.max(rect.width, rect.height) / 2 + distance;
|
|
66
|
-
if (distanceFromCenter < maxDistance) {
|
|
67
|
-
// Apply translation proportional to offset and strength
|
|
68
|
-
const translateX = deltaX * strength;
|
|
69
|
-
const translateY = deltaY * strength;
|
|
70
|
-
x.set(translateX);
|
|
71
|
-
y.set(translateY);
|
|
72
|
-
// Inner content moves slightly more for parallax feel
|
|
73
|
-
if (innerStrength !== 1) {
|
|
74
|
-
innerX.set(translateX * (innerStrength - 1));
|
|
75
|
-
innerY.set(translateY * (innerStrength - 1));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Forward to user's onMouseMove if provided
|
|
79
|
-
(_a = restProps.onMouseMove) === null || _a === void 0 ? void 0 : _a.call(restProps, event);
|
|
80
|
-
}, [isDisabled, strength, distance, innerStrength, x, y, innerX, innerY, restProps.onMouseMove]);
|
|
81
|
-
const handleMouseLeave = useCallback((event) => {
|
|
82
|
-
var _a;
|
|
83
|
-
if (isDisabled)
|
|
84
|
-
return;
|
|
85
|
-
// Reset to center position; the spring will animate the return
|
|
86
|
-
x.set(0);
|
|
87
|
-
y.set(0);
|
|
88
|
-
innerX.set(0);
|
|
89
|
-
innerY.set(0);
|
|
90
|
-
// Forward to user's onMouseLeave if provided
|
|
91
|
-
(_a = restProps.onMouseLeave) === null || _a === void 0 ? void 0 : _a.call(restProps, event);
|
|
92
|
-
}, [isDisabled, x, y, innerX, innerY, restProps.onMouseLeave]);
|
|
93
|
-
// When disabled or reduced motion preferred, render without motion
|
|
94
|
-
if (isDisabled) {
|
|
95
|
-
return (jsx("div", { ref: ref, className: cn("inline-block", className), ...restProps, children: children }));
|
|
96
|
-
}
|
|
97
|
-
const hasParallax = innerStrength !== 1;
|
|
98
|
-
return (jsx(motion.div, { ref: (node) => {
|
|
99
|
-
// Assign to both the internal ref and the forwarded ref
|
|
100
|
-
elementRef.current = node;
|
|
101
|
-
if (typeof ref === "function") {
|
|
102
|
-
ref(node);
|
|
103
|
-
}
|
|
104
|
-
else if (ref) {
|
|
105
|
-
ref.current = node;
|
|
106
|
-
}
|
|
107
|
-
}, className: cn("inline-block", className), style: { x: springX, y: springY }, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, ...restProps, children: hasParallax ? (jsx(motion.div, { style: { x: innerSpringX, y: innerSpringY }, children: children })) : (children) }));
|
|
108
|
-
});
|
|
109
|
-
MagneticElement.displayName = "MagneticElement";
|
|
110
|
-
|
|
111
|
-
export { MagneticElement };
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
export interface MagneticElementProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
-
/**
|
|
4
|
-
* Strength of the magnetic pull effect.
|
|
5
|
-
* Value between 0 and 1, where 0 is no effect and 1 is maximum pull.
|
|
6
|
-
* @default 0.3
|
|
7
|
-
*/
|
|
8
|
-
strength?: number;
|
|
9
|
-
/**
|
|
10
|
-
* Distance in pixels at which the magnetic effect activates.
|
|
11
|
-
* Only applies when the cursor is within this radius of the element center.
|
|
12
|
-
* @default 100
|
|
13
|
-
*/
|
|
14
|
-
distance?: number;
|
|
15
|
-
/**
|
|
16
|
-
* Spring damping for the animation.
|
|
17
|
-
* Higher values result in less oscillation and a more dampened feel.
|
|
18
|
-
* @default 15
|
|
19
|
-
*/
|
|
20
|
-
damping?: number;
|
|
21
|
-
/**
|
|
22
|
-
* Spring stiffness for the animation.
|
|
23
|
-
* Higher values result in a snappier spring.
|
|
24
|
-
* @default 150
|
|
25
|
-
*/
|
|
26
|
-
stiffness?: number;
|
|
27
|
-
/**
|
|
28
|
-
* Multiplier for inner content movement relative to the outer wrapper.
|
|
29
|
-
* Creates a subtle parallax-like effect where content moves slightly more.
|
|
30
|
-
* Set to 1 for no parallax. Values above 1 amplify inner movement.
|
|
31
|
-
* @default 1.5
|
|
32
|
-
*/
|
|
33
|
-
innerStrength?: number;
|
|
34
|
-
/**
|
|
35
|
-
* When true, disables the magnetic effect entirely.
|
|
36
|
-
* The component renders as a plain div wrapper.
|
|
37
|
-
* @default false
|
|
38
|
-
*/
|
|
39
|
-
disabled?: boolean;
|
|
40
|
-
/** Additional className for the outer wrapper */
|
|
41
|
-
className?: string;
|
|
42
|
-
/** Content to wrap with the magnetic effect */
|
|
43
|
-
children: React.ReactNode;
|
|
44
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { MetaballsProps } from "./Metaballs.types";
|
|
3
|
-
/**
|
|
4
|
-
* Animated lava-lamp-style blobby merging balls. WebGL2-powered; falls back
|
|
5
|
-
* to a static CSS radial-gradient cluster when WebGL2 is unavailable or the
|
|
6
|
-
* user prefers reduced motion.
|
|
7
|
-
*/
|
|
8
|
-
export declare const Metaballs: React.FC<MetaballsProps>;
|
|
@@ -1,59 +0,0 @@
|
|
|
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 { metaballsFragmentShader } from './Metaballs.shaders.js';
|
|
11
|
-
import { METABALLS_MAX_COLORS } from './Metaballs.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 lava-lamp-style blobby merging balls. WebGL2-powered; falls back
|
|
29
|
-
* to a static CSS radial-gradient cluster when WebGL2 is unavailable or the
|
|
30
|
-
* user prefers reduced motion.
|
|
31
|
-
*/
|
|
32
|
-
const Metaballs = ({ colorBack = DEFAULT_COLOR_BACK, colors = DEFAULT_COLORS, count = 10, size = 0.6, speed = 1, className, style, ...props }) => {
|
|
33
|
-
var _a, _b, _c, _d;
|
|
34
|
-
const isClient = useIsClient();
|
|
35
|
-
const shouldReduceMotion = useReducedMotion();
|
|
36
|
-
const isDark = useDarkMode();
|
|
37
|
-
const webglSupported = useWebgl2Supported(!!shouldReduceMotion);
|
|
38
|
-
const safeColors = colors.length > 0 ? colors.slice(0, METABALLS_MAX_COLORS) : DEFAULT_COLORS;
|
|
39
|
-
const resolvedColors = useMemo(() => resolveShaderColors(safeColors),
|
|
40
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
-
[safeColors.join("|"), isDark]);
|
|
42
|
-
const resolvedBack = useMemo(() => resolveShaderColor(colorBack),
|
|
43
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
44
|
-
[colorBack, isDark]);
|
|
45
|
-
const uniformsRef = useRef({});
|
|
46
|
-
for (let i = 0; i < METABALLS_MAX_COLORS; i++) {
|
|
47
|
-
uniformsRef.current[`u_colors[${i}]`] =
|
|
48
|
-
(_b = (_a = resolvedColors[i]) !== null && _a !== void 0 ? _a : resolvedColors[resolvedColors.length - 1]) !== null && _b !== void 0 ? _b : [0, 0, 0, 0];
|
|
49
|
-
}
|
|
50
|
-
uniformsRef.current.u_colorsCount = resolvedColors.length;
|
|
51
|
-
uniformsRef.current.u_colorBack = resolvedBack;
|
|
52
|
-
uniformsRef.current.u_count = count;
|
|
53
|
-
uniformsRef.current.u_size = size;
|
|
54
|
-
uniformsRef.current.u_speed = speed;
|
|
55
|
-
const fallbackGradient = `radial-gradient(circle at 30% 40%, ${(_c = safeColors[0]) !== null && _c !== void 0 ? _c : "var(--color-primary)"}, transparent 60%), radial-gradient(circle at 70% 60%, ${(_d = safeColors[safeColors.length - 1]) !== null && _d !== void 0 ? _d : "var(--color-primary)"}, transparent 60%), ${colorBack}`;
|
|
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: metaballsFragmentShader, uniformsRef: uniformsRef })) : (jsx("div", { className: "absolute inset-0", style: { background: fallbackGradient } })) }));
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export { Metaballs };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metaballs fragment shader — adapted from paper-design/shaders' `metaballs.ts`
|
|
3
|
-
* (https://github.com/paper-design/shaders, Apache License 2.0).
|
|
4
|
-
*
|
|
5
|
-
* Simplified from the original: plain centered/aspect-corrected UV
|
|
6
|
-
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
7
|
-
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
8
|
-
* instead of pre-generated noise-texture sampling.
|
|
9
|
-
*/
|
|
10
|
-
export declare const metaballsFragmentShader = "#version 300 es\nprecision mediump float;\n\nuniform float iTime;\nuniform vec2 iResolution;\n\nuniform vec4 u_colorBack;\nuniform vec4 u_colors[8];\nuniform float u_colorsCount;\nuniform float u_size;\nuniform float u_count;\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 noise(float x) {\n float i = floor(x);\n float f = fract(x);\n float u = f * f * (3.0 - 2.0 * f);\n vec2 p0 = vec2(i, 0.0);\n vec2 p1 = vec2(i + 1.0, 0.0);\n return mix(randomR(p0), randomR(p1), u);\n}\n\nfloat getBallShape(vec2 uv, vec2 c, float p) {\n float s = .5 * length(uv - c);\n s = 1. - clamp(s, 0., 1.);\n s = pow(s, p);\n return s;\n}\n\nvoid main() {\n vec2 objectUV = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);\n vec2 shape_uv = objectUV + .5;\n\n const float firstFrameOffset = 2503.4;\n float t = .2 * u_speed * iTime + firstFrameOffset;\n\n vec3 totalColor = vec3(0.);\n float totalShape = 0.;\n float totalOpacity = 0.;\n\n for (int i = 0; i < 20; i++) {\n if (i >= int(ceil(u_count))) break;\n float idxFract = float(i) / float(20);\n float angle = TWO_PI * idxFract;\n float speed = 1. - .2 * idxFract;\n float noiseX = noise(angle * 10. + float(i) + t * speed);\n float noiseY = noise(angle * 20. + float(i) - t * speed);\n vec2 pos = vec2(.5) + 1e-4 + .9 * (vec2(noiseX, noiseY) - .5);\n\n int safeIndex = i % int(u_colorsCount + 0.5);\n vec4 ballColor = u_colors[safeIndex];\n ballColor.rgb *= ballColor.a;\n\n float sizeFrac = 1.;\n if (float(i) > floor(u_count - 1.)) {\n sizeFrac *= fract(u_count);\n }\n\n float shape = getBallShape(shape_uv, pos, 45. - 30. * u_size * sizeFrac);\n shape *= pow(u_size, .2);\n shape = smoothstep(0., 1., shape);\n\n totalColor += ballColor.rgb * shape;\n totalShape += shape;\n totalOpacity += ballColor.a * shape;\n }\n\n totalColor /= max(totalShape, 1e-4);\n totalOpacity /= max(totalShape, 1e-4);\n\n float edge_width = fwidth(totalShape);\n float finalShape = smoothstep(.4, .4 + edge_width, totalShape);\n\n vec3 color = totalColor * finalShape;\n float opacity = totalOpacity * finalShape;\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,102 +0,0 @@
|
|
|
1
|
-
import 'react/jsx-runtime';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { glslDeclarePI, glslHashFloat } from '../shared/shaderNoise.glsl.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Metaballs fragment shader — adapted from paper-design/shaders' `metaballs.ts`
|
|
7
|
-
* (https://github.com/paper-design/shaders, Apache License 2.0).
|
|
8
|
-
*
|
|
9
|
-
* Simplified from the original: plain centered/aspect-corrected UV
|
|
10
|
-
* (gl_FragCoord/iResolution) instead of paper-design's ShaderSizingParams
|
|
11
|
-
* fit/scale/rotation engine; pure-hash GLSL (see shared/shaderNoise.glsl.ts)
|
|
12
|
-
* instead of pre-generated noise-texture sampling.
|
|
13
|
-
*/
|
|
14
|
-
const metaballsFragmentShader = `#version 300 es
|
|
15
|
-
precision mediump float;
|
|
16
|
-
|
|
17
|
-
uniform float iTime;
|
|
18
|
-
uniform vec2 iResolution;
|
|
19
|
-
|
|
20
|
-
uniform vec4 u_colorBack;
|
|
21
|
-
uniform vec4 u_colors[8];
|
|
22
|
-
uniform float u_colorsCount;
|
|
23
|
-
uniform float u_size;
|
|
24
|
-
uniform float u_count;
|
|
25
|
-
uniform float u_speed;
|
|
26
|
-
|
|
27
|
-
out vec4 fragColor;
|
|
28
|
-
|
|
29
|
-
${glslDeclarePI}
|
|
30
|
-
${glslHashFloat}
|
|
31
|
-
|
|
32
|
-
float noise(float x) {
|
|
33
|
-
float i = floor(x);
|
|
34
|
-
float f = fract(x);
|
|
35
|
-
float u = f * f * (3.0 - 2.0 * f);
|
|
36
|
-
vec2 p0 = vec2(i, 0.0);
|
|
37
|
-
vec2 p1 = vec2(i + 1.0, 0.0);
|
|
38
|
-
return mix(randomR(p0), randomR(p1), u);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
float getBallShape(vec2 uv, vec2 c, float p) {
|
|
42
|
-
float s = .5 * length(uv - c);
|
|
43
|
-
s = 1. - clamp(s, 0., 1.);
|
|
44
|
-
s = pow(s, p);
|
|
45
|
-
return s;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
void main() {
|
|
49
|
-
vec2 objectUV = (gl_FragCoord.xy - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);
|
|
50
|
-
vec2 shape_uv = objectUV + .5;
|
|
51
|
-
|
|
52
|
-
const float firstFrameOffset = 2503.4;
|
|
53
|
-
float t = .2 * u_speed * iTime + firstFrameOffset;
|
|
54
|
-
|
|
55
|
-
vec3 totalColor = vec3(0.);
|
|
56
|
-
float totalShape = 0.;
|
|
57
|
-
float totalOpacity = 0.;
|
|
58
|
-
|
|
59
|
-
for (int i = 0; i < 20; i++) {
|
|
60
|
-
if (i >= int(ceil(u_count))) break;
|
|
61
|
-
float idxFract = float(i) / float(20);
|
|
62
|
-
float angle = TWO_PI * idxFract;
|
|
63
|
-
float speed = 1. - .2 * idxFract;
|
|
64
|
-
float noiseX = noise(angle * 10. + float(i) + t * speed);
|
|
65
|
-
float noiseY = noise(angle * 20. + float(i) - t * speed);
|
|
66
|
-
vec2 pos = vec2(.5) + 1e-4 + .9 * (vec2(noiseX, noiseY) - .5);
|
|
67
|
-
|
|
68
|
-
int safeIndex = i % int(u_colorsCount + 0.5);
|
|
69
|
-
vec4 ballColor = u_colors[safeIndex];
|
|
70
|
-
ballColor.rgb *= ballColor.a;
|
|
71
|
-
|
|
72
|
-
float sizeFrac = 1.;
|
|
73
|
-
if (float(i) > floor(u_count - 1.)) {
|
|
74
|
-
sizeFrac *= fract(u_count);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
float shape = getBallShape(shape_uv, pos, 45. - 30. * u_size * sizeFrac);
|
|
78
|
-
shape *= pow(u_size, .2);
|
|
79
|
-
shape = smoothstep(0., 1., shape);
|
|
80
|
-
|
|
81
|
-
totalColor += ballColor.rgb * shape;
|
|
82
|
-
totalShape += shape;
|
|
83
|
-
totalOpacity += ballColor.a * shape;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
totalColor /= max(totalShape, 1e-4);
|
|
87
|
-
totalOpacity /= max(totalShape, 1e-4);
|
|
88
|
-
|
|
89
|
-
float edge_width = fwidth(totalShape);
|
|
90
|
-
float finalShape = smoothstep(.4, .4 + edge_width, totalShape);
|
|
91
|
-
|
|
92
|
-
vec3 color = totalColor * finalShape;
|
|
93
|
-
float opacity = totalOpacity * finalShape;
|
|
94
|
-
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
95
|
-
color = color + bgColor * (1. - opacity);
|
|
96
|
-
opacity = opacity + u_colorBack.a * (1. - opacity);
|
|
97
|
-
|
|
98
|
-
fragColor = vec4(color, opacity);
|
|
99
|
-
}
|
|
100
|
-
`;
|
|
101
|
-
|
|
102
|
-
export { metaballsFragmentShader };
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type React from "react";
|
|
2
|
-
export declare const METABALLS_MAX_COLORS = 8;
|
|
3
|
-
export declare const METABALLS_MAX_COUNT = 20;
|
|
4
|
-
export interface MetaballsProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
5
|
-
/** Background CSS color. Default: 'var(--color-background)'. */
|
|
6
|
-
colorBack?: string;
|
|
7
|
-
/** Ball colors, cycled across balls, up to 8. Default: a 3-stop primary ramp. */
|
|
8
|
-
colors?: string[];
|
|
9
|
-
/** Number of balls, 1-20 (fractional values fade the last ball in). Default: 10. */
|
|
10
|
-
count?: number;
|
|
11
|
-
/** Ball size multiplier. Default: 0.6. */
|
|
12
|
-
size?: number;
|
|
13
|
-
/** Animation speed multiplier. Default: 1. */
|
|
14
|
-
speed?: number;
|
|
15
|
-
className?: string;
|
|
16
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import type { PaperTextureProps } from "./PaperTexture.types";
|
|
3
|
-
/**
|
|
4
|
-
* Paper-grain image filter — normal-maps a source image with a fiber/
|
|
5
|
-
* roughness texture and re-lights it, giving it a textured-paper look.
|
|
6
|
-
* WebGL2-powered; falls back to the plain source image (via
|
|
7
|
-
* `object-fit: cover`) when WebGL2 is unavailable.
|
|
8
|
-
*/
|
|
9
|
-
export declare const PaperTexture: React.FC<PaperTextureProps>;
|
|
@@ -1,61 +0,0 @@
|
|
|
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 { paperTextureFragmentShader } from './PaperTexture.shaders.js';
|
|
11
|
-
|
|
12
|
-
const DEFAULT_COLOR_FRONT = "var(--color-text-primary)";
|
|
13
|
-
const DEFAULT_COLOR_BACK = "var(--color-background)";
|
|
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
|
-
* Paper-grain image filter — normal-maps a source image with a fiber/
|
|
28
|
-
* roughness texture and re-lights it, giving it a textured-paper look.
|
|
29
|
-
* WebGL2-powered; falls back to the plain source image (via
|
|
30
|
-
* `object-fit: cover`) when WebGL2 is unavailable.
|
|
31
|
-
*/
|
|
32
|
-
const PaperTexture = ({ image, colorFront = DEFAULT_COLOR_FRONT, colorBack = DEFAULT_COLOR_BACK, contrast = 0.5, roughness = 0.5, fiber = 0.5, fiberSize = 1, className, style, ...props }) => {
|
|
33
|
-
const isClient = useIsClient();
|
|
34
|
-
const isDark = useDarkMode();
|
|
35
|
-
const webglSupported = useWebgl2Supported();
|
|
36
|
-
const [imageAspectRatio, setImageAspectRatio] = useState(16 / 9);
|
|
37
|
-
const resolvedFront = useMemo(() => resolveShaderColor(colorFront),
|
|
38
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
39
|
-
[colorFront, isDark]);
|
|
40
|
-
const resolvedBack = useMemo(() => resolveShaderColor(colorBack),
|
|
41
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
-
[colorBack, isDark]);
|
|
43
|
-
const texturesRef = useRef({ u_image: image });
|
|
44
|
-
texturesRef.current.u_image = image;
|
|
45
|
-
const handleTextureLoad = useCallback((name, aspectRatio) => {
|
|
46
|
-
if (name === "u_image")
|
|
47
|
-
setImageAspectRatio(aspectRatio);
|
|
48
|
-
}, []);
|
|
49
|
-
const uniformsRef = useRef({});
|
|
50
|
-
uniformsRef.current.u_colorFront = resolvedFront;
|
|
51
|
-
uniformsRef.current.u_colorBack = resolvedBack;
|
|
52
|
-
uniformsRef.current.u_imageAspectRatio = imageAspectRatio;
|
|
53
|
-
uniformsRef.current.u_contrast = contrast;
|
|
54
|
-
uniformsRef.current.u_roughness = roughness;
|
|
55
|
-
uniformsRef.current.u_fiber = fiber;
|
|
56
|
-
uniformsRef.current.u_fiberSize = fiberSize;
|
|
57
|
-
const imageSrc = typeof image === "string" ? image : image.src;
|
|
58
|
-
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: paperTextureFragmentShader, uniformsRef: uniformsRef, texturesRef: texturesRef, onTextureLoad: handleTextureLoad })) : (jsx("img", { src: imageSrc, alt: "", className: "absolute inset-0 w-full h-full object-cover" })) }));
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export { PaperTexture };
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PaperTexture fragment shader — adapted from paper-design/shaders'
|
|
3
|
-
* `paper-texture.ts` (https://github.com/paper-design/shaders, Apache
|
|
4
|
-
* License 2.0). An image filter: normal-maps a source image with a
|
|
5
|
-
* paper-grain fiber/roughness texture and re-lights it.
|
|
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 engine; pure-hash GLSL instead of
|
|
10
|
-
* pre-generated noise-texture sampling.
|
|
11
|
-
*
|
|
12
|
-
* Trimmed for v1: keeps the core `fiber`/`roughness`/`contrast` normal-map
|
|
13
|
-
* layers (the essential "paper grain" look) and drops the elaborate
|
|
14
|
-
* `crumples`/`folds`/`drops`/`fade` secondary normal-perturbation layers —
|
|
15
|
-
* those are the most GLSL-dense part of the original and least essential to
|
|
16
|
-
* "paper texture" reading as itself. May be added later as a follow-up.
|
|
17
|
-
*
|
|
18
|
-
* `fiberNoise` below is an original approximation (directional streaked
|
|
19
|
-
* value-noise), NOT a port — paper-design's own `fiberNoise` implementation
|
|
20
|
-
* wasn't available in the extracted source material for this port.
|
|
21
|
-
*/
|
|
22
|
-
export declare const paperTextureFragmentShader = "#version 300 es\nprecision mediump float;\n\nuniform vec2 iResolution;\n\nuniform vec4 u_colorFront;\nuniform vec4 u_colorBack;\n\nuniform sampler2D u_image;\nuniform float u_imageAspectRatio;\n\nuniform float u_contrast;\nuniform float u_roughness;\nuniform float u_fiber;\nuniform float u_fiberSize;\n\nout vec4 fragColor;\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\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 float left = smoothstep(0., aax, uv.x);\n float right = 1. - smoothstep(1. - aax, 1., uv.x);\n float bottom = smoothstep(0., aay, uv.y);\n float top = 1. - smoothstep(1. - aay, 1., uv.y);\n return left * right * bottom * top;\n}\n\nfloat roughnessTex(vec2 p) {\n p *= .1;\n float o = 0.;\n for (float i = 0.; ++i < 4.; p *= 2.1) {\n vec4 w = vec4(floor(p), ceil(p));\n vec2 f = fract(p);\n o += mix(mix(randomR(w.xy), randomR(w.xw), f.y), mix(randomR(w.zy), randomR(w.zw), f.y), f.x);\n o += .2 / exp(2. * abs(sin(.2 * p.x + .5 * p.y)));\n }\n return o / 3.;\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\nfloat fiberNoise(vec2 p, vec2 seed) {\n p += seed;\n float n = 0.0;\n float amp = 1.0;\n for (int i = 0; i < 3; i++) {\n float stretch = 6.0 + float(i) * 4.0;\n vec2 sp = vec2(p.x * stretch, p.y * 1.5);\n n += amp * valueNoise(sp);\n amp *= 0.5;\n p = rotate(p, 0.3);\n }\n return n;\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 = 5. * (patternUV * vec2(u_imageAspectRatio, 1.));\n\n vec2 roughnessUv = 1.5 * (gl_FragCoord.xy - .5 * iResolution.xy);\n float roughnessVal = roughnessTex(roughnessUv + vec2(1., 0.)) - roughnessTex(roughnessUv - vec2(1., 0.));\n\n vec2 fiberUV = 2. / max(u_fiberSize, 0.01) * patternUV;\n float fiber = fiberNoise(fiberUV, vec2(0.));\n fiber = .5 * u_fiber * (fiber - 1.);\n\n vec2 normal = vec2(0.);\n vec2 normalImage = vec2(0.);\n\n normal.xy += u_roughness * 1.5 * roughnessVal;\n normal.xy += fiber;\n normalImage += u_roughness * .75 * roughnessVal;\n normalImage += .2 * fiber;\n\n vec3 lightPos = vec3(1., 2., 1.);\n float res = dot(normalize(vec3(normal, 9.5 - 9. * pow(u_contrast, .1))), normalize(lightPos));\n\n vec3 fgColor = u_colorFront.rgb * u_colorFront.a;\n float fgOpacity = u_colorFront.a;\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n float bgOpacity = u_colorBack.a;\n\n imageUV += .02 * normalImage;\n float frame = getUvFrame(imageUV);\n vec4 image = texture(u_image, imageUV);\n image.rgb += .6 * pow(u_contrast, .4) * (res - .7);\n frame *= image.a;\n\n vec3 color = fgColor * res;\n float opacity = fgOpacity * res;\n color += bgColor * (1. - opacity);\n opacity += bgOpacity * (1. - opacity);\n opacity = mix(opacity, 1., frame);\n\n color.rgb = mix(color, image.rgb, frame);\n\n fragColor = vec4(color, opacity);\n}\n";
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import 'react/jsx-runtime';
|
|
2
|
-
import 'react';
|
|
3
|
-
import { glslRotate2, glslHashFloat } from '../shared/shaderNoise.glsl.js';
|
|
4
|
-
import { glslImageCoverUV } from '../shared/imageUV.glsl.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* PaperTexture fragment shader — adapted from paper-design/shaders'
|
|
8
|
-
* `paper-texture.ts` (https://github.com/paper-design/shaders, Apache
|
|
9
|
-
* License 2.0). An image filter: normal-maps a source image with a
|
|
10
|
-
* paper-grain fiber/roughness texture and re-lights it.
|
|
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 engine; pure-hash GLSL instead of
|
|
15
|
-
* pre-generated noise-texture sampling.
|
|
16
|
-
*
|
|
17
|
-
* Trimmed for v1: keeps the core `fiber`/`roughness`/`contrast` normal-map
|
|
18
|
-
* layers (the essential "paper grain" look) and drops the elaborate
|
|
19
|
-
* `crumples`/`folds`/`drops`/`fade` secondary normal-perturbation layers —
|
|
20
|
-
* those are the most GLSL-dense part of the original and least essential to
|
|
21
|
-
* "paper texture" reading as itself. May be added later as a follow-up.
|
|
22
|
-
*
|
|
23
|
-
* `fiberNoise` below is an original approximation (directional streaked
|
|
24
|
-
* value-noise), NOT a port — paper-design's own `fiberNoise` implementation
|
|
25
|
-
* wasn't available in the extracted source material for this port.
|
|
26
|
-
*/
|
|
27
|
-
const paperTextureFragmentShader = `#version 300 es
|
|
28
|
-
precision mediump float;
|
|
29
|
-
|
|
30
|
-
uniform vec2 iResolution;
|
|
31
|
-
|
|
32
|
-
uniform vec4 u_colorFront;
|
|
33
|
-
uniform vec4 u_colorBack;
|
|
34
|
-
|
|
35
|
-
uniform sampler2D u_image;
|
|
36
|
-
uniform float u_imageAspectRatio;
|
|
37
|
-
|
|
38
|
-
uniform float u_contrast;
|
|
39
|
-
uniform float u_roughness;
|
|
40
|
-
uniform float u_fiber;
|
|
41
|
-
uniform float u_fiberSize;
|
|
42
|
-
|
|
43
|
-
out vec4 fragColor;
|
|
44
|
-
|
|
45
|
-
${glslRotate2}
|
|
46
|
-
${glslHashFloat}
|
|
47
|
-
${glslImageCoverUV}
|
|
48
|
-
|
|
49
|
-
float getUvFrame(vec2 uv) {
|
|
50
|
-
float aax = 2. * fwidth(uv.x);
|
|
51
|
-
float aay = 2. * fwidth(uv.y);
|
|
52
|
-
float left = smoothstep(0., aax, uv.x);
|
|
53
|
-
float right = 1. - smoothstep(1. - aax, 1., uv.x);
|
|
54
|
-
float bottom = smoothstep(0., aay, uv.y);
|
|
55
|
-
float top = 1. - smoothstep(1. - aay, 1., uv.y);
|
|
56
|
-
return left * right * bottom * top;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
float roughnessTex(vec2 p) {
|
|
60
|
-
p *= .1;
|
|
61
|
-
float o = 0.;
|
|
62
|
-
for (float i = 0.; ++i < 4.; p *= 2.1) {
|
|
63
|
-
vec4 w = vec4(floor(p), ceil(p));
|
|
64
|
-
vec2 f = fract(p);
|
|
65
|
-
o += mix(mix(randomR(w.xy), randomR(w.xw), f.y), mix(randomR(w.zy), randomR(w.zw), f.y), f.x);
|
|
66
|
-
o += .2 / exp(2. * abs(sin(.2 * p.x + .5 * p.y)));
|
|
67
|
-
}
|
|
68
|
-
return o / 3.;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
float valueNoise(vec2 st) {
|
|
72
|
-
vec2 i = floor(st);
|
|
73
|
-
vec2 f = fract(st);
|
|
74
|
-
float a = randomR(i);
|
|
75
|
-
float b = randomR(i + vec2(1.0, 0.0));
|
|
76
|
-
float c = randomR(i + vec2(0.0, 1.0));
|
|
77
|
-
float d = randomR(i + vec2(1.0, 1.0));
|
|
78
|
-
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
79
|
-
float x1 = mix(a, b, u.x);
|
|
80
|
-
float x2 = mix(c, d, u.x);
|
|
81
|
-
return mix(x1, x2, u.y);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
float fiberNoise(vec2 p, vec2 seed) {
|
|
85
|
-
p += seed;
|
|
86
|
-
float n = 0.0;
|
|
87
|
-
float amp = 1.0;
|
|
88
|
-
for (int i = 0; i < 3; i++) {
|
|
89
|
-
float stretch = 6.0 + float(i) * 4.0;
|
|
90
|
-
vec2 sp = vec2(p.x * stretch, p.y * 1.5);
|
|
91
|
-
n += amp * valueNoise(sp);
|
|
92
|
-
amp *= 0.5;
|
|
93
|
-
p = rotate(p, 0.3);
|
|
94
|
-
}
|
|
95
|
-
return n;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
void main() {
|
|
99
|
-
vec2 fragUV = gl_FragCoord.xy / iResolution.xy;
|
|
100
|
-
vec2 imageUV = getImageCoverUV(fragUV, iResolution, u_imageAspectRatio);
|
|
101
|
-
vec2 patternUV = imageUV - .5;
|
|
102
|
-
patternUV = 5. * (patternUV * vec2(u_imageAspectRatio, 1.));
|
|
103
|
-
|
|
104
|
-
vec2 roughnessUv = 1.5 * (gl_FragCoord.xy - .5 * iResolution.xy);
|
|
105
|
-
float roughnessVal = roughnessTex(roughnessUv + vec2(1., 0.)) - roughnessTex(roughnessUv - vec2(1., 0.));
|
|
106
|
-
|
|
107
|
-
vec2 fiberUV = 2. / max(u_fiberSize, 0.01) * patternUV;
|
|
108
|
-
float fiber = fiberNoise(fiberUV, vec2(0.));
|
|
109
|
-
fiber = .5 * u_fiber * (fiber - 1.);
|
|
110
|
-
|
|
111
|
-
vec2 normal = vec2(0.);
|
|
112
|
-
vec2 normalImage = vec2(0.);
|
|
113
|
-
|
|
114
|
-
normal.xy += u_roughness * 1.5 * roughnessVal;
|
|
115
|
-
normal.xy += fiber;
|
|
116
|
-
normalImage += u_roughness * .75 * roughnessVal;
|
|
117
|
-
normalImage += .2 * fiber;
|
|
118
|
-
|
|
119
|
-
vec3 lightPos = vec3(1., 2., 1.);
|
|
120
|
-
float res = dot(normalize(vec3(normal, 9.5 - 9. * pow(u_contrast, .1))), normalize(lightPos));
|
|
121
|
-
|
|
122
|
-
vec3 fgColor = u_colorFront.rgb * u_colorFront.a;
|
|
123
|
-
float fgOpacity = u_colorFront.a;
|
|
124
|
-
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
125
|
-
float bgOpacity = u_colorBack.a;
|
|
126
|
-
|
|
127
|
-
imageUV += .02 * normalImage;
|
|
128
|
-
float frame = getUvFrame(imageUV);
|
|
129
|
-
vec4 image = texture(u_image, imageUV);
|
|
130
|
-
image.rgb += .6 * pow(u_contrast, .4) * (res - .7);
|
|
131
|
-
frame *= image.a;
|
|
132
|
-
|
|
133
|
-
vec3 color = fgColor * res;
|
|
134
|
-
float opacity = fgOpacity * res;
|
|
135
|
-
color += bgColor * (1. - opacity);
|
|
136
|
-
opacity += bgOpacity * (1. - opacity);
|
|
137
|
-
opacity = mix(opacity, 1., frame);
|
|
138
|
-
|
|
139
|
-
color.rgb = mix(color, image.rgb, frame);
|
|
140
|
-
|
|
141
|
-
fragColor = vec4(color, opacity);
|
|
142
|
-
}
|
|
143
|
-
`;
|
|
144
|
-
|
|
145
|
-
export { paperTextureFragmentShader };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type React from "react";
|
|
2
|
-
import type { ShaderTextureSource } from "../shared";
|
|
3
|
-
export interface PaperTextureProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
-
/** Source image (URL or an existing HTMLImageElement). Required. */
|
|
5
|
-
image: ShaderTextureSource;
|
|
6
|
-
/** Shadow-side color mixed into the paper-grain lighting. Default: 'var(--color-text-primary)'. */
|
|
7
|
-
colorFront?: string;
|
|
8
|
-
/** Highlight-side color mixed into the paper-grain lighting. Default: 'var(--color-background)'. */
|
|
9
|
-
colorBack?: string;
|
|
10
|
-
/** Lighting contrast, 0-1+. Default: 0.5. */
|
|
11
|
-
contrast?: number;
|
|
12
|
-
/** Fine paper roughness strength, 0-1+. Default: 0.5. */
|
|
13
|
-
roughness?: number;
|
|
14
|
-
/** Fiber streak strength, 0-1+. Default: 0.5. */
|
|
15
|
-
fiber?: number;
|
|
16
|
-
/** Fiber streak scale. Default: 1. */
|
|
17
|
-
fiberSize?: number;
|
|
18
|
-
className?: string;
|
|
19
|
-
}
|