@flikk/ui 1.0.0-beta.1 → 1.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ai/ApprovalCard/ApprovalCard.js +3 -2
- package/dist/components/ai/ApprovalCard/ApprovalCard.types.d.ts +2 -2
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.animations.d.ts +25 -0
- package/dist/components/ai/PromptInput/PromptInput.animations.js +61 -0
- package/dist/components/ai/PromptInput/PromptInput.js +264 -31
- package/dist/components/ai/PromptInput/PromptInput.theme.js +6 -1
- package/dist/components/ai/PromptInput/PromptInput.types.d.ts +68 -0
- package/dist/components/ai/PromptInput/VoiceRecorder.d.ts +10 -0
- package/dist/components/ai/PromptInput/VoiceRecorder.js +258 -0
- package/dist/components/ai/PromptInput/VoiceRecorder.types.d.ts +17 -0
- package/dist/components/ai/PromptInput/index.d.ts +1 -0
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +1 -1
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.d.ts +5 -2
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +51 -27
- package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +4 -5
- package/dist/components/ai/StreamingResponse/StreamingCursor.js +5 -12
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +7 -0
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +20 -1
- package/dist/components/ai/StreamingResponse/StreamingResponse.js +2 -2
- package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +4 -4
- package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +2 -0
- package/dist/components/ai/StreamingResponse/WordAnimationContext.d.ts +27 -0
- package/dist/components/ai/StreamingResponse/WordAnimationContext.js +134 -0
- package/dist/components/ai/StreamingResponse/index.d.ts +3 -1
- package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.js +2 -2
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +6 -6
- package/dist/components/ai/index.js +1 -0
- package/dist/components/charts/ActivityRings/ActivityRings.js +1 -1
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +2 -2
- package/dist/components/charts/BarChart/BarChart.js +3 -3
- package/dist/components/charts/ChartContainer.js +1 -1
- package/dist/components/charts/ComboChart/ComboChart.js +2 -2
- package/dist/components/charts/DonutChart/DonutChart.theme.js +1 -1
- package/dist/components/charts/DonutChart/DonutChart.types.d.ts +1 -2
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.types.d.ts +1 -2
- package/dist/components/charts/FunnelChart/FunnelChart.js +7 -7
- package/dist/components/charts/Heatmap/Heatmap.theme.js +1 -1
- package/dist/components/charts/Heatmap/HeatmapCell.js +1 -1
- package/dist/components/charts/Heatmap/HeatmapLegend.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.theme.js +2 -2
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +1 -1
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +2 -2
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +2 -2
- package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -1
- package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
- package/dist/components/charts/shared/ChartText/ChartText.js +1 -1
- package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +4 -4
- package/dist/components/core/Accordion/Accordion.animations.d.ts +6 -1
- package/dist/components/core/Accordion/Accordion.animations.js +15 -1
- package/dist/components/core/Accordion/Accordion.theme.js +5 -5
- package/dist/components/core/Accordion/Accordion.types.d.ts +25 -0
- package/dist/components/core/Accordion/AccordionContent.js +1 -1
- package/dist/components/core/Accordion/AccordionTrigger.js +11 -6
- package/dist/components/core/Alert/Alert.js +3 -2
- package/dist/components/core/Alert/Alert.theme.js +4 -8
- package/dist/components/core/Alert/Alert.types.d.ts +4 -3
- package/dist/components/core/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/components/core/AlertDialog/AlertDialog.js +2 -2
- package/dist/components/core/AlertDialog/AlertDialog.types.d.ts +2 -2
- package/dist/components/core/Avatar/Avatar.theme.js +5 -5
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
- package/dist/components/core/Badge/Badge.d.ts +1 -1
- package/dist/components/core/Badge/Badge.js +11 -9
- package/dist/components/core/Badge/Badge.theme.js +24 -20
- package/dist/components/core/Badge/Badge.types.d.ts +10 -5
- package/dist/components/core/Breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/components/core/Button/Button.d.ts +1 -1
- package/dist/components/core/Button/Button.js +21 -18
- package/dist/components/core/Button/Button.ripple.d.ts +5 -1
- package/dist/components/core/Button/Button.ripple.js +27 -17
- package/dist/components/core/Button/Button.theme.d.ts +1 -2
- package/dist/components/core/Button/Button.theme.js +46 -41
- package/dist/components/core/Button/Button.types.d.ts +3 -3
- package/dist/components/core/Button/index.d.ts +2 -0
- package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +1 -1
- package/dist/components/core/Calendar/Calendar.js +1 -1
- package/dist/components/core/Calendar/Calendar.theme.js +9 -9
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +1 -1
- package/dist/components/core/Card/Card.d.ts +2 -2
- package/dist/components/core/Card/Card.js +6 -7
- package/dist/components/core/Card/Card.theme.js +2 -2
- package/dist/components/core/Card/Card.types.d.ts +7 -27
- package/dist/components/core/Card/CardSubtitle.d.ts +3 -0
- package/dist/components/core/Card/CardSubtitle.js +11 -0
- package/dist/components/core/Card/CardTitle.d.ts +1 -1
- package/dist/components/core/Card/index.d.ts +2 -2
- package/dist/components/core/CommandPalette/CommandItem.d.ts +1 -1
- package/dist/components/core/CommandPalette/CommandItem.js +2 -2
- package/dist/components/core/CommandPalette/CommandPalette.js +2 -2
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +6 -6
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +2 -2
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +3 -3
- package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +1 -1
- package/dist/components/core/ContextMenu/ContextMenuItem.js +3 -3
- package/dist/components/core/Drawer/Drawer.d.ts +13 -1
- package/dist/components/core/Drawer/Drawer.js +23 -10
- package/dist/components/core/Drawer/Drawer.theme.d.ts +2 -0
- package/dist/components/core/Drawer/Drawer.theme.js +15 -13
- package/dist/components/core/Drawer/Drawer.types.d.ts +26 -9
- package/dist/components/core/Drawer/DrawerContent.js +1 -1
- package/dist/components/core/Drawer/DrawerHeader.d.ts +5 -0
- package/dist/components/core/Drawer/DrawerHeader.js +15 -0
- package/dist/components/core/Drawer/DrawerSubtitle.d.ts +5 -0
- package/dist/components/core/Drawer/DrawerSubtitle.js +11 -0
- package/dist/components/core/Drawer/DrawerTitle.d.ts +5 -0
- package/dist/components/core/Drawer/DrawerTitle.js +11 -0
- package/dist/components/core/Drawer/index.d.ts +1 -1
- package/dist/components/core/Dropdown/Dropdown.theme.js +1 -1
- package/dist/components/core/Dropdown/Dropdown.types.d.ts +4 -4
- package/dist/components/core/Dropdown/DropdownItem.js +2 -2
- package/dist/components/core/Dropdown/DropdownMenu.js +1 -0
- package/dist/components/core/Empty/Empty.js +2 -2
- package/dist/components/core/Empty/Empty.theme.d.ts +1 -1
- package/dist/components/core/Empty/Empty.theme.js +3 -3
- package/dist/components/core/Empty/Empty.types.d.ts +2 -2
- package/dist/components/core/Kbd/Kbd.theme.js +3 -3
- package/dist/components/core/Link/Link.d.ts +1 -1
- package/dist/components/core/Link/Link.types.d.ts +2 -2
- package/dist/components/core/Loader/Loader.theme.js +1 -1
- package/dist/components/core/MenuItem/MenuItem.js +2 -2
- package/dist/components/core/MenuItem/MenuItem.theme.d.ts +1 -2
- package/dist/components/core/MenuItem/MenuItem.theme.js +9 -11
- package/dist/components/core/MenuItem/MenuItem.types.d.ts +1 -1
- package/dist/components/core/Message/Message.d.ts +3 -2
- package/dist/components/core/Message/Message.js +30 -24
- package/dist/components/core/Message/Message.theme.d.ts +1 -1
- package/dist/components/core/Message/Message.theme.js +22 -24
- package/dist/components/core/Message/Message.types.d.ts +0 -7
- package/dist/components/core/Message/MessageList.animations.d.ts +6 -0
- package/dist/components/core/Message/MessageList.animations.js +32 -0
- package/dist/components/core/Message/MessageList.d.ts +5 -0
- package/dist/components/core/Message/MessageList.js +78 -0
- package/dist/components/core/Message/MessageList.theme.d.ts +2 -0
- package/dist/components/core/Message/MessageList.theme.js +6 -0
- package/dist/components/core/Message/MessageList.types.d.ts +32 -0
- package/dist/components/core/Message/index.d.ts +2 -0
- package/dist/components/core/Modal/Modal.d.ts +2 -2
- package/dist/components/core/Modal/Modal.js +5 -5
- package/dist/components/core/Modal/Modal.theme.js +6 -6
- package/dist/components/core/Modal/Modal.types.d.ts +4 -4
- package/dist/components/core/Modal/ModalHeader.js +1 -0
- package/dist/components/core/Modal/ModalSubtitle.d.ts +5 -0
- package/dist/components/core/Modal/ModalSubtitle.js +11 -0
- package/dist/components/core/ModalStack/ModalStack.animations.js +3 -3
- package/dist/components/core/ModalStack/ModalStackModal.js +3 -3
- package/dist/components/core/NavItem/NavItem.js +1 -1
- package/dist/components/core/NavItem/NavItem.theme.js +1 -1
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +3 -3
- package/dist/components/core/PageHeading/PageHeading.d.ts +8 -0
- package/dist/components/core/PageHeading/PageHeading.js +28 -0
- package/dist/components/core/PageHeading/PageHeading.theme.d.ts +2 -0
- package/dist/components/core/PageHeading/PageHeading.theme.js +11 -0
- package/dist/components/core/PageHeading/PageHeading.types.d.ts +55 -0
- package/dist/components/core/PageHeading/PageHeadingActions.d.ts +3 -0
- package/dist/components/core/PageHeading/PageHeadingActions.js +11 -0
- package/dist/components/core/PageHeading/PageHeadingBackButton.d.ts +3 -0
- package/dist/components/core/PageHeading/PageHeadingBackButton.js +12 -0
- package/dist/components/core/PageHeading/PageHeadingIcon.d.ts +3 -0
- package/dist/components/core/PageHeading/PageHeadingIcon.js +11 -0
- package/dist/components/core/PageHeading/PageHeadingSubtitle.d.ts +3 -0
- package/dist/components/core/PageHeading/PageHeadingSubtitle.js +11 -0
- package/dist/components/core/PageHeading/PageHeadingTitle.d.ts +3 -0
- package/dist/components/core/PageHeading/PageHeadingTitle.js +11 -0
- package/dist/components/core/PageHeading/index.d.ts +2 -0
- package/dist/components/core/Pagination/Pagination.theme.js +2 -2
- package/dist/components/core/Pill/Pill.theme.js +3 -3
- package/dist/components/core/Popover/Popover.theme.js +1 -1
- package/dist/components/core/Popover/Popover.types.d.ts +6 -0
- package/dist/components/core/Popover/PopoverContent.js +8 -2
- package/dist/components/core/Progress/Progress.theme.js +10 -7
- package/dist/components/core/Progress/Progress.types.d.ts +2 -1
- package/dist/components/core/Segmented/Segmented.theme.js +5 -5
- package/dist/components/core/Sidebar/Sidebar.js +1 -0
- package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -1
- package/dist/components/core/SocialIcon/SocialIcon.d.ts +3 -0
- package/dist/components/core/SocialIcon/SocialIcon.js +30 -0
- package/dist/components/core/SocialIcon/SocialIcon.theme.d.ts +2 -0
- package/dist/components/core/SocialIcon/SocialIcon.theme.js +12 -0
- package/dist/components/core/SocialIcon/SocialIcon.types.d.ts +18 -0
- package/dist/components/core/SocialIcon/index.d.ts +2 -0
- package/dist/components/core/SocialIcon/platforms.d.ts +17 -0
- package/dist/components/core/SocialIcon/platforms.js +234 -0
- package/dist/components/core/Spinner/Spinner.theme.js +3 -5
- package/dist/components/core/Spinner/Spinner.types.d.ts +2 -1
- package/dist/components/core/Tabs/Tabs.theme.js +2 -2
- package/dist/components/core/Tag/Tag.d.ts +2 -2
- package/dist/components/core/Tag/Tag.js +21 -4
- package/dist/components/core/Tag/Tag.theme.js +12 -4
- package/dist/components/core/Tag/Tag.types.d.ts +24 -1
- package/dist/components/core/Toast/Toast.js +4 -4
- package/dist/components/core/Toast/Toast.theme.js +4 -4
- package/dist/components/core/Toast/Toast.types.d.ts +9 -9
- package/dist/components/core/Toast/useToast.js +6 -6
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
- package/dist/components/core/Tree/Tree.theme.js +1 -1
- package/dist/components/core/index.d.ts +2 -7
- package/dist/components/core/index.js +10 -19
- package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +8 -0
- package/dist/components/{core → data-display}/Feed/Feed.js +3 -3
- package/dist/components/{core → data-display}/Feed/Feed.theme.js +2 -2
- package/dist/components/data-display/GanttChart/GanttChart.animations.d.ts +4 -0
- package/dist/components/data-display/GanttChart/GanttChart.animations.js +21 -0
- package/dist/components/data-display/GanttChart/GanttChart.d.ts +8 -0
- package/dist/components/data-display/GanttChart/GanttChart.js +170 -0
- package/dist/components/data-display/GanttChart/GanttChart.theme.d.ts +2 -0
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +23 -0
- package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +162 -0
- package/dist/components/data-display/GanttChart/GanttChart.types.js +9 -0
- package/dist/components/data-display/GanttChart/GanttChart.utils.d.ts +80 -0
- package/dist/components/data-display/GanttChart/GanttChart.utils.js +274 -0
- package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +9 -0
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +82 -0
- package/dist/components/data-display/GanttChart/GanttDependencyArrows.d.ts +2 -0
- package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +35 -0
- package/dist/components/data-display/GanttChart/GanttGroupBar.d.ts +8 -0
- package/dist/components/data-display/GanttChart/GanttGroupBar.js +26 -0
- package/dist/components/data-display/GanttChart/GanttMilestone.d.ts +9 -0
- package/dist/components/data-display/GanttChart/GanttMilestone.js +44 -0
- package/dist/components/data-display/GanttChart/GanttProgressCircle.d.ts +9 -0
- package/dist/components/data-display/GanttChart/GanttProgressCircle.js +11 -0
- package/dist/components/data-display/GanttChart/GanttSplitter.d.ts +2 -0
- package/dist/components/data-display/GanttChart/GanttSplitter.js +39 -0
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.d.ts +7 -0
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +23 -0
- package/dist/components/data-display/GanttChart/GanttTableHeader.d.ts +2 -0
- package/dist/components/data-display/GanttChart/GanttTableHeader.js +13 -0
- package/dist/components/data-display/GanttChart/GanttTablePanel.d.ts +6 -0
- package/dist/components/data-display/GanttChart/GanttTablePanel.js +20 -0
- package/dist/components/data-display/GanttChart/GanttTableTaskRow.d.ts +8 -0
- package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +30 -0
- package/dist/components/data-display/GanttChart/GanttTaskBar.d.ts +9 -0
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +206 -0
- package/dist/components/data-display/GanttChart/GanttTaskContextMenu.d.ts +8 -0
- package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +17 -0
- package/dist/components/data-display/GanttChart/GanttTimelineGrid.d.ts +7 -0
- package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +33 -0
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.d.ts +8 -0
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +43 -0
- package/dist/components/data-display/GanttChart/GanttToolbar.d.ts +2 -0
- package/dist/components/data-display/GanttChart/GanttToolbar.js +29 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttDates.d.ts +12 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttDates.js +25 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttDrag.d.ts +25 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +144 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttLayout.d.ts +2 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttLayout.js +33 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.d.ts +6 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.js +32 -0
- package/dist/components/data-display/GanttChart/index.d.ts +3 -0
- package/dist/components/{core → data-display}/KPI/KPI.js +10 -8
- package/dist/components/{core → data-display}/KPI/KPI.theme.js +12 -12
- package/dist/components/{core → data-display}/KPI/KPI.types.d.ts +6 -5
- package/dist/components/{core → data-display}/KPI/index.d.ts +1 -0
- package/dist/components/{core → data-display}/Metric/Metric.js +4 -7
- package/dist/components/{core → data-display}/Metric/Metric.theme.js +17 -13
- package/dist/components/{core → data-display}/Metric/Metric.types.d.ts +8 -7
- package/dist/components/{core → data-display}/Table/Table.theme.js +4 -4
- package/dist/components/{core → data-display}/Table/TableActions.js +8 -8
- package/dist/components/{core → data-display}/Table/TableActionsMenu.js +1 -1
- package/dist/components/{core → data-display}/Table/TableColumnManager.js +6 -5
- package/dist/components/{core → data-display}/Table/TableFilter.js +6 -6
- package/dist/components/{core → data-display}/Table/TableHeader.js +1 -1
- package/dist/components/data-display/Table/TablePagination.js +25 -0
- package/dist/components/{core → data-display}/Table/TableRow.js +1 -1
- package/dist/components/{core → data-display}/Table/TableSelectionHeader.js +3 -3
- package/dist/components/{core → data-display}/Timeline/Timeline.theme.js +2 -2
- package/dist/components/data-display/index.d.ts +7 -0
- package/dist/components/data-display/index.js +20 -0
- package/dist/components/effects/3d/index.d.ts +6 -0
- package/dist/components/effects/3d/index.js +3 -0
- package/dist/components/effects/Aurora/Aurora.d.ts +24 -0
- package/dist/components/effects/Aurora/Aurora.js +119 -0
- package/dist/components/effects/Aurora/Aurora.types.d.ts +15 -0
- package/dist/components/effects/Aurora/index.d.ts +2 -0
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +2 -2
- package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +3 -1
- package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +5 -4
- package/dist/components/effects/DotPattern/DotPattern.d.ts +18 -0
- package/dist/components/effects/DotPattern/DotPattern.js +65 -0
- package/dist/components/effects/DotPattern/DotPattern.types.d.ts +47 -0
- package/dist/components/effects/DotPattern/index.d.ts +2 -0
- package/dist/components/effects/GridPattern/GridPattern.d.ts +18 -0
- package/dist/components/effects/GridPattern/GridPattern.js +64 -0
- package/dist/components/effects/GridPattern/GridPattern.types.d.ts +47 -0
- package/dist/components/effects/GridPattern/index.d.ts +2 -0
- package/dist/components/effects/MagneticElement/MagneticElement.d.ts +30 -0
- package/dist/components/effects/MagneticElement/MagneticElement.js +110 -0
- package/dist/components/effects/MagneticElement/MagneticElement.types.d.ts +44 -0
- package/dist/components/effects/MagneticElement/index.d.ts +2 -0
- package/dist/components/effects/MorphingText/MorphingText.d.ts +17 -0
- package/dist/components/effects/MorphingText/MorphingText.js +91 -0
- package/dist/components/effects/MorphingText/MorphingText.types.d.ts +18 -0
- package/dist/components/effects/MorphingText/index.d.ts +2 -0
- package/dist/components/effects/NoiseOverlay/NoiseOverlay.d.ts +28 -0
- package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +61 -0
- package/dist/components/effects/NoiseOverlay/NoiseOverlay.types.d.ts +35 -0
- package/dist/components/effects/NoiseOverlay/index.d.ts +2 -0
- package/dist/components/effects/ParallaxSection/ParallaxSection.d.ts +26 -0
- package/dist/components/effects/ParallaxSection/ParallaxSection.js +71 -0
- package/dist/components/effects/ParallaxSection/ParallaxSection.types.d.ts +11 -0
- package/dist/components/effects/ParallaxSection/index.d.ts +2 -0
- package/dist/components/effects/Particles/Particles.d.ts +22 -0
- package/dist/components/effects/Particles/Particles.js +33 -0
- package/dist/components/effects/Particles/Particles.scene.d.ts +3 -0
- package/dist/components/effects/Particles/Particles.scene.js +284 -0
- package/dist/components/effects/Particles/Particles.types.d.ts +65 -0
- package/dist/components/effects/Particles/index.d.ts +2 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.d.ts +3 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +75 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.theme.d.ts +7 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.theme.js +12 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.types.d.ts +47 -0
- package/dist/components/effects/ProgressiveBlur/index.d.ts +2 -0
- package/dist/components/effects/ScrollReveal/ScrollReveal.d.ts +29 -0
- package/dist/components/effects/ScrollReveal/ScrollReveal.js +121 -0
- package/dist/components/effects/ScrollReveal/ScrollReveal.types.d.ts +25 -0
- package/dist/components/effects/ScrollReveal/index.d.ts +2 -0
- package/dist/components/effects/Spotlight/Spotlight.d.ts +36 -0
- package/dist/components/effects/Spotlight/Spotlight.js +112 -0
- package/dist/components/effects/Spotlight/Spotlight.types.d.ts +29 -0
- package/dist/components/effects/Spotlight/index.d.ts +2 -0
- package/dist/components/effects/StickyScroll/StickyScroll.d.ts +30 -0
- package/dist/components/effects/StickyScroll/StickyScroll.js +128 -0
- package/dist/components/effects/StickyScroll/StickyScroll.types.d.ts +19 -0
- package/dist/components/effects/StickyScroll/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +22 -4
- package/dist/components/effects/index.js +11 -2
- package/dist/components/forms/Checkbox/Checkbox.d.ts +3 -4
- package/dist/components/forms/Checkbox/Checkbox.js +36 -12
- package/dist/components/forms/Checkbox/Checkbox.theme.js +9 -5
- package/dist/components/forms/Checkbox/Checkbox.types.d.ts +28 -2
- package/dist/components/forms/Checkbox/CheckboxContext.d.ts +14 -0
- package/dist/components/forms/Checkbox/CheckboxContext.js +12 -0
- package/dist/components/forms/Checkbox/CheckboxGroup.d.ts +3 -0
- package/dist/components/forms/Checkbox/CheckboxGroup.js +40 -0
- package/dist/components/forms/Checkbox/index.d.ts +1 -1
- package/dist/components/forms/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPicker.theme.js +3 -3
- package/dist/components/forms/ColorPicker/ColorPickerInput.js +7 -7
- package/dist/components/forms/CronInput/CronInput.d.ts +3 -0
- package/dist/components/forms/CronInput/CronInput.js +107 -0
- package/dist/components/forms/CronInput/CronInput.theme.d.ts +6 -0
- package/dist/components/forms/CronInput/CronInput.theme.js +84 -0
- package/dist/components/forms/CronInput/CronInput.types.d.ts +98 -0
- package/dist/components/forms/CronInput/CronInput.utils.d.ts +67 -0
- package/dist/components/forms/CronInput/CronInput.utils.js +505 -0
- package/dist/components/forms/CronInput/index.d.ts +4 -0
- package/dist/components/forms/DatePicker/DatePicker.theme.js +3 -3
- package/dist/components/forms/DatePicker/DatePickerContent.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.js +80 -2
- package/dist/components/forms/FileUpload/FileUpload.theme.js +4 -4
- package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
- package/dist/components/forms/Input/Input.theme.js +1 -1
- package/dist/components/forms/InputCounter/InputCounter.d.ts +1 -1
- package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
- package/dist/components/forms/InputCounter/InputCounter.types.d.ts +3 -2
- package/dist/components/forms/InputOTP/InputOTP.theme.js +2 -2
- package/dist/components/forms/InputTag/InputTag.js +1 -1
- package/dist/components/forms/Mention/Mention.d.ts +3 -0
- package/dist/components/forms/Mention/Mention.js +607 -0
- package/dist/components/forms/Mention/Mention.theme.d.ts +6 -0
- package/dist/components/forms/Mention/Mention.theme.js +55 -0
- package/dist/components/forms/Mention/Mention.types.d.ts +151 -0
- package/dist/components/forms/Mention/Mention.utils.d.ts +42 -0
- package/dist/components/forms/Mention/Mention.utils.js +285 -0
- package/dist/components/forms/Mention/index.d.ts +3 -0
- package/dist/components/forms/Radio/Radio.d.ts +3 -4
- package/dist/components/forms/Radio/Radio.js +25 -12
- package/dist/components/forms/Radio/Radio.theme.js +34 -5
- package/dist/components/forms/Radio/Radio.types.d.ts +30 -4
- package/dist/components/forms/Radio/RadioContext.d.ts +14 -0
- package/dist/components/forms/Radio/RadioContext.js +12 -0
- package/dist/components/forms/Radio/RadioGroup.d.ts +3 -0
- package/dist/components/forms/Radio/RadioGroup.js +36 -0
- package/dist/components/forms/Radio/index.d.ts +1 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +2 -2
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +1 -1
- package/dist/components/forms/Select/Select.theme.js +1 -1
- package/dist/components/forms/SelectableCard/SelectableCard.animations.d.ts +2 -0
- package/dist/components/forms/SelectableCard/SelectableCard.animations.js +9 -0
- package/dist/components/forms/SelectableCard/SelectableCard.d.ts +5 -0
- package/dist/components/forms/SelectableCard/SelectableCard.js +58 -0
- package/dist/components/forms/SelectableCard/SelectableCard.theme.d.ts +2 -0
- package/dist/components/forms/SelectableCard/SelectableCard.theme.js +38 -0
- package/dist/components/forms/SelectableCard/SelectableCard.types.d.ts +33 -0
- package/dist/components/forms/SelectableCard/SelectableCardContext.d.ts +3 -0
- package/dist/components/forms/SelectableCard/SelectableCardContext.js +12 -0
- package/dist/components/forms/SelectableCard/SelectableCardGroup.d.ts +3 -0
- package/dist/components/forms/SelectableCard/SelectableCardGroup.js +37 -0
- package/dist/components/forms/SelectableCard/index.d.ts +3 -0
- package/dist/components/forms/Signature/Signature.theme.js +1 -1
- package/dist/components/forms/Slider/Slider.theme.js +3 -3
- package/dist/components/forms/Switch/Switch.theme.js +1 -1
- package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
- package/dist/components/forms/TimePicker/TimePickerContent.js +78 -1
- package/dist/components/forms/TransferList/TransferList.animations.d.ts +10 -0
- package/dist/components/forms/TransferList/TransferList.animations.js +32 -0
- package/dist/components/forms/TransferList/TransferList.d.ts +28 -0
- package/dist/components/forms/TransferList/TransferList.js +199 -0
- package/dist/components/forms/TransferList/TransferList.theme.d.ts +6 -0
- package/dist/components/forms/TransferList/TransferList.theme.js +60 -0
- package/dist/components/forms/TransferList/TransferList.types.d.ts +101 -0
- package/dist/components/forms/TransferList/index.d.ts +3 -0
- package/dist/components/forms/forms.theme.js +6 -6
- package/dist/components/forms/index.d.ts +15 -2
- package/dist/components/forms/index.js +87 -0
- package/dist/components/layout/FormLayout/FormLayout.d.ts +8 -0
- package/dist/components/layout/FormLayout/FormLayout.js +22 -0
- package/dist/components/layout/FormLayout/FormLayout.theme.d.ts +2 -0
- package/dist/components/layout/FormLayout/FormLayout.theme.js +16 -0
- package/dist/components/layout/FormLayout/FormLayout.types.d.ts +61 -0
- package/dist/components/layout/FormLayout/FormLayoutBody.d.ts +3 -0
- package/dist/components/layout/FormLayout/FormLayoutBody.js +91 -0
- package/dist/components/layout/FormLayout/FormLayoutFooter.d.ts +3 -0
- package/dist/components/layout/FormLayout/FormLayoutFooter.js +12 -0
- package/dist/components/layout/FormLayout/FormLayoutHeader.d.ts +3 -0
- package/dist/components/layout/FormLayout/FormLayoutHeader.js +12 -0
- package/dist/components/layout/FormLayout/FormLayoutSection.d.ts +3 -0
- package/dist/components/layout/FormLayout/FormLayoutSection.js +12 -0
- package/dist/components/layout/FormLayout/index.d.ts +3 -0
- package/dist/components/layout/PageLayout/PageLayout.d.ts +7 -0
- package/dist/components/layout/PageLayout/PageLayout.js +33 -0
- package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +2 -0
- package/dist/components/layout/PageLayout/PageLayout.theme.js +10 -0
- package/dist/components/layout/PageLayout/PageLayout.types.d.ts +39 -0
- package/dist/components/layout/PageLayout/PageLayoutContent.d.ts +3 -0
- package/dist/components/layout/PageLayout/PageLayoutContent.js +12 -0
- package/dist/components/layout/PageLayout/PageLayoutHeader.d.ts +3 -0
- package/dist/components/layout/PageLayout/PageLayoutHeader.js +12 -0
- package/dist/components/layout/PageLayout/PageLayoutSidebar.d.ts +3 -0
- package/dist/components/layout/PageLayout/PageLayoutSidebar.js +12 -0
- package/dist/components/layout/PageLayout/index.d.ts +3 -0
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/hooks/useSelectPortal.d.ts +4 -2
- package/dist/hooks/useSelectPortal.js +139 -51
- package/dist/index.d.ts +2 -0
- package/dist/index.js +206 -167
- package/dist/styles.css +1 -1
- package/dist/utils/colorUtils.d.ts +23 -0
- package/dist/utils/colorUtils.js +45 -0
- package/dist/utils/dateUtils.d.ts +30 -0
- package/dist/utils/dateUtils.js +58 -1
- package/dist/utils/index.d.ts +2 -1
- package/package.json +38 -26
- package/src/global.scss +673 -0
- package/src/styles/theme.css +378 -0
- package/src/theme-plugin.css +11 -0
- package/dist/components/core/Button/Button.animations.d.ts +0 -5
- package/dist/components/core/Card/CardDescription.d.ts +0 -3
- package/dist/components/core/Card/CardDescription.js +0 -11
- package/dist/components/core/DescriptionList/DescriptionList.theme.js +0 -8
- package/dist/components/core/Modal/ModalDescription.d.ts +0 -5
- package/dist/components/core/Modal/ModalDescription.js +0 -11
- package/dist/components/core/ProgressiveBlur/ProgressiveBlur.d.ts +0 -34
- package/dist/components/core/ProgressiveBlur/ProgressiveBlur.js +0 -218
- package/dist/components/core/ProgressiveBlur/ProgressiveBlur.theme.d.ts +0 -9
- package/dist/components/core/ProgressiveBlur/ProgressiveBlur.types.d.ts +0 -48
- package/dist/components/core/ProgressiveBlur/index.d.ts +0 -2
- package/dist/components/core/Table/TablePagination.js +0 -25
- /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.d.ts +0 -0
- /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.js +0 -0
- /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.theme.d.ts +0 -0
- /package/dist/components/{core → data-display}/DescriptionList/DescriptionList.types.d.ts +0 -0
- /package/dist/components/{core → data-display}/DescriptionList/index.d.ts +0 -0
- /package/dist/components/{core → data-display}/Feed/Feed.d.ts +0 -0
- /package/dist/components/{core → data-display}/Feed/Feed.theme.d.ts +0 -0
- /package/dist/components/{core → data-display}/Feed/Feed.types.d.ts +0 -0
- /package/dist/components/{core → data-display}/Feed/index.d.ts +0 -0
- /package/dist/components/{core → data-display}/KPI/KPI.d.ts +0 -0
- /package/dist/components/{core → data-display}/KPI/KPI.theme.d.ts +0 -0
- /package/dist/components/{core → data-display}/Metric/Metric.d.ts +0 -0
- /package/dist/components/{core → data-display}/Metric/Metric.theme.d.ts +0 -0
- /package/dist/components/{core → data-display}/Metric/index.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/Table.animations.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/Table.animations.js +0 -0
- /package/dist/components/{core → data-display}/Table/Table.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/Table.filterUtils.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/Table.filterUtils.js +0 -0
- /package/dist/components/{core → data-display}/Table/Table.js +0 -0
- /package/dist/components/{core → data-display}/Table/Table.theme.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/Table.types.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/Table.utils.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/Table.utils.js +0 -0
- /package/dist/components/{core → data-display}/Table/TableActions.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableActionsMenu.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableBody.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableBody.js +0 -0
- /package/dist/components/{core → data-display}/Table/TableCell.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableCell.js +0 -0
- /package/dist/components/{core → data-display}/Table/TableColumnManager.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableDeclarative.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableDeclarative.js +0 -0
- /package/dist/components/{core → data-display}/Table/TableFilter.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableHeader.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TablePagination.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableRow.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/TableSelectionHeader.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/index.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableColumns.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableColumns.js +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableExpansion.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableExpansion.js +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableFilter.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableFilter.js +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTablePagination.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTablePagination.js +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableSelection.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/hooks/useTableSelection.js +0 -0
- /package/dist/components/{core → data-display}/Table/index.d.ts +0 -0
- /package/dist/components/{core → data-display}/Table/index.js +0 -0
- /package/dist/components/{core → data-display}/Timeline/Timeline.animations.d.ts +0 -0
- /package/dist/components/{core → data-display}/Timeline/Timeline.animations.js +0 -0
- /package/dist/components/{core → data-display}/Timeline/Timeline.d.ts +0 -0
- /package/dist/components/{core → data-display}/Timeline/Timeline.js +0 -0
- /package/dist/components/{core → data-display}/Timeline/Timeline.theme.d.ts +0 -0
- /package/dist/components/{core → data-display}/Timeline/Timeline.types.d.ts +0 -0
- /package/dist/components/{core → data-display}/Timeline/TimelineContent.d.ts +0 -0
- /package/dist/components/{core → data-display}/Timeline/TimelineContent.js +0 -0
- /package/dist/components/{core → data-display}/Timeline/TimelineItem.d.ts +0 -0
- /package/dist/components/{core → data-display}/Timeline/TimelineItem.js +0 -0
- /package/dist/components/{core → data-display}/Timeline/TimelineMarker.d.ts +0 -0
- /package/dist/components/{core → data-display}/Timeline/TimelineMarker.js +0 -0
- /package/dist/components/{core → data-display}/Timeline/index.d.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ReactNode, MouseEvent } from "react";
|
|
2
|
-
import {
|
|
1
|
+
import React, { ReactNode, MouseEvent } from "react";
|
|
2
|
+
import { SemanticColor } from "../../../utils/colorUtils";
|
|
3
3
|
export type BadgeVariant = "filled" | "outline" | "ghost";
|
|
4
|
-
export type BadgeColor =
|
|
5
|
-
export type BadgeSize = "sm" | "md"
|
|
4
|
+
export type BadgeColor = SemanticColor;
|
|
5
|
+
export type BadgeSize = "sm" | "md";
|
|
6
6
|
/**
|
|
7
7
|
* Theme configuration for Badge component
|
|
8
8
|
*/
|
|
@@ -28,6 +28,10 @@ export interface BadgeTheme {
|
|
|
28
28
|
* Additional padding for pill-shaped badges
|
|
29
29
|
*/
|
|
30
30
|
pillSizes: Record<BadgeSize, string>;
|
|
31
|
+
/**
|
|
32
|
+
* Border radius per badge size
|
|
33
|
+
*/
|
|
34
|
+
radiusSizes: Record<BadgeSize, string>;
|
|
31
35
|
/**
|
|
32
36
|
* Icon sizes for each badge size
|
|
33
37
|
*/
|
|
@@ -65,6 +69,7 @@ export interface BadgeThemeOverrides {
|
|
|
65
69
|
variantColors?: Partial<Record<BadgeVariant, Partial<Record<BadgeColor, string>>>>;
|
|
66
70
|
sizes?: Partial<Record<BadgeSize, string>>;
|
|
67
71
|
pillSizes?: Partial<Record<BadgeSize, string>>;
|
|
72
|
+
radiusSizes?: Partial<Record<BadgeSize, string>>;
|
|
68
73
|
iconSizes?: Partial<Record<BadgeSize, string>>;
|
|
69
74
|
avatarSizes?: Partial<Record<BadgeSize, string>>;
|
|
70
75
|
dismissButtonSizes?: Partial<Record<BadgeSize, string>>;
|
|
@@ -75,7 +80,7 @@ export interface BadgeThemeOverrides {
|
|
|
75
80
|
hover: string;
|
|
76
81
|
}>;
|
|
77
82
|
}
|
|
78
|
-
export interface BadgeProps extends Omit<
|
|
83
|
+
export interface BadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "onSelect" | "inputMode"> {
|
|
79
84
|
/**
|
|
80
85
|
* The content to be displayed inside the badge
|
|
81
86
|
*/
|
|
@@ -43,7 +43,7 @@ const Breadcrumbs = ({ items, separator, maxItems = 4, variant = "default", clas
|
|
|
43
43
|
const renderItem = (item, index, isLast) => {
|
|
44
44
|
const isCurrentPage = isLast || !item.href;
|
|
45
45
|
const itemContent = (jsxs(Fragment, { children: [showIcons && item.iconStart && (jsx("span", { className: "mr-1.5 flex-shrink-0", children: item.iconStart })), item.label] }));
|
|
46
|
-
return (jsx("span", { className: "flex items-center text-
|
|
46
|
+
return (jsx("span", { className: "flex items-center text-base", children: isCurrentPage ? (jsx("span", { className: cn("flex items-center", theme.current), "aria-current": "page", children: itemContent })) : (jsx("a", { href: item.href, className: cn("flex items-center", theme.link), "aria-label": `Navigate to ${item.label}`, children: itemContent })) }, `${item.label}-${index}`));
|
|
47
47
|
};
|
|
48
48
|
// Render separator
|
|
49
49
|
const renderSeparator = (index) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { ButtonProps } from "./Button.types";
|
|
3
|
-
declare const Button: React.ForwardRefExoticComponent<
|
|
3
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
4
4
|
export { Button };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import React__default, { useCallback } from 'react';
|
|
2
|
+
import React__default, { useCallback, useRef } from 'react';
|
|
3
3
|
import { useReducedMotion, motion } from 'motion/react';
|
|
4
4
|
import { buttonTheme } from './Button.theme.js';
|
|
5
5
|
import { cn } from '../../../utils/cn.js';
|
|
@@ -18,7 +18,7 @@ const BUTTON_TAP_ANIMATION = {
|
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
|
-
const Button = React__default.forwardRef(({ children, className = "", iconOnly = false, state = "default", size = "md", color, variant, block = false, onClick, enableRipple = true, rippleEffect = "default", rippleClassName, rippleScale = 10, showReflection = true, darkMode = false, ...
|
|
21
|
+
const Button = React__default.forwardRef(({ children, className = "", iconOnly = false, state = "default", size = "md", color, variant, block = false, onClick, enableRipple = true, rippleEffect = "default", rippleClassName, rippleScale = 10, showReflection = true, darkMode = false, disabled: disabledProp, "aria-label": ariaLabelProp, ...restProps }, ref) => {
|
|
22
22
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
23
23
|
const shouldReduceMotion = useReducedMotion();
|
|
24
24
|
const shouldDisableAnimations = !!shouldReduceMotion;
|
|
@@ -33,18 +33,18 @@ const Button = React__default.forwardRef(({ children, className = "", iconOnly =
|
|
|
33
33
|
const resolvedVariant = variant || "filled";
|
|
34
34
|
// Derived state flags (direct computation - faster than useMemo)
|
|
35
35
|
const isLoading = state === "loading";
|
|
36
|
-
const isDisabled = state === "disabled" || state === "loading";
|
|
36
|
+
const isDisabled = state === "disabled" || state === "loading" || !!disabledProp;
|
|
37
37
|
const isError = state === "error";
|
|
38
38
|
// Dev-time a11y warning for iconOnly buttons without aria-label
|
|
39
39
|
if (process.env.NODE_ENV !== "production") {
|
|
40
|
-
if (iconOnly && !
|
|
40
|
+
if (iconOnly && !ariaLabelProp) {
|
|
41
41
|
// eslint-disable-next-line no-console
|
|
42
42
|
console.warn("Button(iconOnly) requires 'aria-label' for accessibility.");
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
// Safe onClick handler - respect both state="disabled" and disabled={true}
|
|
46
46
|
const handleClick = useCallback((event) => {
|
|
47
|
-
if (isDisabled
|
|
47
|
+
if (isDisabled)
|
|
48
48
|
return;
|
|
49
49
|
// Create ripple effect if enabled
|
|
50
50
|
if (enableRipple && !shouldReduceMotion) {
|
|
@@ -62,7 +62,6 @@ const Button = React__default.forwardRef(({ children, className = "", iconOnly =
|
|
|
62
62
|
}, [
|
|
63
63
|
onClick,
|
|
64
64
|
isDisabled,
|
|
65
|
-
props.disabled,
|
|
66
65
|
enableRipple,
|
|
67
66
|
shouldReduceMotion,
|
|
68
67
|
createRipple,
|
|
@@ -71,7 +70,7 @@ const Button = React__default.forwardRef(({ children, className = "", iconOnly =
|
|
|
71
70
|
const sizeClasses = ((_b = (_a = buttonTheme.sizes) === null || _a === void 0 ? void 0 : _a[size]) === null || _b === void 0 ? void 0 : _b[iconOnly ? "iconOnly" : resolvedVariant === "link" ? "link" : "default"]) || "";
|
|
72
71
|
const colorClasses = ((_c = buttonTheme.variantColors[resolvedVariant]) === null || _c === void 0 ? void 0 : _c[resolvedColor]) || "";
|
|
73
72
|
const variantClasses = ((_d = buttonTheme.variantStyles) === null || _d === void 0 ? void 0 : _d[resolvedVariant]) || "";
|
|
74
|
-
const stateClasses =
|
|
73
|
+
const stateClasses = isDisabled
|
|
75
74
|
? ((_e = buttonTheme.states) === null || _e === void 0 ? void 0 : _e.disabled) || ""
|
|
76
75
|
: isError
|
|
77
76
|
? ((_f = buttonTheme.states) === null || _f === void 0 ? void 0 : _f.error) || ""
|
|
@@ -80,7 +79,7 @@ const Button = React__default.forwardRef(({ children, className = "", iconOnly =
|
|
|
80
79
|
: "";
|
|
81
80
|
const blockStyle = block ? buttonTheme.blockStyle : "";
|
|
82
81
|
// Generate default aria-label for icon-only buttons if not provided (fallback only)
|
|
83
|
-
const ariaLabel = iconOnly && !
|
|
82
|
+
const ariaLabel = iconOnly && !ariaLabelProp ? "Button" : ariaLabelProp;
|
|
84
83
|
// Determine animation props (user props will override due to spread order)
|
|
85
84
|
const animationProps = shouldDisableAnimations
|
|
86
85
|
? {}
|
|
@@ -92,26 +91,30 @@ const Button = React__default.forwardRef(({ children, className = "", iconOnly =
|
|
|
92
91
|
const spinnerClassName = resolvedVariant === "filled" && color !== "neutral"
|
|
93
92
|
? "border-t-white border-l-white"
|
|
94
93
|
: "";
|
|
95
|
-
//
|
|
96
|
-
const
|
|
94
|
+
// Track the latest forwarded ref to avoid mergedRef recreation on inline callback refs
|
|
95
|
+
const forwardedRef = useRef(ref);
|
|
96
|
+
forwardedRef.current = ref;
|
|
97
|
+
// Merge refs - stable callback that won't cause DOM detach/attach cycles
|
|
98
|
+
const mergedRef = useCallback((node) => {
|
|
97
99
|
// Set ripple's buttonRef
|
|
98
100
|
if (buttonRef) {
|
|
99
101
|
buttonRef.current = node;
|
|
100
102
|
}
|
|
101
103
|
// Set forwarded ref
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
const fRef = forwardedRef.current;
|
|
105
|
+
if (typeof fRef === "function") {
|
|
106
|
+
fRef(node);
|
|
104
107
|
}
|
|
105
|
-
else if (
|
|
106
|
-
|
|
108
|
+
else if (fRef) {
|
|
109
|
+
fRef.current =
|
|
107
110
|
node;
|
|
108
111
|
}
|
|
109
|
-
}, [
|
|
110
|
-
return (jsxs(motion.button, { ref: mergedRef, type: "button", className: cn(buttonTheme.baseStyle, colorClasses, variantClasses, sizeClasses, blockStyle, stateClasses, darkMode && "dark", className), disabled: isDisabled, "data-state": state, "data-color": resolvedColor, "data-variant": resolvedVariant, "data-size": size, "data-icon-only": iconOnly ? "true" : "false", "data-block": block ? "true" : "false", "aria-disabled": isDisabled || undefined, "aria-invalid": isError || undefined, "aria-label": ariaLabel,
|
|
112
|
+
}, [buttonRef]);
|
|
113
|
+
return (jsxs(motion.button, { ...restProps /* React drag events conflict with motion drag events */, ...animationProps, ref: mergedRef, type: "button", className: cn(buttonTheme.baseStyle, colorClasses, variantClasses, sizeClasses, blockStyle, stateClasses, darkMode && "dark", className), disabled: isDisabled, "data-state": state, "data-color": resolvedColor, "data-variant": resolvedVariant, "data-size": size, "data-icon-only": iconOnly ? "true" : "false", "data-block": block ? "true" : "false", "aria-disabled": isDisabled || undefined, "aria-invalid": isError || undefined, "aria-label": ariaLabel, onClick: handleClick, children: [showReflection &&
|
|
111
114
|
resolvedVariant !== "link" &&
|
|
112
|
-
resolvedVariant !== "outline" && (jsx("div", { className: "absolute top-0.25 right-0.25 left-0.25 h-3 bg-gradient-to-b
|
|
115
|
+
resolvedVariant !== "outline" && (jsx("div", { className: "absolute top-0.25 right-0.25 left-0.25 h-3 bg-gradient-to-b from-white/25 to-transparent border-t-[0.5px] border-white/40 rounded-t-[calc(var(--button-radius)-1.25px)] opacity-60" })), isLoading && (jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: jsx(Spinner, { size: "sm", color: color, className: spinnerClassName }) })), jsx("span", { className: cn("inline-flex items-center gap-2 whitespace-nowrap", isLoading && "opacity-0"), children: children }), enableRipple &&
|
|
113
116
|
ripples.map((ripple) => {
|
|
114
|
-
const animation = getRippleAnimation(effect, ripple
|
|
117
|
+
const animation = getRippleAnimation(effect, ripple, rippleScale);
|
|
115
118
|
return (jsx(motion.span, { initial: animation.initial, animate: animation.animate, transition: animation.transition, className: cn("absolute rounded-full size-5 pointer-events-none ", animation.className, rippleClassName ||
|
|
116
119
|
getRippleColorClass(resolvedVariant, resolvedColor)), style: {
|
|
117
120
|
top: ripple.y - 10,
|
|
@@ -12,6 +12,10 @@ export interface Ripple {
|
|
|
12
12
|
x: number;
|
|
13
13
|
y: number;
|
|
14
14
|
layer?: number;
|
|
15
|
+
/** Pre-computed random scale factor for particle effect (0-1 range) */
|
|
16
|
+
randomScale?: number;
|
|
17
|
+
/** Pre-computed random duration offset for particle effect (0-1 range) */
|
|
18
|
+
randomDuration?: number;
|
|
15
19
|
}
|
|
16
20
|
export interface RippleConfig {
|
|
17
21
|
/** Scale multiplier for ripple expansion (default: 10) */
|
|
@@ -53,7 +57,7 @@ export declare function getRippleColorClass(variant?: string, color?: string): s
|
|
|
53
57
|
/**
|
|
54
58
|
* Get animation properties for specific ripple effect and layer
|
|
55
59
|
*/
|
|
56
|
-
export declare function getRippleAnimation(effect: RippleEffectType,
|
|
60
|
+
export declare function getRippleAnimation(effect: RippleEffectType, ripple: Ripple, baseScale: number): {
|
|
57
61
|
initial: {
|
|
58
62
|
scale: number;
|
|
59
63
|
opacity: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState, useRef, useCallback } from 'react';
|
|
1
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Custom hook for managing ripple effects on button clicks
|
|
@@ -21,6 +21,13 @@ function useRipple(config = {}) {
|
|
|
21
21
|
const { scale = 10, duration = 600, effect = 'default' } = config;
|
|
22
22
|
const [ripples, setRipples] = useState([]);
|
|
23
23
|
const buttonRef = useRef(null);
|
|
24
|
+
const timeoutsRef = useRef([]);
|
|
25
|
+
// Cleanup all pending timeouts on unmount
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
return () => {
|
|
28
|
+
timeoutsRef.current.forEach(clearTimeout);
|
|
29
|
+
};
|
|
30
|
+
}, []);
|
|
24
31
|
const createRipple = useCallback((event) => {
|
|
25
32
|
const button = buttonRef.current;
|
|
26
33
|
if (!button)
|
|
@@ -44,12 +51,14 @@ function useRipple(config = {}) {
|
|
|
44
51
|
maxDuration = 800; // Longest layer duration
|
|
45
52
|
break;
|
|
46
53
|
case 'particle':
|
|
47
|
-
// Multiple small ripples at random offsets
|
|
54
|
+
// Multiple small ripples at random offsets (random values stored for stable renders)
|
|
48
55
|
newRipples = Array.from({ length: 6 }, (_, i) => ({
|
|
49
56
|
id: baseId + i,
|
|
50
57
|
x: x + (Math.random() - 0.5) * 20,
|
|
51
58
|
y: y + (Math.random() - 0.5) * 20,
|
|
52
59
|
layer: i + 1,
|
|
60
|
+
randomScale: Math.random(),
|
|
61
|
+
randomDuration: Math.random(),
|
|
53
62
|
}));
|
|
54
63
|
maxDuration = 700;
|
|
55
64
|
break;
|
|
@@ -75,12 +84,11 @@ function useRipple(config = {}) {
|
|
|
75
84
|
newRipples = [{ id: baseId, x, y, layer: 1 }];
|
|
76
85
|
maxDuration = 800;
|
|
77
86
|
// Spawn echo ripples with delays
|
|
78
|
-
setTimeout(() => {
|
|
87
|
+
timeoutsRef.current.push(setTimeout(() => {
|
|
79
88
|
setRipples((prev) => [...prev, { id: baseId + 10, x, y, layer: 2 }]);
|
|
80
|
-
}, 100)
|
|
81
|
-
setTimeout(() => {
|
|
89
|
+
}, 100), setTimeout(() => {
|
|
82
90
|
setRipples((prev) => [...prev, { id: baseId + 20, x, y, layer: 3 }]);
|
|
83
|
-
}, 200);
|
|
91
|
+
}, 200));
|
|
84
92
|
break;
|
|
85
93
|
case 'default':
|
|
86
94
|
default:
|
|
@@ -91,9 +99,9 @@ function useRipple(config = {}) {
|
|
|
91
99
|
}
|
|
92
100
|
setRipples((prev) => [...prev, ...newRipples]);
|
|
93
101
|
// Auto-remove all ripples after longest animation completes
|
|
94
|
-
setTimeout(() => {
|
|
102
|
+
timeoutsRef.current.push(setTimeout(() => {
|
|
95
103
|
setRipples((prev) => prev.filter((r) => r.id < baseId || r.id > baseId + 30));
|
|
96
|
-
}, maxDuration);
|
|
104
|
+
}, maxDuration));
|
|
97
105
|
}, [duration, effect]);
|
|
98
106
|
return {
|
|
99
107
|
ripples,
|
|
@@ -124,8 +132,6 @@ function getRippleColorClass(variant, color) {
|
|
|
124
132
|
return "bg-[var(--color-danger)]/20";
|
|
125
133
|
case "neutral":
|
|
126
134
|
return "bg-[var(--color-neutral-500)]/20";
|
|
127
|
-
case "muted":
|
|
128
|
-
return "bg-[var(--color-text-muted)]/20";
|
|
129
135
|
default:
|
|
130
136
|
return "bg-[var(--color-primary)]/20";
|
|
131
137
|
}
|
|
@@ -133,7 +139,9 @@ function getRippleColorClass(variant, color) {
|
|
|
133
139
|
/**
|
|
134
140
|
* Get animation properties for specific ripple effect and layer
|
|
135
141
|
*/
|
|
136
|
-
function getRippleAnimation(effect,
|
|
142
|
+
function getRippleAnimation(effect, ripple, baseScale) {
|
|
143
|
+
var _a, _b, _c;
|
|
144
|
+
const layer = (_a = ripple.layer) !== null && _a !== void 0 ? _a : 1;
|
|
137
145
|
switch (effect) {
|
|
138
146
|
case 'aurora':
|
|
139
147
|
// Triple layer with different speeds and opacities
|
|
@@ -158,15 +166,17 @@ function getRippleAnimation(effect, layer, baseScale) {
|
|
|
158
166
|
transition: { duration: 0.8, ease: "easeOut" },
|
|
159
167
|
};
|
|
160
168
|
}
|
|
161
|
-
case 'particle':
|
|
162
|
-
//
|
|
163
|
-
const
|
|
164
|
-
const
|
|
169
|
+
case 'particle': {
|
|
170
|
+
// Use pre-computed random values from ripple creation for stable renders
|
|
171
|
+
const particleScale = baseScale * (0.7 + ((_b = ripple.randomScale) !== null && _b !== void 0 ? _b : 0.5) * 0.6);
|
|
172
|
+
const particleDelay = layer * 0.025;
|
|
173
|
+
const particleDuration = 0.5 + ((_c = ripple.randomDuration) !== null && _c !== void 0 ? _c : 0.5) * 0.2;
|
|
165
174
|
return {
|
|
166
175
|
initial: { scale: 0, opacity: 0.6 },
|
|
167
|
-
animate: { scale:
|
|
168
|
-
transition: { duration:
|
|
176
|
+
animate: { scale: particleScale, opacity: 0 },
|
|
177
|
+
transition: { duration: particleDuration, ease: "easeOut", delay: particleDelay },
|
|
169
178
|
};
|
|
179
|
+
}
|
|
170
180
|
case 'glass':
|
|
171
181
|
if (layer === 1) {
|
|
172
182
|
// Outer expanding ring
|
|
@@ -3,7 +3,7 @@ import { ButtonColor, ButtonVariant, ButtonSize, ButtonState } from "./Button.ty
|
|
|
3
3
|
* Theme structure for the Button component using variant-first organization
|
|
4
4
|
* This structure enables reliable dark: variants and className overrides
|
|
5
5
|
*/
|
|
6
|
-
interface ButtonTheme {
|
|
6
|
+
export interface ButtonTheme {
|
|
7
7
|
baseStyle: string;
|
|
8
8
|
variantStyles: Record<ButtonVariant, string>;
|
|
9
9
|
variantColors: {
|
|
@@ -24,4 +24,3 @@ interface ButtonTheme {
|
|
|
24
24
|
* Default theme for the Button component
|
|
25
25
|
*/
|
|
26
26
|
export declare const buttonTheme: ButtonTheme;
|
|
27
|
-
export {};
|
|
@@ -6,7 +6,7 @@ const buttonTheme = {
|
|
|
6
6
|
baseStyle: "relative inline-flex items-center justify-center gap-2 font-semibold focus:outline-none rounded-[var(--button-radius)] overflow-hidden cursor-pointer transition-all duration-300 ease-in-out min-w-fit flex-shrink-0 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 cursor-pointer",
|
|
7
7
|
// Visual style variants - STRUCTURE only (no colors)
|
|
8
8
|
variantStyles: {
|
|
9
|
-
filled: "border",
|
|
9
|
+
filled: "border hover:brightness-[0.9] dark:hover:brightness-[1.15]",
|
|
10
10
|
outline: "bg-transparent border",
|
|
11
11
|
ghost: "border-transparent",
|
|
12
12
|
link: "bg-transparent border-transparent",
|
|
@@ -15,56 +15,53 @@ const buttonTheme = {
|
|
|
15
15
|
variantColors: {
|
|
16
16
|
// Filled variant - solid backgrounds
|
|
17
17
|
filled: {
|
|
18
|
-
neutral: "bg-[var(--color-neutral-
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
"dark:hover:bg-[var(--color-neutral-600)]",
|
|
23
|
-
primary: "bg-[var(--color-primary)] text-white border-[var(--color-primary)] " +
|
|
24
|
-
"hover:bg-[var(--color-primary-700)] hover:ring-2 hover:ring-[var(--color-primary)]/20 " +
|
|
18
|
+
neutral: "bg-[var(--color-neutral-900)] text-white border-[var(--color-border)] " +
|
|
19
|
+
"focus-visible:outline-[var(--color-neutral-800)] " +
|
|
20
|
+
"dark:bg-[var(--color-neutral-200)] dark:text-[var(--color-neutral-900)] dark:border-[var(--color-neutral-200)]",
|
|
21
|
+
primary: "bg-[var(--color-primary)] text-[var(--color-primary-contrast)] border-[var(--color-primary)] " +
|
|
25
22
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
26
|
-
"dark:bg-[var(--color-primary-600)] dark:border-[var(--color-primary-600)]
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
23
|
+
"dark:text-[var(--color-primary-contrast)] dark:bg-[var(--color-primary-600)] dark:border-[var(--color-primary-600)]",
|
|
24
|
+
secondary: "bg-[var(--color-secondary)] text-[var(--color-secondary-contrast)] border-[var(--color-secondary)] " +
|
|
25
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
26
|
+
"dark:text-[var(--color-secondary-contrast)] dark:bg-[var(--color-secondary-600)] dark:border-[var(--color-secondary-600)]",
|
|
27
|
+
success: "bg-[var(--color-success)] text-[var(--color-success-contrast)] border-[var(--color-success)] " +
|
|
30
28
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
31
|
-
"dark:bg-[var(--color-success-700)] dark:border-[var(--color-success-700)]
|
|
32
|
-
|
|
33
|
-
warning: "bg-[var(--color-warning)] text-white border-[var(--color-warning)] " +
|
|
34
|
-
"hover:bg-[var(--color-warning-600)] hover:ring-2 hover:ring-[var(--color-warning)]/20 " +
|
|
29
|
+
"dark:bg-[var(--color-success-700)] dark:border-[var(--color-success-700)]",
|
|
30
|
+
warning: "bg-[var(--color-warning)] text-[var(--color-warning-contrast)] border-[var(--color-warning)] " +
|
|
35
31
|
"focus-visible:outline-[var(--color-warning-600)] " +
|
|
36
|
-
"dark:bg-[var(--color-warning-600)] dark:border-[var(--color-warning-600)]
|
|
37
|
-
|
|
38
|
-
danger: "bg-[var(--color-danger)] text-white border-[var(--color-danger)] " +
|
|
39
|
-
"hover:bg-[var(--color-danger-600)] hover:ring-2 hover:ring-[var(--color-danger)]/20 " +
|
|
32
|
+
"dark:bg-[var(--color-warning-600)] dark:border-[var(--color-warning-600)]",
|
|
33
|
+
danger: "bg-[var(--color-danger)] text-[var(--color-danger-contrast)] border-[var(--color-danger)] " +
|
|
40
34
|
"focus-visible:outline-[var(--color-danger-600)] " +
|
|
41
|
-
"dark:bg-[var(--color-danger-600)] dark:border-[var(--color-danger-600)]
|
|
42
|
-
"dark:hover:bg-[var(--color-danger-500)]",
|
|
35
|
+
"dark:bg-[var(--color-danger-600)] dark:border-[var(--color-danger-600)]",
|
|
43
36
|
},
|
|
44
37
|
// Outline variant - transparent bg with colored border
|
|
45
38
|
outline: {
|
|
46
39
|
neutral: "text-[var(--color-text-primary)] border-[var(--color-border)] " +
|
|
47
|
-
"hover:bg-[var(--color-neutral-100)]
|
|
40
|
+
"hover:bg-[var(--color-neutral-100)] " +
|
|
48
41
|
"focus-visible:outline-[var(--color-text-secondary)] " +
|
|
49
|
-
"dark:
|
|
50
|
-
"dark:hover:bg-[var(--color-neutral-800)]",
|
|
42
|
+
"dark:hover:bg-[var(--color-background-secondary)]",
|
|
51
43
|
primary: "text-[var(--color-primary-600)] border-[var(--color-primary-600)] " +
|
|
52
|
-
"hover:bg-[var(--color-primary-50)]
|
|
44
|
+
"hover:bg-[var(--color-primary-50)] " +
|
|
53
45
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
54
46
|
"dark:text-[var(--color-primary-300)] dark:border-[var(--color-primary-400)] " +
|
|
55
47
|
"dark:hover:bg-[var(--color-primary-900)]/30",
|
|
48
|
+
secondary: "text-[var(--color-secondary-600)] border-[var(--color-secondary-600)] " +
|
|
49
|
+
"hover:bg-[var(--color-secondary-50)] " +
|
|
50
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
51
|
+
"dark:text-[var(--color-secondary-300)] dark:border-[var(--color-secondary-400)] " +
|
|
52
|
+
"dark:hover:bg-[var(--color-secondary-900)]/30",
|
|
56
53
|
success: "text-[var(--color-success-600)] border-[var(--color-success-600)] " +
|
|
57
|
-
"hover:bg-[var(--color-success-50)]
|
|
54
|
+
"hover:bg-[var(--color-success-50)] " +
|
|
58
55
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
59
56
|
"dark:text-[var(--color-success-300)] dark:border-[var(--color-success-400)] " +
|
|
60
57
|
"dark:hover:bg-[var(--color-success-900)]/30",
|
|
61
58
|
warning: "text-[var(--color-warning-600)] border-[var(--color-warning-600)] " +
|
|
62
|
-
"hover:bg-[var(--color-warning-50)]
|
|
59
|
+
"hover:bg-[var(--color-warning-50)] " +
|
|
63
60
|
"focus-visible:outline-[var(--color-warning-600)] " +
|
|
64
61
|
"dark:text-[var(--color-warning-300)] dark:border-[var(--color-warning-400)] " +
|
|
65
62
|
"dark:hover:bg-[var(--color-warning-900)]/30",
|
|
66
63
|
danger: "text-[var(--color-danger-600)] border-[var(--color-danger-600)] " +
|
|
67
|
-
"hover:bg-[var(--color-danger-50)]
|
|
64
|
+
"hover:bg-[var(--color-danger-50)] " +
|
|
68
65
|
"focus-visible:outline-[var(--color-danger-600)] " +
|
|
69
66
|
"dark:text-[var(--color-danger-300)] dark:border-[var(--color-danger-400)] " +
|
|
70
67
|
"dark:hover:bg-[var(--color-danger-900)]/30",
|
|
@@ -72,39 +69,47 @@ const buttonTheme = {
|
|
|
72
69
|
// Ghost variant - subtle background tints
|
|
73
70
|
ghost: {
|
|
74
71
|
neutral: "text-[var(--color-text-primary)] bg-[var(--color-neutral-100)] " +
|
|
75
|
-
"hover:bg-[var(--color-neutral-200)]
|
|
72
|
+
"hover:bg-[var(--color-neutral-200)] " +
|
|
76
73
|
"focus-visible:outline-[var(--color-text-secondary)] " +
|
|
77
74
|
"dark:text-[var(--color-text-primary)] dark:bg-[var(--color-neutral-900)] " +
|
|
78
75
|
"dark:hover:bg-[var(--color-neutral-800)]",
|
|
79
76
|
primary: "text-[var(--color-primary-600)] bg-[var(--color-primary)]/10 " +
|
|
80
|
-
"hover:bg-[var(--color-primary-50)]
|
|
77
|
+
"hover:bg-[var(--color-primary-50)] " +
|
|
81
78
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
82
79
|
"dark:text-[var(--color-primary-300)] dark:bg-[var(--color-primary-900)]/30 " +
|
|
83
80
|
"dark:hover:bg-[var(--color-primary-900)]/50",
|
|
81
|
+
secondary: "text-[var(--color-secondary-600)] bg-[var(--color-secondary)]/10 " +
|
|
82
|
+
"hover:bg-[var(--color-secondary-50)] " +
|
|
83
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
84
|
+
"dark:text-[var(--color-secondary-300)] dark:bg-[var(--color-secondary-900)]/30 " +
|
|
85
|
+
"dark:hover:bg-[var(--color-secondary-900)]/50",
|
|
84
86
|
success: "text-[var(--color-success-600)] bg-[var(--color-success)]/10 " +
|
|
85
|
-
"hover:bg-[var(--color-success-50)]
|
|
87
|
+
"hover:bg-[var(--color-success-50)] " +
|
|
86
88
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
87
89
|
"dark:text-[var(--color-success-300)] dark:bg-[var(--color-success-900)]/30 " +
|
|
88
90
|
"dark:hover:bg-[var(--color-success-900)]/50",
|
|
89
91
|
warning: "text-[var(--color-warning-600)] bg-[var(--color-warning)]/10 " +
|
|
90
|
-
"hover:bg-[var(--color-warning-50)]
|
|
92
|
+
"hover:bg-[var(--color-warning-50)] " +
|
|
91
93
|
"focus-visible:outline-[var(--color-warning-600)] " +
|
|
92
94
|
"dark:text-[var(--color-warning-300)] dark:bg-[var(--color-warning-900)]/30 " +
|
|
93
95
|
"dark:hover:bg-[var(--color-warning-900)]/50",
|
|
94
96
|
danger: "text-[var(--color-danger-600)] bg-[var(--color-danger)]/10 " +
|
|
95
|
-
"hover:bg-[var(--color-danger-50)]
|
|
97
|
+
"hover:bg-[var(--color-danger-50)] " +
|
|
96
98
|
"focus-visible:outline-[var(--color-danger-600)] " +
|
|
97
99
|
"dark:text-[var(--color-danger-300)] dark:bg-[var(--color-danger-900)]/30 " +
|
|
98
100
|
"dark:hover:bg-[var(--color-danger-900)]/50",
|
|
99
101
|
},
|
|
100
102
|
// Link variant - text-only with per-color styles
|
|
101
103
|
link: {
|
|
102
|
-
neutral: "text-[var(--color-text-
|
|
104
|
+
neutral: "text-[var(--color-text-secondary)] underline-offset-4 hover:underline hover:text-[var(--color-text-primary)] " +
|
|
103
105
|
"focus-visible:outline-[var(--color-text-secondary)] " +
|
|
104
106
|
"dark:text-[var(--color-text-primary)]",
|
|
105
107
|
primary: "text-[var(--color-primary-600)] underline-offset-4 hover:underline " +
|
|
106
108
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
107
109
|
"dark:text-[var(--color-primary-300)]",
|
|
110
|
+
secondary: "text-[var(--color-secondary-600)] underline-offset-4 hover:underline " +
|
|
111
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
112
|
+
"dark:text-[var(--color-secondary-300)]",
|
|
108
113
|
success: "text-[var(--color-success-600)] underline-offset-4 hover:underline " +
|
|
109
114
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
110
115
|
"dark:text-[var(--color-success-300)]",
|
|
@@ -119,19 +124,19 @@ const buttonTheme = {
|
|
|
119
124
|
// Size variants
|
|
120
125
|
sizes: {
|
|
121
126
|
sm: {
|
|
122
|
-
default: "min-h-[var(--button-min-h-sm)] px-[var(--button-px-sm)] py-[var(--button-py-sm)] text-
|
|
127
|
+
default: "min-h-[var(--button-min-h-sm)] px-[var(--button-px-sm)] py-[var(--button-py-sm)] text-base",
|
|
123
128
|
iconOnly: "size-[var(--button-icon-size-sm)] p-[var(--button-icon-p-sm)]",
|
|
124
|
-
link: "p-0 text-
|
|
129
|
+
link: "p-0 text-base h-fit",
|
|
125
130
|
},
|
|
126
131
|
md: {
|
|
127
|
-
default: "min-h-[var(--button-min-h-md)] px-[var(--button-px-md)] py-[var(--button-py-md)] text-
|
|
132
|
+
default: "min-h-[var(--button-min-h-md)] px-[var(--button-px-md)] py-[var(--button-py-md)] text-base",
|
|
128
133
|
iconOnly: "size-[var(--button-icon-size-md)] p-[var(--button-icon-p-md)]",
|
|
129
|
-
link: "p-0 text-
|
|
134
|
+
link: "p-0 text-base h-fit",
|
|
130
135
|
},
|
|
131
136
|
lg: {
|
|
132
|
-
default: "min-h-[var(--button-min-h-lg)] px-[var(--button-px-lg)] py-[var(--button-py-lg)] text-
|
|
137
|
+
default: "min-h-[var(--button-min-h-lg)] px-[var(--button-px-lg)] py-[var(--button-py-lg)] text-lg",
|
|
133
138
|
iconOnly: "size-[var(--button-icon-size-lg)] p-[var(--button-icon-p-lg)]",
|
|
134
|
-
link: "p-0 text-
|
|
139
|
+
link: "p-0 text-lg h-fit",
|
|
135
140
|
},
|
|
136
141
|
},
|
|
137
142
|
// State styles
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { HTMLMotionProps } from "motion/react";
|
|
3
2
|
import { RippleEffectType } from "./Button.ripple";
|
|
3
|
+
import { SemanticColor } from "../../../utils/colorUtils";
|
|
4
4
|
/**
|
|
5
5
|
* Button component props
|
|
6
6
|
* @property {ButtonColor} color - The semantic color/intent of the button
|
|
@@ -14,7 +14,7 @@ import { RippleEffectType } from "./Button.ripple";
|
|
|
14
14
|
* @property {string} rippleClassName - Custom class name for ripple styling
|
|
15
15
|
* @property {number} rippleScale - Scale multiplier for ripple expansion (default: 10)
|
|
16
16
|
*/
|
|
17
|
-
export interface ButtonProps extends
|
|
17
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
18
18
|
/** The semantic color/intent of the button */
|
|
19
19
|
color?: ButtonColor;
|
|
20
20
|
/** The visual style variant of the button */
|
|
@@ -50,7 +50,7 @@ export interface ButtonProps extends HTMLMotionProps<"button"> {
|
|
|
50
50
|
*/
|
|
51
51
|
darkMode?: boolean;
|
|
52
52
|
}
|
|
53
|
-
export type ButtonColor =
|
|
53
|
+
export type ButtonColor = SemanticColor;
|
|
54
54
|
export type ButtonVariant = "filled" | "outline" | "ghost" | "link";
|
|
55
55
|
export type ButtonSize = "sm" | "md" | "lg";
|
|
56
56
|
export type ButtonState = "default" | "disabled" | "error" | "loading";
|
|
@@ -44,7 +44,7 @@ const buttonGroupTheme = {
|
|
|
44
44
|
vertical: "h-px self-stretch",
|
|
45
45
|
},
|
|
46
46
|
// Text styles for ButtonGroupText component
|
|
47
|
-
textStyles: "px-3 py-2 text-
|
|
47
|
+
textStyles: "px-3 py-2 text-base text-[var(--color-text-primary)] flex items-center",
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
export { buttonGroupTheme };
|
|
@@ -371,7 +371,7 @@ const Calendar = React__default.forwardRef(({ mode = 'single', value, defaultVal
|
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
373
|
}, [minDate, maxDate, customIsDateDisabled, currentMonth, currentYear, onViewDateChange, mode, value, onChange, selectedValue, rangeSelectionState]);
|
|
374
|
-
return (jsxs("div", { ref: ref, className: cn(calendarTheme.baseStyle, className), ...props, children: [jsxs("div", { className: calendarTheme.headerStyle, children: [onNavigatePrev !== null && (jsx(Button, { onClick: navigateToPreviousMonth, "aria-label": "Previous month", disabled: !canNavigateToPrev, iconOnly: true, variant: "link", color: "neutral", size: "sm", children: jsx(ChevronLeftIcon, { className: "size-4", strokeWidth: 2 }) })), onNavigatePrev === null && jsx("div", { className: "w-8" }), resolvedHeaderMode === 'static' ? (jsxs("h2", { className: calendarTheme.titleStyle, children: [getMonthName(viewDate, months), " ", currentYear] })) : (jsxs("div", { className: calendarTheme.headerDropdownsStyle, children: [(resolvedHeaderMode === 'dropdown' || (resolvedHeaderMode === 'mixed' && enableMonthDropdown)) && (jsx(Select, { value: currentMonth.toString(), onChange: handleMonthChange, options: monthOptions, displayValue: currentAbbreviatedMonth, size: "sm", className: "text-
|
|
374
|
+
return (jsxs("div", { ref: ref, className: cn(calendarTheme.baseStyle, className), ...props, children: [jsxs("div", { className: calendarTheme.headerStyle, children: [onNavigatePrev !== null && (jsx(Button, { onClick: navigateToPreviousMonth, "aria-label": "Previous month", disabled: !canNavigateToPrev, iconOnly: true, variant: "link", color: "neutral", size: "sm", children: jsx(ChevronLeftIcon, { className: "size-4", strokeWidth: 2 }) })), onNavigatePrev === null && jsx("div", { className: "w-8" }), resolvedHeaderMode === 'static' ? (jsxs("h2", { className: calendarTheme.titleStyle, children: [getMonthName(viewDate, months), " ", currentYear] })) : (jsxs("div", { className: calendarTheme.headerDropdownsStyle, children: [(resolvedHeaderMode === 'dropdown' || (resolvedHeaderMode === 'mixed' && enableMonthDropdown)) && (jsx(Select, { value: currentMonth.toString(), onChange: handleMonthChange, options: monthOptions, displayValue: currentAbbreviatedMonth, size: "sm", className: "text-base font-medium" })), (resolvedHeaderMode === 'dropdown' || (resolvedHeaderMode === 'mixed' && enableYearDropdown)) && (jsx(Select, { value: currentYear.toString(), onChange: handleYearChange, options: yearOptions, size: "sm", className: "text-base font-medium" }))] })), onNavigateNext !== null && (jsx(Button, { onClick: navigateToNextMonth, "aria-label": "Next month", disabled: !canNavigateToNext, iconOnly: true, variant: "link", color: "neutral", size: "sm", children: jsx(ChevronRightIcon, { className: "size-4", strokeWidth: 2 }) })), onNavigateNext === null && jsx("div", { className: "w-8" })] }), jsx("div", { className: calendarTheme.weekdaysStyle, children: weekdays.map((day, index) => (jsx("div", { className: calendarTheme.weekdayStyle, children: day }, index))) }), jsx("div", { className: calendarTheme.daysGridStyle, children: calendarDays.map((day) => {
|
|
375
375
|
var _a;
|
|
376
376
|
const dayNumber = day.date.getDate();
|
|
377
377
|
return (jsxs(motion.button, { type: "button", onClick: () => handleDateSelect(day.date), disabled: day.isDisabled, className: cn(calendarTheme.dayButtonStyle, (_a = calendarTheme.dayButtonSizes) === null || _a === void 0 ? void 0 : _a[size]), "data-selected": day.isSelected, "data-range-start": day.isRangeStart, "data-range-end": day.isRangeEnd, "data-in-range": day.isInRange, "data-today": day.isToday && !day.isSelected && !day.isRangeStart && !day.isRangeEnd, "data-disabled": day.isDisabled, "data-other-month": !day.isCurrentMonth, "aria-label": `Select ${day.date.toLocaleDateString()}`, variants: shouldReduceMotion ? {} : calendarAnimations.dayButton, whileHover: shouldReduceMotion ? undefined : (!day.isDisabled ? "hover" : undefined), whileTap: shouldReduceMotion ? undefined : (!day.isDisabled ? "tap" : undefined), children: [jsx("time", { dateTime: day.date.toISOString().split("T")[0], children: dayNumber }), day.isToday && (jsx(motion.span, { className: "absolute z-10 bottom-1 left-1/2 -translate-x-1/2 w-1 h-1 bg-[var(--color-primary)] rounded-full", variants: shouldReduceMotion ? {} : calendarAnimations.todayDot, initial: shouldReduceMotion ? undefined : "initial", animate: shouldReduceMotion ? undefined : "animate" }))] }, day.date.toISOString()));
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
* Uses design tokens and data-[state=*] selectors
|
|
4
4
|
*/
|
|
5
5
|
const calendarTheme = {
|
|
6
|
-
baseStyle: "select-none w-full
|
|
6
|
+
baseStyle: "select-none w-full bg-white dark:bg-[var(--color-neutral-900)]",
|
|
7
7
|
headerStyle: "flex items-center justify-between mb-4",
|
|
8
|
-
titleStyle: "text-
|
|
8
|
+
titleStyle: "text-lg font-semibold text-[var(--color-text-primary)] cursor-pointer hover:text-[var(--color-primary)] transition-colors " +
|
|
9
9
|
"dark:text-[var(--color-neutral-200)] dark:hover:text-[var(--color-primary-400)]",
|
|
10
10
|
headerDropdownsStyle: "grid grid-cols-2 items-center gap-2 flex-1 justify-center mx-3",
|
|
11
11
|
navButtonStyle: "inline-flex items-center justify-center size-8 rounded-[calc(var(--radius-base)*0.75)] border-0 bg-transparent " +
|
|
@@ -16,7 +16,7 @@ const calendarTheme = {
|
|
|
16
16
|
"dark:text-[var(--color-neutral-500)] dark:hover:text-[var(--color-neutral-200)] dark:hover:bg-[var(--color-neutral-800)] " +
|
|
17
17
|
"dark:focus-visible:ring-offset-[var(--color-neutral-900)]",
|
|
18
18
|
weekdaysStyle: "grid grid-cols-7 mb-2",
|
|
19
|
-
weekdayStyle: "flex items-center justify-center h-8 text-
|
|
19
|
+
weekdayStyle: "flex items-center justify-center h-8 text-sm font-medium text-[var(--color-text-muted)] " +
|
|
20
20
|
"dark:text-[var(--color-neutral-500)]",
|
|
21
21
|
daysGridStyle: "grid grid-cols-7 gap-0.5",
|
|
22
22
|
dayButtonStyle: "relative flex items-center justify-center rounded-full border-0 bg-transparent font-medium cursor-pointer " +
|
|
@@ -26,7 +26,7 @@ const calendarTheme = {
|
|
|
26
26
|
// Hover state
|
|
27
27
|
"hover:bg-[var(--color-primary-50)] dark:hover:bg-[var(--color-neutral-800)] " +
|
|
28
28
|
// Selected state
|
|
29
|
-
"data-[selected=true]:bg-[var(--color-primary)] data-[selected=true]:text-
|
|
29
|
+
"data-[selected=true]:bg-[var(--color-primary)] data-[selected=true]:text-[var(--color-primary-contrast)] " +
|
|
30
30
|
"data-[selected=true]:hover:bg-[var(--color-primary-600)] data-[selected=true]:border-t data-[selected=true]:border-white/30 " +
|
|
31
31
|
// Today indicator
|
|
32
32
|
"data-[today=true]:text-[var(--color-primary)] dark:data-[today=true]:text-[var(--color-primary-400)] " +
|
|
@@ -38,16 +38,16 @@ const calendarTheme = {
|
|
|
38
38
|
"data-[other-month=true]:text-[var(--color-text-muted)] data-[other-month=true]:opacity-60 " +
|
|
39
39
|
"dark:data-[other-month=true]:text-[var(--color-neutral-600)] " +
|
|
40
40
|
// Range mode states
|
|
41
|
-
"data-[range-start=true]:bg-[var(--color-primary)] data-[range-start=true]:text-
|
|
42
|
-
"data-[range-end=true]:bg-[var(--color-primary)] data-[range-end=true]:text-
|
|
41
|
+
"data-[range-start=true]:bg-[var(--color-primary)] data-[range-start=true]:text-[var(--color-primary-contrast)] " +
|
|
42
|
+
"data-[range-end=true]:bg-[var(--color-primary)] data-[range-end=true]:text-[var(--color-primary-contrast)] " +
|
|
43
43
|
"data-[in-range=true]:bg-[var(--color-primary-50)]/70 data-[in-range=true]:text-[var(--color-text-primary)] " +
|
|
44
44
|
"dark:data-[in-range=true]:bg-[var(--color-primary-900)]/50 dark:data-[in-range=true]:text-[var(--color-neutral-200)] " +
|
|
45
45
|
// Focus offset for dark mode
|
|
46
46
|
"dark:focus-visible:ring-offset-[var(--color-neutral-900)]",
|
|
47
47
|
dayButtonSizes: {
|
|
48
|
-
sm: "size-8 text-
|
|
49
|
-
md: "size-10 text-
|
|
50
|
-
lg: "size-12 text-
|
|
48
|
+
sm: "size-8 text-base",
|
|
49
|
+
md: "size-10 text-base",
|
|
50
|
+
lg: "size-12 text-lg",
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
53
|
|
|
@@ -242,7 +242,7 @@ const CalendarMini = React__default.forwardRef(({ selectedDate, currentMonth, on
|
|
|
242
242
|
day: "numeric",
|
|
243
243
|
}), "aria-selected": isSelected, "aria-current": isToday ? "date" : undefined, "aria-disabled": disabled, type: "button", ...(enableAnimations && {
|
|
244
244
|
whileTap: !disabled ? { scale: 0.95 } : undefined,
|
|
245
|
-
}), children: [jsx("div", { className: "text-
|
|
245
|
+
}), children: [jsx("div", { className: "text-base font-medium opacity-60", children: formatDayName(date) }), jsx("time", { dateTime: date.toISOString(), className: cn("font-semibold"), children: formatDateNumber(date) })] }, date.toISOString()));
|
|
246
246
|
}) }, `${startDate.getTime()}-dates`) }) }) })] }), jsx(Button, { iconOnly: true, color: "neutral", variant: "ghost", className: "!flex-shrink !flex-grow-0 !w-fit self-stretch !h-auto !min-h-0 px-0.5", onClick: handleNextMonth, "aria-label": "Next month", children: jsx(ChevronRightIcon, { className: "size-5 text-[var(--color-text-primary)]" }) })] }));
|
|
247
247
|
});
|
|
248
248
|
CalendarMini.displayName = "CalendarMini";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CardComponent } from './Card.types';
|
|
2
2
|
import { CardHeader } from './CardHeader';
|
|
3
3
|
import { CardTitle } from './CardTitle';
|
|
4
|
-
import {
|
|
4
|
+
import { CardSubtitle } from './CardSubtitle';
|
|
5
5
|
import { CardContent } from './CardContent';
|
|
6
6
|
import { CardFooter } from './CardFooter';
|
|
7
|
-
export { CardHeader, CardTitle,
|
|
7
|
+
export { CardHeader, CardTitle, CardSubtitle, CardContent, CardFooter };
|
|
8
8
|
export declare const Card: CardComponent;
|