@flikk/ui 1.0.0-beta.29 → 1.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1184 -0
- package/dist/components/ai/CodeBlock/CodeBlock.js +21 -4
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +0 -1
- package/dist/components/ai/CodeBlock/CodeBlock.types.d.ts +0 -2
- package/dist/components/ai/CodeBlock/LanguageIcon.js +1 -0
- package/dist/components/ai/PromptInput/PromptInput.js +13 -9
- package/dist/components/ai/PromptInput/PromptInput.theme.js +19 -2
- package/dist/components/ai/PromptInput/VoiceRecorder.d.ts +1 -0
- package/dist/components/ai/PromptInput/VoiceRecorder.js +154 -7
- package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.js +1 -0
- package/dist/components/ai/StreamingResponse/AnimatedText.js +1 -0
- package/dist/components/ai/StreamingResponse/ErrorDisplay.js +1 -0
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +1 -0
- package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +2 -2
- package/dist/components/ai/StreamingResponse/StreamingCursor.js +14 -3
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +2 -2
- package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +17 -11
- package/dist/components/ai/StreamingResponse/StreamingResponse.js +3 -3
- package/dist/components/ai/StreamingResponse/WordAnimationContext.js +3 -1
- package/dist/components/ai/TokenCounter/TokenCounter.js +1 -0
- package/dist/components/ai/index.d.ts +2 -2
- package/dist/components/ai/index.js +4 -5
- package/dist/components/canvas/Background.js +3 -2
- package/dist/components/canvas/CanvasToolbar.js +3 -2
- package/dist/components/canvas/Edge.d.ts +2 -5
- package/dist/components/canvas/Edge.js +18 -2
- package/dist/components/canvas/EdgeLayer.d.ts +2 -1
- package/dist/components/canvas/EdgeLayer.js +20 -10
- package/dist/components/canvas/Handle.js +3 -2
- package/dist/components/canvas/MiniMap.js +1 -0
- package/dist/components/canvas/NodeCanvas.js +19 -15
- package/dist/components/canvas/NodeCanvas.types.d.ts +5 -1
- package/dist/components/canvas/NodeControls.js +3 -2
- package/dist/components/canvas/NodeRenderer.d.ts +4 -1
- package/dist/components/canvas/NodeRenderer.js +18 -9
- package/dist/components/canvas/changes.test.d.ts +1 -0
- package/dist/components/canvas/context/CanvasContext.d.ts +10 -1
- package/dist/components/canvas/context/CanvasContext.js +27 -7
- package/dist/components/canvas/context/ConnectionContext.js +1 -0
- package/dist/components/canvas/context/HandleRegistry.js +1 -0
- package/dist/components/canvas/context/InteractionContext.js +1 -0
- package/dist/components/canvas/context/NodeIdContext.js +1 -0
- package/dist/components/canvas/hooks/useConnection.js +1 -0
- package/dist/components/canvas/hooks/useMarquee.js +1 -0
- package/dist/components/canvas/hooks/useNodeDrag.js +3 -2
- package/dist/components/canvas/hooks/usePanZoom.js +7 -1
- package/dist/components/canvas/hooks/useViewport.js +1 -0
- package/dist/components/canvas/layout.test.d.ts +1 -0
- package/dist/components/canvas/utils.test.d.ts +1 -0
- package/dist/components/charts/ActivityRings/ActivityRings.js +28 -17
- package/dist/components/charts/ActivityRings/ActivityRings.types.d.ts +2 -3
- package/dist/components/charts/ActivityRings/ActivityRings.types.js +2 -1
- package/dist/components/charts/AreaChart/AreaChart.js +170 -157
- package/dist/components/charts/BarChart/BarChart.js +114 -124
- package/dist/components/charts/ChartContainer.d.ts +7 -0
- package/dist/components/charts/ChartContainer.js +10 -7
- package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.d.ts +3 -1
- package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.js +137 -102
- package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.types.d.ts +17 -5
- package/dist/components/charts/ComboChart/ComboChart.js +26 -9
- package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
- package/dist/components/charts/ComboChart/ComboChart.types.js +4 -0
- package/dist/components/charts/ComboChart/ComboChartCanvas.d.ts +98 -0
- package/dist/components/charts/{shared/ChartContainer/ChartContainer.js → ComboChart/ComboChartCanvas.js} +41 -44
- package/dist/components/charts/{shared/ChartContainer/ChartContainer.types.d.ts → ComboChart/ComboChartCanvas.types.d.ts} +23 -3
- package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.d.ts +3 -1
- package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.js +27 -14
- package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.types.d.ts +11 -5
- package/dist/components/charts/DonutChart/DonutChart.js +2 -1
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +8 -22
- package/dist/components/charts/DonutChart/donut-utils.js +1 -0
- package/dist/components/charts/FunnelChart/FunnelChart.animations.js +1 -48
- package/dist/components/charts/FunnelChart/FunnelChart.d.ts +3 -4
- package/dist/components/charts/FunnelChart/FunnelChart.js +306 -358
- package/dist/components/charts/Heatmap/Heatmap.js +29 -36
- package/dist/components/charts/Heatmap/HeatmapCell.js +1 -0
- package/dist/components/charts/LineChart/LineChart.js +163 -132
- package/dist/components/charts/LineChart/LineChart.types.d.ts +1 -1
- package/dist/components/charts/RadarChart/RadarChart.js +10 -2
- package/dist/components/charts/RadarChart/RadarChart.theme.js +0 -8
- package/dist/components/charts/RadarChart/RadarChart.types.d.ts +0 -8
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +12 -3
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.d.ts +0 -4
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +0 -5
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +79 -42
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
- package/dist/components/charts/StackedBarChart/StackedBarChart.types.js +3 -0
- package/dist/components/charts/hooks/index.d.ts +1 -1
- package/dist/components/charts/hooks/useChartAccessibility.js +1 -0
- package/dist/components/charts/hooks/useChartDimensions.js +1 -0
- package/dist/components/charts/hooks/useChartScales.js +1 -1
- package/dist/components/charts/hooks/useChartTheme.js +1 -0
- package/dist/components/charts/hooks/useChartValidation.d.ts +0 -8
- package/dist/components/charts/hooks/useChartValidation.js +1 -0
- package/dist/components/charts/hooks/useTooltipPosition.js +1 -0
- package/dist/components/charts/index.d.ts +3 -3
- package/dist/components/charts/index.js +1 -3
- package/dist/components/charts/shared/ChartCrosshair/ChartCrosshair.js +5 -12
- package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -0
- package/dist/components/charts/shared/ChartLegend/ChartLegend.d.ts +5 -2
- package/dist/components/charts/shared/ChartLegend/ChartLegend.js +15 -22
- package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +6 -23
- package/dist/components/charts/shared/ChartLegend/index.d.ts +2 -3
- package/dist/components/charts/shared/ChartMarker/ChartMarker.js +1 -0
- package/dist/components/charts/shared/ChartText/ChartText.js +1 -0
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.js +4 -13
- package/dist/components/charts/shared/index.d.ts +0 -7
- package/dist/components/charts/theme/chart.theme.js +6 -0
- package/dist/components/charts/types/chart.types.d.ts +15 -0
- package/dist/components/charts/utils/animation-utils.d.ts +95 -0
- package/dist/components/charts/utils/animation-utils.js +150 -2
- package/dist/components/charts/utils/bar-emphasis.d.ts +80 -0
- package/dist/components/charts/utils/bar-emphasis.js +69 -0
- package/dist/components/charts/utils/chart-validation.js +7 -0
- package/dist/components/core/Accordion/Accordion.d.ts +3 -3
- package/dist/components/core/Accordion/Accordion.js +21 -17
- package/dist/components/core/Accordion/Accordion.types.d.ts +35 -1
- package/dist/components/core/Accordion/AccordionBody.js +2 -1
- package/dist/components/core/Accordion/AccordionContext.d.ts +3 -0
- package/dist/components/core/Accordion/AccordionContext.js +15 -0
- package/dist/components/core/Accordion/AccordionItem.js +12 -8
- package/dist/components/core/Accordion/AccordionTrigger.js +7 -4
- package/dist/components/core/Accordion/index.d.ts +2 -2
- package/dist/components/core/Alert/Alert.animations.js +1 -0
- package/dist/components/core/Alert/Alert.js +4 -4
- package/dist/components/core/Alert/Alert.theme.js +0 -5
- package/dist/components/core/Alert/Alert.types.d.ts +0 -8
- package/dist/components/core/Alert/index.d.ts +1 -1
- package/dist/components/core/AlertDialog/AlertDialog.js +15 -1
- package/dist/components/core/Avatar/Avatar.js +58 -14
- package/dist/components/core/Avatar/Avatar.types.d.ts +26 -1
- package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +1 -0
- package/dist/components/core/AvatarGroup/AvatarGroup.js +1 -0
- package/dist/components/core/Badge/Badge.animations.js +1 -0
- package/dist/components/core/Badge/Badge.js +6 -6
- package/dist/components/core/Badge/Badge.theme.js +32 -28
- package/dist/components/core/Badge/Badge.types.d.ts +12 -1
- package/dist/components/core/Breadcrumbs/Breadcrumbs.js +8 -2
- package/dist/components/core/Button/Button.js +23 -17
- package/dist/components/core/Button/Button.ripple.js +1 -4
- package/dist/components/core/Button/Button.theme.d.ts +0 -2
- package/dist/components/core/Button/Button.theme.js +16 -92
- package/dist/components/core/Button/Button.types.d.ts +5 -6
- package/dist/components/core/Calendar/Calendar.animations.js +1 -0
- package/dist/components/core/Calendar/Calendar.js +87 -4
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.animations.js +1 -0
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +3 -1
- package/dist/components/core/Card/Card.js +9 -2
- package/dist/components/core/Card/Card.theme.js +3 -1
- package/dist/components/core/Card/Card.types.d.ts +8 -0
- package/dist/components/core/CardStack/CardStack.js +1 -0
- package/dist/components/core/Carousel/Carousel.js +1 -0
- package/dist/components/core/Carousel/CarouselBody.js +5 -2
- package/dist/components/core/Carousel/CarouselContext.js +1 -0
- package/dist/components/core/Carousel/CarouselNext.js +1 -0
- package/dist/components/core/Carousel/CarouselPrevious.js +1 -0
- package/dist/components/core/CommandPalette/CommandItem.js +1 -0
- package/dist/components/core/CommandPalette/CommandPalette.animations.js +1 -0
- package/dist/components/core/CommandPalette/CommandPalette.js +55 -11
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +3 -1
- package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +8 -0
- package/dist/components/core/ContextMenu/ContextMenu.js +27 -5
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +8 -7
- package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +17 -0
- package/dist/components/core/ContextMenu/ContextMenuBody.js +11 -5
- package/dist/components/core/ContextMenu/ContextMenuContext.js +1 -0
- package/dist/components/core/ContextMenu/ContextMenuItem.js +17 -7
- package/dist/components/core/ContextMenu/ContextMenuLabel.js +1 -0
- package/dist/components/core/ContextMenu/ContextMenuSeparator.js +1 -0
- package/dist/components/core/ContextMenu/ContextMenuSub.js +4 -3
- package/dist/components/core/ContextMenu/ContextMenuSubBody.js +7 -3
- package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +3 -2
- package/dist/components/core/ContextMenu/ContextMenuTrigger.js +8 -0
- package/dist/components/core/DotSeparator/DotSeparator.js +1 -0
- package/dist/components/core/DragDrop/DragDrop.js +50 -31
- package/dist/components/core/Drawer/Drawer.animations.js +9 -8
- package/dist/components/core/Drawer/Drawer.d.ts +3 -3
- package/dist/components/core/Drawer/Drawer.js +14 -15
- package/dist/components/core/Drawer/Drawer.theme.js +8 -6
- package/dist/components/core/Drawer/Drawer.types.d.ts +8 -0
- package/dist/components/core/Drawer/DrawerBody.js +2 -1
- package/dist/components/core/Drawer/DrawerContext.d.ts +3 -0
- package/dist/components/core/Drawer/DrawerContext.js +15 -0
- package/dist/components/core/Drawer/DrawerFooter.js +2 -1
- package/dist/components/core/Drawer/DrawerHeader.js +3 -2
- package/dist/components/core/Drawer/DrawerSubtitle.js +2 -1
- package/dist/components/core/Drawer/DrawerTitle.js +2 -1
- package/dist/components/core/Dropdown/Dropdown.js +23 -9
- package/dist/components/core/Dropdown/Dropdown.theme.js +4 -3
- package/dist/components/core/Dropdown/Dropdown.types.d.ts +8 -0
- package/dist/components/core/Dropdown/DropdownContext.js +1 -0
- package/dist/components/core/Dropdown/DropdownItem.js +1 -0
- package/dist/components/core/Dropdown/DropdownMenu.js +22 -22
- package/dist/components/core/Dropdown/DropdownSection.js +1 -0
- package/dist/components/core/Dropdown/DropdownSeparator.js +1 -0
- package/dist/components/core/Dropdown/DropdownTrigger.js +21 -1
- package/dist/components/core/HeroCard/HeroCard.js +1 -0
- package/dist/components/core/HeroCard/HeroCard.theme.js +1 -1
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.js +11 -2
- package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.js +2 -2
- package/dist/components/core/Link/Link.d.ts +1 -1
- package/dist/components/core/Link/Link.js +58 -29
- package/dist/components/core/Link/Link.types.d.ts +25 -8
- package/dist/components/core/Masonry/Masonry.js +87 -75
- package/dist/components/core/Masonry/Masonry.theme.js +10 -4
- package/dist/components/core/MenuItem/MenuItem.js +17 -1
- package/dist/components/core/MenuItem/MenuItem.theme.js +6 -2
- package/dist/components/core/Message/Message.js +2 -1
- package/dist/components/core/Message/MessageActions.js +1 -0
- package/dist/components/core/Message/MessageAudio.js +2 -1
- package/dist/components/core/Message/MessageAvatar.js +1 -0
- package/dist/components/core/Message/MessageBody.js +1 -0
- package/dist/components/core/Message/MessageContext.js +1 -0
- package/dist/components/core/Message/MessageFile.js +1 -0
- package/dist/components/core/Message/MessageImage.js +1 -0
- package/dist/components/core/Message/MessageList.js +1 -0
- package/dist/components/core/Message/MessageReactions.js +1 -0
- package/dist/components/core/Message/MessageStatusIndicator.js +3 -2
- package/dist/components/core/Message/MessageTimestamp.js +1 -0
- package/dist/components/core/Message/TypeWriter.d.ts +1 -1
- package/dist/components/core/Message/TypeWriter.js +74 -9
- package/dist/components/core/Modal/Modal.animations.d.ts +1 -1
- package/dist/components/core/Modal/Modal.animations.js +10 -25
- package/dist/components/core/Modal/Modal.d.ts +3 -5
- package/dist/components/core/Modal/Modal.js +15 -15
- package/dist/components/core/Modal/Modal.theme.js +7 -5
- package/dist/components/core/Modal/Modal.types.d.ts +8 -0
- package/dist/components/core/Modal/ModalBody.js +2 -1
- package/dist/components/core/Modal/ModalContext.d.ts +3 -0
- package/dist/components/core/Modal/ModalContext.js +16 -0
- package/dist/components/core/Modal/ModalFooter.js +3 -2
- package/dist/components/core/Modal/ModalHeader.js +3 -2
- package/dist/components/core/Modal/ModalSubtitle.js +2 -1
- package/dist/components/core/Modal/ModalTitle.js +2 -1
- package/dist/components/core/ModalStack/ModalStack.animations.js +1 -0
- package/dist/components/core/ModalStack/ModalStack.js +2 -1
- package/dist/components/core/ModalStack/ModalStackModal.js +18 -10
- package/dist/components/core/NavItem/NavItem.js +15 -3
- package/dist/components/core/OfflineIndicator/OfflineIndicator.js +1 -0
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +1 -1
- package/dist/components/core/PageHeading/PageHeading.js +8 -3
- package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
- package/dist/components/core/PageHeading/PageHeading.types.d.ts +12 -1
- package/dist/components/core/PageHeading/PageHeadingBackButton.js +3 -2
- package/dist/components/core/Pagination/Pagination.js +8 -2
- package/dist/components/core/Pagination/Pagination.theme.d.ts +2 -10
- package/dist/components/core/Pagination/Pagination.types.d.ts +11 -1
- package/dist/components/core/Pill/Pill.animations.js +2 -11
- package/dist/components/core/Pill/Pill.js +14 -5
- package/dist/components/core/Pill/Pill.theme.js +8 -8
- package/dist/components/core/Popover/Popover.js +6 -5
- package/dist/components/core/Popover/Popover.theme.js +4 -2
- package/dist/components/core/Popover/Popover.types.d.ts +8 -0
- package/dist/components/core/Popover/PopoverBody.js +19 -21
- package/dist/components/core/Popover/PopoverContext.js +1 -0
- package/dist/components/core/Popover/PopoverTrigger.js +1 -0
- package/dist/components/core/Progress/Progress.js +1 -0
- package/dist/components/core/Rating/Rating.js +13 -5
- package/dist/components/core/ScrollArea/ScrollArea.js +1 -0
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +1 -0
- package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +14 -3
- package/dist/components/core/ScrollArea/smooth/SnapPointDetector.js +1 -0
- package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +1 -0
- package/dist/components/core/Segmented/Segmented.js +3 -2
- package/dist/components/core/Segmented/SegmentedItem.js +2 -1
- package/dist/components/core/Separator/Separator.js +1 -0
- package/dist/components/core/Sidebar/Sidebar.js +1 -0
- package/dist/components/core/Sidebar/SidebarCard.js +1 -0
- package/dist/components/core/Sidebar/SidebarContent.js +1 -0
- package/dist/components/core/Sidebar/SidebarContext.js +1 -0
- package/dist/components/core/Sidebar/SidebarFooter.js +1 -0
- package/dist/components/core/Sidebar/SidebarHeader.js +1 -0
- package/dist/components/core/Sidebar/SidebarLogo.js +1 -0
- package/dist/components/core/Sidebar/SidebarMobileTrigger.js +1 -0
- package/dist/components/core/Sidebar/SidebarNav.js +3 -1
- package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -0
- package/dist/components/core/Sidebar/SidebarSearch.js +1 -0
- package/dist/components/core/Sidebar/SidebarToggle.js +1 -0
- package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -0
- package/dist/components/core/SlidingNumber/SlidingNumber.js +3 -1
- package/dist/components/core/Sortable/Sortable.animations.js +1 -0
- package/dist/components/core/Sortable/Sortable.js +1 -0
- package/dist/components/core/Spinner/Spinner.js +1 -0
- package/dist/components/core/Tabs/Tabs.animations.js +1 -0
- package/dist/components/core/Tabs/Tabs.js +1 -0
- package/dist/components/core/Tabs/Tabs.theme.js +3 -3
- package/dist/components/core/Tabs/TabsBody.js +1 -0
- package/dist/components/core/Tabs/TabsContext.js +1 -0
- package/dist/components/core/Tabs/TabsList.js +1 -0
- package/dist/components/core/Tabs/TabsTrigger.js +34 -10
- package/dist/components/core/Tag/Tag.js +2 -1
- package/dist/components/core/Tag/Tag.theme.js +2 -2
- package/dist/components/core/Toast/Toast.animations.d.ts +3 -2
- package/dist/components/core/Toast/Toast.animations.js +20 -17
- package/dist/components/core/Toast/Toast.js +42 -20
- package/dist/components/core/Toast/Toast.theme.js +5 -8
- package/dist/components/core/Toast/Toast.types.d.ts +30 -20
- package/dist/components/core/Toast/ToastProvider.js +5 -1
- package/dist/components/core/Toast/index.d.ts +1 -1
- package/dist/components/core/Toast/useToast.js +5 -6
- package/dist/components/core/Tooltip/Tooltip.animations.js +19 -53
- package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/core/Tooltip/Tooltip.js +39 -18
- package/dist/components/core/Tooltip/Tooltip.theme.js +4 -2
- package/dist/components/core/Tooltip/Tooltip.types.d.ts +8 -0
- package/dist/components/core/Tree/Tree.animations.d.ts +1 -2
- package/dist/components/core/Tree/Tree.animations.js +20 -58
- package/dist/components/core/Tree/Tree.js +7 -5
- package/dist/components/data-display/DescriptionList/DescriptionList.js +1 -0
- package/dist/components/data-display/Feed/Feed.js +1 -0
- package/dist/components/data-display/GanttChart/GanttChart.d.ts +2 -3
- package/dist/components/data-display/GanttChart/GanttChart.js +5 -21
- package/dist/components/data-display/GanttChart/GanttChartContext.d.ts +5 -0
- package/dist/components/data-display/GanttChart/GanttChartContext.js +26 -0
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +2 -1
- package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +2 -1
- package/dist/components/data-display/GanttChart/GanttGroupBar.js +2 -1
- package/dist/components/data-display/GanttChart/GanttMilestone.js +2 -1
- package/dist/components/data-display/GanttChart/GanttSplitter.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTableHeader.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTablePanel.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
- package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +2 -1
- package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -1
- package/dist/components/data-display/GanttChart/hooks/useGanttDates.js +1 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +1 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttLayout.js +1 -0
- package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.js +1 -0
- package/dist/components/data-display/KPI/KPI.js +1 -0
- package/dist/components/data-display/Metric/Metric.js +2 -2
- package/dist/components/data-display/Metric/Metric.theme.js +2 -14
- package/dist/components/data-display/Metric/Metric.types.d.ts +1 -3
- package/dist/components/data-display/Table/Table.animations.js +1 -0
- package/dist/components/data-display/Table/Table.d.ts +2 -7
- package/dist/components/data-display/Table/Table.js +14 -14
- package/dist/components/data-display/Table/Table.types.d.ts +2 -0
- package/dist/components/data-display/Table/TableActions.js +3 -2
- package/dist/components/data-display/Table/TableActionsMenu.js +1 -0
- package/dist/components/data-display/Table/TableBody.js +1 -0
- package/dist/components/data-display/Table/TableCell.d.ts +1 -1
- package/dist/components/data-display/Table/TableCell.js +8 -3
- package/dist/components/data-display/Table/TableColumnManager.js +1 -0
- package/dist/components/data-display/Table/TableContext.d.ts +11 -0
- package/dist/components/data-display/Table/TableContext.js +21 -0
- package/dist/components/data-display/Table/TableDeclarative.js +3 -2
- package/dist/components/data-display/Table/TableFilter.js +9 -5
- package/dist/components/data-display/Table/TableHeader.js +2 -1
- package/dist/components/data-display/Table/TablePagination.js +1 -0
- package/dist/components/data-display/Table/TableRow.js +1 -0
- package/dist/components/data-display/Table/TableSelectionHeader.js +4 -2
- package/dist/components/data-display/Table/hooks/useTableColumns.js +1 -0
- package/dist/components/data-display/Table/hooks/useTableExpansion.js +1 -0
- package/dist/components/data-display/Table/hooks/useTableFilter.js +1 -0
- package/dist/components/data-display/Table/hooks/useTablePagination.js +1 -0
- package/dist/components/data-display/Table/hooks/useTableSelection.js +1 -0
- package/dist/components/data-display/Table/index.js +1 -2
- package/dist/components/data-display/Timeline/Timeline.animations.js +1 -0
- package/dist/components/data-display/Timeline/Timeline.d.ts +2 -2
- package/dist/components/data-display/Timeline/Timeline.js +5 -10
- package/dist/components/data-display/Timeline/Timeline.theme.d.ts +2 -24
- package/dist/components/data-display/Timeline/Timeline.types.d.ts +25 -1
- package/dist/components/data-display/Timeline/TimelineContent.js +2 -1
- package/dist/components/data-display/Timeline/TimelineContext.d.ts +3 -0
- package/dist/components/data-display/Timeline/TimelineContext.js +16 -0
- package/dist/components/data-display/Timeline/TimelineItem.js +5 -4
- package/dist/components/data-display/Timeline/TimelineMarker.js +2 -1
- package/dist/components/effects/AIOrb/hooks/useOrbState.js +1 -0
- package/dist/components/effects/AIOrb/variants/Aura/Aura.js +13 -4
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.d.ts +7 -0
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.d.ts +3 -0
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.js +176 -0
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.js +29 -161
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.d.ts +8 -0
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.d.ts +3 -0
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.js +140 -0
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.js +29 -127
- package/dist/components/effects/Animated/Animated.d.ts +2 -2
- package/dist/components/effects/Animated/Animated.js +5 -6
- package/dist/components/effects/Animated/AnimatedContext.d.ts +3 -0
- package/dist/components/effects/Animated/AnimatedContext.js +12 -0
- package/dist/components/effects/Animated/AnimatedItem.js +2 -1
- package/dist/components/effects/Aurora/Aurora.js +27 -5
- package/dist/components/effects/ColorPanels/ColorPanels.d.ts +8 -0
- package/dist/components/effects/ColorPanels/ColorPanels.js +66 -0
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.d.ts +12 -0
- package/dist/components/effects/ColorPanels/ColorPanels.shaders.js +218 -0
- package/dist/components/effects/ColorPanels/ColorPanels.types.d.ts +29 -0
- package/dist/components/effects/ColorPanels/ColorPanels.types.js +3 -0
- package/dist/components/effects/ColorPanels/index.d.ts +2 -0
- package/dist/components/effects/CustomCursor/CustomCursor.js +1 -0
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +0 -2
- package/dist/components/effects/Dithering/Dithering.d.ts +10 -0
- package/dist/components/effects/Dithering/Dithering.js +62 -0
- package/dist/components/effects/Dithering/Dithering.shaders.d.ts +11 -0
- package/dist/components/effects/Dithering/Dithering.shaders.js +166 -0
- package/dist/components/effects/Dithering/Dithering.types.d.ts +31 -0
- package/dist/components/effects/Dithering/Dithering.types.js +17 -0
- package/dist/components/effects/Dithering/index.d.ts +3 -0
- package/dist/components/effects/DotPattern/DotPattern.js +1 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.d.ts +9 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.js +80 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.d.ts +12 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.js +335 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.d.ts +61 -0
- package/dist/components/effects/FlutedGlass/FlutedGlass.types.js +16 -0
- package/dist/components/effects/FlutedGlass/index.d.ts +3 -0
- package/dist/components/effects/GemSmoke/GemSmoke.d.ts +8 -0
- package/dist/components/effects/GemSmoke/GemSmoke.js +70 -0
- package/dist/components/effects/GemSmoke/GemSmoke.shaders.d.ts +18 -0
- package/dist/components/effects/GemSmoke/GemSmoke.shaders.js +181 -0
- package/dist/components/effects/GemSmoke/GemSmoke.types.d.ts +37 -0
- package/dist/components/effects/GemSmoke/GemSmoke.types.js +10 -0
- package/dist/components/effects/GemSmoke/index.d.ts +3 -0
- package/dist/components/effects/GlassEffect/GlassEffect.js +1 -1
- package/dist/components/effects/GlassSurface/GlassSurface.js +2 -16
- package/dist/components/effects/GodRays/GodRays.d.ts +8 -0
- package/dist/components/effects/GodRays/GodRays.js +68 -0
- package/dist/components/effects/GodRays/GodRays.shaders.d.ts +10 -0
- package/dist/components/effects/GodRays/GodRays.shaders.js +128 -0
- package/dist/components/effects/GodRays/GodRays.types.d.ts +25 -0
- package/dist/components/effects/GodRays/GodRays.types.js +3 -0
- package/dist/components/effects/GodRays/index.d.ts +2 -0
- package/dist/components/effects/GradientMesh/GradientMesh.d.ts +9 -0
- package/dist/components/effects/GradientMesh/GradientMesh.js +56 -0
- package/dist/components/effects/GradientMesh/GradientMesh.shaders.d.ts +15 -0
- package/dist/components/effects/GradientMesh/GradientMesh.shaders.js +127 -0
- package/dist/components/effects/GradientMesh/GradientMesh.types.d.ts +17 -0
- package/dist/components/effects/GradientMesh/GradientMesh.types.js +3 -0
- package/dist/components/effects/GradientMesh/index.d.ts +2 -0
- package/dist/components/effects/GrainGradient/GrainGradient.d.ts +9 -0
- package/dist/components/effects/GrainGradient/GrainGradient.js +62 -0
- package/dist/components/effects/GrainGradient/GrainGradient.shaders.d.ts +17 -0
- package/dist/components/effects/GrainGradient/GrainGradient.shaders.js +168 -0
- package/dist/components/effects/GrainGradient/GrainGradient.types.d.ts +26 -0
- package/dist/components/effects/GrainGradient/GrainGradient.types.js +9 -0
- package/dist/components/effects/GrainGradient/index.d.ts +3 -0
- package/dist/components/effects/GridPattern/GridPattern.js +1 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.d.ts +10 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.js +78 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.d.ts +22 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.js +239 -0
- package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.types.d.ts +52 -0
- package/dist/components/effects/HalftoneCmyk/index.d.ts +2 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.d.ts +9 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.js +68 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.d.ts +13 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.js +296 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.d.ts +43 -0
- package/dist/components/effects/HalftoneDots/HalftoneDots.types.js +12 -0
- package/dist/components/effects/HalftoneDots/index.d.ts +3 -0
- package/dist/components/effects/ImageDithering/ImageDithering.d.ts +9 -0
- package/dist/components/effects/ImageDithering/ImageDithering.js +68 -0
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.d.ts +12 -0
- package/dist/components/effects/ImageDithering/ImageDithering.shaders.js +117 -0
- package/dist/components/effects/ImageDithering/ImageDithering.types.d.ts +30 -0
- package/dist/components/effects/ImageDithering/ImageDithering.types.js +8 -0
- package/dist/components/effects/ImageDithering/index.d.ts +3 -0
- package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +1 -0
- package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +1 -0
- package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +1 -0
- package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +1 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +1 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +1 -0
- package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +1 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.d.ts +9 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.js +61 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.d.ts +19 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.js +202 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.types.d.ts +34 -0
- package/dist/components/effects/LiquidMetal/LiquidMetal.types.js +9 -0
- package/dist/components/effects/LiquidMetal/index.d.ts +3 -0
- package/dist/components/effects/MagneticElement/MagneticElement.js +1 -0
- package/dist/components/effects/MeshGradient/MeshGradient.d.ts +25 -0
- package/dist/components/effects/MeshGradient/MeshGradient.js +47 -0
- package/dist/components/effects/MeshGradient/MeshGradient.types.d.ts +40 -0
- package/dist/components/effects/MeshGradient/MeshGradient.utils.d.ts +83 -0
- package/dist/components/effects/MeshGradient/MeshGradient.utils.js +112 -0
- package/dist/components/effects/MeshGradient/index.d.ts +4 -0
- package/dist/components/effects/Metaballs/Metaballs.d.ts +8 -0
- package/dist/components/effects/Metaballs/Metaballs.js +59 -0
- package/dist/components/effects/Metaballs/Metaballs.shaders.d.ts +10 -0
- package/dist/components/effects/Metaballs/Metaballs.shaders.js +102 -0
- package/dist/components/effects/Metaballs/Metaballs.types.d.ts +16 -0
- package/dist/components/effects/Metaballs/Metaballs.types.js +3 -0
- package/dist/components/effects/Metaballs/index.d.ts +2 -0
- package/dist/components/effects/Neumorphic/InsetCircleButton.js +1 -0
- package/dist/components/effects/Neumorphic/InsetPill.js +1 -0
- package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +1 -0
- package/dist/components/effects/Overlay/Overlay.js +1 -0
- package/dist/components/effects/PaperTexture/PaperTexture.d.ts +9 -0
- package/dist/components/effects/PaperTexture/PaperTexture.js +61 -0
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.d.ts +22 -0
- package/dist/components/effects/PaperTexture/PaperTexture.shaders.js +145 -0
- package/dist/components/effects/PaperTexture/PaperTexture.types.d.ts +19 -0
- package/dist/components/effects/PaperTexture/index.d.ts +2 -0
- package/dist/components/effects/Particles/Particles.js +1 -0
- package/dist/components/effects/Particles/Particles.scene.js +1 -0
- package/dist/components/effects/Preloader/Preloader.js +1 -0
- package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +1 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.d.ts +27 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.js +174 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.d.ts +14 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.js +258 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.d.ts +75 -0
- package/dist/components/effects/PulsingBorder/PulsingBorder.types.js +3 -0
- package/dist/components/effects/PulsingBorder/index.d.ts +2 -0
- package/dist/components/effects/ScrollReveal/ScrollReveal.js +1 -0
- package/dist/components/effects/Shimmer/Shimmer.d.ts +21 -0
- package/dist/components/effects/Shimmer/Shimmer.js +44 -0
- package/dist/components/effects/Shimmer/Shimmer.types.d.ts +49 -0
- package/dist/components/effects/Shimmer/index.d.ts +2 -0
- package/dist/components/effects/SmokeRing/SmokeRing.d.ts +8 -0
- package/dist/components/effects/SmokeRing/SmokeRing.js +62 -0
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.d.ts +14 -0
- package/dist/components/effects/SmokeRing/SmokeRing.shaders.js +130 -0
- package/dist/components/effects/SmokeRing/SmokeRing.types.d.ts +22 -0
- package/dist/components/effects/SmokeRing/SmokeRing.types.js +3 -0
- package/dist/components/effects/SmokeRing/index.d.ts +2 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.d.ts +9 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.js +59 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.d.ts +14 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.js +129 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.d.ts +23 -0
- package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.js +3 -0
- package/dist/components/effects/StaticGradientMesh/index.d.ts +2 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.d.ts +9 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.js +66 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.d.ts +13 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.js +169 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.d.ts +29 -0
- package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.js +3 -0
- package/dist/components/effects/StaticRadialGradient/index.d.ts +2 -0
- package/dist/components/effects/StripePattern/StripePattern.js +1 -0
- package/dist/components/effects/TiltCard/TiltCard.glow.js +1 -0
- package/dist/components/effects/TiltCard/TiltCard.js +1 -0
- package/dist/components/effects/Water/Water.d.ts +9 -0
- package/dist/components/effects/Water/Water.js +65 -0
- package/dist/components/effects/Water/Water.shaders.d.ts +11 -0
- package/dist/components/effects/Water/Water.shaders.js +123 -0
- package/dist/components/effects/Water/Water.types.d.ts +25 -0
- package/dist/components/effects/Water/index.d.ts +2 -0
- package/dist/components/effects/index.d.ts +40 -0
- package/dist/components/effects/index.js +21 -0
- package/dist/components/effects/{AIOrb/variants/Aura → shared/ShaderCanvas}/ShaderCanvas.d.ts +4 -8
- package/dist/components/effects/{AIOrb/variants/Aura → shared/ShaderCanvas}/ShaderCanvas.js +109 -3
- package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.types.d.ts +18 -0
- package/dist/components/effects/shared/ShaderCanvas/index.d.ts +2 -0
- package/dist/components/effects/shared/bayerMatrices.glsl.d.ts +10 -0
- package/dist/components/effects/shared/bayerMatrices.glsl.js +44 -0
- package/dist/components/effects/shared/imageUV.glsl.d.ts +12 -0
- package/dist/components/effects/shared/imageUV.glsl.js +26 -0
- package/dist/components/effects/shared/index.d.ts +7 -0
- package/dist/components/effects/shared/resolveShaderColor.d.ts +13 -0
- package/dist/components/effects/shared/resolveShaderColor.js +62 -0
- package/dist/components/effects/shared/resolveShaderColor.test.d.ts +1 -0
- package/dist/components/effects/shared/shaderNoise.glsl.d.ts +34 -0
- package/dist/components/effects/shared/shaderNoise.glsl.js +84 -0
- package/dist/components/forms/Checkbox/Checkbox.animations.js +1 -0
- package/dist/components/forms/Checkbox/Checkbox.js +8 -8
- package/dist/components/forms/Checkbox/Checkbox.theme.js +5 -4
- package/dist/components/forms/Checkbox/CheckboxContext.js +1 -0
- package/dist/components/forms/Checkbox/CheckboxGroup.js +4 -1
- package/dist/components/forms/ColorPicker/ColorPicker.js +21 -5
- package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +8 -0
- package/dist/components/forms/ColorPicker/ColorPicker2DCanvas.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerBody.js +3 -2
- package/dist/components/forms/ColorPicker/ColorPickerContext.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerFormatSelector.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerGradient.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerHeader.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerImage.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerInput.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerPresets.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerSliders.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerSwatch.js +1 -0
- package/dist/components/forms/ColorPicker/ColorPickerTrigger.js +17 -2
- package/dist/components/forms/Combobox/Combobox.js +81 -37
- package/dist/components/forms/Combobox/Combobox.types.d.ts +8 -0
- package/dist/components/forms/DatePicker/DatePicker.animations.js +1 -0
- package/dist/components/forms/DatePicker/DatePicker.d.ts +3 -27
- package/dist/components/forms/DatePicker/DatePicker.js +5 -4
- package/dist/components/forms/DatePicker/DatePicker.theme.js +5 -5
- package/dist/components/forms/DatePicker/DatePicker.types.d.ts +15 -0
- package/dist/components/forms/DatePicker/DatePickerBody.js +26 -21
- package/dist/components/forms/DatePicker/DatePickerContext.d.ts +29 -0
- package/dist/components/forms/DatePicker/DatePickerContext.js +6 -0
- package/dist/components/forms/DatePicker/DatePickerPresets.js +2 -1
- package/dist/components/forms/DatePicker/DatePickerTrigger.js +2 -1
- package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +3 -23
- package/dist/components/forms/DateRangePicker/DateRangePicker.js +18 -7
- package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +2 -2
- package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +21 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +18 -13
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.d.ts +24 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +5 -0
- package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +2 -1
- package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +2 -1
- package/dist/components/forms/FileUpload/FileUpload.js +2 -1
- package/dist/components/forms/FileUpload/FileUploadProgress.js +4 -3
- package/dist/components/forms/Input/Input.js +7 -3
- package/dist/components/forms/Input/Input.theme.js +11 -5
- package/dist/components/forms/Input/Input.types.d.ts +6 -0
- package/dist/components/forms/Input/index.d.ts +1 -0
- package/dist/components/forms/Input/inputMasks.d.ts +24 -0
- package/dist/components/forms/Input/inputMasks.js +61 -5
- package/dist/components/forms/InputAddress/InputAddress.d.ts +5 -0
- package/dist/components/forms/InputAddress/InputAddress.js +95 -13
- package/dist/components/forms/InputAddress/InputAddress.theme.js +4 -4
- package/dist/components/forms/InputAddress/InputAddress.types.d.ts +8 -2
- package/dist/components/forms/InputAddress/index.d.ts +1 -1
- package/dist/components/forms/InputCounter/InputCounter.js +63 -44
- package/dist/components/forms/InputCounter/InputCounter.types.d.ts +6 -0
- package/dist/components/forms/InputCreditCard/InputCreditCard.js +9 -3
- package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +4 -4
- package/dist/components/forms/InputCreditCard/InputCreditCard.types.d.ts +5 -1
- package/dist/components/forms/InputCreditCard/index.d.ts +1 -0
- package/dist/components/forms/InputDate/InputDate.js +1 -0
- package/dist/components/forms/InputOTP/InputOTP.js +21 -9
- package/dist/components/forms/InputOTP/InputOTP.types.d.ts +7 -1
- package/dist/components/forms/InputTag/InputTag.js +65 -21
- package/dist/components/forms/InputTag/InputTag.theme.js +2 -1
- package/dist/components/forms/InputTag/InputTag.types.d.ts +8 -0
- package/dist/components/forms/Mention/Mention.js +12 -5
- package/dist/components/forms/Mention/Mention.theme.js +2 -1
- package/dist/components/forms/Mention/Mention.types.d.ts +8 -0
- package/dist/components/forms/Mention/Mention.utils.js +1 -0
- package/dist/components/forms/Radio/Radio.animations.js +1 -0
- package/dist/components/forms/Radio/Radio.js +5 -1
- package/dist/components/forms/Radio/Radio.theme.js +9 -7
- package/dist/components/forms/Radio/RadioContext.js +1 -0
- package/dist/components/forms/Radio/RadioGroup.js +4 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.animations.js +1 -0
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +70 -60
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +3 -2
- package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +14 -0
- package/dist/components/forms/Select/Select.animations.js +17 -25
- package/dist/components/forms/Select/Select.d.ts +3 -1
- package/dist/components/forms/Select/Select.js +55 -21
- package/dist/components/forms/Select/Select.theme.js +2 -2
- package/dist/components/forms/Select/Select.types.d.ts +28 -1
- package/dist/components/forms/Select/useSelectState.js +7 -0
- package/dist/components/forms/SelectableCard/SelectableCard.js +1 -0
- package/dist/components/forms/SelectableCard/SelectableCardContext.js +1 -0
- package/dist/components/forms/SelectableCard/SelectableCardGroup.js +1 -0
- package/dist/components/forms/Signature/Signature.js +13 -3
- package/dist/components/forms/Signature/Signature.types.d.ts +6 -0
- package/dist/components/forms/Slider/Slider.js +2 -1
- package/dist/components/forms/Switch/Switch.js +9 -2
- package/dist/components/forms/Switch/Switch.theme.js +5 -3
- package/dist/components/forms/Textarea/Textarea.js +7 -3
- package/dist/components/forms/Textarea/Textarea.types.d.ts +6 -0
- package/dist/components/forms/TimePicker/TimePicker.d.ts +2 -12
- package/dist/components/forms/TimePicker/TimePicker.js +8 -5
- package/dist/components/forms/TimePicker/TimePicker.theme.js +4 -5
- package/dist/components/forms/TimePicker/TimePicker.types.d.ts +15 -0
- package/dist/components/forms/TimePicker/TimePickerContent.js +12 -7
- package/dist/components/forms/TimePicker/TimePickerContext.d.ts +15 -0
- package/dist/components/forms/TimePicker/TimePickerContext.js +6 -0
- package/dist/components/forms/TimePicker/TimePickerTrigger.js +18 -4
- package/dist/components/forms/TimePicker/WheelColumn.js +1 -0
- package/dist/components/forms/TimePicker/useWheelPicker.js +1 -0
- package/dist/components/forms/forms.theme.d.ts +1 -0
- package/dist/components/forms/forms.theme.js +55 -18
- package/dist/components/forms/index.d.ts +1 -0
- package/dist/components/forms/index.js +6 -2
- package/dist/components/generative/GenerativeView.js +1 -0
- package/dist/components/generative/actions.test.d.ts +1 -0
- package/dist/components/generative/registry.js +24 -6
- package/dist/components/generative/schema.generated.js +450 -35
- package/dist/components/generative/streaming.test.d.ts +1 -0
- package/dist/components/generative/tools.test.d.ts +1 -0
- package/dist/components/generative/useGenerativeStream.js +1 -0
- package/dist/components/generative/validate.d.ts +1 -1
- package/dist/components/generative/validate.js +121 -29
- package/dist/components/generative/validate.test.d.ts +1 -0
- package/dist/components/layout/AppShell/AppShell.js +1 -0
- package/dist/components/layout/AppShell/AppShellContext.js +1 -0
- package/dist/components/layout/AppShell/AppShellMain.js +1 -0
- package/dist/components/layout/AppShell/AppShellRightPanel.js +1 -0
- package/dist/components/layout/AppShell/AppShellSidebar.js +1 -0
- package/dist/components/layout/FormLayout/FormLayout.js +1 -1
- package/dist/components/layout/FormLayout/FormLayoutSection.js +1 -0
- package/dist/components/layout/Grid/Grid.d.ts +1 -1
- package/dist/components/layout/Grid/Grid.js +11 -3
- package/dist/components/layout/Grid/Grid.types.d.ts +15 -1
- package/dist/components/layout/Grid/index.d.ts +1 -1
- package/dist/components/layout/Section/Section.js +1 -0
- package/dist/components/layout/Stack/Stack.d.ts +1 -1
- package/dist/components/layout/Stack/Stack.js +11 -3
- package/dist/components/layout/Stack/Stack.types.d.ts +9 -2
- package/dist/components/layout/index.d.ts +0 -1
- package/dist/components/layout/index.js +0 -2
- package/dist/generative.schema.json +450 -35
- package/dist/hooks/useClickOutside.js +1 -0
- package/dist/hooks/useDarkMode.js +1 -0
- package/dist/hooks/useFocusTrap.js +1 -0
- package/dist/hooks/useIsClient.js +1 -0
- package/dist/hooks/useMediaQuery.js +1 -0
- package/dist/hooks/useNetworkStatus.d.ts +0 -4
- package/dist/hooks/useNetworkStatus.js +2 -5
- package/dist/hooks/useOverlay.js +1 -0
- package/dist/hooks/useScaleBackground.js +1 -0
- package/dist/hooks/useSelectPortal.js +1 -0
- package/dist/hooks/useSlidingNumber.js +1 -0
- package/dist/hooks/useStreamingSSE.d.ts +0 -5
- package/dist/hooks/useStreamingSSE.js +1 -5
- package/dist/hooks/useTypewriter.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +189 -180
- package/dist/registry.json +1945 -681
- package/dist/styles.css +1 -1
- package/dist/test/render.d.ts +11 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/theme/SurfaceContext.d.ts +98 -0
- package/dist/theme/SurfaceContext.js +114 -0
- package/dist/theme/ThemeContext.js +19 -0
- package/dist/theme/animations.d.ts +75 -0
- package/dist/theme/animations.js +132 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/tools.json +458 -35
- package/dist/utils/actionQueue.d.ts +0 -4
- package/dist/utils/actionQueue.js +1 -4
- package/dist/utils/cn.js +21 -1
- package/dist/utils/colorUtils.d.ts +31 -1
- package/dist/utils/colorUtils.js +49 -4
- package/dist/utils/dateUtils.js +21 -16
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/performanceMonitor.js +1 -0
- package/dist/utils/smoothScrollUtils.js +1 -0
- package/package.json +23 -5
- package/src/global.scss +87 -0
- package/src/styles/theme.css +263 -156
- package/dist/components/charts/shared/BarRenderer/index.d.ts +0 -3
- package/dist/components/charts/shared/ChartContainer/ChartContainer.d.ts +0 -85
- package/dist/components/charts/shared/ChartContainer/index.d.ts +0 -3
- package/dist/components/charts/shared/ChartLegend/ChartLegendContent.d.ts +0 -7
- package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +0 -18
- package/dist/components/charts/shared/LineRenderer/index.d.ts +0 -2
- package/dist/components/core/Popover/Popover.animations.js +0 -13
- package/dist/components/layout/PageLayout/PageLayout.d.ts +0 -7
- package/dist/components/layout/PageLayout/PageLayout.js +0 -51
- package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayout.theme.js +0 -39
- package/dist/components/layout/PageLayout/PageLayout.types.d.ts +0 -84
- package/dist/components/layout/PageLayout/PageLayoutContent.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayoutContent.js +0 -14
- package/dist/components/layout/PageLayout/PageLayoutHeader.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayoutHeader.js +0 -12
- package/dist/components/layout/PageLayout/PageLayoutSidebar.d.ts +0 -3
- package/dist/components/layout/PageLayout/PageLayoutSidebar.js +0 -14
- package/dist/components/layout/PageLayout/index.d.ts +0 -3
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.d.ts +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.d.ts +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.js +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.types.d.ts +0 -0
- /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/index.d.ts +0 -0
|
@@ -9,7 +9,7 @@ const inputTheme = {
|
|
|
9
9
|
wrapperStyle: formsBaseTheme.wrapperStyle,
|
|
10
10
|
// Input group styles - no focus-within (focus is managed via JS for contentStart/contentEnd compatibility)
|
|
11
11
|
inputGroupStyle: "relative flex rounded-[var(--form-radius)] shadow-[inset_0_0_0_1px_var(--color-border)] " +
|
|
12
|
-
"bg-[var(--
|
|
12
|
+
"bg-[var(--field-fill)] transition-all " +
|
|
13
13
|
// Hover edge: strengthen the border to --color-border-secondary on hover. Scoped with
|
|
14
14
|
// not-focus-within so the JS-driven focus border (primary) always wins.
|
|
15
15
|
"not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-border-secondary)]",
|
|
@@ -31,10 +31,13 @@ const inputTheme = {
|
|
|
31
31
|
states: {
|
|
32
32
|
default: formsBaseTheme.states.default,
|
|
33
33
|
disabled: formsBaseTheme.states.disabled,
|
|
34
|
-
|
|
34
|
+
// Invalid = danger border + faint danger ring, NO surface fill (matches formsBaseTheme
|
|
35
|
+
// and the composite overlay). Focus is JS-driven via inputGroupFocusInvalidStyle, so no
|
|
36
|
+
// focus-within ring override is needed here.
|
|
37
|
+
invalid: "shadow-[inset_0_0_0_1px_var(--color-danger)] ring-4 ring-[var(--color-danger)]/10 " +
|
|
35
38
|
// Keep the danger border on hover (don't let the hover edge override it)
|
|
36
39
|
"not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-danger)] " +
|
|
37
|
-
"dark:
|
|
40
|
+
"dark:shadow-[inset_0_0_0_1px_var(--color-danger-500)] dark:ring-[var(--color-danger-500)]/20 " +
|
|
38
41
|
"dark:not-focus-within:hover:shadow-[inset_0_0_0_1px_var(--color-danger-500)]",
|
|
39
42
|
},
|
|
40
43
|
// Helper text styles with state handling
|
|
@@ -52,12 +55,15 @@ const inputTheme = {
|
|
|
52
55
|
},
|
|
53
56
|
contentStartStyle: "pr-0 " +
|
|
54
57
|
"[&:has([aria-haspopup])]:pl-0 " +
|
|
55
|
-
|
|
58
|
+
// ! important so these beat the nested Select button's own hover:/focus-within: edge+ring
|
|
59
|
+
// rules (those carry extra pseudo-class specificity); !shadow-none also clears the ring,
|
|
60
|
+
// which Tailwind renders via box-shadow.
|
|
61
|
+
"[&_[aria-haspopup]]:outline-none [&_[aria-haspopup]]:!ring-0 [&_[aria-haspopup]]:!shadow-none " +
|
|
56
62
|
"[&_[aria-haspopup]]:border-none [&_[aria-haspopup]]:rounded-none [&_[aria-haspopup]]:bg-transparent " +
|
|
57
63
|
"[&_[aria-haspopup]]:min-h-0 [&_[aria-haspopup]]:h-full",
|
|
58
64
|
contentEndStyle: "pl-0 " +
|
|
59
65
|
"[&:has([aria-haspopup])]:pr-0 " +
|
|
60
|
-
"[&_[aria-haspopup]]:outline-none [&_[aria-haspopup]]
|
|
66
|
+
"[&_[aria-haspopup]]:outline-none [&_[aria-haspopup]]:!ring-0 [&_[aria-haspopup]]:!shadow-none " +
|
|
61
67
|
"[&_[aria-haspopup]]:border-none [&_[aria-haspopup]]:rounded-none [&_[aria-haspopup]]:bg-transparent " +
|
|
62
68
|
"[&_[aria-haspopup]]:min-h-0 [&_[aria-haspopup]]:h-full",
|
|
63
69
|
// Keyboard shortcut display
|
|
@@ -31,6 +31,12 @@ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElem
|
|
|
31
31
|
label?: React.ReactNode;
|
|
32
32
|
/** Optional helper text below the input — pass a string for default styling, or a ReactNode for full control */
|
|
33
33
|
helperText?: React.ReactNode;
|
|
34
|
+
/**
|
|
35
|
+
* Error message shown instead of `helperText` when `state="invalid"`.
|
|
36
|
+
* Takes precedence over `helperText` while invalid; `helperText` is
|
|
37
|
+
* unaffected/still shown as normal otherwise.
|
|
38
|
+
*/
|
|
39
|
+
errorMessage?: React.ReactNode;
|
|
34
40
|
/** Icon to display before the input (small decorative) */
|
|
35
41
|
iconStart?: React.ReactNode;
|
|
36
42
|
/** Icon to display after the input (small decorative) */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { Input } from './Input';
|
|
2
2
|
export type { InputProps, InputSize, InputState, InputTheme, InputType, PasswordStrength, PasswordStrengthIndicator } from './Input.types';
|
|
3
3
|
export { inputTheme } from './Input.theme';
|
|
4
|
+
export { isValidExpiryDate, isValidMonth } from './inputMasks';
|
|
@@ -20,6 +20,30 @@ export declare const formatExpiryDate: (value: string) => string;
|
|
|
20
20
|
* @returns Whether the month is valid
|
|
21
21
|
*/
|
|
22
22
|
export declare const isValidMonth: (value: string) => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Validate a complete card expiry date (MM/YY): the month must be 01-12 AND the date
|
|
25
|
+
* must not be in the past. A card is considered valid through the LAST day of its expiry
|
|
26
|
+
* month, so the current month still passes.
|
|
27
|
+
*
|
|
28
|
+
* This is the consumer-side validator for InputCreditCard — the component only masks the
|
|
29
|
+
* input (clamping the month to 01-12 as you type); whether a *complete* date is acceptable
|
|
30
|
+
* is a business decision, so wire this to `state`/`errorMessage`:
|
|
31
|
+
*
|
|
32
|
+
* ```tsx
|
|
33
|
+
* <InputCreditCard
|
|
34
|
+
* state={state}
|
|
35
|
+
* errorMessage="Card has expired"
|
|
36
|
+
* onExpiryDateChange={(v) => setState(isValidExpiryDate(v) ? "default" : "invalid")}
|
|
37
|
+
* />
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @param value The formatted expiry value (e.g. "04/27"); non-digits are ignored
|
|
41
|
+
* @param options.now Reference "now" (defaults to the current date) — pass for SSR/testing
|
|
42
|
+
* @returns Whether the expiry is a complete, non-expired MM/YY
|
|
43
|
+
*/
|
|
44
|
+
export declare const isValidExpiryDate: (value: string, options?: {
|
|
45
|
+
now?: Date;
|
|
46
|
+
}) => boolean;
|
|
23
47
|
/**
|
|
24
48
|
* Apply phone number formatting (US format: (XXX) XXX-XXXX)
|
|
25
49
|
* @param value The raw input value
|
|
@@ -23,11 +23,25 @@ const formatCreditCard = (value) => {
|
|
|
23
23
|
const formatExpiryDate = (value) => {
|
|
24
24
|
// Remove all non-digit characters
|
|
25
25
|
const digitsOnly = value.replace(/\D/g, '');
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
if (digitsOnly.length === 0)
|
|
27
|
+
return '';
|
|
28
|
+
// Month — clamp to 01-12 in real time (mirrors formatDateInput's MM handling).
|
|
29
|
+
// First digit: only 0 or 1 can start a valid month. A leading 2-9 is unambiguous
|
|
30
|
+
// (e.g. "4" can only be April), so auto-prefix a zero and advance to the year — the
|
|
31
|
+
// friendly card-form behavior, rather than silently dropping the keystroke.
|
|
32
|
+
if (digitsOnly.length === 1) {
|
|
33
|
+
const d = parseInt(digitsOnly[0], 10);
|
|
34
|
+
return d > 1 ? `0${d}/` : digitsOnly;
|
|
35
|
+
}
|
|
36
|
+
// Two+ digits: reject a second digit that pushes the month out of 01-12 (keep the first).
|
|
37
|
+
const month = parseInt(digitsOnly.slice(0, 2), 10);
|
|
38
|
+
if (month < 1 || month > 12) {
|
|
39
|
+
return digitsOnly.slice(0, 1);
|
|
40
|
+
}
|
|
41
|
+
if (digitsOnly.length === 2) {
|
|
42
|
+
return `${digitsOnly.slice(0, 2)}/`;
|
|
29
43
|
}
|
|
30
|
-
//
|
|
44
|
+
// Month is valid → append the year digits (YY)
|
|
31
45
|
return `${digitsOnly.slice(0, 2)}/${digitsOnly.slice(2, 4)}`;
|
|
32
46
|
};
|
|
33
47
|
/**
|
|
@@ -41,6 +55,48 @@ const isValidMonth = (value) => {
|
|
|
41
55
|
// Check if it's a valid month (1-12)
|
|
42
56
|
return month >= 1 && month <= 12;
|
|
43
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Validate a complete card expiry date (MM/YY): the month must be 01-12 AND the date
|
|
60
|
+
* must not be in the past. A card is considered valid through the LAST day of its expiry
|
|
61
|
+
* month, so the current month still passes.
|
|
62
|
+
*
|
|
63
|
+
* This is the consumer-side validator for InputCreditCard — the component only masks the
|
|
64
|
+
* input (clamping the month to 01-12 as you type); whether a *complete* date is acceptable
|
|
65
|
+
* is a business decision, so wire this to `state`/`errorMessage`:
|
|
66
|
+
*
|
|
67
|
+
* ```tsx
|
|
68
|
+
* <InputCreditCard
|
|
69
|
+
* state={state}
|
|
70
|
+
* errorMessage="Card has expired"
|
|
71
|
+
* onExpiryDateChange={(v) => setState(isValidExpiryDate(v) ? "default" : "invalid")}
|
|
72
|
+
* />
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @param value The formatted expiry value (e.g. "04/27"); non-digits are ignored
|
|
76
|
+
* @param options.now Reference "now" (defaults to the current date) — pass for SSR/testing
|
|
77
|
+
* @returns Whether the expiry is a complete, non-expired MM/YY
|
|
78
|
+
*/
|
|
79
|
+
const isValidExpiryDate = (value, options) => {
|
|
80
|
+
var _a;
|
|
81
|
+
const digits = value.replace(/\D/g, '');
|
|
82
|
+
if (digits.length !== 4)
|
|
83
|
+
return false; // require a complete MM/YY
|
|
84
|
+
const month = parseInt(digits.slice(0, 2), 10);
|
|
85
|
+
const year = parseInt(digits.slice(2, 4), 10);
|
|
86
|
+
if (isNaN(month) || isNaN(year))
|
|
87
|
+
return false;
|
|
88
|
+
if (month < 1 || month > 12)
|
|
89
|
+
return false;
|
|
90
|
+
const now = (_a = options === null || options === void 0 ? void 0 : options.now) !== null && _a !== void 0 ? _a : new Date();
|
|
91
|
+
const fullYear = 2000 + year;
|
|
92
|
+
const nowYear = now.getFullYear();
|
|
93
|
+
const nowMonth = now.getMonth() + 1; // 1-12
|
|
94
|
+
if (fullYear < nowYear)
|
|
95
|
+
return false;
|
|
96
|
+
if (fullYear === nowYear && month < nowMonth)
|
|
97
|
+
return false;
|
|
98
|
+
return true;
|
|
99
|
+
};
|
|
44
100
|
/**
|
|
45
101
|
* Apply phone number formatting (US format: (XXX) XXX-XXXX)
|
|
46
102
|
* @param value The raw input value
|
|
@@ -428,4 +484,4 @@ const getAdjustedCursorPosition = (previousValue, currentValue, previousPosition
|
|
|
428
484
|
return previousPosition;
|
|
429
485
|
};
|
|
430
486
|
|
|
431
|
-
export { applyInputMask, formatCreditCard, formatCurrency, formatDateInput, formatExpiryDate, formatPhoneNumber, formatSSN, formatTimeInput, getAdjustedCursorPosition, isValidDateInput, isValidMonth, isValidTimeInput, validateMaskedInput };
|
|
487
|
+
export { applyInputMask, formatCreditCard, formatCurrency, formatDateInput, formatExpiryDate, formatPhoneNumber, formatSSN, formatTimeInput, getAdjustedCursorPosition, isValidDateInput, isValidExpiryDate, isValidMonth, isValidTimeInput, validateMaskedInput };
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { InputAddressProps } from "./InputAddress.types";
|
|
3
|
+
/**
|
|
4
|
+
* Sensible default country list used when the consumer doesn't pass
|
|
5
|
+
* `availableCountries`. Exported so power users can extend/reorder it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_COUNTRIES: string[];
|
|
3
8
|
/**
|
|
4
9
|
* InputAddress component for collecting address information
|
|
5
10
|
* Displays a multi-field form for address entry with properly connected borders
|
|
@@ -1,8 +1,64 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import React__default, {
|
|
3
|
+
import React__default, { useState, useEffect, useMemo, useCallback, useId } from 'react';
|
|
3
4
|
import { Input } from '../Input/Input.js';
|
|
5
|
+
import { Select } from '../Select/Select.js';
|
|
4
6
|
import { inputAddressTheme } from './InputAddress.theme.js';
|
|
7
|
+
import { formsBaseTheme } from '../forms.theme.js';
|
|
8
|
+
import { cn } from '../../../utils/cn.js';
|
|
5
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Sensible default country list used when the consumer doesn't pass
|
|
12
|
+
* `availableCountries`. Exported so power users can extend/reorder it.
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_COUNTRIES = [
|
|
15
|
+
"United States",
|
|
16
|
+
"Canada",
|
|
17
|
+
"United Kingdom",
|
|
18
|
+
"Australia",
|
|
19
|
+
"New Zealand",
|
|
20
|
+
"Ireland",
|
|
21
|
+
"France",
|
|
22
|
+
"Germany",
|
|
23
|
+
"Spain",
|
|
24
|
+
"Portugal",
|
|
25
|
+
"Italy",
|
|
26
|
+
"Netherlands",
|
|
27
|
+
"Belgium",
|
|
28
|
+
"Switzerland",
|
|
29
|
+
"Austria",
|
|
30
|
+
"Sweden",
|
|
31
|
+
"Norway",
|
|
32
|
+
"Denmark",
|
|
33
|
+
"Finland",
|
|
34
|
+
"Poland",
|
|
35
|
+
"Czechia",
|
|
36
|
+
"Greece",
|
|
37
|
+
"Mexico",
|
|
38
|
+
"Brazil",
|
|
39
|
+
"Argentina",
|
|
40
|
+
"Chile",
|
|
41
|
+
"Colombia",
|
|
42
|
+
"India",
|
|
43
|
+
"China",
|
|
44
|
+
"Japan",
|
|
45
|
+
"South Korea",
|
|
46
|
+
"Singapore",
|
|
47
|
+
"Hong Kong",
|
|
48
|
+
"Malaysia",
|
|
49
|
+
"Indonesia",
|
|
50
|
+
"Philippines",
|
|
51
|
+
"Thailand",
|
|
52
|
+
"Vietnam",
|
|
53
|
+
"United Arab Emirates",
|
|
54
|
+
"Saudi Arabia",
|
|
55
|
+
"Israel",
|
|
56
|
+
"Turkey",
|
|
57
|
+
"South Africa",
|
|
58
|
+
"Nigeria",
|
|
59
|
+
"Kenya",
|
|
60
|
+
"Egypt",
|
|
61
|
+
];
|
|
6
62
|
/**
|
|
7
63
|
* InputAddress component for collecting address information
|
|
8
64
|
* Displays a multi-field form for address entry with properly connected borders
|
|
@@ -19,8 +75,17 @@ import { inputAddressTheme } from './InputAddress.theme.js';
|
|
|
19
75
|
* />
|
|
20
76
|
* ```
|
|
21
77
|
*/
|
|
22
|
-
const InputAddress = React__default.forwardRef(({ availableCountries = [], defaultCountry = "United States", onCountryChange, onPostalCodeChange, countryLabel = "Country", postalCodeLabel = "ZIP / Postal code", legendText = "Billing address", streetInputProps = {}, stateInputProps = {}, countryInputProps = {}, postalCodeInputProps = {}, className = "", theme = {}, }, ref) => {
|
|
78
|
+
const InputAddress = React__default.forwardRef(({ state = 'default', errorMessage, availableCountries = [], defaultCountry = "United States", onCountryChange, onPostalCodeChange, countryLabel = "Country", postalCodeLabel = "ZIP / Postal code", legendText = "Billing address", streetInputProps = {}, stateInputProps = {}, countryInputProps = {}, postalCodeInputProps = {}, className = "", theme = {}, }, ref) => {
|
|
23
79
|
var _a;
|
|
80
|
+
const isDisabled = state === 'disabled';
|
|
81
|
+
// Clear the error visually as soon as the user starts re-entering after an error.
|
|
82
|
+
// Resets when the parent sets state back to 'invalid' (e.g. on re-submit).
|
|
83
|
+
const [isDirtyAfterError, setIsDirtyAfterError] = useState(false);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (state === 'invalid')
|
|
86
|
+
setIsDirtyAfterError(false);
|
|
87
|
+
}, [state]);
|
|
88
|
+
const isInvalid = state === 'invalid' && !isDirtyAfterError;
|
|
24
89
|
// Merge default theme with provided theme using useMemo for performance
|
|
25
90
|
const mergedTheme = useMemo(() => ({
|
|
26
91
|
...inputAddressTheme,
|
|
@@ -37,32 +102,49 @@ const InputAddress = React__default.forwardRef(({ availableCountries = [], defau
|
|
|
37
102
|
// State for country and postal code
|
|
38
103
|
const [country, setCountry] = useState(defaultCountry);
|
|
39
104
|
const [postalCode, setPostalCode] = useState("");
|
|
40
|
-
// Handle country change
|
|
41
|
-
const handleCountryChange = useCallback((
|
|
42
|
-
const newCountry = e.target.value;
|
|
105
|
+
// Handle country change (Select emits the value directly, not a DOM event)
|
|
106
|
+
const handleCountryChange = useCallback((newCountry) => {
|
|
43
107
|
setCountry(newCountry);
|
|
108
|
+
setIsDirtyAfterError(true);
|
|
44
109
|
onCountryChange === null || onCountryChange === void 0 ? void 0 : onCountryChange(newCountry);
|
|
45
110
|
}, [onCountryChange]);
|
|
46
111
|
// Handle postal code change
|
|
47
112
|
const handlePostalCodeChange = useCallback((e) => {
|
|
48
113
|
const newPostalCode = e.target.value;
|
|
49
114
|
setPostalCode(newPostalCode);
|
|
115
|
+
setIsDirtyAfterError(true);
|
|
50
116
|
onPostalCodeChange === null || onPostalCodeChange === void 0 ? void 0 : onPostalCodeChange(newPostalCode);
|
|
51
117
|
}, [onPostalCodeChange]);
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}, [
|
|
118
|
+
// Street/State are uncontrolled passthrough fields — wrap their onChange so editing them
|
|
119
|
+
// also clears the invalid overlay, then forward to any consumer-provided handler.
|
|
120
|
+
const markDirty = useCallback((handler) => (e) => {
|
|
121
|
+
setIsDirtyAfterError(true);
|
|
122
|
+
handler === null || handler === void 0 ? void 0 : handler(e);
|
|
123
|
+
}, []);
|
|
124
|
+
// Country Select options — fall back to the bundled list when none provided.
|
|
125
|
+
const countryOptions = useMemo(() => (availableCountries.length ? availableCountries : DEFAULT_COUNTRIES).map((c) => ({ id: c, label: c, value: c })), [availableCountries]);
|
|
58
126
|
// Create unique IDs for accessibility
|
|
59
127
|
const baseId = useId();
|
|
60
128
|
const streetId = `${baseId}-street`;
|
|
61
129
|
const stateId = `${baseId}-state`;
|
|
62
130
|
const countryId = `${baseId}-country`;
|
|
63
131
|
const postalCodeId = `${baseId}-postal-code`;
|
|
64
|
-
|
|
132
|
+
const errorId = `${baseId}-error`;
|
|
133
|
+
// Children are NEVER given `invalid` — the single red perimeter overlay carries the error
|
|
134
|
+
// (see formsBaseTheme.groupInvalidOverlayStyle). Only disabled propagates to the fields.
|
|
135
|
+
const fieldState = isDisabled ? 'disabled' : 'default';
|
|
136
|
+
// Merge group state into each field's props; strip per-field helperText so only the
|
|
137
|
+
// consolidated message shows at the bottom.
|
|
138
|
+
const { helperText: _st, onChange: _stOnChange, ...streetProps } = { state: fieldState, ...streetInputProps };
|
|
139
|
+
const { helperText: _sa, onChange: _saOnChange, ...stateProps } = { state: fieldState, ...stateInputProps };
|
|
140
|
+
const { helperText: _co, className: _coClass, ...countryProps } = { state: fieldState, ...countryInputProps };
|
|
141
|
+
const { helperText: _pc, ...postalProps } = { state: fieldState, ...postalCodeInputProps };
|
|
142
|
+
return (jsxs("fieldset", { ref: ref, className: `w-full border-0 m-0 p-0 ${isInvalid ? 'state-invalid' : ''} ${className}`, "data-testid": "input-address-fieldset", "aria-invalid": isInvalid || undefined, "aria-errormessage": isInvalid && errorMessage ? errorId : undefined, children: [jsx("legend", { className: `block text-sm/6 font-medium mb-2 text-[var(--color-text-primary)] ${(_a = mergedTheme.legendStyles) !== null && _a !== void 0 ? _a : ""}`, children: legendText }), jsxs("div", { className: `relative grid gap-0 ${mergedTheme.contentStyles}`, "data-testid": "input-address-content", children: [jsx("div", { className: "w-full relative focus-within:z-10 hover:z-10", "data-testid": "input-address-street", children: jsx(Input, { id: streetId, type: "text", placeholder: "Street address", "aria-label": "street address", inputGroupClassName: "rounded-b-none", ...streetProps, onChange: markDirty(_stOnChange) }) }), jsx("div", { className: "w-full -mt-[0.5px] relative focus-within:z-10 hover:z-10", "data-testid": "input-address-state", children: jsx(Input, { id: stateId, type: "text", placeholder: "State", "aria-label": "state", inputGroupClassName: "rounded-none", ...stateProps, onChange: markDirty(_saOnChange) }) }), jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 w-full -mt-px relative focus-within:z-10 hover:z-10", children: [jsx("div", { className: `${mergedTheme.countryWrapperStyles} w-full sm:pr-0 relative focus-within:z-10 hover:z-10`, "data-testid": "input-address-country", children: jsx(Select, { id: countryId, options: countryOptions, value: country, onChange: handleCountryChange, placeholder: countryLabel, searchable: true, searchPlaceholder: `Search ${countryLabel.toLowerCase()}`, disabled: isDisabled,
|
|
143
|
+
// className lands on the Select trigger button (which carries the same
|
|
144
|
+
// inputGroup border/radius as Input's inputGroupClassName target), so the
|
|
145
|
+
// outer styling and the merged border seams are identical to the old Input.
|
|
146
|
+
className: cn("sm:rounded-bl-[var(--form-radius)] rounded-t-none sm:rounded-tr-none sm:rounded-br-none", _coClass), ...countryProps }) }), jsx("div", { className: `${mergedTheme.postalCodeWrapperStyles} w-full -mt-px sm:mt-0 sm:-ml-px sm:w-[calc(100%+1px)] relative focus-within:z-10 hover:z-10`, "data-testid": "input-address-postal", children: jsx(Input, { id: postalCodeId, type: "text", value: postalCode, onChange: handlePostalCodeChange, placeholder: postalCodeLabel, "aria-label": postalCodeLabel, inputGroupClassName: "sm:rounded-br-[var(--form-radius)] rounded-t-none rounded-tl-none rounded-bl-[var(--form-radius)] sm:rounded-bl-none", ...postalProps }) })] }), isInvalid && jsx("div", { "aria-hidden": "true", className: formsBaseTheme.groupInvalidOverlayStyle })] }), isInvalid && errorMessage && (jsx("p", { id: errorId, role: "alert", className: formsBaseTheme.helperText, children: errorMessage }))] }));
|
|
65
147
|
});
|
|
66
148
|
InputAddress.displayName = "InputAddress";
|
|
67
149
|
|
|
68
|
-
export { InputAddress };
|
|
150
|
+
export { DEFAULT_COUNTRIES, InputAddress };
|
|
@@ -11,11 +11,11 @@ const inputAddressTheme = {
|
|
|
11
11
|
// Only keeping border radius positioning styles
|
|
12
12
|
baseInputGroupStyle: '',
|
|
13
13
|
// Specific styles for various positions
|
|
14
|
-
topInputGroupStyle: 'rounded-t-
|
|
14
|
+
topInputGroupStyle: 'rounded-t-[var(--form-radius)] rounded-b-none',
|
|
15
15
|
middleInputGroupStyle: 'rounded-none',
|
|
16
|
-
bottomLeftInputGroupStyle: 'rounded-bl-
|
|
17
|
-
bottomRightInputGroupStyle: 'rounded-br-
|
|
18
|
-
bottomFullInputGroupStyle: 'rounded-b-
|
|
16
|
+
bottomLeftInputGroupStyle: 'rounded-bl-[var(--form-radius)] rounded-br-none',
|
|
17
|
+
bottomRightInputGroupStyle: 'rounded-br-[var(--form-radius)] rounded-bl-none',
|
|
18
|
+
bottomFullInputGroupStyle: 'rounded-b-[var(--form-radius)] rounded-t-none',
|
|
19
19
|
// Using default input theme for both inputs
|
|
20
20
|
countryInput: {
|
|
21
21
|
...inputTheme,
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { InputProps, InputTheme } from '../Input/Input.types';
|
|
3
|
+
import { SelectProps } from '../Select/Select.types';
|
|
2
4
|
/**
|
|
3
5
|
* InputAddress component props
|
|
4
6
|
* @property {boolean} showCountrySelector - Whether to show the country selector
|
|
@@ -13,6 +15,10 @@ import { InputProps, InputTheme } from '../Input/Input.types';
|
|
|
13
15
|
* @property {InputAddressThemeOverrides} theme - Theme overrides for the address input
|
|
14
16
|
*/
|
|
15
17
|
export interface InputAddressProps {
|
|
18
|
+
/** Visual/validation state of the entire address group */
|
|
19
|
+
state?: 'default' | 'disabled' | 'invalid';
|
|
20
|
+
/** Consolidated error message shown below all fields when `state="invalid"` */
|
|
21
|
+
errorMessage?: React.ReactNode;
|
|
16
22
|
/** Whether to show the country selector */
|
|
17
23
|
showCountrySelector?: boolean;
|
|
18
24
|
/** Whether to show the postal code input */
|
|
@@ -35,8 +41,8 @@ export interface InputAddressProps {
|
|
|
35
41
|
streetInputProps?: Omit<InputProps, 'ref'>;
|
|
36
42
|
/** Props passed to the state input */
|
|
37
43
|
stateInputProps?: Omit<InputProps, 'ref'>;
|
|
38
|
-
/** Props passed to the country
|
|
39
|
-
countryInputProps?:
|
|
44
|
+
/** Props passed to the country Select (e.g. `searchable`, `placement`, `theme`) */
|
|
45
|
+
countryInputProps?: Partial<SelectProps<string>>;
|
|
40
46
|
/** Props passed to the postal code input */
|
|
41
47
|
postalCodeInputProps?: Omit<InputProps, 'ref'>;
|
|
42
48
|
/** Class name for the container */
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { InputAddress } from './InputAddress';
|
|
1
|
+
export { InputAddress, DEFAULT_COUNTRIES } from './InputAddress';
|
|
2
2
|
export type { InputAddressProps, InputAddressThemeOverrides } from './InputAddress.types';
|
|
3
3
|
export { inputAddressTheme, styledInputAddressTheme } from './InputAddress.theme';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
3
|
import React__default, { useId, useMemo, useEffect, useCallback } from 'react';
|
|
3
4
|
import { useReducedMotion, motion } from 'motion/react';
|
|
@@ -34,7 +35,7 @@ import { FormLabel } from '../FormLabel/FormLabel.js';
|
|
|
34
35
|
* );
|
|
35
36
|
* ```
|
|
36
37
|
*/
|
|
37
|
-
const InputCounter = React__default.forwardRef(({ value, onChange, state = "default", label, helperText, min, max, step = 1, disabled = false, decimalPlaces, formatNumber = (n) => n.toString(), className, buttonProps, theme, transition = { type: "spring", bounce: 0, stiffness: 300, damping: 30 }, "aria-label": ariaLabel = "Counter", onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, ...props }, ref) => {
|
|
38
|
+
const InputCounter = React__default.forwardRef(({ value, onChange, state = "default", label, helperText, errorMessage, min, max, step = 1, disabled = false, decimalPlaces, formatNumber = (n) => n.toString(), className, buttonProps, theme, transition = { type: "spring", bounce: 0, stiffness: 300, damping: 30 }, "aria-label": ariaLabel = "Counter", onAnimationStart, onAnimationEnd, onDrag, onDragStart, onDragEnd, ...props }, ref) => {
|
|
38
39
|
const shouldReduceMotion = useReducedMotion();
|
|
39
40
|
const shouldDisableAnimations = !!shouldReduceMotion;
|
|
40
41
|
const generatedId = useId();
|
|
@@ -109,48 +110,45 @@ const InputCounter = React__default.forwardRef(({ value, onChange, state = "defa
|
|
|
109
110
|
}
|
|
110
111
|
onChange === null || onChange === void 0 ? void 0 : onChange(roundedValue);
|
|
111
112
|
}, [value, step, min, isDisabled, onChange]);
|
|
112
|
-
// Keyboard support
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
break;
|
|
140
|
-
case "PageDown":
|
|
141
|
-
event.preventDefault();
|
|
142
|
-
const pageDownValue = value - step * 10;
|
|
143
|
-
if (min === undefined || pageDownValue >= min) {
|
|
144
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(pageDownValue);
|
|
145
|
-
}
|
|
146
|
-
else if (min !== undefined) {
|
|
147
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(min);
|
|
148
|
-
}
|
|
149
|
-
break;
|
|
113
|
+
// Keyboard support — scoped to THIS counter instance via onKeyDown on the
|
|
114
|
+
// focusable root. Because the root is focusable (tabIndex 0) and its child
|
|
115
|
+
// buttons bubble keydown to it, this fires only when focus is within THIS
|
|
116
|
+
// counter — correctly scoping the behavior to the focused instance.
|
|
117
|
+
const handleKeyDown = useCallback((event) => {
|
|
118
|
+
if (isDisabled)
|
|
119
|
+
return;
|
|
120
|
+
switch (event.key) {
|
|
121
|
+
case "ArrowUp":
|
|
122
|
+
event.preventDefault();
|
|
123
|
+
handleIncrement();
|
|
124
|
+
break;
|
|
125
|
+
case "ArrowDown":
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
handleDecrement();
|
|
128
|
+
break;
|
|
129
|
+
case "PageUp": {
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
const pageUpValue = value + step * 10;
|
|
132
|
+
if (max === undefined || pageUpValue <= max) {
|
|
133
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(pageUpValue);
|
|
134
|
+
}
|
|
135
|
+
else if (max !== undefined) {
|
|
136
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(max);
|
|
137
|
+
}
|
|
138
|
+
break;
|
|
150
139
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
140
|
+
case "PageDown": {
|
|
141
|
+
event.preventDefault();
|
|
142
|
+
const pageDownValue = value - step * 10;
|
|
143
|
+
if (min === undefined || pageDownValue >= min) {
|
|
144
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(pageDownValue);
|
|
145
|
+
}
|
|
146
|
+
else if (min !== undefined) {
|
|
147
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(min);
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
154
152
|
}, [
|
|
155
153
|
value,
|
|
156
154
|
step,
|
|
@@ -165,9 +163,30 @@ const InputCounter = React__default.forwardRef(({ value, onChange, state = "defa
|
|
|
165
163
|
const canDecrement = !isDisabled && (min === undefined || value > min);
|
|
166
164
|
const canIncrement = !isDisabled && (max === undefined || value < max);
|
|
167
165
|
const helperId = `${generatedId}-helper`;
|
|
168
|
-
|
|
166
|
+
// errorMessage takes precedence over helperText while invalid; helperText
|
|
167
|
+
// behavior is unchanged otherwise.
|
|
168
|
+
const displayedMessage = isInvalid && errorMessage ? errorMessage : helperText;
|
|
169
|
+
return (jsxs("div", { className: "flex flex-col", children: [label && (typeof label === "string" ? (jsx(FormLabel, { htmlFor: `${generatedId}-counter`, state: isDisabled ? "disabled" : isInvalid ? "invalid" : "default", className: "mb-1.5", children: label })) : (jsx("div", { className: "mb-1.5", children: label }))), jsxs(motion.div, { ref: ref, id: `${generatedId}-counter`, "data-counter": "true", layout: true, transition: shouldDisableAnimations ? undefined : transition, className: cn(mergedTheme.baseStyle, isInvalid && "ring-1 ring-[var(--color-danger)]", className), role: "spinbutton", "aria-label": ariaLabel, "aria-valuenow": value, "aria-valuemin": min, "aria-valuemax": max, "aria-disabled": isDisabled, "aria-invalid": isInvalid || undefined, "aria-describedby": displayedMessage ? helperId : undefined, tabIndex: isDisabled ? -1 : 0, onKeyDown: handleKeyDown, ...props, children: [jsx(motion.div, { className: mergedTheme.buttonWrapperStyle,
|
|
170
|
+
// Framer Motion's press gesture (triggered by `whileTap`) adds
|
|
171
|
+
// `tabIndex=0` to any non-natively-focusable element that
|
|
172
|
+
// doesn't already declare a `tabindex`, to make tap gestures
|
|
173
|
+
// keyboard-accessible. That's undesired here — this div is a
|
|
174
|
+
// purely decorative animation wrapper around the real, already-
|
|
175
|
+
// focusable <Button>, so an explicit tabIndex={-1} keeps it out
|
|
176
|
+
// of the tab order (motion.js only adds its own when the
|
|
177
|
+
// attribute is absent).
|
|
178
|
+
tabIndex: -1, whileHover: !isDisabled && !shouldDisableAnimations ? { scale: 1.05 } : undefined, whileTap: !isDisabled && !shouldDisableAnimations ? { scale: 0.95 } : undefined, children: jsx(Button, { size: "sm", variant: "ghost", iconOnly: true, ...buttonProps, onClick: handleDecrement, disabled: !canDecrement, "aria-label": "Decrement", children: jsx(MinusIcon, { className: "size-4 text-[var(--color-text-primary)]", strokeWidth: 2 }) }) }), jsx(SlidingNumber, { value: value, decimalPlaces: autoDecimalPlaces, className: mergedTheme.numberStyle, transition: transition }), jsx(motion.div, { className: mergedTheme.buttonWrapperStyle,
|
|
179
|
+
// Framer Motion's press gesture (triggered by `whileTap`) adds
|
|
180
|
+
// `tabIndex=0` to any non-natively-focusable element that
|
|
181
|
+
// doesn't already declare a `tabindex`, to make tap gestures
|
|
182
|
+
// keyboard-accessible. That's undesired here — this div is a
|
|
183
|
+
// purely decorative animation wrapper around the real, already-
|
|
184
|
+
// focusable <Button>, so an explicit tabIndex={-1} keeps it out
|
|
185
|
+
// of the tab order (motion.js only adds its own when the
|
|
186
|
+
// attribute is absent).
|
|
187
|
+
tabIndex: -1, whileHover: !isDisabled && !shouldDisableAnimations ? { scale: 1.05 } : undefined, whileTap: !isDisabled && !shouldDisableAnimations ? { scale: 0.95 } : undefined, children: jsx(Button, { size: "sm", variant: "ghost", iconOnly: true, ...buttonProps, onClick: handleIncrement, disabled: !canIncrement, "aria-label": "Increment", children: jsx(PlusIcon, { className: "size-4 text-[var(--color-text-primary)]", strokeWidth: 2 }) }) })] }), displayedMessage && (jsx("div", { id: helperId, role: isInvalid ? "alert" : undefined, className: cn("text-sm mt-1", isInvalid
|
|
169
188
|
? "text-[var(--color-danger)]"
|
|
170
|
-
: "text-[var(--color-text-muted)]"), children:
|
|
189
|
+
: "text-[var(--color-text-muted)]"), children: displayedMessage }))] }));
|
|
171
190
|
});
|
|
172
191
|
InputCounter.displayName = "InputCounter";
|
|
173
192
|
|
|
@@ -26,6 +26,12 @@ export interface InputCounterProps extends Omit<React.HTMLAttributes<HTMLDivElem
|
|
|
26
26
|
label?: React.ReactNode;
|
|
27
27
|
/** Helper text rendered below the counter */
|
|
28
28
|
helperText?: React.ReactNode;
|
|
29
|
+
/**
|
|
30
|
+
* Error message shown instead of `helperText` when `state="invalid"`.
|
|
31
|
+
* Takes precedence over `helperText` while invalid; `helperText` is
|
|
32
|
+
* unaffected/still shown as normal otherwise.
|
|
33
|
+
*/
|
|
34
|
+
errorMessage?: React.ReactNode;
|
|
29
35
|
/** Minimum allowed value (optional) */
|
|
30
36
|
min?: number;
|
|
31
37
|
/** Maximum allowed value (optional) */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
3
|
import React__default, { useState, useEffect, useMemo, useCallback, useId } from 'react';
|
|
3
4
|
import { Input } from '../Input/Input.js';
|
|
@@ -20,7 +21,7 @@ import { formsBaseTheme } from '../forms.theme.js';
|
|
|
20
21
|
* />
|
|
21
22
|
* ```
|
|
22
23
|
*/
|
|
23
|
-
const InputCreditCard = React__default.forwardRef(({ state = 'default', error, onCardNumberChange, onExpiryDateChange, onCvcChange, expiryDateLabel = "MM / YY", cvcLabel = "CVC", legendText = "Payment Information", cardNumberInputProps = {}, expiryDateInputProps = {}, cvcInputProps = {}, className = "", theme = {}, }, ref) => {
|
|
24
|
+
const InputCreditCard = React__default.forwardRef(({ state = 'default', errorMessage, error, onCardNumberChange, onExpiryDateChange, onCvcChange, expiryDateLabel = "MM / YY", cvcLabel = "CVC", legendText = "Payment Information", cardNumberInputProps = {}, expiryDateInputProps = {}, cvcInputProps = {}, className = "", theme = {}, }, ref) => {
|
|
24
25
|
var _a;
|
|
25
26
|
const isDisabled = state === 'disabled';
|
|
26
27
|
// Clear the error visually as soon as the user starts re-entering after an error.
|
|
@@ -31,6 +32,8 @@ const InputCreditCard = React__default.forwardRef(({ state = 'default', error, o
|
|
|
31
32
|
setIsDirtyAfterError(false);
|
|
32
33
|
}, [state]);
|
|
33
34
|
const isInvalid = state === 'invalid' && !isDirtyAfterError;
|
|
35
|
+
// Resolve the consolidated message (errorMessage is canonical; `error` is a deprecated alias).
|
|
36
|
+
const resolvedError = errorMessage !== null && errorMessage !== void 0 ? errorMessage : error;
|
|
34
37
|
// Merge the default theme with the provided theme overrides
|
|
35
38
|
const mergedTheme = useMemo(() => ({
|
|
36
39
|
...InputCreditCardTheme,
|
|
@@ -81,13 +84,16 @@ const InputCreditCard = React__default.forwardRef(({ state = 'default', error, o
|
|
|
81
84
|
const cardNumberId = `${instanceId}-card-number`;
|
|
82
85
|
const expiryDateId = `${instanceId}-expiry-date`;
|
|
83
86
|
const cvcId = `${instanceId}-cvc`;
|
|
84
|
-
const
|
|
87
|
+
const errorId = `${instanceId}-error`;
|
|
88
|
+
// Children are NEVER given `invalid` — the single red perimeter overlay carries the error
|
|
89
|
+
// (see formsBaseTheme.groupInvalidOverlayStyle). Only disabled propagates to the fields.
|
|
90
|
+
const fieldState = isDisabled ? 'disabled' : 'default';
|
|
85
91
|
// Merge top-level state into each field's props; strip per-field helperText
|
|
86
92
|
// so only the consolidated error message is shown at the bottom.
|
|
87
93
|
const { helperText: _cn, ...cardProps } = { state: fieldState, ...cardNumberInputProps };
|
|
88
94
|
const { helperText: _ex, ...expiryProps } = { state: fieldState, ...expiryDateInputProps };
|
|
89
95
|
const { helperText: _cv, ...cvcProps } = { state: fieldState, ...cvcInputProps };
|
|
90
|
-
return (jsxs("fieldset", { ref: ref, className: `w-full border-0 m-0 p-0 ${isInvalid ? 'state-invalid' : ''} ${className}`, "data-testid": "input-credit-card-fieldset", children: [jsx("legend", { className: `block text-sm/6 font-medium mb-2 text-[var(--color-text-primary)] ${(_a = mergedTheme.legendStyles) !== null && _a !== void 0 ? _a : ""}`, children: legendText }), jsxs("div", { className: `grid gap-0 ${mergedTheme.contentStyles}`, "data-testid": "input-credit-card-content", children: [jsx("div", { className: "w-full relative focus-within:z-10", "data-testid": "input-card-number", children: jsx(Input, { id: cardNumberId, type: "creditCard", value: cardNumber, onChange: handleCardNumberChange, placeholder: "Card Number", "aria-label": "card number", onFocus: () => handleFocus("cardNumber"), onBlur: handleBlur, inputGroupClassName: "rounded-b-none", ...cardProps }) }), jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 w-full -mt-px relative", children: [jsx("div", { className: `${mergedTheme.expiryDateWrapperStyles || ""} w-full sm:pr-0`, "data-testid": "input-expiry-date
|
|
96
|
+
return (jsxs("fieldset", { ref: ref, className: `w-full border-0 m-0 p-0 ${isInvalid ? 'state-invalid' : ''} ${className}`, "data-testid": "input-credit-card-fieldset", "aria-invalid": isInvalid || undefined, "aria-errormessage": isInvalid && resolvedError ? errorId : undefined, children: [jsx("legend", { className: `block text-sm/6 font-medium mb-2 text-[var(--color-text-primary)] ${(_a = mergedTheme.legendStyles) !== null && _a !== void 0 ? _a : ""}`, children: legendText }), jsxs("div", { className: `relative grid gap-0 ${mergedTheme.contentStyles}`, "data-testid": "input-credit-card-content", children: [jsx("div", { className: "w-full relative focus-within:z-10 hover:z-10", "data-testid": "input-card-number", children: jsx(Input, { id: cardNumberId, type: "creditCard", value: cardNumber, onChange: handleCardNumberChange, placeholder: "Card Number", "aria-label": "card number", onFocus: () => handleFocus("cardNumber"), onBlur: handleBlur, inputGroupClassName: "rounded-b-none", ...cardProps }) }), jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 w-full -mt-px relative focus-within:z-10 hover:z-10", children: [jsx("div", { className: `${mergedTheme.expiryDateWrapperStyles || ""} w-full sm:pr-0 relative focus-within:z-10 hover:z-10`, "data-testid": "input-expiry-date", children: jsx(Input, { id: expiryDateId, type: "expiryDate", value: expiryDate, onChange: handleExpiryDateChange, placeholder: expiryDateLabel, "aria-label": expiryDateLabel, onFocus: () => handleFocus("expiryDate"), onBlur: handleBlur, inputGroupClassName: "sm:rounded-bl-[var(--form-radius)] rounded-t-none sm:rounded-tr-none sm:rounded-br-none", ...expiryProps }) }), jsx("div", { className: `${mergedTheme.cvcWrapperStyles || ""} w-full -mt-px sm:mt-0 sm:-ml-px sm:w-[calc(100%+1px)] relative focus-within:z-10 hover:z-10`, "data-testid": "input-cvc", children: jsx(Input, { id: cvcId, type: "tel", maxLength: 3, pattern: "[0-9]*", inputMode: "numeric", value: cvc, onChange: handleCvcChange, placeholder: cvcLabel, "aria-label": cvcLabel, onFocus: () => handleFocus("cvc"), onBlur: handleBlur, inputGroupClassName: " sm:rounded-br-[var(--form-radius)] rounded-t-none rounded-bl-[var(--form-radius)] sm:rounded-bl-none", ...cvcProps }) })] }), isInvalid && jsx("div", { "aria-hidden": "true", className: formsBaseTheme.groupInvalidOverlayStyle })] }), isInvalid && resolvedError && (jsx("p", { id: errorId, role: "alert", className: formsBaseTheme.helperText, children: resolvedError }))] }));
|
|
91
97
|
});
|
|
92
98
|
InputCreditCard.displayName = "InputCreditCard";
|
|
93
99
|
|
|
@@ -11,11 +11,11 @@ const inputCreditCardTheme = {
|
|
|
11
11
|
// Only keeping border radius positioning styles
|
|
12
12
|
baseInputGroupStyle: '',
|
|
13
13
|
// Specific styles for various positions
|
|
14
|
-
topInputGroupStyle: 'rounded-t-
|
|
14
|
+
topInputGroupStyle: 'rounded-t-[var(--form-radius)] rounded-b-none',
|
|
15
15
|
middleInputGroupStyle: 'rounded-none',
|
|
16
|
-
bottomLeftInputGroupStyle: 'rounded-bl-
|
|
17
|
-
bottomRightInputGroupStyle: 'rounded-br-
|
|
18
|
-
bottomFullInputGroupStyle: 'rounded-b-
|
|
16
|
+
bottomLeftInputGroupStyle: 'rounded-bl-[var(--form-radius)] rounded-br-none',
|
|
17
|
+
bottomRightInputGroupStyle: 'rounded-br-[var(--form-radius)] rounded-bl-none',
|
|
18
|
+
bottomFullInputGroupStyle: 'rounded-b-[var(--form-radius)] rounded-t-none',
|
|
19
19
|
// Using default input theme for all inputs
|
|
20
20
|
cardNumberInput: {
|
|
21
21
|
...inputTheme,
|