@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.
Files changed (762) hide show
  1. package/CHANGELOG.md +1184 -0
  2. package/dist/components/ai/CodeBlock/CodeBlock.js +21 -4
  3. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +0 -1
  4. package/dist/components/ai/CodeBlock/CodeBlock.types.d.ts +0 -2
  5. package/dist/components/ai/CodeBlock/LanguageIcon.js +1 -0
  6. package/dist/components/ai/PromptInput/PromptInput.js +13 -9
  7. package/dist/components/ai/PromptInput/PromptInput.theme.js +19 -2
  8. package/dist/components/ai/PromptInput/VoiceRecorder.d.ts +1 -0
  9. package/dist/components/ai/PromptInput/VoiceRecorder.js +154 -7
  10. package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.js +1 -0
  11. package/dist/components/ai/StreamingResponse/AnimatedText.js +1 -0
  12. package/dist/components/ai/StreamingResponse/ErrorDisplay.js +1 -0
  13. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +1 -0
  14. package/dist/components/ai/StreamingResponse/StreamingCursor.d.ts +2 -2
  15. package/dist/components/ai/StreamingResponse/StreamingCursor.js +14 -3
  16. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.d.ts +2 -2
  17. package/dist/components/ai/StreamingResponse/StreamingResponse.animations.js +17 -11
  18. package/dist/components/ai/StreamingResponse/StreamingResponse.js +3 -3
  19. package/dist/components/ai/StreamingResponse/WordAnimationContext.js +3 -1
  20. package/dist/components/ai/TokenCounter/TokenCounter.js +1 -0
  21. package/dist/components/ai/index.d.ts +2 -2
  22. package/dist/components/ai/index.js +4 -5
  23. package/dist/components/canvas/Background.js +3 -2
  24. package/dist/components/canvas/CanvasToolbar.js +3 -2
  25. package/dist/components/canvas/Edge.d.ts +2 -5
  26. package/dist/components/canvas/Edge.js +18 -2
  27. package/dist/components/canvas/EdgeLayer.d.ts +2 -1
  28. package/dist/components/canvas/EdgeLayer.js +20 -10
  29. package/dist/components/canvas/Handle.js +3 -2
  30. package/dist/components/canvas/MiniMap.js +1 -0
  31. package/dist/components/canvas/NodeCanvas.js +19 -15
  32. package/dist/components/canvas/NodeCanvas.types.d.ts +5 -1
  33. package/dist/components/canvas/NodeControls.js +3 -2
  34. package/dist/components/canvas/NodeRenderer.d.ts +4 -1
  35. package/dist/components/canvas/NodeRenderer.js +18 -9
  36. package/dist/components/canvas/changes.test.d.ts +1 -0
  37. package/dist/components/canvas/context/CanvasContext.d.ts +10 -1
  38. package/dist/components/canvas/context/CanvasContext.js +27 -7
  39. package/dist/components/canvas/context/ConnectionContext.js +1 -0
  40. package/dist/components/canvas/context/HandleRegistry.js +1 -0
  41. package/dist/components/canvas/context/InteractionContext.js +1 -0
  42. package/dist/components/canvas/context/NodeIdContext.js +1 -0
  43. package/dist/components/canvas/hooks/useConnection.js +1 -0
  44. package/dist/components/canvas/hooks/useMarquee.js +1 -0
  45. package/dist/components/canvas/hooks/useNodeDrag.js +3 -2
  46. package/dist/components/canvas/hooks/usePanZoom.js +7 -1
  47. package/dist/components/canvas/hooks/useViewport.js +1 -0
  48. package/dist/components/canvas/layout.test.d.ts +1 -0
  49. package/dist/components/canvas/utils.test.d.ts +1 -0
  50. package/dist/components/charts/ActivityRings/ActivityRings.js +28 -17
  51. package/dist/components/charts/ActivityRings/ActivityRings.types.d.ts +2 -3
  52. package/dist/components/charts/ActivityRings/ActivityRings.types.js +2 -1
  53. package/dist/components/charts/AreaChart/AreaChart.js +170 -157
  54. package/dist/components/charts/BarChart/BarChart.js +114 -124
  55. package/dist/components/charts/ChartContainer.d.ts +7 -0
  56. package/dist/components/charts/ChartContainer.js +10 -7
  57. package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.d.ts +3 -1
  58. package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.js +137 -102
  59. package/dist/components/charts/{shared/BarRenderer → ComboChart}/BarRenderer.types.d.ts +17 -5
  60. package/dist/components/charts/ComboChart/ComboChart.js +26 -9
  61. package/dist/components/charts/ComboChart/ComboChart.types.d.ts +2 -2
  62. package/dist/components/charts/ComboChart/ComboChart.types.js +4 -0
  63. package/dist/components/charts/ComboChart/ComboChartCanvas.d.ts +98 -0
  64. package/dist/components/charts/{shared/ChartContainer/ChartContainer.js → ComboChart/ComboChartCanvas.js} +41 -44
  65. package/dist/components/charts/{shared/ChartContainer/ChartContainer.types.d.ts → ComboChart/ComboChartCanvas.types.d.ts} +23 -3
  66. package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.d.ts +3 -1
  67. package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.js +27 -14
  68. package/dist/components/charts/{shared/LineRenderer → ComboChart}/LineRenderer.types.d.ts +11 -5
  69. package/dist/components/charts/DonutChart/DonutChart.js +2 -1
  70. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +8 -22
  71. package/dist/components/charts/DonutChart/donut-utils.js +1 -0
  72. package/dist/components/charts/FunnelChart/FunnelChart.animations.js +1 -48
  73. package/dist/components/charts/FunnelChart/FunnelChart.d.ts +3 -4
  74. package/dist/components/charts/FunnelChart/FunnelChart.js +306 -358
  75. package/dist/components/charts/Heatmap/Heatmap.js +29 -36
  76. package/dist/components/charts/Heatmap/HeatmapCell.js +1 -0
  77. package/dist/components/charts/LineChart/LineChart.js +163 -132
  78. package/dist/components/charts/LineChart/LineChart.types.d.ts +1 -1
  79. package/dist/components/charts/RadarChart/RadarChart.js +10 -2
  80. package/dist/components/charts/RadarChart/RadarChart.theme.js +0 -8
  81. package/dist/components/charts/RadarChart/RadarChart.types.d.ts +0 -8
  82. package/dist/components/charts/ScatterPlot/ScatterPlot.js +12 -3
  83. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.d.ts +0 -4
  84. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +0 -5
  85. package/dist/components/charts/StackedBarChart/StackedBarChart.js +79 -42
  86. package/dist/components/charts/StackedBarChart/StackedBarChart.types.d.ts +2 -2
  87. package/dist/components/charts/StackedBarChart/StackedBarChart.types.js +3 -0
  88. package/dist/components/charts/hooks/index.d.ts +1 -1
  89. package/dist/components/charts/hooks/useChartAccessibility.js +1 -0
  90. package/dist/components/charts/hooks/useChartDimensions.js +1 -0
  91. package/dist/components/charts/hooks/useChartScales.js +1 -1
  92. package/dist/components/charts/hooks/useChartTheme.js +1 -0
  93. package/dist/components/charts/hooks/useChartValidation.d.ts +0 -8
  94. package/dist/components/charts/hooks/useChartValidation.js +1 -0
  95. package/dist/components/charts/hooks/useTooltipPosition.js +1 -0
  96. package/dist/components/charts/index.d.ts +3 -3
  97. package/dist/components/charts/index.js +1 -3
  98. package/dist/components/charts/shared/ChartCrosshair/ChartCrosshair.js +5 -12
  99. package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -0
  100. package/dist/components/charts/shared/ChartLegend/ChartLegend.d.ts +5 -2
  101. package/dist/components/charts/shared/ChartLegend/ChartLegend.js +15 -22
  102. package/dist/components/charts/shared/ChartLegend/ChartLegend.types.d.ts +6 -23
  103. package/dist/components/charts/shared/ChartLegend/index.d.ts +2 -3
  104. package/dist/components/charts/shared/ChartMarker/ChartMarker.js +1 -0
  105. package/dist/components/charts/shared/ChartText/ChartText.js +1 -0
  106. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.js +4 -13
  107. package/dist/components/charts/shared/index.d.ts +0 -7
  108. package/dist/components/charts/theme/chart.theme.js +6 -0
  109. package/dist/components/charts/types/chart.types.d.ts +15 -0
  110. package/dist/components/charts/utils/animation-utils.d.ts +95 -0
  111. package/dist/components/charts/utils/animation-utils.js +150 -2
  112. package/dist/components/charts/utils/bar-emphasis.d.ts +80 -0
  113. package/dist/components/charts/utils/bar-emphasis.js +69 -0
  114. package/dist/components/charts/utils/chart-validation.js +7 -0
  115. package/dist/components/core/Accordion/Accordion.d.ts +3 -3
  116. package/dist/components/core/Accordion/Accordion.js +21 -17
  117. package/dist/components/core/Accordion/Accordion.types.d.ts +35 -1
  118. package/dist/components/core/Accordion/AccordionBody.js +2 -1
  119. package/dist/components/core/Accordion/AccordionContext.d.ts +3 -0
  120. package/dist/components/core/Accordion/AccordionContext.js +15 -0
  121. package/dist/components/core/Accordion/AccordionItem.js +12 -8
  122. package/dist/components/core/Accordion/AccordionTrigger.js +7 -4
  123. package/dist/components/core/Accordion/index.d.ts +2 -2
  124. package/dist/components/core/Alert/Alert.animations.js +1 -0
  125. package/dist/components/core/Alert/Alert.js +4 -4
  126. package/dist/components/core/Alert/Alert.theme.js +0 -5
  127. package/dist/components/core/Alert/Alert.types.d.ts +0 -8
  128. package/dist/components/core/Alert/index.d.ts +1 -1
  129. package/dist/components/core/AlertDialog/AlertDialog.js +15 -1
  130. package/dist/components/core/Avatar/Avatar.js +58 -14
  131. package/dist/components/core/Avatar/Avatar.types.d.ts +26 -1
  132. package/dist/components/core/AvatarGroup/AvatarGroup.animations.js +1 -0
  133. package/dist/components/core/AvatarGroup/AvatarGroup.js +1 -0
  134. package/dist/components/core/Badge/Badge.animations.js +1 -0
  135. package/dist/components/core/Badge/Badge.js +6 -6
  136. package/dist/components/core/Badge/Badge.theme.js +32 -28
  137. package/dist/components/core/Badge/Badge.types.d.ts +12 -1
  138. package/dist/components/core/Breadcrumbs/Breadcrumbs.js +8 -2
  139. package/dist/components/core/Button/Button.js +23 -17
  140. package/dist/components/core/Button/Button.ripple.js +1 -4
  141. package/dist/components/core/Button/Button.theme.d.ts +0 -2
  142. package/dist/components/core/Button/Button.theme.js +16 -92
  143. package/dist/components/core/Button/Button.types.d.ts +5 -6
  144. package/dist/components/core/Calendar/Calendar.animations.js +1 -0
  145. package/dist/components/core/Calendar/Calendar.js +87 -4
  146. package/dist/components/core/Calendar/CalendarMini/CalendarMini.animations.js +1 -0
  147. package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +3 -1
  148. package/dist/components/core/Card/Card.js +9 -2
  149. package/dist/components/core/Card/Card.theme.js +3 -1
  150. package/dist/components/core/Card/Card.types.d.ts +8 -0
  151. package/dist/components/core/CardStack/CardStack.js +1 -0
  152. package/dist/components/core/Carousel/Carousel.js +1 -0
  153. package/dist/components/core/Carousel/CarouselBody.js +5 -2
  154. package/dist/components/core/Carousel/CarouselContext.js +1 -0
  155. package/dist/components/core/Carousel/CarouselNext.js +1 -0
  156. package/dist/components/core/Carousel/CarouselPrevious.js +1 -0
  157. package/dist/components/core/CommandPalette/CommandItem.js +1 -0
  158. package/dist/components/core/CommandPalette/CommandPalette.animations.js +1 -0
  159. package/dist/components/core/CommandPalette/CommandPalette.js +55 -11
  160. package/dist/components/core/CommandPalette/CommandPalette.theme.js +3 -1
  161. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +8 -0
  162. package/dist/components/core/ContextMenu/ContextMenu.js +27 -5
  163. package/dist/components/core/ContextMenu/ContextMenu.theme.js +8 -7
  164. package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +17 -0
  165. package/dist/components/core/ContextMenu/ContextMenuBody.js +11 -5
  166. package/dist/components/core/ContextMenu/ContextMenuContext.js +1 -0
  167. package/dist/components/core/ContextMenu/ContextMenuItem.js +17 -7
  168. package/dist/components/core/ContextMenu/ContextMenuLabel.js +1 -0
  169. package/dist/components/core/ContextMenu/ContextMenuSeparator.js +1 -0
  170. package/dist/components/core/ContextMenu/ContextMenuSub.js +4 -3
  171. package/dist/components/core/ContextMenu/ContextMenuSubBody.js +7 -3
  172. package/dist/components/core/ContextMenu/ContextMenuSubTrigger.js +3 -2
  173. package/dist/components/core/ContextMenu/ContextMenuTrigger.js +8 -0
  174. package/dist/components/core/DotSeparator/DotSeparator.js +1 -0
  175. package/dist/components/core/DragDrop/DragDrop.js +50 -31
  176. package/dist/components/core/Drawer/Drawer.animations.js +9 -8
  177. package/dist/components/core/Drawer/Drawer.d.ts +3 -3
  178. package/dist/components/core/Drawer/Drawer.js +14 -15
  179. package/dist/components/core/Drawer/Drawer.theme.js +8 -6
  180. package/dist/components/core/Drawer/Drawer.types.d.ts +8 -0
  181. package/dist/components/core/Drawer/DrawerBody.js +2 -1
  182. package/dist/components/core/Drawer/DrawerContext.d.ts +3 -0
  183. package/dist/components/core/Drawer/DrawerContext.js +15 -0
  184. package/dist/components/core/Drawer/DrawerFooter.js +2 -1
  185. package/dist/components/core/Drawer/DrawerHeader.js +3 -2
  186. package/dist/components/core/Drawer/DrawerSubtitle.js +2 -1
  187. package/dist/components/core/Drawer/DrawerTitle.js +2 -1
  188. package/dist/components/core/Dropdown/Dropdown.js +23 -9
  189. package/dist/components/core/Dropdown/Dropdown.theme.js +4 -3
  190. package/dist/components/core/Dropdown/Dropdown.types.d.ts +8 -0
  191. package/dist/components/core/Dropdown/DropdownContext.js +1 -0
  192. package/dist/components/core/Dropdown/DropdownItem.js +1 -0
  193. package/dist/components/core/Dropdown/DropdownMenu.js +22 -22
  194. package/dist/components/core/Dropdown/DropdownSection.js +1 -0
  195. package/dist/components/core/Dropdown/DropdownSeparator.js +1 -0
  196. package/dist/components/core/Dropdown/DropdownTrigger.js +21 -1
  197. package/dist/components/core/HeroCard/HeroCard.js +1 -0
  198. package/dist/components/core/HeroCard/HeroCard.theme.js +1 -1
  199. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.js +11 -2
  200. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.js +2 -2
  201. package/dist/components/core/Link/Link.d.ts +1 -1
  202. package/dist/components/core/Link/Link.js +58 -29
  203. package/dist/components/core/Link/Link.types.d.ts +25 -8
  204. package/dist/components/core/Masonry/Masonry.js +87 -75
  205. package/dist/components/core/Masonry/Masonry.theme.js +10 -4
  206. package/dist/components/core/MenuItem/MenuItem.js +17 -1
  207. package/dist/components/core/MenuItem/MenuItem.theme.js +6 -2
  208. package/dist/components/core/Message/Message.js +2 -1
  209. package/dist/components/core/Message/MessageActions.js +1 -0
  210. package/dist/components/core/Message/MessageAudio.js +2 -1
  211. package/dist/components/core/Message/MessageAvatar.js +1 -0
  212. package/dist/components/core/Message/MessageBody.js +1 -0
  213. package/dist/components/core/Message/MessageContext.js +1 -0
  214. package/dist/components/core/Message/MessageFile.js +1 -0
  215. package/dist/components/core/Message/MessageImage.js +1 -0
  216. package/dist/components/core/Message/MessageList.js +1 -0
  217. package/dist/components/core/Message/MessageReactions.js +1 -0
  218. package/dist/components/core/Message/MessageStatusIndicator.js +3 -2
  219. package/dist/components/core/Message/MessageTimestamp.js +1 -0
  220. package/dist/components/core/Message/TypeWriter.d.ts +1 -1
  221. package/dist/components/core/Message/TypeWriter.js +74 -9
  222. package/dist/components/core/Modal/Modal.animations.d.ts +1 -1
  223. package/dist/components/core/Modal/Modal.animations.js +10 -25
  224. package/dist/components/core/Modal/Modal.d.ts +3 -5
  225. package/dist/components/core/Modal/Modal.js +15 -15
  226. package/dist/components/core/Modal/Modal.theme.js +7 -5
  227. package/dist/components/core/Modal/Modal.types.d.ts +8 -0
  228. package/dist/components/core/Modal/ModalBody.js +2 -1
  229. package/dist/components/core/Modal/ModalContext.d.ts +3 -0
  230. package/dist/components/core/Modal/ModalContext.js +16 -0
  231. package/dist/components/core/Modal/ModalFooter.js +3 -2
  232. package/dist/components/core/Modal/ModalHeader.js +3 -2
  233. package/dist/components/core/Modal/ModalSubtitle.js +2 -1
  234. package/dist/components/core/Modal/ModalTitle.js +2 -1
  235. package/dist/components/core/ModalStack/ModalStack.animations.js +1 -0
  236. package/dist/components/core/ModalStack/ModalStack.js +2 -1
  237. package/dist/components/core/ModalStack/ModalStackModal.js +18 -10
  238. package/dist/components/core/NavItem/NavItem.js +15 -3
  239. package/dist/components/core/OfflineIndicator/OfflineIndicator.js +1 -0
  240. package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +1 -1
  241. package/dist/components/core/PageHeading/PageHeading.js +8 -3
  242. package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
  243. package/dist/components/core/PageHeading/PageHeading.types.d.ts +12 -1
  244. package/dist/components/core/PageHeading/PageHeadingBackButton.js +3 -2
  245. package/dist/components/core/Pagination/Pagination.js +8 -2
  246. package/dist/components/core/Pagination/Pagination.theme.d.ts +2 -10
  247. package/dist/components/core/Pagination/Pagination.types.d.ts +11 -1
  248. package/dist/components/core/Pill/Pill.animations.js +2 -11
  249. package/dist/components/core/Pill/Pill.js +14 -5
  250. package/dist/components/core/Pill/Pill.theme.js +8 -8
  251. package/dist/components/core/Popover/Popover.js +6 -5
  252. package/dist/components/core/Popover/Popover.theme.js +4 -2
  253. package/dist/components/core/Popover/Popover.types.d.ts +8 -0
  254. package/dist/components/core/Popover/PopoverBody.js +19 -21
  255. package/dist/components/core/Popover/PopoverContext.js +1 -0
  256. package/dist/components/core/Popover/PopoverTrigger.js +1 -0
  257. package/dist/components/core/Progress/Progress.js +1 -0
  258. package/dist/components/core/Rating/Rating.js +13 -5
  259. package/dist/components/core/ScrollArea/ScrollArea.js +1 -0
  260. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.d.ts +1 -0
  261. package/dist/components/core/ScrollArea/smooth/SmoothScrollEngine.js +14 -3
  262. package/dist/components/core/ScrollArea/smooth/SnapPointDetector.js +1 -0
  263. package/dist/components/core/ScrollArea/smooth/useSmoothScroll.js +1 -0
  264. package/dist/components/core/Segmented/Segmented.js +3 -2
  265. package/dist/components/core/Segmented/SegmentedItem.js +2 -1
  266. package/dist/components/core/Separator/Separator.js +1 -0
  267. package/dist/components/core/Sidebar/Sidebar.js +1 -0
  268. package/dist/components/core/Sidebar/SidebarCard.js +1 -0
  269. package/dist/components/core/Sidebar/SidebarContent.js +1 -0
  270. package/dist/components/core/Sidebar/SidebarContext.js +1 -0
  271. package/dist/components/core/Sidebar/SidebarFooter.js +1 -0
  272. package/dist/components/core/Sidebar/SidebarHeader.js +1 -0
  273. package/dist/components/core/Sidebar/SidebarLogo.js +1 -0
  274. package/dist/components/core/Sidebar/SidebarMobileTrigger.js +1 -0
  275. package/dist/components/core/Sidebar/SidebarNav.js +3 -1
  276. package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -0
  277. package/dist/components/core/Sidebar/SidebarSearch.js +1 -0
  278. package/dist/components/core/Sidebar/SidebarToggle.js +1 -0
  279. package/dist/components/core/Sidebar/SidebarUserProfile.js +1 -0
  280. package/dist/components/core/SlidingNumber/SlidingNumber.js +3 -1
  281. package/dist/components/core/Sortable/Sortable.animations.js +1 -0
  282. package/dist/components/core/Sortable/Sortable.js +1 -0
  283. package/dist/components/core/Spinner/Spinner.js +1 -0
  284. package/dist/components/core/Tabs/Tabs.animations.js +1 -0
  285. package/dist/components/core/Tabs/Tabs.js +1 -0
  286. package/dist/components/core/Tabs/Tabs.theme.js +3 -3
  287. package/dist/components/core/Tabs/TabsBody.js +1 -0
  288. package/dist/components/core/Tabs/TabsContext.js +1 -0
  289. package/dist/components/core/Tabs/TabsList.js +1 -0
  290. package/dist/components/core/Tabs/TabsTrigger.js +34 -10
  291. package/dist/components/core/Tag/Tag.js +2 -1
  292. package/dist/components/core/Tag/Tag.theme.js +2 -2
  293. package/dist/components/core/Toast/Toast.animations.d.ts +3 -2
  294. package/dist/components/core/Toast/Toast.animations.js +20 -17
  295. package/dist/components/core/Toast/Toast.js +42 -20
  296. package/dist/components/core/Toast/Toast.theme.js +5 -8
  297. package/dist/components/core/Toast/Toast.types.d.ts +30 -20
  298. package/dist/components/core/Toast/ToastProvider.js +5 -1
  299. package/dist/components/core/Toast/index.d.ts +1 -1
  300. package/dist/components/core/Toast/useToast.js +5 -6
  301. package/dist/components/core/Tooltip/Tooltip.animations.js +19 -53
  302. package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
  303. package/dist/components/core/Tooltip/Tooltip.js +39 -18
  304. package/dist/components/core/Tooltip/Tooltip.theme.js +4 -2
  305. package/dist/components/core/Tooltip/Tooltip.types.d.ts +8 -0
  306. package/dist/components/core/Tree/Tree.animations.d.ts +1 -2
  307. package/dist/components/core/Tree/Tree.animations.js +20 -58
  308. package/dist/components/core/Tree/Tree.js +7 -5
  309. package/dist/components/data-display/DescriptionList/DescriptionList.js +1 -0
  310. package/dist/components/data-display/Feed/Feed.js +1 -0
  311. package/dist/components/data-display/GanttChart/GanttChart.d.ts +2 -3
  312. package/dist/components/data-display/GanttChart/GanttChart.js +5 -21
  313. package/dist/components/data-display/GanttChart/GanttChartContext.d.ts +5 -0
  314. package/dist/components/data-display/GanttChart/GanttChartContext.js +26 -0
  315. package/dist/components/data-display/GanttChart/GanttChartPanel.js +2 -1
  316. package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +2 -1
  317. package/dist/components/data-display/GanttChart/GanttGroupBar.js +2 -1
  318. package/dist/components/data-display/GanttChart/GanttMilestone.js +2 -1
  319. package/dist/components/data-display/GanttChart/GanttSplitter.js +2 -1
  320. package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +2 -1
  321. package/dist/components/data-display/GanttChart/GanttTableHeader.js +2 -1
  322. package/dist/components/data-display/GanttChart/GanttTablePanel.js +2 -1
  323. package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -1
  324. package/dist/components/data-display/GanttChart/GanttTaskBar.js +2 -1
  325. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +2 -1
  326. package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
  327. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +2 -1
  328. package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -1
  329. package/dist/components/data-display/GanttChart/hooks/useGanttDates.js +1 -0
  330. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +1 -0
  331. package/dist/components/data-display/GanttChart/hooks/useGanttLayout.js +1 -0
  332. package/dist/components/data-display/GanttChart/hooks/useGanttScrollSync.js +1 -0
  333. package/dist/components/data-display/KPI/KPI.js +1 -0
  334. package/dist/components/data-display/Metric/Metric.js +2 -2
  335. package/dist/components/data-display/Metric/Metric.theme.js +2 -14
  336. package/dist/components/data-display/Metric/Metric.types.d.ts +1 -3
  337. package/dist/components/data-display/Table/Table.animations.js +1 -0
  338. package/dist/components/data-display/Table/Table.d.ts +2 -7
  339. package/dist/components/data-display/Table/Table.js +14 -14
  340. package/dist/components/data-display/Table/Table.types.d.ts +2 -0
  341. package/dist/components/data-display/Table/TableActions.js +3 -2
  342. package/dist/components/data-display/Table/TableActionsMenu.js +1 -0
  343. package/dist/components/data-display/Table/TableBody.js +1 -0
  344. package/dist/components/data-display/Table/TableCell.d.ts +1 -1
  345. package/dist/components/data-display/Table/TableCell.js +8 -3
  346. package/dist/components/data-display/Table/TableColumnManager.js +1 -0
  347. package/dist/components/data-display/Table/TableContext.d.ts +11 -0
  348. package/dist/components/data-display/Table/TableContext.js +21 -0
  349. package/dist/components/data-display/Table/TableDeclarative.js +3 -2
  350. package/dist/components/data-display/Table/TableFilter.js +9 -5
  351. package/dist/components/data-display/Table/TableHeader.js +2 -1
  352. package/dist/components/data-display/Table/TablePagination.js +1 -0
  353. package/dist/components/data-display/Table/TableRow.js +1 -0
  354. package/dist/components/data-display/Table/TableSelectionHeader.js +4 -2
  355. package/dist/components/data-display/Table/hooks/useTableColumns.js +1 -0
  356. package/dist/components/data-display/Table/hooks/useTableExpansion.js +1 -0
  357. package/dist/components/data-display/Table/hooks/useTableFilter.js +1 -0
  358. package/dist/components/data-display/Table/hooks/useTablePagination.js +1 -0
  359. package/dist/components/data-display/Table/hooks/useTableSelection.js +1 -0
  360. package/dist/components/data-display/Table/index.js +1 -2
  361. package/dist/components/data-display/Timeline/Timeline.animations.js +1 -0
  362. package/dist/components/data-display/Timeline/Timeline.d.ts +2 -2
  363. package/dist/components/data-display/Timeline/Timeline.js +5 -10
  364. package/dist/components/data-display/Timeline/Timeline.theme.d.ts +2 -24
  365. package/dist/components/data-display/Timeline/Timeline.types.d.ts +25 -1
  366. package/dist/components/data-display/Timeline/TimelineContent.js +2 -1
  367. package/dist/components/data-display/Timeline/TimelineContext.d.ts +3 -0
  368. package/dist/components/data-display/Timeline/TimelineContext.js +16 -0
  369. package/dist/components/data-display/Timeline/TimelineItem.js +5 -4
  370. package/dist/components/data-display/Timeline/TimelineMarker.js +2 -1
  371. package/dist/components/effects/AIOrb/hooks/useOrbState.js +1 -0
  372. package/dist/components/effects/AIOrb/variants/Aura/Aura.js +13 -4
  373. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.d.ts +7 -0
  374. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.d.ts +3 -0
  375. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.impl.js +176 -0
  376. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.js +29 -161
  377. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.d.ts +8 -0
  378. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.d.ts +3 -0
  379. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.impl.js +140 -0
  380. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.js +29 -127
  381. package/dist/components/effects/Animated/Animated.d.ts +2 -2
  382. package/dist/components/effects/Animated/Animated.js +5 -6
  383. package/dist/components/effects/Animated/AnimatedContext.d.ts +3 -0
  384. package/dist/components/effects/Animated/AnimatedContext.js +12 -0
  385. package/dist/components/effects/Animated/AnimatedItem.js +2 -1
  386. package/dist/components/effects/Aurora/Aurora.js +27 -5
  387. package/dist/components/effects/ColorPanels/ColorPanels.d.ts +8 -0
  388. package/dist/components/effects/ColorPanels/ColorPanels.js +66 -0
  389. package/dist/components/effects/ColorPanels/ColorPanels.shaders.d.ts +12 -0
  390. package/dist/components/effects/ColorPanels/ColorPanels.shaders.js +218 -0
  391. package/dist/components/effects/ColorPanels/ColorPanels.types.d.ts +29 -0
  392. package/dist/components/effects/ColorPanels/ColorPanels.types.js +3 -0
  393. package/dist/components/effects/ColorPanels/index.d.ts +2 -0
  394. package/dist/components/effects/CustomCursor/CustomCursor.js +1 -0
  395. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +0 -2
  396. package/dist/components/effects/Dithering/Dithering.d.ts +10 -0
  397. package/dist/components/effects/Dithering/Dithering.js +62 -0
  398. package/dist/components/effects/Dithering/Dithering.shaders.d.ts +11 -0
  399. package/dist/components/effects/Dithering/Dithering.shaders.js +166 -0
  400. package/dist/components/effects/Dithering/Dithering.types.d.ts +31 -0
  401. package/dist/components/effects/Dithering/Dithering.types.js +17 -0
  402. package/dist/components/effects/Dithering/index.d.ts +3 -0
  403. package/dist/components/effects/DotPattern/DotPattern.js +1 -0
  404. package/dist/components/effects/FlutedGlass/FlutedGlass.d.ts +9 -0
  405. package/dist/components/effects/FlutedGlass/FlutedGlass.js +80 -0
  406. package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.d.ts +12 -0
  407. package/dist/components/effects/FlutedGlass/FlutedGlass.shaders.js +335 -0
  408. package/dist/components/effects/FlutedGlass/FlutedGlass.types.d.ts +61 -0
  409. package/dist/components/effects/FlutedGlass/FlutedGlass.types.js +16 -0
  410. package/dist/components/effects/FlutedGlass/index.d.ts +3 -0
  411. package/dist/components/effects/GemSmoke/GemSmoke.d.ts +8 -0
  412. package/dist/components/effects/GemSmoke/GemSmoke.js +70 -0
  413. package/dist/components/effects/GemSmoke/GemSmoke.shaders.d.ts +18 -0
  414. package/dist/components/effects/GemSmoke/GemSmoke.shaders.js +181 -0
  415. package/dist/components/effects/GemSmoke/GemSmoke.types.d.ts +37 -0
  416. package/dist/components/effects/GemSmoke/GemSmoke.types.js +10 -0
  417. package/dist/components/effects/GemSmoke/index.d.ts +3 -0
  418. package/dist/components/effects/GlassEffect/GlassEffect.js +1 -1
  419. package/dist/components/effects/GlassSurface/GlassSurface.js +2 -16
  420. package/dist/components/effects/GodRays/GodRays.d.ts +8 -0
  421. package/dist/components/effects/GodRays/GodRays.js +68 -0
  422. package/dist/components/effects/GodRays/GodRays.shaders.d.ts +10 -0
  423. package/dist/components/effects/GodRays/GodRays.shaders.js +128 -0
  424. package/dist/components/effects/GodRays/GodRays.types.d.ts +25 -0
  425. package/dist/components/effects/GodRays/GodRays.types.js +3 -0
  426. package/dist/components/effects/GodRays/index.d.ts +2 -0
  427. package/dist/components/effects/GradientMesh/GradientMesh.d.ts +9 -0
  428. package/dist/components/effects/GradientMesh/GradientMesh.js +56 -0
  429. package/dist/components/effects/GradientMesh/GradientMesh.shaders.d.ts +15 -0
  430. package/dist/components/effects/GradientMesh/GradientMesh.shaders.js +127 -0
  431. package/dist/components/effects/GradientMesh/GradientMesh.types.d.ts +17 -0
  432. package/dist/components/effects/GradientMesh/GradientMesh.types.js +3 -0
  433. package/dist/components/effects/GradientMesh/index.d.ts +2 -0
  434. package/dist/components/effects/GrainGradient/GrainGradient.d.ts +9 -0
  435. package/dist/components/effects/GrainGradient/GrainGradient.js +62 -0
  436. package/dist/components/effects/GrainGradient/GrainGradient.shaders.d.ts +17 -0
  437. package/dist/components/effects/GrainGradient/GrainGradient.shaders.js +168 -0
  438. package/dist/components/effects/GrainGradient/GrainGradient.types.d.ts +26 -0
  439. package/dist/components/effects/GrainGradient/GrainGradient.types.js +9 -0
  440. package/dist/components/effects/GrainGradient/index.d.ts +3 -0
  441. package/dist/components/effects/GridPattern/GridPattern.js +1 -0
  442. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.d.ts +10 -0
  443. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.js +78 -0
  444. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.d.ts +22 -0
  445. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.shaders.js +239 -0
  446. package/dist/components/effects/HalftoneCmyk/HalftoneCmyk.types.d.ts +52 -0
  447. package/dist/components/effects/HalftoneCmyk/index.d.ts +2 -0
  448. package/dist/components/effects/HalftoneDots/HalftoneDots.d.ts +9 -0
  449. package/dist/components/effects/HalftoneDots/HalftoneDots.js +68 -0
  450. package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.d.ts +13 -0
  451. package/dist/components/effects/HalftoneDots/HalftoneDots.shaders.js +296 -0
  452. package/dist/components/effects/HalftoneDots/HalftoneDots.types.d.ts +43 -0
  453. package/dist/components/effects/HalftoneDots/HalftoneDots.types.js +12 -0
  454. package/dist/components/effects/HalftoneDots/index.d.ts +3 -0
  455. package/dist/components/effects/ImageDithering/ImageDithering.d.ts +9 -0
  456. package/dist/components/effects/ImageDithering/ImageDithering.js +68 -0
  457. package/dist/components/effects/ImageDithering/ImageDithering.shaders.d.ts +12 -0
  458. package/dist/components/effects/ImageDithering/ImageDithering.shaders.js +117 -0
  459. package/dist/components/effects/ImageDithering/ImageDithering.types.d.ts +30 -0
  460. package/dist/components/effects/ImageDithering/ImageDithering.types.js +8 -0
  461. package/dist/components/effects/ImageDithering/index.d.ts +3 -0
  462. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +1 -0
  463. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +1 -0
  464. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +1 -0
  465. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +1 -0
  466. package/dist/components/effects/InteractiveCharacters/hooks/useBlink.js +1 -0
  467. package/dist/components/effects/InteractiveCharacters/hooks/useIdleAnimation.js +1 -0
  468. package/dist/components/effects/InteractiveCharacters/hooks/useMouseTracking.js +1 -0
  469. package/dist/components/effects/LiquidMetal/LiquidMetal.d.ts +9 -0
  470. package/dist/components/effects/LiquidMetal/LiquidMetal.js +61 -0
  471. package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.d.ts +19 -0
  472. package/dist/components/effects/LiquidMetal/LiquidMetal.shaders.js +202 -0
  473. package/dist/components/effects/LiquidMetal/LiquidMetal.types.d.ts +34 -0
  474. package/dist/components/effects/LiquidMetal/LiquidMetal.types.js +9 -0
  475. package/dist/components/effects/LiquidMetal/index.d.ts +3 -0
  476. package/dist/components/effects/MagneticElement/MagneticElement.js +1 -0
  477. package/dist/components/effects/MeshGradient/MeshGradient.d.ts +25 -0
  478. package/dist/components/effects/MeshGradient/MeshGradient.js +47 -0
  479. package/dist/components/effects/MeshGradient/MeshGradient.types.d.ts +40 -0
  480. package/dist/components/effects/MeshGradient/MeshGradient.utils.d.ts +83 -0
  481. package/dist/components/effects/MeshGradient/MeshGradient.utils.js +112 -0
  482. package/dist/components/effects/MeshGradient/index.d.ts +4 -0
  483. package/dist/components/effects/Metaballs/Metaballs.d.ts +8 -0
  484. package/dist/components/effects/Metaballs/Metaballs.js +59 -0
  485. package/dist/components/effects/Metaballs/Metaballs.shaders.d.ts +10 -0
  486. package/dist/components/effects/Metaballs/Metaballs.shaders.js +102 -0
  487. package/dist/components/effects/Metaballs/Metaballs.types.d.ts +16 -0
  488. package/dist/components/effects/Metaballs/Metaballs.types.js +3 -0
  489. package/dist/components/effects/Metaballs/index.d.ts +2 -0
  490. package/dist/components/effects/Neumorphic/InsetCircleButton.js +1 -0
  491. package/dist/components/effects/Neumorphic/InsetPill.js +1 -0
  492. package/dist/components/effects/NoiseOverlay/NoiseOverlay.js +1 -0
  493. package/dist/components/effects/Overlay/Overlay.js +1 -0
  494. package/dist/components/effects/PaperTexture/PaperTexture.d.ts +9 -0
  495. package/dist/components/effects/PaperTexture/PaperTexture.js +61 -0
  496. package/dist/components/effects/PaperTexture/PaperTexture.shaders.d.ts +22 -0
  497. package/dist/components/effects/PaperTexture/PaperTexture.shaders.js +145 -0
  498. package/dist/components/effects/PaperTexture/PaperTexture.types.d.ts +19 -0
  499. package/dist/components/effects/PaperTexture/index.d.ts +2 -0
  500. package/dist/components/effects/Particles/Particles.js +1 -0
  501. package/dist/components/effects/Particles/Particles.scene.js +1 -0
  502. package/dist/components/effects/Preloader/Preloader.js +1 -0
  503. package/dist/components/effects/ProgressiveBlur/ProgressiveBlur.js +1 -0
  504. package/dist/components/effects/PulsingBorder/PulsingBorder.d.ts +27 -0
  505. package/dist/components/effects/PulsingBorder/PulsingBorder.js +174 -0
  506. package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.d.ts +14 -0
  507. package/dist/components/effects/PulsingBorder/PulsingBorder.shaders.js +258 -0
  508. package/dist/components/effects/PulsingBorder/PulsingBorder.types.d.ts +75 -0
  509. package/dist/components/effects/PulsingBorder/PulsingBorder.types.js +3 -0
  510. package/dist/components/effects/PulsingBorder/index.d.ts +2 -0
  511. package/dist/components/effects/ScrollReveal/ScrollReveal.js +1 -0
  512. package/dist/components/effects/Shimmer/Shimmer.d.ts +21 -0
  513. package/dist/components/effects/Shimmer/Shimmer.js +44 -0
  514. package/dist/components/effects/Shimmer/Shimmer.types.d.ts +49 -0
  515. package/dist/components/effects/Shimmer/index.d.ts +2 -0
  516. package/dist/components/effects/SmokeRing/SmokeRing.d.ts +8 -0
  517. package/dist/components/effects/SmokeRing/SmokeRing.js +62 -0
  518. package/dist/components/effects/SmokeRing/SmokeRing.shaders.d.ts +14 -0
  519. package/dist/components/effects/SmokeRing/SmokeRing.shaders.js +130 -0
  520. package/dist/components/effects/SmokeRing/SmokeRing.types.d.ts +22 -0
  521. package/dist/components/effects/SmokeRing/SmokeRing.types.js +3 -0
  522. package/dist/components/effects/SmokeRing/index.d.ts +2 -0
  523. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.d.ts +9 -0
  524. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.js +59 -0
  525. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.d.ts +14 -0
  526. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.shaders.js +129 -0
  527. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.d.ts +23 -0
  528. package/dist/components/effects/StaticGradientMesh/StaticGradientMesh.types.js +3 -0
  529. package/dist/components/effects/StaticGradientMesh/index.d.ts +2 -0
  530. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.d.ts +9 -0
  531. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.js +66 -0
  532. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.d.ts +13 -0
  533. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.shaders.js +169 -0
  534. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.d.ts +29 -0
  535. package/dist/components/effects/StaticRadialGradient/StaticRadialGradient.types.js +3 -0
  536. package/dist/components/effects/StaticRadialGradient/index.d.ts +2 -0
  537. package/dist/components/effects/StripePattern/StripePattern.js +1 -0
  538. package/dist/components/effects/TiltCard/TiltCard.glow.js +1 -0
  539. package/dist/components/effects/TiltCard/TiltCard.js +1 -0
  540. package/dist/components/effects/Water/Water.d.ts +9 -0
  541. package/dist/components/effects/Water/Water.js +65 -0
  542. package/dist/components/effects/Water/Water.shaders.d.ts +11 -0
  543. package/dist/components/effects/Water/Water.shaders.js +123 -0
  544. package/dist/components/effects/Water/Water.types.d.ts +25 -0
  545. package/dist/components/effects/Water/index.d.ts +2 -0
  546. package/dist/components/effects/index.d.ts +40 -0
  547. package/dist/components/effects/index.js +21 -0
  548. package/dist/components/effects/{AIOrb/variants/Aura → shared/ShaderCanvas}/ShaderCanvas.d.ts +4 -8
  549. package/dist/components/effects/{AIOrb/variants/Aura → shared/ShaderCanvas}/ShaderCanvas.js +109 -3
  550. package/dist/components/effects/shared/ShaderCanvas/ShaderCanvas.types.d.ts +18 -0
  551. package/dist/components/effects/shared/ShaderCanvas/index.d.ts +2 -0
  552. package/dist/components/effects/shared/bayerMatrices.glsl.d.ts +10 -0
  553. package/dist/components/effects/shared/bayerMatrices.glsl.js +44 -0
  554. package/dist/components/effects/shared/imageUV.glsl.d.ts +12 -0
  555. package/dist/components/effects/shared/imageUV.glsl.js +26 -0
  556. package/dist/components/effects/shared/index.d.ts +7 -0
  557. package/dist/components/effects/shared/resolveShaderColor.d.ts +13 -0
  558. package/dist/components/effects/shared/resolveShaderColor.js +62 -0
  559. package/dist/components/effects/shared/resolveShaderColor.test.d.ts +1 -0
  560. package/dist/components/effects/shared/shaderNoise.glsl.d.ts +34 -0
  561. package/dist/components/effects/shared/shaderNoise.glsl.js +84 -0
  562. package/dist/components/forms/Checkbox/Checkbox.animations.js +1 -0
  563. package/dist/components/forms/Checkbox/Checkbox.js +8 -8
  564. package/dist/components/forms/Checkbox/Checkbox.theme.js +5 -4
  565. package/dist/components/forms/Checkbox/CheckboxContext.js +1 -0
  566. package/dist/components/forms/Checkbox/CheckboxGroup.js +4 -1
  567. package/dist/components/forms/ColorPicker/ColorPicker.js +21 -5
  568. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +8 -0
  569. package/dist/components/forms/ColorPicker/ColorPicker2DCanvas.js +1 -0
  570. package/dist/components/forms/ColorPicker/ColorPickerBody.js +3 -2
  571. package/dist/components/forms/ColorPicker/ColorPickerContext.js +1 -0
  572. package/dist/components/forms/ColorPicker/ColorPickerEyeDropper.js +1 -0
  573. package/dist/components/forms/ColorPicker/ColorPickerFormatSelector.js +1 -0
  574. package/dist/components/forms/ColorPicker/ColorPickerGradient.js +1 -0
  575. package/dist/components/forms/ColorPicker/ColorPickerHeader.js +1 -0
  576. package/dist/components/forms/ColorPicker/ColorPickerImage.js +1 -0
  577. package/dist/components/forms/ColorPicker/ColorPickerInput.js +1 -0
  578. package/dist/components/forms/ColorPicker/ColorPickerPresets.js +1 -0
  579. package/dist/components/forms/ColorPicker/ColorPickerSavedColors.js +1 -0
  580. package/dist/components/forms/ColorPicker/ColorPickerSliders.js +1 -0
  581. package/dist/components/forms/ColorPicker/ColorPickerSwatch.js +1 -0
  582. package/dist/components/forms/ColorPicker/ColorPickerTrigger.js +17 -2
  583. package/dist/components/forms/Combobox/Combobox.js +81 -37
  584. package/dist/components/forms/Combobox/Combobox.types.d.ts +8 -0
  585. package/dist/components/forms/DatePicker/DatePicker.animations.js +1 -0
  586. package/dist/components/forms/DatePicker/DatePicker.d.ts +3 -27
  587. package/dist/components/forms/DatePicker/DatePicker.js +5 -4
  588. package/dist/components/forms/DatePicker/DatePicker.theme.js +5 -5
  589. package/dist/components/forms/DatePicker/DatePicker.types.d.ts +15 -0
  590. package/dist/components/forms/DatePicker/DatePickerBody.js +26 -21
  591. package/dist/components/forms/DatePicker/DatePickerContext.d.ts +29 -0
  592. package/dist/components/forms/DatePicker/DatePickerContext.js +6 -0
  593. package/dist/components/forms/DatePicker/DatePickerPresets.js +2 -1
  594. package/dist/components/forms/DatePicker/DatePickerTrigger.js +2 -1
  595. package/dist/components/forms/DateRangePicker/DateRangePicker.d.ts +3 -23
  596. package/dist/components/forms/DateRangePicker/DateRangePicker.js +18 -7
  597. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +2 -2
  598. package/dist/components/forms/DateRangePicker/DateRangePicker.types.d.ts +21 -0
  599. package/dist/components/forms/DateRangePicker/DateRangePickerBody.js +18 -13
  600. package/dist/components/forms/DateRangePicker/DateRangePickerContext.d.ts +24 -0
  601. package/dist/components/forms/DateRangePicker/DateRangePickerContext.js +5 -0
  602. package/dist/components/forms/DateRangePicker/DateRangePickerPresets.js +2 -1
  603. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +2 -1
  604. package/dist/components/forms/FileUpload/FileUpload.js +2 -1
  605. package/dist/components/forms/FileUpload/FileUploadProgress.js +4 -3
  606. package/dist/components/forms/Input/Input.js +7 -3
  607. package/dist/components/forms/Input/Input.theme.js +11 -5
  608. package/dist/components/forms/Input/Input.types.d.ts +6 -0
  609. package/dist/components/forms/Input/index.d.ts +1 -0
  610. package/dist/components/forms/Input/inputMasks.d.ts +24 -0
  611. package/dist/components/forms/Input/inputMasks.js +61 -5
  612. package/dist/components/forms/InputAddress/InputAddress.d.ts +5 -0
  613. package/dist/components/forms/InputAddress/InputAddress.js +95 -13
  614. package/dist/components/forms/InputAddress/InputAddress.theme.js +4 -4
  615. package/dist/components/forms/InputAddress/InputAddress.types.d.ts +8 -2
  616. package/dist/components/forms/InputAddress/index.d.ts +1 -1
  617. package/dist/components/forms/InputCounter/InputCounter.js +63 -44
  618. package/dist/components/forms/InputCounter/InputCounter.types.d.ts +6 -0
  619. package/dist/components/forms/InputCreditCard/InputCreditCard.js +9 -3
  620. package/dist/components/forms/InputCreditCard/InputCreditCard.theme.js +4 -4
  621. package/dist/components/forms/InputCreditCard/InputCreditCard.types.d.ts +5 -1
  622. package/dist/components/forms/InputCreditCard/index.d.ts +1 -0
  623. package/dist/components/forms/InputDate/InputDate.js +1 -0
  624. package/dist/components/forms/InputOTP/InputOTP.js +21 -9
  625. package/dist/components/forms/InputOTP/InputOTP.types.d.ts +7 -1
  626. package/dist/components/forms/InputTag/InputTag.js +65 -21
  627. package/dist/components/forms/InputTag/InputTag.theme.js +2 -1
  628. package/dist/components/forms/InputTag/InputTag.types.d.ts +8 -0
  629. package/dist/components/forms/Mention/Mention.js +12 -5
  630. package/dist/components/forms/Mention/Mention.theme.js +2 -1
  631. package/dist/components/forms/Mention/Mention.types.d.ts +8 -0
  632. package/dist/components/forms/Mention/Mention.utils.js +1 -0
  633. package/dist/components/forms/Radio/Radio.animations.js +1 -0
  634. package/dist/components/forms/Radio/Radio.js +5 -1
  635. package/dist/components/forms/Radio/Radio.theme.js +9 -7
  636. package/dist/components/forms/Radio/RadioContext.js +1 -0
  637. package/dist/components/forms/Radio/RadioGroup.js +4 -1
  638. package/dist/components/forms/RichTextEditor/RichTextEditor.animations.js +1 -0
  639. package/dist/components/forms/RichTextEditor/RichTextEditor.js +70 -60
  640. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +3 -2
  641. package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +14 -0
  642. package/dist/components/forms/Select/Select.animations.js +17 -25
  643. package/dist/components/forms/Select/Select.d.ts +3 -1
  644. package/dist/components/forms/Select/Select.js +55 -21
  645. package/dist/components/forms/Select/Select.theme.js +2 -2
  646. package/dist/components/forms/Select/Select.types.d.ts +28 -1
  647. package/dist/components/forms/Select/useSelectState.js +7 -0
  648. package/dist/components/forms/SelectableCard/SelectableCard.js +1 -0
  649. package/dist/components/forms/SelectableCard/SelectableCardContext.js +1 -0
  650. package/dist/components/forms/SelectableCard/SelectableCardGroup.js +1 -0
  651. package/dist/components/forms/Signature/Signature.js +13 -3
  652. package/dist/components/forms/Signature/Signature.types.d.ts +6 -0
  653. package/dist/components/forms/Slider/Slider.js +2 -1
  654. package/dist/components/forms/Switch/Switch.js +9 -2
  655. package/dist/components/forms/Switch/Switch.theme.js +5 -3
  656. package/dist/components/forms/Textarea/Textarea.js +7 -3
  657. package/dist/components/forms/Textarea/Textarea.types.d.ts +6 -0
  658. package/dist/components/forms/TimePicker/TimePicker.d.ts +2 -12
  659. package/dist/components/forms/TimePicker/TimePicker.js +8 -5
  660. package/dist/components/forms/TimePicker/TimePicker.theme.js +4 -5
  661. package/dist/components/forms/TimePicker/TimePicker.types.d.ts +15 -0
  662. package/dist/components/forms/TimePicker/TimePickerContent.js +12 -7
  663. package/dist/components/forms/TimePicker/TimePickerContext.d.ts +15 -0
  664. package/dist/components/forms/TimePicker/TimePickerContext.js +6 -0
  665. package/dist/components/forms/TimePicker/TimePickerTrigger.js +18 -4
  666. package/dist/components/forms/TimePicker/WheelColumn.js +1 -0
  667. package/dist/components/forms/TimePicker/useWheelPicker.js +1 -0
  668. package/dist/components/forms/forms.theme.d.ts +1 -0
  669. package/dist/components/forms/forms.theme.js +55 -18
  670. package/dist/components/forms/index.d.ts +1 -0
  671. package/dist/components/forms/index.js +6 -2
  672. package/dist/components/generative/GenerativeView.js +1 -0
  673. package/dist/components/generative/actions.test.d.ts +1 -0
  674. package/dist/components/generative/registry.js +24 -6
  675. package/dist/components/generative/schema.generated.js +450 -35
  676. package/dist/components/generative/streaming.test.d.ts +1 -0
  677. package/dist/components/generative/tools.test.d.ts +1 -0
  678. package/dist/components/generative/useGenerativeStream.js +1 -0
  679. package/dist/components/generative/validate.d.ts +1 -1
  680. package/dist/components/generative/validate.js +121 -29
  681. package/dist/components/generative/validate.test.d.ts +1 -0
  682. package/dist/components/layout/AppShell/AppShell.js +1 -0
  683. package/dist/components/layout/AppShell/AppShellContext.js +1 -0
  684. package/dist/components/layout/AppShell/AppShellMain.js +1 -0
  685. package/dist/components/layout/AppShell/AppShellRightPanel.js +1 -0
  686. package/dist/components/layout/AppShell/AppShellSidebar.js +1 -0
  687. package/dist/components/layout/FormLayout/FormLayout.js +1 -1
  688. package/dist/components/layout/FormLayout/FormLayoutSection.js +1 -0
  689. package/dist/components/layout/Grid/Grid.d.ts +1 -1
  690. package/dist/components/layout/Grid/Grid.js +11 -3
  691. package/dist/components/layout/Grid/Grid.types.d.ts +15 -1
  692. package/dist/components/layout/Grid/index.d.ts +1 -1
  693. package/dist/components/layout/Section/Section.js +1 -0
  694. package/dist/components/layout/Stack/Stack.d.ts +1 -1
  695. package/dist/components/layout/Stack/Stack.js +11 -3
  696. package/dist/components/layout/Stack/Stack.types.d.ts +9 -2
  697. package/dist/components/layout/index.d.ts +0 -1
  698. package/dist/components/layout/index.js +0 -2
  699. package/dist/generative.schema.json +450 -35
  700. package/dist/hooks/useClickOutside.js +1 -0
  701. package/dist/hooks/useDarkMode.js +1 -0
  702. package/dist/hooks/useFocusTrap.js +1 -0
  703. package/dist/hooks/useIsClient.js +1 -0
  704. package/dist/hooks/useMediaQuery.js +1 -0
  705. package/dist/hooks/useNetworkStatus.d.ts +0 -4
  706. package/dist/hooks/useNetworkStatus.js +2 -5
  707. package/dist/hooks/useOverlay.js +1 -0
  708. package/dist/hooks/useScaleBackground.js +1 -0
  709. package/dist/hooks/useSelectPortal.js +1 -0
  710. package/dist/hooks/useSlidingNumber.js +1 -0
  711. package/dist/hooks/useStreamingSSE.d.ts +0 -5
  712. package/dist/hooks/useStreamingSSE.js +1 -5
  713. package/dist/hooks/useTypewriter.js +1 -0
  714. package/dist/index.d.ts +1 -0
  715. package/dist/index.js +189 -180
  716. package/dist/registry.json +1945 -681
  717. package/dist/styles.css +1 -1
  718. package/dist/test/render.d.ts +11 -0
  719. package/dist/test/setup.d.ts +1 -0
  720. package/dist/theme/SurfaceContext.d.ts +98 -0
  721. package/dist/theme/SurfaceContext.js +114 -0
  722. package/dist/theme/ThemeContext.js +19 -0
  723. package/dist/theme/animations.d.ts +75 -0
  724. package/dist/theme/animations.js +132 -0
  725. package/dist/theme/index.d.ts +5 -0
  726. package/dist/tools.json +458 -35
  727. package/dist/utils/actionQueue.d.ts +0 -4
  728. package/dist/utils/actionQueue.js +1 -4
  729. package/dist/utils/cn.js +21 -1
  730. package/dist/utils/colorUtils.d.ts +31 -1
  731. package/dist/utils/colorUtils.js +49 -4
  732. package/dist/utils/dateUtils.js +21 -16
  733. package/dist/utils/index.d.ts +1 -1
  734. package/dist/utils/performanceMonitor.js +1 -0
  735. package/dist/utils/smoothScrollUtils.js +1 -0
  736. package/package.json +23 -5
  737. package/src/global.scss +87 -0
  738. package/src/styles/theme.css +263 -156
  739. package/dist/components/charts/shared/BarRenderer/index.d.ts +0 -3
  740. package/dist/components/charts/shared/ChartContainer/ChartContainer.d.ts +0 -85
  741. package/dist/components/charts/shared/ChartContainer/index.d.ts +0 -3
  742. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.d.ts +0 -7
  743. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +0 -18
  744. package/dist/components/charts/shared/LineRenderer/index.d.ts +0 -2
  745. package/dist/components/core/Popover/Popover.animations.js +0 -13
  746. package/dist/components/layout/PageLayout/PageLayout.d.ts +0 -7
  747. package/dist/components/layout/PageLayout/PageLayout.js +0 -51
  748. package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +0 -3
  749. package/dist/components/layout/PageLayout/PageLayout.theme.js +0 -39
  750. package/dist/components/layout/PageLayout/PageLayout.types.d.ts +0 -84
  751. package/dist/components/layout/PageLayout/PageLayoutContent.d.ts +0 -3
  752. package/dist/components/layout/PageLayout/PageLayoutContent.js +0 -14
  753. package/dist/components/layout/PageLayout/PageLayoutHeader.d.ts +0 -3
  754. package/dist/components/layout/PageLayout/PageLayoutHeader.js +0 -12
  755. package/dist/components/layout/PageLayout/PageLayoutSidebar.d.ts +0 -3
  756. package/dist/components/layout/PageLayout/PageLayoutSidebar.js +0 -14
  757. package/dist/components/layout/PageLayout/index.d.ts +0 -3
  758. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.d.ts +0 -0
  759. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.d.ts +0 -0
  760. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.theme.js +0 -0
  761. /package/dist/components/ai/{PromptSuggestions → PromptSuggestion}/PromptSuggestion.types.d.ts +0 -0
  762. /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(--color-surface)] transition-all " +
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
- invalid: "shadow-[inset_0_0_0_1px_var(--color-danger)] bg-[var(--color-danger-50)] " +
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:bg-[var(--color-danger-950)]/30 dark:shadow-[inset_0_0_0_1px_var(--color-danger-500)] " +
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
- "[&_[aria-haspopup]]:outline-none [&_[aria-haspopup]]:ring-0 [&_[aria-haspopup]]:shadow-none " +
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]]:ring-0 [&_[aria-haspopup]]:shadow-none " +
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
- // Format based on length
27
- if (digitsOnly.length <= 2) {
28
- return digitsOnly;
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
- // Add slash after month
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, { useMemo, useState, useCallback, useId } from 'react';
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((e) => {
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
- // Filter available countries if array is provided
53
- useMemo(() => {
54
- if (availableCountries.length === 0)
55
- return [];
56
- return availableCountries;
57
- }, [availableCountries]);
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
- return (jsxs("fieldset", { ref: ref, className: `w-full border-0 m-0 p-0 ${className}`, "data-testid": "input-address-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-address-content", children: [jsx("div", { className: "w-full relative focus-within: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", ...streetInputProps }) }), jsx("div", { className: "w-full -mt-[0.5px] relative focus-within:z-10", "data-testid": "input-address-state", children: jsx(Input, { id: stateId, type: "text", placeholder: "State", "aria-label": "state", inputGroupClassName: "rounded-none", ...stateInputProps }) }), jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 w-full -mt-px relative focus-within:z-10", children: [jsx("div", { className: `${mergedTheme.countryWrapperStyles} w-full sm:pr-0 relative focus-within:z-10`, "data-testid": "input-address-country", children: jsx(Input, { id: countryId, type: "text", value: country, onChange: handleCountryChange, placeholder: countryLabel, "aria-label": countryLabel, inputGroupClassName: "sm:rounded-bl-md rounded-t-none sm:rounded-tr-none sm:rounded-br-none", ...countryInputProps }) }), jsx("div", { className: `${mergedTheme.postalCodeWrapperStyles} w-full relative focus-within: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-md rounded-t-none rounded-tl-none rounded-bl-md sm:rounded-bl-none", ...postalCodeInputProps }) })] })] })] }));
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-md rounded-b-none',
14
+ topInputGroupStyle: 'rounded-t-[var(--form-radius)] rounded-b-none',
15
15
  middleInputGroupStyle: 'rounded-none',
16
- bottomLeftInputGroupStyle: 'rounded-bl-md rounded-br-none sm:border-r-0',
17
- bottomRightInputGroupStyle: 'rounded-br-md rounded-bl-none',
18
- bottomFullInputGroupStyle: 'rounded-b-md rounded-t-none',
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 input */
39
- countryInputProps?: Omit<InputProps, 'ref'>;
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
- useEffect(() => {
114
- const handleKeyDown = (event) => {
115
- if (isDisabled)
116
- return;
117
- // Check if the counter is focused
118
- const target = event.target;
119
- if (!target.closest('[data-counter="true"]'))
120
- return;
121
- switch (event.key) {
122
- case "ArrowUp":
123
- event.preventDefault();
124
- handleIncrement();
125
- break;
126
- case "ArrowDown":
127
- event.preventDefault();
128
- handleDecrement();
129
- break;
130
- case "PageUp":
131
- event.preventDefault();
132
- const pageUpValue = value + step * 10;
133
- if (max === undefined || pageUpValue <= max) {
134
- onChange === null || onChange === void 0 ? void 0 : onChange(pageUpValue);
135
- }
136
- else if (max !== undefined) {
137
- onChange === null || onChange === void 0 ? void 0 : onChange(max);
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
- window.addEventListener("keydown", handleKeyDown);
153
- return () => window.removeEventListener("keydown", handleKeyDown);
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
- 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": helperText ? helperId : undefined, tabIndex: isDisabled ? -1 : 0, ...props, children: [jsx(motion.div, { className: mergedTheme.buttonWrapperStyle, whileHover: !isDisabled && !shouldDisableAnimations ? { scale: 1.05 } : undefined, whileTap: !isDisabled && !shouldDisableAnimations ? { scale: 0.95 } : undefined, children: jsx(Button, { size: "sm", variant: "link", 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, whileHover: !isDisabled && !shouldDisableAnimations ? { scale: 1.05 } : undefined, whileTap: !isDisabled && !shouldDisableAnimations ? { scale: 0.95 } : undefined, children: jsx(Button, { size: "sm", variant: "link", iconOnly: true, ...buttonProps, onClick: handleIncrement, disabled: !canIncrement, "aria-label": "Increment", children: jsx(PlusIcon, { className: "size-4 text-[var(--color-text-primary)]", strokeWidth: 2 }) }) })] }), helperText && (jsx("div", { id: helperId, className: cn("text-sm mt-1", isInvalid
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: helperText }))] }));
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 fieldState = isInvalid ? 'invalid' : isDisabled ? 'disabled' : 'default';
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 relative focus-within:z-10", 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-md rounded-t-none sm:rounded-tr-none sm:rounded-br-none relative focus-within:z-10", ...expiryProps }) }), jsx("div", { className: `${mergedTheme.cvcWrapperStyles || ""} w-full`, "data-testid": "input-cvc relative focus-within:z-10", 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-md rounded-t-none rounded-bl-md sm:rounded-bl-none relative focus-within:z-10", ...cvcProps }) })] })] }), error && (jsx("p", { className: formsBaseTheme.helperText, children: error }))] }));
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-md rounded-b-none',
14
+ topInputGroupStyle: 'rounded-t-[var(--form-radius)] rounded-b-none',
15
15
  middleInputGroupStyle: 'rounded-none',
16
- bottomLeftInputGroupStyle: 'rounded-bl-md rounded-br-none sm:border-r-0',
17
- bottomRightInputGroupStyle: 'rounded-br-md rounded-bl-none',
18
- bottomFullInputGroupStyle: 'rounded-b-md rounded-t-none',
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,