@ahrowe/ui 0.35.0 → 0.37.0

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 (783) hide show
  1. package/README.md +102 -72
  2. package/dist/cjs-types/common/accordion/accordion.d.ts +4 -0
  3. package/dist/cjs-types/common/accordion/accordion.types.d.ts +21 -0
  4. package/dist/cjs-types/common/accordion/index.d.ts +2 -0
  5. package/dist/cjs-types/common/actionButtons/actionButtons.d.ts +2 -0
  6. package/dist/cjs-types/common/actionButtons/actionButtons.types.d.ts +34 -0
  7. package/dist/cjs-types/common/actionButtons/index.d.ts +2 -0
  8. package/dist/cjs-types/common/actionIcon/actionIcon.d.ts +4 -0
  9. package/dist/cjs-types/common/actionIcon/actionIcon.types.d.ts +15 -0
  10. package/dist/cjs-types/common/actionIcon/index.d.ts +2 -0
  11. package/dist/cjs-types/common/alert/alert.d.ts +4 -0
  12. package/dist/cjs-types/common/alert/alert.types.d.ts +30 -0
  13. package/dist/cjs-types/common/alert/index.d.ts +2 -0
  14. package/dist/cjs-types/common/animatedIcon/animatedIcon.d.ts +3 -0
  15. package/dist/cjs-types/common/animatedIcon/animatedIcon.types.d.ts +25 -0
  16. package/dist/cjs-types/common/animatedIcon/index.d.ts +2 -0
  17. package/dist/cjs-types/common/animatedLogo/animatedLogo.d.ts +4 -0
  18. package/dist/cjs-types/common/animatedLogo/animatedLogo.types.d.ts +35 -0
  19. package/dist/cjs-types/common/animatedLogo/index.d.ts +2 -0
  20. package/dist/cjs-types/common/animatedText/animatedText.d.ts +4 -0
  21. package/dist/cjs-types/common/animatedText/animatedText.types.d.ts +65 -0
  22. package/dist/cjs-types/common/animatedText/index.d.ts +2 -0
  23. package/dist/cjs-types/common/avatar/avatar.d.ts +4 -0
  24. package/dist/cjs-types/common/avatar/avatar.types.d.ts +26 -0
  25. package/dist/cjs-types/common/avatar/avatarGroup.d.ts +4 -0
  26. package/dist/cjs-types/common/avatar/index.d.ts +3 -0
  27. package/dist/cjs-types/common/badge/badge.d.ts +4 -0
  28. package/dist/cjs-types/common/badge/badge.types.d.ts +31 -0
  29. package/dist/cjs-types/common/badge/index.d.ts +2 -0
  30. package/dist/cjs-types/common/bodyEnd/bodyEnd.d.ts +4 -0
  31. package/dist/cjs-types/common/bodyEnd/bodyEnd.types.d.ts +4 -0
  32. package/dist/cjs-types/common/bodyEnd/index.d.ts +2 -0
  33. package/dist/cjs-types/common/breadcrumb/breadcrumb.d.ts +4 -0
  34. package/dist/cjs-types/common/breadcrumb/breadcrumb.types.d.ts +33 -0
  35. package/dist/cjs-types/common/breadcrumb/index.d.ts +2 -0
  36. package/dist/cjs-types/common/button/button.d.ts +9 -0
  37. package/dist/cjs-types/common/button/button.types.d.ts +42 -0
  38. package/dist/cjs-types/common/button/index.d.ts +2 -0
  39. package/dist/cjs-types/common/buttonGroup/buttonGroup.d.ts +4 -0
  40. package/dist/cjs-types/common/buttonGroup/buttonGroup.types.d.ts +12 -0
  41. package/dist/cjs-types/common/buttonGroup/index.d.ts +2 -0
  42. package/dist/cjs-types/common/card/Card.d.ts +4 -0
  43. package/dist/cjs-types/common/card/CardActions.d.ts +4 -0
  44. package/dist/cjs-types/common/card/CardContent.d.ts +4 -0
  45. package/dist/cjs-types/common/card/CardHeader.d.ts +4 -0
  46. package/dist/cjs-types/common/card/CardMedia.d.ts +4 -0
  47. package/dist/cjs-types/common/card/card.types.d.ts +55 -0
  48. package/dist/cjs-types/common/card/index.d.ts +6 -0
  49. package/dist/cjs-types/common/carousel/carousel.d.ts +4 -0
  50. package/dist/cjs-types/common/carousel/carousel.types.d.ts +35 -0
  51. package/dist/cjs-types/common/carousel/index.d.ts +2 -0
  52. package/dist/cjs-types/common/checkbox/checkbox.d.ts +4 -0
  53. package/dist/cjs-types/common/checkbox/checkbox.types.d.ts +27 -0
  54. package/dist/cjs-types/common/checkbox/index.d.ts +2 -0
  55. package/dist/cjs-types/common/chip/chip.d.ts +4 -0
  56. package/dist/cjs-types/common/chip/chip.types.d.ts +35 -0
  57. package/dist/cjs-types/common/chip/chipContainer.d.ts +4 -0
  58. package/dist/cjs-types/common/chip/index.d.ts +3 -0
  59. package/dist/cjs-types/common/colorPicker/colorPicker.d.ts +4 -0
  60. package/dist/cjs-types/common/colorPicker/colorPicker.types.d.ts +25 -0
  61. package/dist/cjs-types/common/colorPicker/index.d.ts +2 -0
  62. package/dist/cjs-types/common/colorPicker/toHex.d.ts +11 -0
  63. package/dist/cjs-types/common/configProvider/configProvider.d.ts +13 -0
  64. package/dist/cjs-types/common/configProvider/configProvider.types.d.ts +133 -0
  65. package/dist/cjs-types/common/configProvider/index.d.ts +6 -0
  66. package/dist/cjs-types/common/configProvider/presentation.types.d.ts +14 -0
  67. package/dist/cjs-types/common/configProvider/useComponentDefaults.d.ts +17 -0
  68. package/dist/cjs-types/common/configProvider/useLabels.d.ts +22 -0
  69. package/dist/cjs-types/common/configProvider/usePresentationDefault.d.ts +8 -0
  70. package/dist/cjs-types/common/confirmModal/confirmModal.d.ts +4 -0
  71. package/dist/cjs-types/common/confirmModal/confirmModal.types.d.ts +24 -0
  72. package/dist/cjs-types/common/confirmModal/index.d.ts +2 -0
  73. package/dist/cjs-types/common/datePicker/components/datePickerMonth/datePickerMonth.d.ts +2 -0
  74. package/dist/cjs-types/common/datePicker/components/datePickerMonth/datePickerMonth.types.d.ts +23 -0
  75. package/dist/cjs-types/common/datePicker/components/datePickerMonth/index.d.ts +1 -0
  76. package/dist/cjs-types/common/datePicker/dateFunctions.d.ts +44 -0
  77. package/dist/cjs-types/common/datePicker/datePicker.d.ts +3 -0
  78. package/dist/cjs-types/common/datePicker/datePicker.types.d.ts +60 -0
  79. package/dist/cjs-types/common/datePicker/index.d.ts +2 -0
  80. package/dist/cjs-types/common/divider/divider.d.ts +4 -0
  81. package/dist/cjs-types/common/divider/divider.types.d.ts +21 -0
  82. package/dist/cjs-types/common/divider/index.d.ts +2 -0
  83. package/dist/cjs-types/common/drawer/drawer.d.ts +4 -0
  84. package/dist/cjs-types/common/drawer/drawer.types.d.ts +15 -0
  85. package/dist/cjs-types/common/drawer/index.d.ts +2 -0
  86. package/dist/cjs-types/common/dropZone/dropZone.d.ts +4 -0
  87. package/dist/cjs-types/common/dropZone/dropZone.types.d.ts +90 -0
  88. package/dist/cjs-types/common/dropZone/index.d.ts +2 -0
  89. package/dist/cjs-types/common/dropdown/dropdown.d.ts +4 -0
  90. package/dist/cjs-types/common/dropdown/dropdown.types.d.ts +47 -0
  91. package/dist/cjs-types/common/dropdown/index.d.ts +2 -0
  92. package/dist/cjs-types/common/emptyState/emptyState.d.ts +3 -0
  93. package/dist/cjs-types/common/emptyState/emptyState.types.d.ts +20 -0
  94. package/dist/cjs-types/common/emptyState/index.d.ts +2 -0
  95. package/dist/cjs-types/common/errorBoundary/errorBoundary.d.ts +14 -0
  96. package/dist/cjs-types/common/errorBoundary/errorBoundary.types.d.ts +57 -0
  97. package/dist/cjs-types/common/errorBoundary/index.d.ts +2 -0
  98. package/dist/cjs-types/common/fab/components/fabBase/fabBase.d.ts +3 -0
  99. package/dist/cjs-types/common/fab/components/fabBase/fabBase.types.d.ts +12 -0
  100. package/dist/cjs-types/common/fab/components/fabBase/index.d.ts +1 -0
  101. package/dist/cjs-types/common/fab/fab.d.ts +3 -0
  102. package/dist/cjs-types/common/fab/fab.types.d.ts +22 -0
  103. package/dist/cjs-types/common/fab/index.d.ts +2 -0
  104. package/dist/cjs-types/common/flip/flip.d.ts +3 -0
  105. package/dist/cjs-types/common/flip/flip.types.d.ts +44 -0
  106. package/dist/cjs-types/common/flip/index.d.ts +2 -0
  107. package/dist/cjs-types/common/floorPlan/floorPlan.faces.d.ts +33 -0
  108. package/dist/cjs-types/common/floorPlan/floorPlan.fixtures.d.ts +35 -0
  109. package/dist/cjs-types/common/floorPlan/floorPlan.geometry.d.ts +111 -0
  110. package/dist/cjs-types/common/floorPlan/floorPlan.graph.d.ts +184 -0
  111. package/dist/cjs-types/common/floorPlan/floorPlan.hit.d.ts +26 -0
  112. package/dist/cjs-types/common/floorPlan/floorPlan.json.d.ts +23 -0
  113. package/dist/cjs-types/common/floorPlan/floorPlan.mesh.d.ts +36 -0
  114. package/dist/cjs-types/common/floorPlan/floorPlan.path.d.ts +59 -0
  115. package/dist/cjs-types/common/floorPlan/floorPlan.plan.d.ts +98 -0
  116. package/dist/cjs-types/common/floorPlan/floorPlan.rooms.d.ts +47 -0
  117. package/dist/cjs-types/common/floorPlan/floorPlan.snap.d.ts +101 -0
  118. package/dist/cjs-types/common/floorPlan/floorPlan.triangulate.d.ts +11 -0
  119. package/dist/cjs-types/common/floorPlan/floorPlan.types.d.ts +276 -0
  120. package/dist/cjs-types/common/floorPlan/index.d.ts +30 -0
  121. package/dist/cjs-types/common/floorPlan/legacySvg.d.ts +27 -0
  122. package/dist/cjs-types/common/hooks/index.d.ts +13 -0
  123. package/dist/cjs-types/common/hooks/useAnchorTracking.d.ts +40 -0
  124. package/dist/cjs-types/common/hooks/useCoarsePointer.d.ts +3 -0
  125. package/dist/cjs-types/common/hooks/useFocusBoundary.d.ts +20 -0
  126. package/dist/cjs-types/common/hooks/useHotkeys.d.ts +45 -0
  127. package/dist/cjs-types/common/hooks/useMediaQuery.d.ts +9 -0
  128. package/dist/cjs-types/common/hooks/useOverlay.d.ts +26 -0
  129. package/dist/cjs-types/common/hooks/useScrollEdges.d.ts +18 -0
  130. package/dist/cjs-types/common/hooks/useSheet.d.ts +19 -0
  131. package/dist/cjs-types/common/hooks/useSwipeDismiss.d.ts +37 -0
  132. package/dist/cjs-types/common/hooks/useVisualViewportSize.d.ts +13 -0
  133. package/dist/cjs-types/common/iconPicker/iconPicker.d.ts +3 -0
  134. package/dist/cjs-types/common/iconPicker/iconPicker.types.d.ts +23 -0
  135. package/dist/cjs-types/common/iconPicker/index.d.ts +2 -0
  136. package/dist/cjs-types/common/idleManager/idleManager.d.ts +3 -0
  137. package/dist/cjs-types/common/idleManager/idleManager.types.d.ts +8 -0
  138. package/dist/cjs-types/common/idleManager/index.d.ts +2 -0
  139. package/dist/cjs-types/common/infiniteBlock/useInfiniteScroll.d.ts +5 -0
  140. package/dist/cjs-types/common/input/index.d.ts +2 -0
  141. package/dist/cjs-types/common/input/input.d.ts +4 -0
  142. package/dist/cjs-types/common/input/input.types.d.ts +84 -0
  143. package/dist/cjs-types/common/inputDropdown/index.d.ts +2 -0
  144. package/dist/cjs-types/common/inputDropdown/inputDropdown.d.ts +3 -0
  145. package/dist/cjs-types/common/inputDropdown/inputDropdown.types.d.ts +36 -0
  146. package/dist/cjs-types/common/interactableDiv/index.d.ts +2 -0
  147. package/dist/cjs-types/common/interactableDiv/interactableDiv.d.ts +8 -0
  148. package/dist/cjs-types/common/kanbanBoard/KanbanBoard.d.ts +3 -0
  149. package/dist/cjs-types/common/kanbanBoard/KanbanColumn.d.ts +45 -0
  150. package/dist/cjs-types/common/kanbanBoard/KanbanItem.d.ts +3 -0
  151. package/dist/cjs-types/common/kanbanBoard/index.d.ts +3 -0
  152. package/dist/cjs-types/common/kanbanBoard/kanbanBoard.types.d.ts +129 -0
  153. package/dist/cjs-types/common/kanbanBoard/kanbanBoard.utils.d.ts +60 -0
  154. package/dist/cjs-types/common/klipyPicker/components/gifPreview/gifPreview.d.ts +3 -0
  155. package/dist/cjs-types/common/klipyPicker/components/gifPreview/gifPreview.types.d.ts +7 -0
  156. package/dist/cjs-types/common/klipyPicker/components/gifPreview/index.d.ts +1 -0
  157. package/dist/cjs-types/common/klipyPicker/components/gifView/gifView.d.ts +3 -0
  158. package/dist/cjs-types/common/klipyPicker/components/gifView/gifView.types.d.ts +4 -0
  159. package/dist/cjs-types/common/klipyPicker/components/gifView/index.d.ts +1 -0
  160. package/dist/cjs-types/common/klipyPicker/index.d.ts +2 -0
  161. package/dist/cjs-types/common/klipyPicker/klipyPicker.d.ts +3 -0
  162. package/dist/cjs-types/common/klipyPicker/klipyPicker.types.d.ts +15 -0
  163. package/dist/cjs-types/common/loading/index.d.ts +1 -0
  164. package/dist/cjs-types/common/loading/spinnerLoading/index.d.ts +2 -0
  165. package/dist/cjs-types/common/loading/spinnerLoading/spinnerLoading.d.ts +6 -0
  166. package/dist/cjs-types/common/maskedInput/index.d.ts +2 -0
  167. package/dist/cjs-types/common/maskedInput/mask.d.ts +48 -0
  168. package/dist/cjs-types/common/maskedInput/maskedInput.d.ts +13 -0
  169. package/dist/cjs-types/common/maskedInput/maskedInput.types.d.ts +38 -0
  170. package/dist/cjs-types/common/menu/index.d.ts +3 -0
  171. package/dist/cjs-types/common/menu/menu.d.ts +14 -0
  172. package/dist/cjs-types/common/menu/menu.types.d.ts +61 -0
  173. package/dist/cjs-types/common/menu/menuHotkeys.d.ts +20 -0
  174. package/dist/cjs-types/common/modal/index.d.ts +2 -0
  175. package/dist/cjs-types/common/modal/modal.d.ts +3 -0
  176. package/dist/cjs-types/common/modal/modal.types.d.ts +31 -0
  177. package/dist/cjs-types/common/multiSelect/index.d.ts +2 -0
  178. package/dist/cjs-types/common/multiSelect/multiSelect.d.ts +4 -0
  179. package/dist/cjs-types/common/multiSelect/multiSelect.types.d.ts +69 -0
  180. package/dist/cjs-types/common/numberInput/index.d.ts +3 -0
  181. package/dist/cjs-types/common/numberInput/numberInput.d.ts +5 -0
  182. package/dist/cjs-types/common/numberInput/numberInput.types.d.ts +76 -0
  183. package/dist/cjs-types/common/numberInput/useStepRepeat.d.ts +17 -0
  184. package/dist/cjs-types/common/optionPicker/index.d.ts +2 -0
  185. package/dist/cjs-types/common/optionPicker/optionPicker.d.ts +4 -0
  186. package/dist/cjs-types/common/optionPicker/optionPicker.types.d.ts +16 -0
  187. package/dist/cjs-types/common/otpInput/index.d.ts +2 -0
  188. package/dist/cjs-types/common/otpInput/otpInput.d.ts +4 -0
  189. package/dist/cjs-types/common/otpInput/otpInput.types.d.ts +60 -0
  190. package/dist/cjs-types/common/overscroll/index.d.ts +2 -0
  191. package/dist/cjs-types/common/overscroll/overscroll.d.ts +2 -0
  192. package/dist/cjs-types/common/overscroll/overscroll.types.d.ts +14 -0
  193. package/dist/cjs-types/common/pagination/index.d.ts +2 -0
  194. package/dist/cjs-types/common/pagination/pagination.d.ts +4 -0
  195. package/dist/cjs-types/common/pagination/pagination.types.d.ts +45 -0
  196. package/dist/cjs-types/common/planCanvas/index.d.ts +2 -0
  197. package/dist/cjs-types/common/planCanvas/planCanvas.d.ts +7 -0
  198. package/dist/cjs-types/common/planCanvas/planCanvas.types.d.ts +64 -0
  199. package/dist/cjs-types/common/popover/index.d.ts +2 -0
  200. package/dist/cjs-types/common/popover/popover.d.ts +3 -0
  201. package/dist/cjs-types/common/popover/popover.types.d.ts +94 -0
  202. package/dist/cjs-types/common/popover/usePopoverPosition.d.ts +45 -0
  203. package/dist/cjs-types/common/progressBar/index.d.ts +2 -0
  204. package/dist/cjs-types/common/progressBar/progressBar.d.ts +5 -0
  205. package/dist/cjs-types/common/progressBar/progressBar.types.d.ts +18 -0
  206. package/dist/cjs-types/common/radioGroup/index.d.ts +2 -0
  207. package/dist/cjs-types/common/radioGroup/radioGroup.d.ts +4 -0
  208. package/dist/cjs-types/common/radioGroup/radioGroup.types.d.ts +45 -0
  209. package/dist/cjs-types/common/rating/index.d.ts +2 -0
  210. package/dist/cjs-types/common/rating/rating.d.ts +4 -0
  211. package/dist/cjs-types/common/rating/rating.types.d.ts +19 -0
  212. package/dist/cjs-types/common/revealLens/index.d.ts +2 -0
  213. package/dist/cjs-types/common/revealLens/revealLens.d.ts +4 -0
  214. package/dist/cjs-types/common/revealLens/revealLens.types.d.ts +24 -0
  215. package/dist/cjs-types/common/ripple/index.d.ts +2 -0
  216. package/dist/cjs-types/common/ripple/ripple.d.ts +5 -0
  217. package/dist/cjs-types/common/ripple/ripple.types.d.ts +16 -0
  218. package/dist/cjs-types/common/roomDrawer/index.d.ts +2 -0
  219. package/dist/cjs-types/common/roomDrawer/roomDrawer.d.ts +3 -0
  220. package/dist/cjs-types/common/roomDrawer/roomDrawer.types.d.ts +308 -0
  221. package/dist/cjs-types/common/roomDrawer/usePlanHistory.d.ts +24 -0
  222. package/dist/cjs-types/common/roomViewer/index.d.ts +2 -0
  223. package/dist/cjs-types/common/roomViewer/roomViewer.d.ts +10 -0
  224. package/dist/cjs-types/common/roomViewer/roomViewer.types.d.ts +91 -0
  225. package/dist/cjs-types/common/scrollFade/index.d.ts +2 -0
  226. package/dist/cjs-types/common/scrollFade/scrollFade.d.ts +4 -0
  227. package/dist/cjs-types/common/scrollFade/scrollFade.types.d.ts +20 -0
  228. package/dist/cjs-types/common/scrollbarProvider/index.d.ts +2 -0
  229. package/dist/cjs-types/common/scrollbarProvider/scrollbarProvider.d.ts +7 -0
  230. package/dist/cjs-types/common/searchInput/index.d.ts +2 -0
  231. package/dist/cjs-types/common/searchInput/searchInput.d.ts +3 -0
  232. package/dist/cjs-types/common/searchInput/searchInput.types.d.ts +28 -0
  233. package/dist/cjs-types/common/sectionHeader/index.d.ts +2 -0
  234. package/dist/cjs-types/common/sectionHeader/sectionHeader.d.ts +4 -0
  235. package/dist/cjs-types/common/sectionHeader/sectionHeader.types.d.ts +27 -0
  236. package/dist/cjs-types/common/sheetBackdrop/index.d.ts +2 -0
  237. package/dist/cjs-types/common/sheetBackdrop/sheetBackdrop.d.ts +16 -0
  238. package/dist/cjs-types/common/sheetBackdrop/sheetBackdrop.types.d.ts +7 -0
  239. package/dist/cjs-types/common/skeleton/index.d.ts +2 -0
  240. package/dist/cjs-types/common/skeleton/skeleton.d.ts +4 -0
  241. package/dist/cjs-types/common/skeleton/skeleton.types.d.ts +22 -0
  242. package/dist/cjs-types/common/slider/index.d.ts +2 -0
  243. package/dist/cjs-types/common/slider/slider.d.ts +3 -0
  244. package/dist/cjs-types/common/slider/slider.types.d.ts +68 -0
  245. package/dist/cjs-types/common/splitButton/index.d.ts +2 -0
  246. package/dist/cjs-types/common/splitButton/splitButton.d.ts +3 -0
  247. package/dist/cjs-types/common/splitButton/splitButton.types.d.ts +35 -0
  248. package/dist/cjs-types/common/stepper/index.d.ts +2 -0
  249. package/dist/cjs-types/common/stepper/stepper.d.ts +3 -0
  250. package/dist/cjs-types/common/stepper/stepper.types.d.ts +77 -0
  251. package/dist/cjs-types/common/sticky/index.d.ts +1 -0
  252. package/dist/cjs-types/common/sticky/sticky.d.ts +3 -0
  253. package/dist/cjs-types/common/sticky/sticky.types.d.ts +37 -0
  254. package/dist/cjs-types/common/sticky/stickyStack.d.ts +51 -0
  255. package/dist/cjs-types/common/switch/index.d.ts +2 -0
  256. package/dist/cjs-types/common/switch/switch.d.ts +4 -0
  257. package/dist/cjs-types/common/switch/switch.types.d.ts +21 -0
  258. package/dist/cjs-types/common/tabHeader/index.d.ts +2 -0
  259. package/dist/cjs-types/common/tabHeader/tabHeader.d.ts +4 -0
  260. package/dist/cjs-types/common/tabHeader/tabHeader.types.d.ts +20 -0
  261. package/dist/cjs-types/common/textarea/index.d.ts +2 -0
  262. package/dist/cjs-types/common/textarea/textarea.d.ts +3 -0
  263. package/dist/cjs-types/common/textarea/textarea.types.d.ts +2 -0
  264. package/dist/cjs-types/common/themeProvider/defaultTheme.d.ts +7 -0
  265. package/dist/cjs-types/common/themeProvider/index.d.ts +4 -0
  266. package/dist/cjs-types/common/themeProvider/lightTheme.d.ts +13 -0
  267. package/dist/cjs-types/common/themeProvider/theme.types.d.ts +272 -0
  268. package/dist/cjs-types/common/themeProvider/themeProvider.d.ts +38 -0
  269. package/dist/cjs-types/common/themeProvider/themeVariablesContext.d.ts +11 -0
  270. package/dist/cjs-types/common/themeProvider/useTheme.d.ts +4 -0
  271. package/dist/cjs-types/common/tilt/index.d.ts +4 -0
  272. package/dist/cjs-types/common/tilt/tilt.d.ts +3 -0
  273. package/dist/cjs-types/common/tilt/tilt.types.d.ts +40 -0
  274. package/dist/cjs-types/common/tilt/tiltMath.d.ts +24 -0
  275. package/dist/cjs-types/common/tiltGroup/index.d.ts +3 -0
  276. package/dist/cjs-types/common/tiltGroup/tiltGroup.d.ts +6 -0
  277. package/dist/cjs-types/common/tiltGroup/tiltGroup.types.d.ts +16 -0
  278. package/dist/cjs-types/common/timeInput/components/clockDial/clockDial.d.ts +3 -0
  279. package/dist/cjs-types/common/timeInput/components/clockDial/clockDial.types.d.ts +24 -0
  280. package/dist/cjs-types/common/timeInput/components/clockDial/index.d.ts +1 -0
  281. package/dist/cjs-types/common/timeInput/index.d.ts +1 -0
  282. package/dist/cjs-types/common/timeInput/timeFunctions.d.ts +36 -0
  283. package/dist/cjs-types/common/timeInput/timeInput.d.ts +3 -0
  284. package/dist/cjs-types/common/timeInput/timeInput.types.d.ts +44 -0
  285. package/dist/cjs-types/common/timeline/index.d.ts +2 -0
  286. package/dist/cjs-types/common/timeline/timeline.d.ts +3 -0
  287. package/dist/cjs-types/common/timeline/timeline.types.d.ts +51 -0
  288. package/dist/cjs-types/common/timer/index.d.ts +2 -0
  289. package/dist/cjs-types/common/timer/timer.chime.d.ts +1 -0
  290. package/dist/cjs-types/common/timer/timer.d.ts +3 -0
  291. package/dist/cjs-types/common/timer/timer.types.d.ts +110 -0
  292. package/dist/cjs-types/common/toast/index.d.ts +3 -0
  293. package/dist/cjs-types/common/toast/toast.d.ts +11 -0
  294. package/dist/cjs-types/common/toast/toast.types.d.ts +50 -0
  295. package/dist/cjs-types/common/toast/toastProvider.d.ts +8 -0
  296. package/dist/cjs-types/common/toast/toastService.d.ts +7 -0
  297. package/dist/cjs-types/common/tooltip/index.d.ts +2 -0
  298. package/dist/cjs-types/common/tooltip/tooltip.d.ts +3 -0
  299. package/dist/cjs-types/common/tooltip/tooltip.types.d.ts +17 -0
  300. package/dist/cjs-types/common/tree/flattenTree.d.ts +3 -0
  301. package/dist/cjs-types/common/tree/index.d.ts +3 -0
  302. package/dist/cjs-types/common/tree/tree.d.ts +4 -0
  303. package/dist/cjs-types/common/tree/tree.types.d.ts +67 -0
  304. package/dist/cjs-types/common/types/actions.types.d.ts +7 -0
  305. package/dist/cjs-types/common/types/baseProps.types.d.ts +29 -0
  306. package/dist/cjs-types/common/types/icon.types.d.ts +17 -0
  307. package/dist/cjs-types/common/types/slots.types.d.ts +4 -0
  308. package/dist/cjs-types/common/utils/activationKey.d.ts +9 -0
  309. package/dist/cjs-types/common/utils/interactiveTarget.d.ts +7 -0
  310. package/dist/cjs-types/common/utils/listNavigation.d.ts +49 -0
  311. package/dist/cjs-types/common/utils/mergeRefs.d.ts +12 -0
  312. package/dist/cjs-types/common/utils/renderIcon.d.ts +29 -0
  313. package/dist/cjs-types/common/utils/scrollAncestors.d.ts +12 -0
  314. package/dist/cjs-types/common/utils/visualViewport.d.ts +7 -0
  315. package/dist/cjs-types/common/virtualList/index.d.ts +2 -0
  316. package/dist/cjs-types/common/virtualList/scroller.d.ts +33 -0
  317. package/dist/cjs-types/common/virtualList/useColumnResize.d.ts +59 -0
  318. package/dist/cjs-types/common/virtualList/useColumns.d.ts +52 -0
  319. package/dist/cjs-types/common/virtualList/useHeaderNavigation.d.ts +22 -0
  320. package/dist/cjs-types/common/virtualList/useRowDrag.d.ts +63 -0
  321. package/dist/cjs-types/common/virtualList/useRowNavigation.d.ts +60 -0
  322. package/dist/cjs-types/common/virtualList/useSelection.d.ts +24 -0
  323. package/dist/cjs-types/common/virtualList/useSorting.d.ts +26 -0
  324. package/dist/cjs-types/common/virtualList/useVirtualWindow.d.ts +55 -0
  325. package/dist/cjs-types/common/virtualList/virtualList.d.ts +5 -0
  326. package/dist/cjs-types/common/virtualList/virtualList.types.d.ts +357 -0
  327. package/dist/cjs-types/common/virtualList/virtualList.utils.d.ts +126 -0
  328. package/dist/cjs-types/common/virtualList/virtualListHeader.d.ts +35 -0
  329. package/dist/cjs-types/common/virtualList/virtualRow.d.ts +62 -0
  330. package/dist/cjs-types/common/wizard/index.d.ts +1 -0
  331. package/dist/cjs-types/common/wizard/wizard.d.ts +3 -0
  332. package/dist/cjs-types/common/wizard/wizard.types.d.ts +12 -0
  333. package/dist/cjs-types/hooks/useWindowSize.d.ts +6 -0
  334. package/dist/cjs-types/index.d.ts +155 -0
  335. package/dist/cjs-types/package.json +3 -0
  336. package/dist/cjs-types/services/formValidation/FormValidatorGroupWithForm.d.ts +18 -0
  337. package/dist/cjs-types/services/formValidation/index.d.ts +5 -0
  338. package/dist/cjs-types/services/formValidation/useFormValidatorGroup.d.ts +10 -0
  339. package/dist/cjs-types/services/formValidation/validatableComponent.d.ts +36 -0
  340. package/dist/cjs-types/services/klipy.d.ts +36 -0
  341. package/dist/cjs-types/services/localization.d.ts +3 -0
  342. package/dist/esm/common/carousel/carousel.mjs +1 -1
  343. package/dist/esm/common/carousel/carousel.mjs.map +1 -1
  344. package/dist/esm/common/carousel/carousel.module.mjs.map +1 -1
  345. package/dist/esm/common/confirmModal/confirmModal.mjs +1 -1
  346. package/dist/esm/common/confirmModal/confirmModal.mjs.map +1 -1
  347. package/dist/esm/common/datePicker/datePicker.mjs +1 -1
  348. package/dist/esm/common/datePicker/datePicker.mjs.map +1 -1
  349. package/dist/esm/common/drawer/drawer.module.mjs.map +1 -1
  350. package/dist/esm/common/dropdown/dropdown.mjs +1 -1
  351. package/dist/esm/common/dropdown/dropdown.mjs.map +1 -1
  352. package/dist/esm/common/dropdown/dropdown.module.mjs +1 -1
  353. package/dist/esm/common/dropdown/dropdown.module.mjs.map +1 -1
  354. package/dist/esm/common/hooks/useHotkeys.mjs +2 -0
  355. package/dist/esm/common/hooks/useHotkeys.mjs.map +1 -0
  356. package/dist/esm/common/hooks/useScrollEdges.mjs +2 -0
  357. package/dist/esm/common/hooks/useScrollEdges.mjs.map +1 -0
  358. package/dist/esm/common/hooks/useSwipeDismiss.mjs +1 -1
  359. package/dist/esm/common/hooks/useSwipeDismiss.mjs.map +1 -1
  360. package/dist/esm/common/infiniteBlock/useInfiniteScroll.mjs +2 -0
  361. package/dist/esm/common/infiniteBlock/useInfiniteScroll.mjs.map +1 -0
  362. package/dist/esm/common/input/input.mjs +1 -1
  363. package/dist/esm/common/input/input.mjs.map +1 -1
  364. package/dist/esm/common/input/input.module.mjs +1 -1
  365. package/dist/esm/common/input/input.module.mjs.map +1 -1
  366. package/dist/esm/common/inputDropdown/inputDropdown.mjs +1 -1
  367. package/dist/esm/common/inputDropdown/inputDropdown.mjs.map +1 -1
  368. package/dist/esm/common/interactableDiv/interactableDiv.mjs +1 -1
  369. package/dist/esm/common/interactableDiv/interactableDiv.mjs.map +1 -1
  370. package/dist/esm/common/klipyPicker/components/gifPreview/gifPreview.module.mjs.map +1 -1
  371. package/dist/esm/common/klipyPicker/components/gifView/gifView.module.mjs.map +1 -1
  372. package/dist/esm/common/maskedInput/mask.mjs +2 -0
  373. package/dist/esm/common/maskedInput/mask.mjs.map +1 -0
  374. package/dist/esm/common/maskedInput/maskedInput.mjs +2 -0
  375. package/dist/esm/common/maskedInput/maskedInput.mjs.map +1 -0
  376. package/dist/esm/common/menu/menu.mjs +1 -1
  377. package/dist/esm/common/menu/menu.mjs.map +1 -1
  378. package/dist/esm/common/menu/menu.types.mjs.map +1 -1
  379. package/dist/esm/common/menu/menuHotkeys.mjs +2 -0
  380. package/dist/esm/common/menu/menuHotkeys.mjs.map +1 -0
  381. package/dist/esm/common/modal/modal.mjs +1 -1
  382. package/dist/esm/common/modal/modal.mjs.map +1 -1
  383. package/dist/esm/common/modal/modal.module.mjs +1 -1
  384. package/dist/esm/common/modal/modal.module.mjs.map +1 -1
  385. package/dist/esm/common/multiSelect/multiSelect.mjs +1 -1
  386. package/dist/esm/common/multiSelect/multiSelect.mjs.map +1 -1
  387. package/dist/esm/common/multiSelect/multiSelect.module.mjs +1 -1
  388. package/dist/esm/common/multiSelect/multiSelect.module.mjs.map +1 -1
  389. package/dist/esm/common/otpInput/otpInput.module.mjs.map +1 -1
  390. package/dist/esm/common/popover/usePopoverPosition.mjs +1 -1
  391. package/dist/esm/common/popover/usePopoverPosition.mjs.map +1 -1
  392. package/dist/esm/common/radioGroup/radioGroup.types.mjs.map +1 -1
  393. package/dist/esm/common/rating/rating.module.mjs.map +1 -1
  394. package/dist/esm/common/ripple/ripple.mjs +1 -1
  395. package/dist/esm/common/ripple/ripple.mjs.map +1 -1
  396. package/dist/esm/common/scrollFade/scrollFade.mjs +2 -0
  397. package/dist/esm/common/scrollFade/scrollFade.mjs.map +1 -0
  398. package/dist/esm/common/scrollFade/scrollFade.module.mjs +2 -0
  399. package/dist/esm/common/scrollFade/scrollFade.module.mjs.map +1 -0
  400. package/dist/esm/common/scrollFade/scrollFade.types.mjs +2 -0
  401. package/dist/esm/common/scrollFade/scrollFade.types.mjs.map +1 -0
  402. package/dist/esm/common/sticky/sticky.mjs +1 -1
  403. package/dist/esm/common/sticky/sticky.mjs.map +1 -1
  404. package/dist/esm/common/sticky/stickyStack.mjs +1 -1
  405. package/dist/esm/common/sticky/stickyStack.mjs.map +1 -1
  406. package/dist/esm/common/styles/scrollFade.module.mjs +2 -0
  407. package/dist/esm/common/styles/scrollFade.module.mjs.map +1 -0
  408. package/dist/esm/common/styles/sheet.module.mjs.map +1 -1
  409. package/dist/esm/common/timeInput/timeInput.mjs +1 -1
  410. package/dist/esm/common/timeInput/timeInput.mjs.map +1 -1
  411. package/dist/esm/common/utils/interactiveTarget.mjs +2 -0
  412. package/dist/esm/common/utils/interactiveTarget.mjs.map +1 -0
  413. package/dist/esm/common/utils/listNavigation.mjs +2 -0
  414. package/dist/esm/common/utils/listNavigation.mjs.map +1 -0
  415. package/dist/esm/common/utils/scrollAncestors.mjs +1 -1
  416. package/dist/esm/common/utils/scrollAncestors.mjs.map +1 -1
  417. package/dist/esm/common/virtualList/scroller.mjs +2 -0
  418. package/dist/esm/common/virtualList/scroller.mjs.map +1 -0
  419. package/dist/esm/common/virtualList/useRowDrag.mjs +1 -1
  420. package/dist/esm/common/virtualList/useRowDrag.mjs.map +1 -1
  421. package/dist/esm/common/virtualList/useRowNavigation.mjs +1 -1
  422. package/dist/esm/common/virtualList/useRowNavigation.mjs.map +1 -1
  423. package/dist/esm/common/virtualList/useVirtualWindow.mjs +1 -1
  424. package/dist/esm/common/virtualList/useVirtualWindow.mjs.map +1 -1
  425. package/dist/esm/common/virtualList/virtualList.mjs +1 -1
  426. package/dist/esm/common/virtualList/virtualList.mjs.map +1 -1
  427. package/dist/esm/common/virtualList/virtualList.module.mjs +1 -1
  428. package/dist/esm/common/virtualList/virtualList.module.mjs.map +1 -1
  429. package/dist/esm/common/wizard/wizard.module.mjs.map +1 -1
  430. package/dist/esm/index.mjs +1 -1
  431. package/dist/esm/og.png +0 -0
  432. package/dist/index.cjs +3 -3
  433. package/dist/index.cjs.map +1 -1
  434. package/dist/mcp.js +341 -56
  435. package/dist/og.png +0 -0
  436. package/dist/style.css +1 -1
  437. package/dist/types/common/accordion/accordion.d.ts +1 -1
  438. package/dist/types/common/accordion/accordion.types.d.ts +1 -1
  439. package/dist/types/common/accordion/index.d.ts +2 -2
  440. package/dist/types/common/actionButtons/actionButtons.d.ts +1 -1
  441. package/dist/types/common/actionButtons/actionButtons.types.d.ts +3 -3
  442. package/dist/types/common/actionButtons/index.d.ts +2 -2
  443. package/dist/types/common/actionIcon/actionIcon.d.ts +1 -1
  444. package/dist/types/common/actionIcon/actionIcon.types.d.ts +2 -2
  445. package/dist/types/common/actionIcon/index.d.ts +2 -2
  446. package/dist/types/common/alert/alert.d.ts +1 -1
  447. package/dist/types/common/alert/alert.types.d.ts +2 -2
  448. package/dist/types/common/alert/index.d.ts +2 -2
  449. package/dist/types/common/animatedIcon/animatedIcon.d.ts +1 -1
  450. package/dist/types/common/animatedIcon/animatedIcon.types.d.ts +1 -1
  451. package/dist/types/common/animatedIcon/index.d.ts +2 -2
  452. package/dist/types/common/animatedLogo/animatedLogo.d.ts +1 -1
  453. package/dist/types/common/animatedLogo/animatedLogo.types.d.ts +1 -1
  454. package/dist/types/common/animatedLogo/index.d.ts +2 -2
  455. package/dist/types/common/animatedText/animatedText.d.ts +1 -1
  456. package/dist/types/common/animatedText/animatedText.types.d.ts +1 -1
  457. package/dist/types/common/animatedText/index.d.ts +2 -2
  458. package/dist/types/common/avatar/avatar.d.ts +1 -1
  459. package/dist/types/common/avatar/avatar.types.d.ts +2 -2
  460. package/dist/types/common/avatar/avatarGroup.d.ts +1 -1
  461. package/dist/types/common/avatar/index.d.ts +3 -3
  462. package/dist/types/common/badge/badge.d.ts +1 -1
  463. package/dist/types/common/badge/badge.types.d.ts +1 -1
  464. package/dist/types/common/badge/index.d.ts +2 -2
  465. package/dist/types/common/bodyEnd/bodyEnd.d.ts +1 -1
  466. package/dist/types/common/bodyEnd/index.d.ts +2 -2
  467. package/dist/types/common/breadcrumb/breadcrumb.d.ts +1 -1
  468. package/dist/types/common/breadcrumb/breadcrumb.types.d.ts +2 -2
  469. package/dist/types/common/breadcrumb/index.d.ts +2 -2
  470. package/dist/types/common/button/button.d.ts +1 -1
  471. package/dist/types/common/button/button.types.d.ts +2 -2
  472. package/dist/types/common/button/index.d.ts +2 -2
  473. package/dist/types/common/buttonGroup/buttonGroup.d.ts +1 -1
  474. package/dist/types/common/buttonGroup/buttonGroup.types.d.ts +1 -1
  475. package/dist/types/common/buttonGroup/index.d.ts +2 -2
  476. package/dist/types/common/card/Card.d.ts +1 -1
  477. package/dist/types/common/card/CardActions.d.ts +1 -1
  478. package/dist/types/common/card/CardContent.d.ts +1 -1
  479. package/dist/types/common/card/CardHeader.d.ts +1 -1
  480. package/dist/types/common/card/CardMedia.d.ts +1 -1
  481. package/dist/types/common/card/card.types.d.ts +3 -3
  482. package/dist/types/common/card/index.d.ts +6 -6
  483. package/dist/types/common/carousel/carousel.d.ts +1 -1
  484. package/dist/types/common/carousel/carousel.types.d.ts +1 -1
  485. package/dist/types/common/carousel/index.d.ts +2 -2
  486. package/dist/types/common/checkbox/checkbox.d.ts +1 -1
  487. package/dist/types/common/checkbox/checkbox.types.d.ts +2 -2
  488. package/dist/types/common/checkbox/index.d.ts +2 -2
  489. package/dist/types/common/chip/chip.d.ts +1 -1
  490. package/dist/types/common/chip/chip.types.d.ts +1 -1
  491. package/dist/types/common/chip/chipContainer.d.ts +1 -1
  492. package/dist/types/common/chip/index.d.ts +3 -3
  493. package/dist/types/common/colorPicker/colorPicker.d.ts +1 -1
  494. package/dist/types/common/colorPicker/colorPicker.types.d.ts +1 -1
  495. package/dist/types/common/colorPicker/index.d.ts +2 -2
  496. package/dist/types/common/configProvider/configProvider.d.ts +2 -2
  497. package/dist/types/common/configProvider/configProvider.types.d.ts +44 -44
  498. package/dist/types/common/configProvider/index.d.ts +6 -6
  499. package/dist/types/common/configProvider/useComponentDefaults.d.ts +1 -1
  500. package/dist/types/common/configProvider/useLabels.d.ts +1 -1
  501. package/dist/types/common/configProvider/usePresentationDefault.d.ts +1 -1
  502. package/dist/types/common/confirmModal/confirmModal.d.ts +1 -1
  503. package/dist/types/common/confirmModal/confirmModal.types.d.ts +2 -2
  504. package/dist/types/common/confirmModal/index.d.ts +2 -2
  505. package/dist/types/common/datePicker/components/datePickerMonth/datePickerMonth.d.ts +1 -1
  506. package/dist/types/common/datePicker/components/datePickerMonth/index.d.ts +1 -1
  507. package/dist/types/common/datePicker/datePicker.d.ts +1 -1
  508. package/dist/types/common/datePicker/datePicker.types.d.ts +2 -2
  509. package/dist/types/common/datePicker/index.d.ts +2 -2
  510. package/dist/types/common/divider/divider.d.ts +1 -1
  511. package/dist/types/common/divider/divider.types.d.ts +1 -1
  512. package/dist/types/common/divider/index.d.ts +2 -2
  513. package/dist/types/common/drawer/drawer.d.ts +1 -1
  514. package/dist/types/common/drawer/drawer.types.d.ts +1 -1
  515. package/dist/types/common/drawer/index.d.ts +2 -2
  516. package/dist/types/common/dropZone/dropZone.d.ts +1 -1
  517. package/dist/types/common/dropZone/dropZone.types.d.ts +1 -1
  518. package/dist/types/common/dropZone/index.d.ts +2 -2
  519. package/dist/types/common/dropdown/dropdown.d.ts +1 -1
  520. package/dist/types/common/dropdown/dropdown.types.d.ts +3 -3
  521. package/dist/types/common/dropdown/index.d.ts +2 -2
  522. package/dist/types/common/emptyState/emptyState.d.ts +1 -1
  523. package/dist/types/common/emptyState/emptyState.types.d.ts +2 -2
  524. package/dist/types/common/emptyState/index.d.ts +2 -2
  525. package/dist/types/common/errorBoundary/errorBoundary.d.ts +1 -1
  526. package/dist/types/common/errorBoundary/errorBoundary.types.d.ts +1 -1
  527. package/dist/types/common/errorBoundary/index.d.ts +2 -2
  528. package/dist/types/common/fab/components/fabBase/fabBase.d.ts +1 -1
  529. package/dist/types/common/fab/components/fabBase/fabBase.types.d.ts +1 -1
  530. package/dist/types/common/fab/components/fabBase/index.d.ts +1 -1
  531. package/dist/types/common/fab/fab.d.ts +1 -1
  532. package/dist/types/common/fab/fab.types.d.ts +2 -2
  533. package/dist/types/common/fab/index.d.ts +2 -2
  534. package/dist/types/common/flip/flip.d.ts +1 -1
  535. package/dist/types/common/flip/flip.types.d.ts +1 -1
  536. package/dist/types/common/flip/index.d.ts +2 -2
  537. package/dist/types/common/floorPlan/floorPlan.faces.d.ts +2 -2
  538. package/dist/types/common/floorPlan/floorPlan.fixtures.d.ts +1 -1
  539. package/dist/types/common/floorPlan/floorPlan.geometry.d.ts +1 -1
  540. package/dist/types/common/floorPlan/floorPlan.graph.d.ts +1 -1
  541. package/dist/types/common/floorPlan/floorPlan.hit.d.ts +1 -1
  542. package/dist/types/common/floorPlan/floorPlan.json.d.ts +1 -1
  543. package/dist/types/common/floorPlan/floorPlan.mesh.d.ts +1 -1
  544. package/dist/types/common/floorPlan/floorPlan.path.d.ts +1 -1
  545. package/dist/types/common/floorPlan/floorPlan.plan.d.ts +1 -1
  546. package/dist/types/common/floorPlan/floorPlan.rooms.d.ts +1 -1
  547. package/dist/types/common/floorPlan/floorPlan.snap.d.ts +1 -1
  548. package/dist/types/common/floorPlan/floorPlan.triangulate.d.ts +1 -1
  549. package/dist/types/common/floorPlan/index.d.ts +22 -22
  550. package/dist/types/common/floorPlan/legacySvg.d.ts +2 -2
  551. package/dist/types/common/hooks/index.d.ts +13 -0
  552. package/dist/types/common/hooks/useHotkeys.d.ts +45 -0
  553. package/dist/types/common/hooks/useScrollEdges.d.ts +18 -0
  554. package/dist/types/common/hooks/useSheet.d.ts +1 -1
  555. package/dist/types/common/hooks/useSwipeDismiss.d.ts +6 -2
  556. package/dist/types/common/iconPicker/iconPicker.d.ts +1 -1
  557. package/dist/types/common/iconPicker/iconPicker.types.d.ts +2 -2
  558. package/dist/types/common/iconPicker/index.d.ts +2 -1
  559. package/dist/types/common/idleManager/idleManager.d.ts +1 -1
  560. package/dist/types/common/idleManager/index.d.ts +2 -1
  561. package/dist/types/common/infiniteBlock/useInfiniteScroll.d.ts +5 -0
  562. package/dist/types/common/input/index.d.ts +2 -2
  563. package/dist/types/common/input/input.d.ts +1 -1
  564. package/dist/types/common/input/input.types.d.ts +2 -2
  565. package/dist/types/common/inputDropdown/index.d.ts +2 -1
  566. package/dist/types/common/inputDropdown/inputDropdown.d.ts +1 -1
  567. package/dist/types/common/inputDropdown/inputDropdown.types.d.ts +2 -2
  568. package/dist/types/common/interactableDiv/index.d.ts +1 -1
  569. package/dist/types/common/interactableDiv/interactableDiv.d.ts +1 -1
  570. package/dist/types/common/kanbanBoard/KanbanBoard.d.ts +1 -1
  571. package/dist/types/common/kanbanBoard/KanbanColumn.d.ts +1 -1
  572. package/dist/types/common/kanbanBoard/KanbanItem.d.ts +1 -1
  573. package/dist/types/common/kanbanBoard/index.d.ts +3 -3
  574. package/dist/types/common/kanbanBoard/kanbanBoard.types.d.ts +1 -1
  575. package/dist/types/common/kanbanBoard/kanbanBoard.utils.d.ts +1 -1
  576. package/dist/types/common/klipyPicker/components/gifPreview/gifPreview.d.ts +1 -1
  577. package/dist/types/common/klipyPicker/components/gifPreview/gifPreview.types.d.ts +1 -1
  578. package/dist/types/common/klipyPicker/components/gifPreview/index.d.ts +1 -1
  579. package/dist/types/common/klipyPicker/components/gifView/gifView.d.ts +1 -1
  580. package/dist/types/common/klipyPicker/components/gifView/index.d.ts +1 -1
  581. package/dist/types/common/klipyPicker/index.d.ts +2 -2
  582. package/dist/types/common/klipyPicker/klipyPicker.d.ts +1 -1
  583. package/dist/types/common/klipyPicker/klipyPicker.types.d.ts +1 -1
  584. package/dist/types/common/loading/index.d.ts +1 -2
  585. package/dist/types/common/loading/spinnerLoading/index.d.ts +1 -1
  586. package/dist/types/common/maskedInput/index.d.ts +2 -0
  587. package/dist/types/common/maskedInput/mask.d.ts +48 -0
  588. package/dist/types/common/maskedInput/maskedInput.d.ts +13 -0
  589. package/dist/types/common/maskedInput/maskedInput.types.d.ts +38 -0
  590. package/dist/types/common/menu/index.d.ts +3 -2
  591. package/dist/types/common/menu/menu.d.ts +1 -1
  592. package/dist/types/common/menu/menu.types.d.ts +13 -7
  593. package/dist/types/common/menu/menuHotkeys.d.ts +20 -0
  594. package/dist/types/common/modal/index.d.ts +2 -2
  595. package/dist/types/common/modal/modal.d.ts +1 -1
  596. package/dist/types/common/modal/modal.types.d.ts +6 -3
  597. package/dist/types/common/multiSelect/index.d.ts +2 -2
  598. package/dist/types/common/multiSelect/multiSelect.d.ts +1 -1
  599. package/dist/types/common/multiSelect/multiSelect.types.d.ts +3 -3
  600. package/dist/types/common/numberInput/index.d.ts +2 -2
  601. package/dist/types/common/numberInput/numberInput.d.ts +2 -2
  602. package/dist/types/common/numberInput/numberInput.types.d.ts +2 -2
  603. package/dist/types/common/optionPicker/index.d.ts +2 -2
  604. package/dist/types/common/optionPicker/optionPicker.d.ts +1 -1
  605. package/dist/types/common/optionPicker/optionPicker.types.d.ts +1 -1
  606. package/dist/types/common/otpInput/index.d.ts +2 -2
  607. package/dist/types/common/otpInput/otpInput.d.ts +1 -1
  608. package/dist/types/common/otpInput/otpInput.types.d.ts +2 -2
  609. package/dist/types/common/overscroll/index.d.ts +2 -2
  610. package/dist/types/common/overscroll/overscroll.d.ts +1 -1
  611. package/dist/types/common/pagination/index.d.ts +2 -2
  612. package/dist/types/common/pagination/pagination.d.ts +1 -1
  613. package/dist/types/common/pagination/pagination.types.d.ts +2 -2
  614. package/dist/types/common/planCanvas/index.d.ts +2 -2
  615. package/dist/types/common/planCanvas/planCanvas.d.ts +1 -1
  616. package/dist/types/common/planCanvas/planCanvas.types.d.ts +2 -2
  617. package/dist/types/common/popover/index.d.ts +2 -2
  618. package/dist/types/common/popover/popover.d.ts +1 -1
  619. package/dist/types/common/popover/popover.types.d.ts +2 -2
  620. package/dist/types/common/popover/usePopoverPosition.d.ts +2 -1
  621. package/dist/types/common/progressBar/index.d.ts +2 -2
  622. package/dist/types/common/progressBar/progressBar.d.ts +1 -1
  623. package/dist/types/common/progressBar/progressBar.types.d.ts +1 -1
  624. package/dist/types/common/radioGroup/index.d.ts +2 -2
  625. package/dist/types/common/radioGroup/radioGroup.d.ts +1 -1
  626. package/dist/types/common/radioGroup/radioGroup.types.d.ts +3 -3
  627. package/dist/types/common/rating/index.d.ts +2 -2
  628. package/dist/types/common/rating/rating.d.ts +1 -1
  629. package/dist/types/common/rating/rating.types.d.ts +2 -2
  630. package/dist/types/common/revealLens/index.d.ts +2 -2
  631. package/dist/types/common/revealLens/revealLens.d.ts +1 -1
  632. package/dist/types/common/revealLens/revealLens.types.d.ts +1 -1
  633. package/dist/types/common/ripple/index.d.ts +2 -2
  634. package/dist/types/common/ripple/ripple.d.ts +1 -1
  635. package/dist/types/common/ripple/ripple.types.d.ts +1 -1
  636. package/dist/types/common/roomDrawer/index.d.ts +2 -2
  637. package/dist/types/common/roomDrawer/roomDrawer.d.ts +1 -1
  638. package/dist/types/common/roomDrawer/roomDrawer.types.d.ts +3 -3
  639. package/dist/types/common/roomDrawer/usePlanHistory.d.ts +2 -2
  640. package/dist/types/common/roomViewer/index.d.ts +2 -2
  641. package/dist/types/common/roomViewer/roomViewer.d.ts +1 -1
  642. package/dist/types/common/roomViewer/roomViewer.types.d.ts +3 -3
  643. package/dist/types/common/scrollFade/index.d.ts +2 -0
  644. package/dist/types/common/scrollFade/scrollFade.d.ts +4 -0
  645. package/dist/types/common/scrollFade/scrollFade.types.d.ts +20 -0
  646. package/dist/types/common/scrollbarProvider/index.d.ts +1 -1
  647. package/dist/types/common/searchInput/index.d.ts +2 -2
  648. package/dist/types/common/searchInput/searchInput.d.ts +1 -1
  649. package/dist/types/common/searchInput/searchInput.types.d.ts +1 -1
  650. package/dist/types/common/sectionHeader/index.d.ts +2 -2
  651. package/dist/types/common/sectionHeader/sectionHeader.d.ts +1 -1
  652. package/dist/types/common/sectionHeader/sectionHeader.types.d.ts +3 -3
  653. package/dist/types/common/sheetBackdrop/index.d.ts +2 -2
  654. package/dist/types/common/sheetBackdrop/sheetBackdrop.d.ts +1 -1
  655. package/dist/types/common/skeleton/index.d.ts +2 -2
  656. package/dist/types/common/skeleton/skeleton.d.ts +1 -1
  657. package/dist/types/common/skeleton/skeleton.types.d.ts +1 -1
  658. package/dist/types/common/slider/index.d.ts +2 -2
  659. package/dist/types/common/slider/slider.d.ts +1 -1
  660. package/dist/types/common/slider/slider.types.d.ts +2 -2
  661. package/dist/types/common/splitButton/index.d.ts +2 -2
  662. package/dist/types/common/splitButton/splitButton.d.ts +1 -1
  663. package/dist/types/common/splitButton/splitButton.types.d.ts +4 -4
  664. package/dist/types/common/stepper/index.d.ts +2 -2
  665. package/dist/types/common/stepper/stepper.d.ts +1 -1
  666. package/dist/types/common/stepper/stepper.types.d.ts +2 -2
  667. package/dist/types/common/sticky/index.d.ts +1 -1
  668. package/dist/types/common/sticky/sticky.d.ts +2 -2
  669. package/dist/types/common/sticky/sticky.types.d.ts +16 -1
  670. package/dist/types/common/sticky/stickyStack.d.ts +5 -0
  671. package/dist/types/common/switch/index.d.ts +2 -2
  672. package/dist/types/common/switch/switch.d.ts +1 -1
  673. package/dist/types/common/switch/switch.types.d.ts +2 -2
  674. package/dist/types/common/tabHeader/index.d.ts +2 -2
  675. package/dist/types/common/tabHeader/tabHeader.d.ts +1 -1
  676. package/dist/types/common/tabHeader/tabHeader.types.d.ts +2 -2
  677. package/dist/types/common/textarea/index.d.ts +2 -2
  678. package/dist/types/common/textarea/textarea.d.ts +1 -1
  679. package/dist/types/common/textarea/textarea.types.d.ts +1 -1
  680. package/dist/types/common/themeProvider/defaultTheme.d.ts +1 -1
  681. package/dist/types/common/themeProvider/index.d.ts +4 -4
  682. package/dist/types/common/themeProvider/lightTheme.d.ts +1 -1
  683. package/dist/types/common/themeProvider/theme.types.d.ts +28 -0
  684. package/dist/types/common/themeProvider/themeProvider.d.ts +1 -1
  685. package/dist/types/common/tilt/index.d.ts +4 -4
  686. package/dist/types/common/tilt/tilt.d.ts +1 -1
  687. package/dist/types/common/tilt/tilt.types.d.ts +2 -2
  688. package/dist/types/common/tiltGroup/index.d.ts +3 -3
  689. package/dist/types/common/tiltGroup/tiltGroup.d.ts +1 -1
  690. package/dist/types/common/tiltGroup/tiltGroup.types.d.ts +1 -1
  691. package/dist/types/common/timeInput/components/clockDial/clockDial.d.ts +1 -1
  692. package/dist/types/common/timeInput/components/clockDial/clockDial.types.d.ts +3 -3
  693. package/dist/types/common/timeInput/components/clockDial/index.d.ts +1 -1
  694. package/dist/types/common/timeInput/index.d.ts +1 -1
  695. package/dist/types/common/timeInput/timeInput.d.ts +1 -1
  696. package/dist/types/common/timeInput/timeInput.types.d.ts +2 -2
  697. package/dist/types/common/timeline/index.d.ts +2 -2
  698. package/dist/types/common/timeline/timeline.d.ts +1 -1
  699. package/dist/types/common/timeline/timeline.types.d.ts +2 -2
  700. package/dist/types/common/timer/index.d.ts +2 -2
  701. package/dist/types/common/timer/timer.d.ts +1 -1
  702. package/dist/types/common/timer/timer.types.d.ts +2 -2
  703. package/dist/types/common/toast/index.d.ts +3 -3
  704. package/dist/types/common/toast/toast.d.ts +1 -1
  705. package/dist/types/common/toast/toast.types.d.ts +1 -1
  706. package/dist/types/common/toast/toastProvider.d.ts +1 -1
  707. package/dist/types/common/toast/toastService.d.ts +1 -1
  708. package/dist/types/common/tooltip/index.d.ts +2 -2
  709. package/dist/types/common/tooltip/tooltip.d.ts +1 -1
  710. package/dist/types/common/tree/flattenTree.d.ts +1 -1
  711. package/dist/types/common/tree/index.d.ts +3 -3
  712. package/dist/types/common/tree/tree.d.ts +1 -1
  713. package/dist/types/common/tree/tree.types.d.ts +2 -2
  714. package/dist/types/common/types/actions.types.d.ts +1 -1
  715. package/dist/types/common/types/slots.types.d.ts +1 -1
  716. package/dist/types/common/utils/interactiveTarget.d.ts +7 -0
  717. package/dist/types/common/utils/listNavigation.d.ts +49 -0
  718. package/dist/types/common/utils/renderIcon.d.ts +1 -1
  719. package/dist/types/common/utils/scrollAncestors.d.ts +10 -0
  720. package/dist/types/common/virtualList/index.d.ts +2 -2
  721. package/dist/types/common/virtualList/scroller.d.ts +33 -0
  722. package/dist/types/common/virtualList/useColumnResize.d.ts +1 -1
  723. package/dist/types/common/virtualList/useColumns.d.ts +1 -1
  724. package/dist/types/common/virtualList/useRowDrag.d.ts +7 -2
  725. package/dist/types/common/virtualList/useRowNavigation.d.ts +12 -2
  726. package/dist/types/common/virtualList/useSorting.d.ts +1 -1
  727. package/dist/types/common/virtualList/useVirtualWindow.d.ts +22 -3
  728. package/dist/types/common/virtualList/virtualList.d.ts +3 -3
  729. package/dist/types/common/virtualList/virtualList.types.d.ts +44 -4
  730. package/dist/types/common/virtualList/virtualList.utils.d.ts +1 -1
  731. package/dist/types/common/virtualList/virtualListHeader.d.ts +4 -4
  732. package/dist/types/common/virtualList/virtualRow.d.ts +1 -1
  733. package/dist/types/common/wizard/index.d.ts +1 -1
  734. package/dist/types/common/wizard/wizard.d.ts +1 -1
  735. package/dist/types/common/wizard/wizard.types.d.ts +1 -1
  736. package/dist/types/index.d.ts +154 -153
  737. package/dist/types/services/formValidation/index.d.ts +3 -3
  738. package/dist/types/services/formValidation/useFormValidatorGroup.d.ts +1 -1
  739. package/docs/ActionIcon.md +2 -0
  740. package/docs/CLAUDE.md +124 -230
  741. package/docs/Card.md +1 -1
  742. package/docs/Divider.md +2 -0
  743. package/docs/Dropdown.md +20 -0
  744. package/docs/Hooks.md +232 -0
  745. package/docs/IdleManager.md +38 -8
  746. package/docs/InputDropdown.md +11 -0
  747. package/docs/InteractableDiv.md +7 -1
  748. package/docs/KlipyPicker.md +1 -1
  749. package/docs/Loading.md +57 -14
  750. package/docs/Menu.md +27 -3
  751. package/docs/Modal.md +34 -10
  752. package/docs/MultiSelect.md +2 -2
  753. package/docs/Pagination.md +1 -1
  754. package/docs/Popover.md +4 -0
  755. package/docs/RadioGroup.md +1 -1
  756. package/docs/Rating.md +2 -0
  757. package/docs/Ripple.md +3 -0
  758. package/docs/RoomViewer.md +3 -5
  759. package/docs/ScrollFade.md +77 -0
  760. package/docs/ScrollbarProvider.md +2 -0
  761. package/docs/Slider.md +1 -1
  762. package/docs/Sticky.md +22 -1
  763. package/docs/Timer.md +1 -1
  764. package/docs/VirtualList.md +44 -4
  765. package/docs/Wizard.md +1 -1
  766. package/package.json +33 -11
  767. package/dist/esm/common/infiniteBlock/infiniteBlock.mjs +0 -2
  768. package/dist/esm/common/infiniteBlock/infiniteBlock.mjs.map +0 -1
  769. package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs +0 -2
  770. package/dist/esm/common/infiniteBlock/infiniteBlock.module.mjs.map +0 -1
  771. package/dist/esm/common/loading/iconLoading/iconLoading.mjs +0 -2
  772. package/dist/esm/common/loading/iconLoading/iconLoading.mjs.map +0 -1
  773. package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs +0 -2
  774. package/dist/esm/common/loading/iconLoading/iconLoading.module.mjs.map +0 -1
  775. package/dist/esm/common/loading/iconLoading/index.mjs +0 -2
  776. package/dist/esm/common/loading/iconLoading/index.mjs.map +0 -1
  777. package/dist/types/common/infiniteBlock/index.d.ts +0 -1
  778. package/dist/types/common/infiniteBlock/infiniteBlock.d.ts +0 -4
  779. package/dist/types/common/infiniteBlock/infiniteBlock.types.d.ts +0 -13
  780. package/dist/types/common/loading/iconLoading/iconLoading.d.ts +0 -5
  781. package/dist/types/common/loading/iconLoading/index.d.ts +0 -2
  782. package/docs/Icon.md +0 -27
  783. package/docs/InfiniteBlock.md +0 -23
package/docs/Rating.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  **When to use:** A star rating input or display, for review scores, feedback prompts, and quality indicators. Use `readOnly` to just show an existing rating (e.g. a product's average score) rather than collect one.
4
4
 
5
+ **Keywords:** stars, ranking, thumbs up
6
+
5
7
  **Import:** `import { Rating } from '@ahrowe/ui'`
6
8
  **Types:** `import type { RatingProps } from '@ahrowe/ui'`
7
9
 
package/docs/Ripple.md CHANGED
@@ -6,6 +6,9 @@
6
6
 
7
7
  **Import:** `import { Ripple } from '@ahrowe/ui'`
8
8
 
9
+ A click on a control inside the rippling element does not ripple: the ripple answers for the
10
+ element it wraps, and a field or a button inside it answers for itself.
11
+
9
12
  ```tsx
10
13
  import { Ripple } from '@ahrowe/ui';
11
14
 
@@ -1,13 +1,11 @@
1
1
  # RoomViewer
2
2
 
3
- **When to use:** to show a floor plan someone can look at and click, without letting them change it — a building directory, a booking screen, a dashboard beside a room list.
3
+ **When to use:** Shows a floor plan someone can look at and click, without letting them change it — a building directory, a booking screen, a dashboard beside a room list.
4
4
 
5
5
  **Keywords:** map, site plan, wayfinding, hotspot, clickable regions, blueprint, storey, apartment, read-only
6
6
 
7
- ```tsx
8
- import { RoomViewer } from '@ahrowe/ui';
9
- import type { RoomViewerProps, RoomViewerHandle } from '@ahrowe/ui';
10
- ```
7
+ **Import:** `import { RoomViewer } from '@ahrowe/ui'`
8
+ **Types:** `import type { RoomViewerProps, RoomViewerHandle } from '@ahrowe/ui'`
11
9
 
12
10
  It renders a **`FloorPlan`** — the same document [RoomDrawer](./RoomDrawer.md) edits and downloads, drawn on the same canvas — so the two can never drift apart. See [FloorPlan](./FloorPlan.md) for the model.
13
11
 
@@ -0,0 +1,77 @@
1
+ # ScrollFade
2
+
3
+ **When to use:** A scrollable box whose content dissolves at the edge it is scrolling past, instead of being cut off mid-line against it. Use it for a bounded list, a long block of text, a chip or tab row that scrolls sideways — anywhere the hard edge of a scroll container makes content look damaged rather than continued. For a whole page section that pins on scroll use [Sticky](Sticky.md); for thousands of rows use [VirtualList](VirtualList.md).
4
+
5
+ **Keywords:** scroll shadow, scroll indicator, overflow, edge, gradient, mask, cut off, more content, scrollable list, overscroll hint
6
+
7
+ **Import:** `import { ScrollFade, ScrollFadeAxis } from '@ahrowe/ui'`
8
+ **Types:** `import type { ScrollFadeProps } from '@ahrowe/ui'`
9
+
10
+ `ScrollFade` **is** the scroll container, not a wrapper around one. Give it a bound — a `maxHeight`, a `height`, or a flex parent that constrains it — or it grows to its content and never scrolls.
11
+
12
+ ```tsx
13
+ import { ScrollFade, ScrollFadeAxis } from '@ahrowe/ui';
14
+
15
+ // A bounded list: the bottom fades until you reach the end, the top once you have left it
16
+ <ScrollFade style={{ maxHeight: 280 }}>
17
+ {items.map((item) => (
18
+ <Row key={item.id} item={item} />
19
+ ))}
20
+ </ScrollFade>
21
+
22
+ // Sideways, for a chip or tab row
23
+ <ScrollFade axis={ScrollFadeAxis.Horizontal} style={{ maxWidth: '100%' }}>
24
+ <ChipContainer inline>
25
+ {tags.map((tag) => (
26
+ <Chip key={tag} text={tag} />
27
+ ))}
28
+ </ChipContainer>
29
+ </ScrollFade>
30
+
31
+ // A longer fade, for larger text
32
+ <ScrollFade fadeLength='48px' style={{ maxHeight: 400 }}>
33
+ <Article />
34
+ </ScrollFade>
35
+
36
+ // Both ends faded at all times, no measuring — for a strip whose own padding already
37
+ // holds its first and last item clear of the fade
38
+ <ScrollFade axis={ScrollFadeAxis.Horizontal} isAlwaysFaded style={{ paddingInline: 24 }}>
39
+ <Thumbnails />
40
+ </ScrollFade>
41
+ ```
42
+
43
+ **Enums:**
44
+
45
+ - `ScrollFadeAxis`: `Vertical` (default) | `Horizontal`
46
+
47
+ **Key props:**
48
+
49
+ | Prop | Type | Description |
50
+ |------|------|-------------|
51
+ | `children` | `ReactNode` | The scrolling content |
52
+ | `axis` | `ScrollFadeAxis` | Which way it scrolls (default `Vertical`) |
53
+ | `fadeLength` | `string` | How far the fade runs from each edge, any CSS length (default `24px`) |
54
+ | `isAlwaysFaded` | `boolean` | Fade both ends whether or not content is hidden there, which skips the measuring entirely (default `false`). Pair it with padding equal to `fadeLength`, so the first and last item start out clear of the fade and only dissolve once scrolled into it — that is how `Carousel` fades its dot strip |
55
+ | `ref` | `Ref<HTMLDivElement>` | The scrolling element itself, for `scrollTo` and friends |
56
+
57
+ Each end is measured independently, so the fade says which way there is more to go: only the bottom at the top of a list, only the top at the end of it, both in between, and neither on content that fits. Nothing fades while it does not scroll, so a `ScrollFade` around short content looks exactly like a plain `div`. Each end eases in and out over 200ms rather than switching, so reaching an edge doesn't snap. Nothing fades on an axis that cannot scroll: override the overflow to `hidden` or `clip` and the fade goes quiet, since there would be no way to reach what it was hiding.
58
+
59
+ **How it fades:** a `mask-image`, not a gradient overlay. An overlay has to be painted in the container's own background colour, which a reusable component cannot know; a mask works over a card, a sheet or a photo alike.
60
+
61
+ The mask covers the whole element, which has two consequences worth knowing. Its own `background`, `border` and `border-radius` fade along with the content, so a bordered box should put the border on a wrapper around `ScrollFade` rather than on `ScrollFade` itself:
62
+
63
+ ```tsx
64
+ <div className="framed">
65
+ <ScrollFade style={{ maxHeight: 240 }}>{rows}</ScrollFade>
66
+ </div>
67
+ ```
68
+
69
+ And the scrollbar fades with everything else. That is usually invisible with overlay scrollbars; hide the scrollbar on a strip where it shows.
70
+
71
+ Under `prefers-contrast: more` the fade switches itself off and the edge goes hard again, since fading text costs contrast at exactly the edge someone may be reading. `fadeLength='0px'` turns it off outright.
72
+
73
+ In a browser without `mask-image` the fade simply does not appear and the box scrolls normally. In one without `@property` it appears and disappears instantly instead of easing, since an unregistered custom property has no type for the browser to interpolate.
74
+
75
+ **Theming:** `--scroll-fade-length` sets the same distance as the `fadeLength` prop, and can be set theme-wide via `ThemeProvider` or on any ancestor. The prop wins where both are set. It reaches `ScrollFade` only: `Modal` and `Carousel` fade their own scroll ports from `--modal-scroll-fade` and from a length tuned to the dot strip, and neither hands its length down to a `ScrollFade` nested inside it.
76
+
77
+ **Slots:** none — `ScrollFade` renders a single element around its children, so `className`/`style` on the root is the whole surface.
@@ -2,6 +2,8 @@
2
2
 
3
3
  **When to use:** Applies custom scrollbar styling to a scrollable region — use to keep scrollbar appearance consistent with the theme.
4
4
 
5
+ **Keywords:** overflow, scroll area, thin
6
+
5
7
  **Import:** `import { ScrollbarProvider } from '@ahrowe/ui'`
6
8
 
7
9
  ```tsx
package/docs/Slider.md CHANGED
@@ -80,7 +80,7 @@ const [value, setValue] = useState(40);
80
80
  | `marks` | `SliderMark[]` | Tick marks, `{ value, label? }` |
81
81
  | `showValue` | `boolean` | Show the current value in a bubble above the thumb |
82
82
  | `formatValue` | `(value: number) => ReactNode` | Format the bubble text and `aria-valuetext` |
83
- | `size` | `string` | Thumb diameter, any CSS length (default `'18px'`) |
83
+ | `size` | `string` | Thumb diameter, any CSS length. Defaults to `1.125em` of `--default-font-size`, i.e. 18px at a 16px base |
84
84
  | `aria-label` | `string` | Accessible label |
85
85
 
86
86
  **Accessibility:** renders `role="slider"` with `aria-valuemin` / `aria-valuemax` / `aria-valuenow` (and `aria-valuetext` when `formatValue` returns a string/number). Give it an `aria-label` (or wire up your own visible label). Respects `prefers-reduced-motion` (no thumb/fill transition).
package/docs/Sticky.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **When to use:** Pin a piece of content to the top of the viewport once the page scrolls past it — section headers, toolbars, filter bars, table headers. The content sticks while its original position is above the fold and releases the moment that position scrolls back into view. A placeholder preserves the original space, so nothing below jumps when it detaches.
4
4
 
5
- **Keywords:** sticky header, pinned toolbar, scroll container, app shell, scrollable panel
5
+ **Keywords:** sticky header, pinned toolbar, scroll container, app shell, scrollable panel, stop at the end, confine, within a section, unpin, release
6
6
 
7
7
  **Import:** `import { Sticky } from '@ahrowe/ui'`
8
8
 
@@ -36,6 +36,19 @@ const headerRef = useRef<HTMLElement>(null);
36
36
  <Content />
37
37
  </div>
38
38
 
39
+ // Let it go once the section it labels ends, instead of pinning down the page.
40
+ // A toolbar and a header pointed at the same boundary leave together.
41
+ const section = useRef<HTMLDivElement>(null);
42
+ <div ref={section}>
43
+ <Sticky boundary={section} boundaryInset={120}>
44
+ <Toolbar />
45
+ </Sticky>
46
+ <Sticky boundary={section} boundaryInset={120}>
47
+ <TableHeader />
48
+ </Sticky>
49
+ <Rows />
50
+ </div>
51
+
39
52
  // React to the stuck state (e.g. add a shadow)
40
53
  <Sticky onStuckChange={(stuck) => setElevated(stuck)}>
41
54
  <Toolbar />
@@ -60,6 +73,12 @@ const headerRef = useRef<HTMLElement>(null);
60
73
 
61
74
  **`stickToScrollParent`:** by default `Sticky` always pins relative to the browser viewport, which can overlap other fixed/pinned chrome (e.g. an app header) that sits outside the element's own scroll container. Set `stickToScrollParent` to pin relative to the nearest ancestor with its own scrollbar (`overflow-y: auto`/`scroll`/`overlay`) instead — found once on mount by walking up from the root. Falls back to the viewport if no scrollable ancestor is found. Combine with `offsetTop` for extra spacing from that container's top (e.g. its own internal header).
62
75
 
76
+ **`boundary`:** without it the content stays pinned for as long as the page scrolls, which is right for an app bar and wrong for anything that labels a section: a table header outlives its table and ends up captioning whatever scrolls under it next. Point `boundary` at the element the content belongs to, and once that element's bottom edge reaches the pinned content, the content is pushed up with it and leaves the screen together with it. This is what native `position: sticky` gets from its containing block, which a `position: fixed` implementation has no equivalent of, and it works whether the pin is relative to the viewport or to a `stickToScrollParent` container.
77
+
78
+ **A group confined to one boundary leaves as one block.** Several `Sticky` elements stacked on top of each other and pointed at the same boundary are all lifted by the same amount, the largest any of them needs, so they keep their spacing and the lowest one's bottom edge lands on the boundary. Letting each clamp its own bottom edge instead would pile them all onto that edge and slide the lower ones up through the ones above.
79
+
80
+ **`boundaryInset`** decides how much of the boundary's lower end stays uncovered while the content leaves. At `0` the content rests on the very bottom edge, so the last stretch of the boundary, as tall as the pinned content itself, is hidden underneath it for the whole exit: a table header ends up floating over nothing with its final rows behind it. Set it to how much you want to stay in sight, which for a table header is a few rows, and the content lifts off that much earlier and keeps that gap all the way out.
81
+
63
82
  **Stacking:** every mounted `Sticky` coordinates automatically, no extra markup needed. When more than one is stuck at the same time, a later one (in DOM order) that horizontally overlaps an earlier stuck one pins below it — `offsetTop` plus the overlapping ones' heights — instead of both landing on the same spot. Stickies that don't overlap horizontally (e.g. two half-width ones side by side under a full-width one) land at the same `top`, next to each other, rather than pushing each other down.
64
83
 
65
84
  **Key props:**
@@ -70,6 +89,8 @@ const headerRef = useRef<HTMLElement>(null);
70
89
  | `offsetTop` | `number` | Distance in px from the top of the viewport the content sticks to (default `0`). Ignored if `offsetElement` is set |
71
90
  | `offsetElement` | `RefObject<HTMLElement \| null>` | Element to stick below (e.g. a fixed/pinned header outside this library) — its live height is used as the offset instead of a fixed `offsetTop` |
72
91
  | `stickToScrollParent` | `boolean` | Stick to the top of the nearest scrollable ancestor instead of the browser viewport (default `false`). Falls back to the viewport if no scrollable ancestor is found |
92
+ | `boundary` | `RefObject<HTMLElement \| null>` | Element the content is confined to. Once its bottom edge reaches the pinned content, the content rides it up and off screen instead of staying pinned over what follows. Several Stickies sharing one leave together |
93
+ | `boundaryInset` | `number` | How much of the boundary's lower end stays uncovered while the content leaves, in px (default `0`). At `0` the last stretch, as tall as the content, is hidden under it for the whole exit. Ignored without `boundary` |
73
94
  | `zIndex` | `number` | z-index applied while stuck (default `20`) |
74
95
  | `disabled` | `boolean` | Disable sticking — content stays in normal flow |
75
96
  | `onStuckChange` | `(isStuck: boolean) => void` | Fired whenever the stuck state flips |
package/docs/Timer.md CHANGED
@@ -94,7 +94,7 @@ function Example() {
94
94
  | `maxSeconds` | `number` | Optional cap on remaining time when adding |
95
95
  | `label` | `ReactNode` | Text under the time readout, inside the ring |
96
96
  | `formatTime` | `(remainingMs: number) => ReactNode` | Overrides the default `MM:SS` / `H:MM:SS` formatter |
97
- | `size` | `string` | Ring diameter, any CSS length (default `'160px'`) |
97
+ | `size` | `string` | Ring diameter, any CSS length. Defaults to `10em`, i.e. 160px at a 16px base |
98
98
  | `strokeWidth` | `number` | Ring stroke width in px (default `10`) |
99
99
  | `counterClockwise` | `boolean` | Depletes counter-clockwise instead of the default clockwise sweep (default `false`) |
100
100
  | `urgentThreshold` | `number` | Fraction (0–1) of the original duration at which the urgent colour/pulse kicks in (default `0.1`) |
@@ -2,7 +2,7 @@
2
2
 
3
3
  **When to use:** Efficiently render large lists or tables — thousands of rows rendered with a virtualised scroll window so only visible rows are in the DOM. Supports column definitions, row selection, multi-select, column sorting, column resizing, column visibility toggling, and infinite scroll.
4
4
 
5
- **Keywords:** data table, virtualized table, sort, sorting, order by, ascending, descending, column header click, resize, resizable, drag column edge, column width, autofit
5
+ **Keywords:** data table, virtualized table, sort, sorting, order by, ascending, descending, column header click, resize, resizable, drag column edge, column width, autofit, double scrollbar, nested scroll, window scrolling, spreadsheet, data entry grid, editable grid
6
6
 
7
7
  **Import:** `import { VirtualList } from '@ahrowe/ui'`
8
8
  **Types:** `import type { VirtualListProps, VirtualListColumn, VirtualListHandle, VirtualListSort } from '@ahrowe/ui'`
@@ -124,7 +124,8 @@ const columns: VirtualListColumn<User>[] = [
124
124
  | `items` | `T[]` | Data array (required) |
125
125
  | `renderRow` | `(item, index) => ReactNode` | Row render fn — list mode (no columns) |
126
126
  | `columns` | `VirtualListColumn<T>[]` | Column definitions — enables table/header mode |
127
- | `height` | `number \| string` | Scroll viewport height (default `'100%'`) |
127
+ | `height` | `number \| string` | Scroll viewport height (default `'100%'`). Ignored with `scrollParent` |
128
+ | `scrollParent` | `'nearest' \| 'window' \| HTMLElement \| (() => HTMLElement \| null)` | Drop the list's own scrollbar and virtualize against this scrollport instead — see **No scroll of its own** |
128
129
  | `estimatedRowHeight` | `number` | Row height assumed before anything has been measured (default `40`). Once rows have been measured, their average is used for the ones that haven't, so this only has to be roughly right |
129
130
  | `overscan` | `number` | Extra rows rendered outside the viewport (default `3`) |
130
131
  | `rowGap` | `number \| string` | Gap between rows — number = px; string = any CSS length (`'1em'`, `'var(--spacing-s)'`). Default `0` |
@@ -135,6 +136,7 @@ const columns: VirtualListColumn<User>[] = [
135
136
  | `selectedKey` | `string \| number \| null` | Controlled single-select key |
136
137
  | `onRowClick` | `(item, index) => void` | Row click handler, also fired by `Enter` on the active row |
137
138
  | `keyboardNavigation` | `boolean` | Arrow-key navigation over the rows (default `true`). See **Keyboard** |
139
+ | `tabAcrossRows` | `boolean` | Let `Tab` carry on into the next row instead of leaving the list at the end of the current one (default `false`). See **Keyboard** |
138
140
  | `multiSelect` | `boolean` | Enable checkbox multi-select column |
139
141
  | `selectedKeys` | `Set<string \| number>` | Controlled multi-select keys |
140
142
  | `onSelectionChange` | `(keys) => void` | Multi-select change callback |
@@ -241,6 +243,10 @@ Keys are ignored while the focus is inside a cell, so an input, a `Dropdown` or
241
243
 
242
244
  **Controls inside rows are not tab stops.** The list holds them at `tabindex="-1"` and puts back the ones of the row being used, so `Tab` walks that row and then leaves the list. Without that, every control in every *rendered* row is a stop, the set changes as the list scrolls, and tabbing through a long list drops out of it at an arbitrary row, because the next one isn't in the DOM yet when the browser looks for the next stop. Entering a row happens with `F2`, with `Enter` when the list has no `onRowClick`, or simply by clicking a control. A `tabindex` you set yourself is restored exactly as it was, and an element you already parked at `-1` stays parked.
243
245
 
246
+ **`tabAcrossRows` makes `Tab` walk the whole grid**, for rows that are filled in rather than read: from the last field of a row it enters the next row's first field, `Shift+Tab` walks back the same way, and `Tab` out of the last row (or back out of the first) leaves the list as it always did. The list mounts the row it is moving into, so it works across the edge of the rendered window. A row with nothing focusable in it is stepped over, and when nothing past it has anything either, the focus goes back to the list so the next `Tab` leaves. `Tab` on the list's own stop steps into the active row instead of over the whole list, since otherwise nothing inside it would ever be reachable by tabbing.
247
+
248
+ It is off by default on purpose: for a list that is read, one tab stop plus the arrow keys is what a screen-reader user expects, and a few thousand rows of tab stops is a trap with no way past it. Turn it on for a grid of inputs — invoice lines, a timesheet — where field-by-field entry is the whole interaction. It does not need `keyboardNavigation`: with that off the list takes no stop of its own and `tabAcrossRows` only carries `Tab` across the boundary between two rows.
249
+
244
250
  The row being used also stays mounted while it holds the focus, even once it scrolls out of the window, so scrolling can't drop the focus to the document body. Set `keyboardNavigation={false}` for a list whose rows bring their own key handling, as [Tree](Tree.md) does.
245
251
 
246
252
  Because `role="list"` is not a composite role, the active row is only announced in table mode. In list mode, pass `ariaRoles={{ container: 'listbox', row: 'option' }}` (or another composite pair) to have it announced there too.
@@ -280,7 +286,8 @@ listRef.current?.scrollToKey(user.id, { align: 'center' });
280
286
  | `scrollToIndex` | `(index, options?) => void` | Scroll so the row at `index` is visible. `options`: `{ align?: 'start' \| 'center' \| 'end'; behavior?: ScrollBehavior }`. A jump into rows that have never been rendered re-aims itself as their real heights are measured, so it lands on the row you asked for rather than on estimated arithmetic. Input of your own during the jump cancels it |
281
287
  | `scrollToKey` | `(key, options?) => void` | Scroll to the row whose `getItemKey` matches `key` (no-op if not found) |
282
288
  | `scrollToTop` | `(options?) => void` | Scroll back to the top |
283
- | `getScrollElement` | `() => HTMLDivElement \| null` | The underlying scroll container, for advanced use |
289
+ | `getScrollElement` | `() => HTMLElement \| null` | The element that scrolls: the list itself, or the `scrollParent` it was given. `null` for `scrollParent='window'`, where the page scrolls |
290
+ | `remeasure` | `() => void` | Re-read where the list sits in its `scrollParent`. Only needed in that mode, and only when something **above** the list changed height without the list re-rendering — an element that merely moves fires no event of its own |
284
291
  | `resetColumnWidths` | `() => void` | Drop every user-set column width, returning the table to the widths its columns declare, and clear them from `persistColumnsKey` storage |
285
292
  | `recalculateColumns` | `() => void` | Re-measure `fit` columns on the next layout. Only needed after an out-of-band content change that doesn't flow through a new `items` array or `columns` set — those re-measure automatically, as does content first appearing in a cell |
286
293
 
@@ -355,7 +362,40 @@ interface TreeDropTarget {
355
362
 
356
363
  **Touch:** a press-and-hold of `longPressDelay` lifts a floating copy of the row that follows your finger, with auto-scroll near the list's top and bottom edges. A swipe before the hold completes scrolls the list as normal instead of starting a drag. With `dragHandle`, only a press that starts on the handle arms it, so the rest of the row stays tappable.
357
364
 
358
- **Lazy loading:** `onLoadMore` fires when the user scrolls within `loadMoreThreshold` px of the bottom, **and** repeatedly whenever the rows don't fill the list's viewport. That second trigger matters because a list shorter than its own height can't be scrolled at all, so a first batch smaller than the viewport would otherwise be the last batch ever loaded. The list keeps asking for pages until the content overflows; each row count is asked at most once, so the loop ends as soon as a call appends nothing. Gate the prop on your own "has more" flag to skip even that last probe:
365
+ **No scroll of its own (`scrollParent`):** the list renders at its full height as a plain block in the page flow and virtualizes against a scrollport it does not own. For a long list at the end of a scrolling page, where an inner scrollbar inside the page's own is the thing you are trying to avoid.
366
+
367
+ ```tsx
368
+ // Whatever scrolls around it, found once on mount. The usual answer.
369
+ <VirtualList items={positions} columns={columns} scrollParent='nearest' estimatedRowHeight={48} />
370
+
371
+ // Or name it: the page, an element, or a getter for a ref that fills later.
372
+ <VirtualList items={positions} columns={columns} scrollParent='window' estimatedRowHeight={48} />
373
+ <VirtualList items={positions} columns={columns} scrollParent={() => shellRef.current} estimatedRowHeight={48} />
374
+ ```
375
+
376
+ `'nearest'` walks up to the first ancestor whose `overflow-y` is `auto`, `scroll`
377
+ or `overlay`, whether or not it currently scrolls, and falls back to the page. A
378
+ wrapper carrying `overflow: auto` as a layout fix is therefore picked ahead of
379
+ the real scrollport, and the list then renders its first window and stops; name
380
+ the element outright where that happens. That is the same ancestor
381
+ [Sticky](Sticky.md) pins to, which is what a sticky header above the list needs:
382
+ the two have to answer to the same scrollport or they come apart on the first
383
+ scroll. It is resolved once and re-read only if that element leaves the DOM,
384
+ because walking the tree reads computed style.
385
+
386
+ Everything else works as before — the same windowing, the same `scrollToIndex`, the same keyboard model. What changes:
387
+
388
+ - **`height` no longer applies.** The list is as tall as its rows.
389
+ - **Set `estimatedRowHeight` to the real height** where the rows have one. Row heights are corrected as rows are measured, and here that correction resizes the *page*, so a guess that is wrong by 10px across 2000 rows moves the page's scrollbar under the user's hand. Rows of one fixed height cost nothing: the first measurement is right and the page height never moves again.
390
+ - **The header sticks to that scrollport**, which is the top of the viewport rather than the top of the list. Give the list `--vl-header-top` to clear a fixed app bar: `<VirtualList style={{ '--vl-header-top': '64px' }} … />`.
391
+ - **A frozen column layout wider than the list overflows the page sideways** instead of scrolling inside the list. A container cannot scroll one axis and not the other, and getting the vertical scrollbar back would undo the whole mode. Only reachable with `resizableColumns`.
392
+ - **Call `remeasure()`** when something above the list changes height without the list re-rendering. The list watches the scrollport's own content box, which covers most of it; an element that merely moves fires nothing.
393
+
394
+ **The list says so when it isn't virtualizing.** A viewport as tall as its own content renders every row, which is what a percentage `height` amounts to inside a parent with no definite height: the scroll container grows to fit the rows instead of clipping them. Nothing looks broken, the page is just slow. Past a hundred rows the list writes a `console.warn` naming that, which is the one failure mode of this component that is otherwise invisible. Passing `height` alongside `scrollParent` warns too, since the list then has no viewport to size.
395
+
396
+ Only the rendered rows are in the DOM, in this mode as in the other one, so the browser's own find-in-page and print reach the window on screen and not the rest of the list. That is the price of virtualization, and it is the reason to use it only where the row count earns it.
397
+
398
+ **Lazy loading:** `onLoadMore` fires when the user scrolls within `loadMoreThreshold` px of the bottom, **and** repeatedly whenever the rows don't fill the list's viewport. That second trigger matters because a list shorter than its own height can't be scrolled at all, so a first batch smaller than the viewport would otherwise be the last batch ever loaded. The list keeps asking for pages until the content overflows. Whichever trigger fires, one row count is asked at most once, so the loop ends as soon as a call appends nothing, and a page scrolled well past the end of the list does not go on asking with every scroll event. Gate the prop on your own "has more" flag to skip even that last probe:
359
399
 
360
400
  ```tsx
361
401
  <VirtualList items={items} onLoadMore={hasMore ? loadNextPage : undefined} height={600} />
package/docs/Wizard.md CHANGED
@@ -41,4 +41,4 @@ const [step, setStep] = useState(0);
41
41
  | `renderStep` | `(stepIndex: number) => ReactNode` | Render function called per step |
42
42
  | `className` | `string` | Wrapper class |
43
43
 
44
- **Note:** Legacy JSX component. See [package/common/wizard/wizard.jsx](../common/wizard/wizard.jsx) for full implementation details.
44
+ **Slots:** `root` `container` `step` `stepContent`
package/package.json CHANGED
@@ -1,24 +1,30 @@
1
1
  {
2
2
  "name": "@ahrowe/ui",
3
- "version": "0.35.0",
3
+ "version": "0.37.0",
4
4
  "description": "A React UI component library with theming, CSS Modules, and TypeScript support",
5
5
  "keywords": [
6
+ "agent",
7
+ "ai",
8
+ "claude",
9
+ "claude-code",
6
10
  "components",
7
11
  "css-modules",
12
+ "design-system",
13
+ "mcp",
8
14
  "react",
9
15
  "theming",
10
16
  "typescript",
11
17
  "ui"
12
18
  ],
13
- "homepage": "https://github.com/AndreasWeinzierl/ahrowe-ui#readme",
19
+ "homepage": "https://ahrowe.com/packages/ui/demo/",
14
20
  "bugs": {
15
21
  "url": "https://github.com/AndreasWeinzierl/ahrowe-ui/issues"
16
22
  },
17
23
  "license": "MIT",
18
- "author": "AndreasWeinzierl",
24
+ "author": "ahrowe <dev@ahrowe.com>",
19
25
  "repository": {
20
26
  "type": "git",
21
- "url": "https://github.com/AndreasWeinzierl/ahrowe-ui"
27
+ "url": "git+https://github.com/AndreasWeinzierl/ahrowe-ui.git"
22
28
  },
23
29
  "style": "./dist/style.css",
24
30
  "bin": {
@@ -35,11 +41,17 @@
35
41
  "types": "./dist/types/index.d.ts",
36
42
  "exports": {
37
43
  ".": {
38
- "import": "./dist/esm/index.mjs",
39
- "require": "./dist/index.cjs",
40
- "types": "./dist/types/index.d.ts"
44
+ "import": {
45
+ "types": "./dist/types/index.d.ts",
46
+ "default": "./dist/esm/index.mjs"
47
+ },
48
+ "require": {
49
+ "types": "./dist/cjs-types/index.d.ts",
50
+ "default": "./dist/index.cjs"
51
+ }
41
52
  },
42
- "./style.css": "./dist/style.css"
53
+ "./style.css": "./dist/style.css",
54
+ "./package.json": "./package.json"
43
55
  },
44
56
  "publishConfig": {
45
57
  "access": "public"
@@ -55,15 +67,20 @@
55
67
  "run-stylelint": "stylelint --cache --fix \"package/**/*.pcss\" \"src/**/*.css\"",
56
68
  "run-oxfmt": "oxfmt --write .",
57
69
  "run-tsc": "tsc --noEmit",
70
+ "check-oxlint": "oxlint .",
71
+ "check-stylelint": "stylelint \"package/**/*.pcss\" \"src/**/*.css\"",
72
+ "check-oxfmt": "oxfmt --check .",
58
73
  "format": "oxfmt --write .",
59
74
  "lint": "run-p run-tsc run-oxlint run-stylelint run-oxfmt",
75
+ "check": "run-p run-tsc check-oxlint check-stylelint check-oxfmt",
60
76
  "gen-barrel": "tsx scripts/gen-barrel.ts",
61
77
  "gen-theme-map": "tsx scripts/gen-theme-map.ts",
62
- "gen-readme-table": "tsx scripts/gen-readme-table.ts",
78
+ "gen-component-table": "tsx scripts/gen-component-table.ts",
63
79
  "gc": "tsx scripts/generate-component.ts",
64
80
  "changeset": "changeset",
65
81
  "release": "bash src/scripts/release.sh",
66
82
  "verify-package": "bash src/scripts/verify-package.sh",
83
+ "check-package": "bash src/scripts/check-package.sh",
67
84
  "test": "vitest run",
68
85
  "test:browser": "vitest run --config vitest.browser.config.ts",
69
86
  "test:watch": "vitest",
@@ -75,12 +92,11 @@
75
92
  "@dnd-kit/core": "^6.3.1",
76
93
  "@dnd-kit/sortable": "^10.0.0",
77
94
  "@dnd-kit/utilities": "^3.2.2",
78
- "@mona-health/react-input-mask": "^3.0.3",
79
95
  "classnames": "^2.5.1",
80
- "downshift": "^9.4.0",
81
96
  "react-number-format": "^5.4.5"
82
97
  },
83
98
  "devDependencies": {
99
+ "@arethetypeswrong/cli": "^0.18.5",
84
100
  "@changesets/cli": "^3.0.3",
85
101
  "@fortawesome/fontawesome-svg-core": "^7.3.1",
86
102
  "@fortawesome/free-solid-svg-icons": "^7.3.1",
@@ -109,10 +125,13 @@
109
125
  "playwright": "^1.63.0",
110
126
  "postcss": "^8.5.28",
111
127
  "postcss-nested": "^8.0.1",
128
+ "publint": "^0.3.24",
112
129
  "react": "^19.3.0",
113
130
  "react-dom": "^19.3.0",
114
131
  "react-element-to-jsx-string": "^17.0.1",
132
+ "react-markdown": "^10.1.0",
115
133
  "react-syntax-highlighter": "^16.1.1",
134
+ "remark-gfm": "^4.0.1",
116
135
  "stylelint": "^17.15.0",
117
136
  "stylelint-config-standard": "^40.0.0",
118
137
  "three": "^0.186.0",
@@ -132,5 +151,8 @@
132
151
  },
133
152
  "lint-staged": {
134
153
  "*.{ts,tsx}": "vitest related --run"
154
+ },
155
+ "engines": {
156
+ "node": ">=18"
135
157
  }
136
158
  }
@@ -1,2 +0,0 @@
1
- "use client";import e from"../loading/spinnerLoading/index.mjs";import t from"./infiniteBlock.module.mjs";import n,{useCallback as r,useEffect as i,useRef as a,useState as o}from"react";import s from"classnames";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";function d(e){return e==null||typeof e==`boolean`?``:typeof e==`string`||typeof e==`number`?String(e):Array.isArray(e)?e.map(d).join(``):n.isValidElement(e)?d(e.props.children):``}function f(e,t,n){return e===-1?t>0?0:n-1:(e+t+n)%n}function p(e,t,n){let[r,s]=o(!1),c=a(!1),l=a(null),u=a(t);return i(()=>{u.current=t}),i(()=>{let t=e.current,r=l.current;if(n||!t||!r)return;let i=!1,a=()=>{c.current||(c.current=!0,s(!0),u.current().catch(()=>null).finally(()=>{i||(c.current=!1,s(!1),o.unobserve(r),o.observe(r))}))},o=new IntersectionObserver(([e])=>{e.isIntersecting&&a()},{root:t});return o.observe(r),()=>{i=!0,o.disconnect()}},[e,n]),{isLoading:r,sentinelRef:l}}function m(e,t){let i=a(null),o=a(-1),s=a(null);return{containerRef:i,onKeyDown:r(r=>{let a=i.current;if(!a)return;let c=n.Children.toArray(e);if(c.length===0)return;let l=o.current;if(r.key===`ArrowDown`)r.preventDefault(),l=f(l,1,c.length);else if(r.key===`ArrowUp`)r.preventDefault(),l=f(l,-1,c.length);else if(r.key.length===1){let e=r.key.toLowerCase(),t=s.current===r.key?l+1:0,n=t=>d(t).toLowerCase().startsWith(e),i=c.slice(t).findIndex(n),a=i===-1?c.slice(0,t).findIndex(n):t+i;if(s.current=r.key,a===-1)return;l=a}else return;s.current=r.key,o.current=l;let u=a.children[l];if(u){let e=u.offsetTop,t=e+u.offsetHeight;e<a.scrollTop?a.scrollTop=e:t>a.scrollTop+a.clientHeight&&(a.scrollTop=t-a.clientHeight)}t(l)},[e,t])}}function h({children:n,onScroll:r,className:i=``,style:a,isDataLoading:o=!1,setHighlightedIndex:d=()=>null}){let{containerRef:f,onKeyDown:h}=m(n,d),{isLoading:g,sentinelRef:_}=p(f,r,o);return l(`div`,{className:s(t.infiniteBlock,i),style:a,onKeyDown:h,tabIndex:0,ref:f,children:o?l(`div`,{className:t.spinnerWrapper,children:l(e,{className:t.spinner})}):u(c,{children:[n,l(`div`,{ref:_,className:t.sentinel,"aria-hidden":`true`}),g&&l(`div`,{className:t.spinnerWrapper,children:l(e,{className:t.spinner})})]})})}export{h as default};
2
- //# sourceMappingURL=infiniteBlock.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"infiniteBlock.mjs","names":[],"sources":["../../../../package/common/infiniteBlock/infiniteBlock.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport cx from 'classnames';\n\nimport styles from './infiniteBlock.module.pcss';\nimport SpinnerLoading from '../loading/spinnerLoading';\nimport type { InfiniteBlockProps } from './infiniteBlock.types';\n\n// Flattens a React node down to the text it renders, so keyboard type-ahead can match\n// against whatever a child actually displays — a plain string, a number, or something\n// wrapped in nested elements/fragments/arrays (e.g. an icon + label pair).\nfunction getNodeText(node: React.ReactNode): string {\n if (node === null || node === undefined || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).join('');\n if (React.isValidElement<{ children?: React.ReactNode }>(node)) {\n return getNodeText(node.props.children);\n }\n return '';\n}\n\n// Cycles the index by `change`, wrapping directly from last to first (and first to last) —\n// no \"nothing highlighted\" stop in between, in either direction. `-1` means nothing is\n// highlighted yet: ArrowDown from there starts at the first item, ArrowUp at the last.\nfunction clampIndex(index: number, change: number, length: number): number {\n if (index === -1) return change > 0 ? 0 : length - 1;\n return (index + change + length) % length;\n}\n\n// Loads more items once a sentinel element at the end of the list scrolls into view.\n// IntersectionObserver only fires on a change of intersection state, so if a page of\n// freshly-loaded items still doesn't fill the container, the sentinel stays visible and\n// we have to re-arm the observer ourselves to pick up the next page.\nfunction useInfiniteScroll(\n containerRef: React.RefObject<HTMLDivElement | null>,\n onScroll: () => Promise<void>,\n disabled: boolean,\n) {\n const [isLoading, setIsLoading] = useState(false);\n const isLoadingRef = useRef(false);\n const sentinelRef = useRef<HTMLDivElement>(null);\n\n // Kept in a ref so a caller passing a fresh onScroll function each render doesn't\n // tear down and recreate the observer every time.\n const onScrollRef = useRef(onScroll);\n useEffect(() => {\n onScrollRef.current = onScroll;\n });\n\n useEffect(() => {\n const root = containerRef.current;\n const sentinel = sentinelRef.current;\n if (disabled || !root || !sentinel) return undefined;\n\n let cancelled = false;\n\n const loadMore = () => {\n if (isLoadingRef.current) return;\n isLoadingRef.current = true;\n setIsLoading(true);\n\n onScrollRef\n .current()\n .catch(() => null)\n .finally(() => {\n if (cancelled) return;\n isLoadingRef.current = false;\n setIsLoading(false);\n observer.unobserve(sentinel);\n observer.observe(sentinel);\n });\n };\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) loadMore();\n },\n { root },\n );\n\n observer.observe(sentinel);\n\n return () => {\n cancelled = true;\n observer.disconnect();\n };\n }, [containerRef, disabled]);\n\n return { isLoading, sentinelRef };\n}\n\n// Arrow-key navigation plus type-ahead: pressing a character key jumps to the next child\n// whose text starts with it, cycling through repeats and wrapping at the end of the list.\nfunction useTypeaheadNav(children: React.ReactNode, setHighlightedIndex: (index: number) => void) {\n const containerRef = useRef<HTMLDivElement>(null);\n const indexRef = useRef(-1);\n const lastKeyRef = useRef<string | null>(null);\n\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const container = containerRef.current;\n if (!container) return;\n\n const childArray = React.Children.toArray(children);\n if (childArray.length === 0) return;\n\n let index = indexRef.current;\n\n if (event.key === 'ArrowDown') {\n // Without this, the browser's own native \"scroll a focused scrollable element on\n // arrow keys\" behavior fires alongside our scrollIntoView math below, stacking an\n // extra native scroll on top of ours on every press until the highlighted item is\n // pushed out of view entirely.\n event.preventDefault();\n index = clampIndex(index, 1, childArray.length);\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n index = clampIndex(index, -1, childArray.length);\n } else if (event.key.length === 1) {\n const key = event.key.toLowerCase();\n const repeatingKey = lastKeyRef.current === event.key;\n const searchStart = repeatingKey ? index + 1 : 0;\n const startsWithKey = (child: React.ReactNode) => getNodeText(child).toLowerCase().startsWith(key);\n\n const afterCurrent = childArray.slice(searchStart).findIndex(startsWithKey);\n const match =\n afterCurrent !== -1 ? searchStart + afterCurrent : childArray.slice(0, searchStart).findIndex(startsWithKey);\n\n lastKeyRef.current = event.key;\n if (match === -1) return;\n index = match;\n } else {\n return;\n }\n\n lastKeyRef.current = event.key;\n indexRef.current = index;\n\n const child = container.children[index] as HTMLElement | undefined;\n if (child) {\n const childTop = child.offsetTop;\n const childBottom = childTop + child.offsetHeight;\n if (childTop < container.scrollTop) {\n container.scrollTop = childTop;\n } else if (childBottom > container.scrollTop + container.clientHeight) {\n container.scrollTop = childBottom - container.clientHeight;\n }\n }\n setHighlightedIndex(index);\n },\n [children, setHighlightedIndex],\n );\n\n return { containerRef, onKeyDown };\n}\n\nfunction InfiniteBlock({\n children,\n onScroll,\n className = '',\n style,\n isDataLoading = false,\n setHighlightedIndex = () => null,\n}: InfiniteBlockProps) {\n const { containerRef, onKeyDown } = useTypeaheadNav(children, setHighlightedIndex);\n const { isLoading: showScrollSpinner, sentinelRef } = useInfiniteScroll(containerRef, onScroll, isDataLoading);\n\n return (\n <div\n className={cx(styles.infiniteBlock, className)}\n style={style}\n onKeyDown={onKeyDown}\n tabIndex={0}\n ref={containerRef}\n >\n {isDataLoading ? (\n <div className={styles.spinnerWrapper}>\n <SpinnerLoading className={styles.spinner} />\n </div>\n ) : (\n <>\n {children}\n <div ref={sentinelRef} className={styles.sentinel} aria-hidden='true' />\n {showScrollSpinner && (\n <div className={styles.spinnerWrapper}>\n <SpinnerLoading className={styles.spinner} />\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n\nexport default InfiniteBlock;\n"],"mappings":"oRAUA,SAAS,EAAY,EAA+B,CAOlD,OANI,GAAS,MAA8B,OAAO,GAAS,UAAkB,GACzE,OAAO,GAAS,UAAY,OAAO,GAAS,SAAiB,OAAO,CAAI,EACxE,MAAM,QAAQ,CAAI,EAAU,EAAK,IAAI,CAAW,CAAC,CAAC,KAAK,EAAE,EACzD,EAAM,eAA+C,CAAI,EACpD,EAAY,EAAK,MAAM,QAAQ,EAEjC,EACT,CAKA,SAAS,EAAW,EAAe,EAAgB,EAAwB,CAEzE,OADI,IAAU,GAAW,EAAS,EAAI,EAAI,EAAS,GAC3C,EAAQ,EAAS,GAAU,CACrC,CAMA,SAAS,EACP,EACA,EACA,EACA,CACA,GAAM,CAAC,EAAW,GAAgB,EAAS,EAAK,EAC1C,EAAe,EAAO,EAAK,EAC3B,EAAc,EAAuB,IAAI,EAIzC,EAAc,EAAO,CAAQ,EA4CnC,OA3CA,MAAgB,CACd,EAAY,QAAU,CACxB,CAAC,EAED,MAAgB,CACd,IAAM,EAAO,EAAa,QACpB,EAAW,EAAY,QAC7B,GAAI,GAAY,CAAC,GAAQ,CAAC,EAAU,OAEpC,IAAI,EAAY,GAEV,MAAiB,CACjB,EAAa,UACjB,EAAa,QAAU,GACvB,EAAa,EAAI,EAEjB,EACG,QAAQ,CAAC,CACT,UAAY,IAAI,CAAC,CACjB,YAAc,CACT,IACJ,EAAa,QAAU,GACvB,EAAa,EAAK,EAClB,EAAS,UAAU,CAAQ,EAC3B,EAAS,QAAQ,CAAQ,EAC3B,CAAC,EACL,EAEM,EAAW,IAAI,sBAClB,CAAC,KAAW,CACP,EAAM,gBAAgB,EAAS,CACrC,EACA,CAAE,MAAK,CACT,EAIA,OAFA,EAAS,QAAQ,CAAQ,MAEZ,CACX,EAAY,GACZ,EAAS,WAAW,CACtB,CACF,EAAG,CAAC,EAAc,CAAQ,CAAC,EAEpB,CAAE,YAAW,aAAY,CAClC,CAIA,SAAS,EAAgB,EAA2B,EAA8C,CAChG,IAAM,EAAe,EAAuB,IAAI,EAC1C,EAAW,EAAO,EAAE,EACpB,EAAa,EAAsB,IAAI,EAyD7C,MAAO,CAAE,eAAc,UAvDL,EACf,GAA+C,CAC9C,IAAM,EAAY,EAAa,QAC/B,GAAI,CAAC,EAAW,OAEhB,IAAM,EAAa,EAAM,SAAS,QAAQ,CAAQ,EAClD,GAAI,EAAW,SAAW,EAAG,OAE7B,IAAI,EAAQ,EAAS,QAErB,GAAI,EAAM,MAAQ,YAKhB,EAAM,eAAe,EACrB,EAAQ,EAAW,EAAO,EAAG,EAAW,MAAM,OACzC,GAAI,EAAM,MAAQ,UACvB,EAAM,eAAe,EACrB,EAAQ,EAAW,EAAO,GAAI,EAAW,MAAM,OAC1C,GAAI,EAAM,IAAI,SAAW,EAAG,CACjC,IAAM,EAAM,EAAM,IAAI,YAAY,EAE5B,EADe,EAAW,UAAY,EAAM,IACf,EAAQ,EAAI,EACzC,EAAiB,GAA2B,EAAY,CAAK,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,CAAG,EAE3F,EAAe,EAAW,MAAM,CAAW,CAAC,CAAC,UAAU,CAAa,EACpE,EACJ,IAAiB,GAAkC,EAAW,MAAM,EAAG,CAAW,CAAC,CAAC,UAAU,CAAa,EAArF,EAAc,EAGtC,GADA,EAAW,QAAU,EAAM,IACvB,IAAU,GAAI,OAClB,EAAQ,CACV,MACE,OAGF,EAAW,QAAU,EAAM,IAC3B,EAAS,QAAU,EAEnB,IAAM,EAAQ,EAAU,SAAS,GACjC,GAAI,EAAO,CACT,IAAM,EAAW,EAAM,UACjB,EAAc,EAAW,EAAM,aACjC,EAAW,EAAU,UACvB,EAAU,UAAY,EACb,EAAc,EAAU,UAAY,EAAU,eACvD,EAAU,UAAY,EAAc,EAAU,aAElD,CACA,EAAoB,CAAK,CAC3B,EACA,CAAC,EAAU,CAAmB,CAGT,CAAU,CACnC,CAEA,SAAS,EAAc,CACrB,WACA,WACA,YAAY,GACZ,QACA,gBAAgB,GAChB,0BAA4B,MACP,CACrB,GAAM,CAAE,eAAc,aAAc,EAAgB,EAAU,CAAmB,EAC3E,CAAE,UAAW,EAAmB,eAAgB,EAAkB,EAAc,EAAU,CAAa,EAE7G,OACE,EAAC,MAAD,CACE,UAAW,EAAG,EAAO,cAAe,CAAS,EACtC,QACI,YACX,SAAU,EACV,IAAK,EAEJ,SAAA,EACC,EAAC,MAAD,CAAK,UAAW,EAAO,eACrB,SAAA,EAAC,EAAD,CAAgB,UAAW,EAAO,OAAU,CAAA,CACzC,CAAA,EAEL,EAAA,EAAA,CAAA,SAAA,CACG,EACD,EAAC,MAAD,CAAK,IAAK,EAAa,UAAW,EAAO,SAAU,cAAY,MAAQ,CAAA,EACtE,GACC,EAAC,MAAD,CAAK,UAAW,EAAO,eACrB,SAAA,EAAC,EAAD,CAAgB,UAAW,EAAO,OAAU,CAAA,CACzC,CAAA,CAEP,CAAA,CAAA,CAED,CAAA,CAET"}
@@ -1,2 +0,0 @@
1
- "use client";var e=`infiniteBlock_dFv-h`,t=`sentinel_n-Zie`,n=`spinner-wrapper_hsgWz`,r=`spinner_VjUS2`,i={infiniteBlock:e,sentinel:t,"spinner-wrapper":`spinner-wrapper_hsgWz`,spinnerWrapper:n,spinner:r};export{i as default,e as infiniteBlock,t as sentinel,r as spinner,n as spinnerWrapper};
2
- //# sourceMappingURL=infiniteBlock.module.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"infiniteBlock.module.mjs","names":[],"sources":["../../../../package/common/infiniteBlock/infiniteBlock.module.pcss"],"sourcesContent":[".infiniteBlock {\n position: relative;\n max-height: none;\n}\n\n.sentinel {\n height: 1px;\n}\n\n.spinner-wrapper {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px 0;\n}\n\n.spinner {\n width: 32px;\n height: 32px;\n}\n"],"mappings":""}
@@ -1,2 +0,0 @@
1
- "use client";import e from"./iconLoading.module.mjs";import"react";import t from"classnames";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({className:i=``}){return n(`div`,{className:t(e.iconLoading,i),children:r(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`-8 -1 16 14`,children:[n(`path`,{className:e.iconLoadingFirst,d:`M 0 0 C 3 5 6 5 6 12`,strokeWidth:`1.7`,fill:`none`}),n(`path`,{className:e.iconLoadingFirst,d:`M 0 0 C -3 5 -6 5 -6 12`,strokeWidth:`1.7`,fill:`none`}),n(`path`,{className:e.iconLoadingFirst,d:`M 0 0 L 0 10`,strokeWidth:`1.7`,fill:`none`}),n(`path`,{className:e.iconLoadingSecond,d:`M 0.1 10 C -3 10 -4 10 -6 12`,strokeWidth:`1.7`,fill:`none`}),n(`path`,{className:e.iconLoadingSecond,d:`M -0.1 10 C 3 10 4 10 6 12`,strokeWidth:`1.7`,fill:`none`})]})})}export{i as default};
2
- //# sourceMappingURL=iconLoading.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"iconLoading.mjs","names":[],"sources":["../../../../../package/common/loading/iconLoading/iconLoading.tsx"],"sourcesContent":["import React from 'react';\nimport cx from 'classnames';\n\nimport styles from './iconLoading.module.pcss';\n\nfunction IconLoading({ className = '' }) {\n return (\n <div className={cx(styles.iconLoading, className)}>\n <svg xmlns='http://www.w3.org/2000/svg' viewBox='-8 -1 16 14'>\n <path className={styles.iconLoadingFirst} d='M 0 0 C 3 5 6 5 6 12' strokeWidth='1.7' fill='none' />\n <path className={styles.iconLoadingFirst} d='M 0 0 C -3 5 -6 5 -6 12' strokeWidth='1.7' fill='none' />\n <path className={styles.iconLoadingFirst} d='M 0 0 L 0 10' strokeWidth='1.7' fill='none' />\n <path className={styles.iconLoadingSecond} d='M 0.1 10 C -3 10 -4 10 -6 12' strokeWidth='1.7' fill='none' />\n <path className={styles.iconLoadingSecond} d='M -0.1 10 C 3 10 4 10 6 12' strokeWidth='1.7' fill='none' />\n </svg>\n </div>\n );\n}\n\nexport default IconLoading;\n"],"mappings":"+IAKA,SAAS,EAAY,CAAE,YAAY,IAAM,CACvC,OACE,EAAC,MAAD,CAAK,UAAW,EAAG,EAAO,YAAa,CAAS,EAC9C,SAAA,EAAC,MAAD,CAAK,MAAM,6BAA6B,QAAQ,cAAhD,SAAA,CACE,EAAC,OAAD,CAAM,UAAW,EAAO,iBAAkB,EAAE,uBAAuB,YAAY,MAAM,KAAK,MAAQ,CAAA,EAClG,EAAC,OAAD,CAAM,UAAW,EAAO,iBAAkB,EAAE,0BAA0B,YAAY,MAAM,KAAK,MAAQ,CAAA,EACrG,EAAC,OAAD,CAAM,UAAW,EAAO,iBAAkB,EAAE,eAAe,YAAY,MAAM,KAAK,MAAQ,CAAA,EAC1F,EAAC,OAAD,CAAM,UAAW,EAAO,kBAAmB,EAAE,+BAA+B,YAAY,MAAM,KAAK,MAAQ,CAAA,EAC3G,EAAC,OAAD,CAAM,UAAW,EAAO,kBAAmB,EAAE,6BAA6B,YAAY,MAAM,KAAK,MAAQ,CAAA,CACtG,GACF,CAAA,CAET"}
@@ -1,2 +0,0 @@
1
- "use client";var e=`iconLoading_wovj4`,t=`spin-to-oblivion_0tZtm`,n=`iconLoading-first_SBwP3`,r=`draw-line_1NiWA`,i=`iconLoading-second_nHrW3`,a=`draw-line-two_HmaHl`,o={iconLoading:e,"spin-to-oblivion":`spin-to-oblivion_0tZtm`,spinToOblivion:t,"iconLoading-first":`iconLoading-first_SBwP3`,iconLoadingFirst:n,"draw-line":`draw-line_1NiWA`,drawLine:r,"iconLoading-second":`iconLoading-second_nHrW3`,iconLoadingSecond:i,"draw-line-two":`draw-line-two_HmaHl`,drawLineTwo:a};export{o as default,r as drawLine,a as drawLineTwo,e as iconLoading,n as iconLoadingFirst,i as iconLoadingSecond,t as spinToOblivion};
2
- //# sourceMappingURL=iconLoading.module.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"iconLoading.module.mjs","names":[],"sources":["../../../../../package/common/loading/iconLoading/iconLoading.module.pcss"],"sourcesContent":[".iconLoading {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n position: absolute;\n left: 0;\n top: 0;\n user-select: none;\n pointer-events: none;\n\n --draw-duration: 0.8s;\n --delay: 0.4s;\n\n svg {\n stroke-dasharray: 14;\n stroke-dashoffset: 14;\n width: 200px;\n aspect-ratio: 1;\n animation: calc(var(--draw-duration) * 3) spin-to-oblivion var(--delay) infinite;\n transform: rotate(0deg);\n stroke: var(--primary-color);\n stroke-linecap: round;\n }\n\n &-first {\n animation: calc(var(--draw-duration) * 3) draw-line var(--delay) infinite;\n }\n\n &-second {\n animation: calc(var(--draw-duration) * 3) draw-line-two var(--delay) infinite;\n }\n\n @keyframes draw-line {\n 33% {\n stroke-dashoffset: 0;\n }\n\n 95% {\n stroke-dashoffset: 0;\n }\n\n 96% {\n stroke-dashoffset: 14;\n }\n }\n\n @keyframes draw-line-two {\n 33% {\n stroke-dashoffset: 14;\n }\n\n 66% {\n stroke-dashoffset: 0;\n }\n\n 95% {\n stroke-dashoffset: 0;\n }\n\n 96% {\n stroke-dashoffset: 14;\n }\n }\n\n @keyframes spin-to-oblivion {\n 50% {\n transform: rotate(180deg);\n }\n\n 75% {\n transform: rotate(180deg) scale(0);\n }\n\n 100% {\n transform: rotate(180deg) scale(0);\n }\n }\n}\n"],"mappings":""}
@@ -1,2 +0,0 @@
1
- "use client";import e from"./iconLoading.mjs";var t=e;export{t as default};
2
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../package/common/loading/iconLoading/index.ts"],"sourcesContent":["import IconLoading from './iconLoading.js';\n\nexport default IconLoading;\n"],"mappings":"8CAEA,IAAA,EAAe"}
@@ -1 +0,0 @@
1
- export { default } from './infiniteBlock';
@@ -1,4 +0,0 @@
1
- import { default as React } from 'react';
2
- import { InfiniteBlockProps } from './infiniteBlock.types';
3
- declare function InfiniteBlock({ children, onScroll, className, style, isDataLoading, setHighlightedIndex, }: InfiniteBlockProps): React.JSX.Element;
4
- export default InfiniteBlock;
@@ -1,13 +0,0 @@
1
- import { default as React } from 'react';
2
- export interface InfiniteBlockProps {
3
- children?: React.ReactNode;
4
- /** Called when the user scrolls to the bottom; must return a Promise that resolves when the new data has loaded. */
5
- onScroll: () => Promise<void>;
6
- className?: string;
7
- /** Inline style on the scroll container. */
8
- style?: React.CSSProperties;
9
- /** Replaces children with a full-block spinner (initial load). */
10
- isDataLoading?: boolean;
11
- /** Called with the newly highlighted child index after keyboard navigation. */
12
- setHighlightedIndex?: (index: number) => void;
13
- }
@@ -1,5 +0,0 @@
1
- import { default as React } from 'react';
2
- declare function IconLoading({ className }: {
3
- className?: string | undefined;
4
- }): React.JSX.Element;
5
- export default IconLoading;
@@ -1,2 +0,0 @@
1
- import { default as IconLoading } from './iconLoading.js';
2
- export default IconLoading;
package/docs/Icon.md DELETED
@@ -1,27 +0,0 @@
1
- # Icon
2
-
3
- **When to use:** Custom SVG icon set built into the library. Currently only contains the `can` (trash/delete) icon. For most icon needs, use FontAwesome directly via `@fortawesome/react-fontawesome`.
4
-
5
- **Keywords:** delete icon, trash icon
6
-
7
- **Import:** `import { Icon } from '@ahrowe/ui'`
8
-
9
- ```tsx
10
- import { Icon } from '@ahrowe/ui';
11
-
12
- <Icon type="can" />
13
- ```
14
-
15
- **Key props:**
16
-
17
- | Prop | Type | Description |
18
- |------|------|-------------|
19
- | `type` | `string` | Icon type — only `'can'` is currently available |
20
-
21
- **Note:** For a rich icon set, use FontAwesome directly:
22
-
23
- ```tsx
24
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
25
- import { faTrash } from '@fortawesome/free-solid-svg-icons';
26
- <FontAwesomeIcon icon={faTrash} />
27
- ```
@@ -1,23 +0,0 @@
1
- # InfiniteBlock
2
-
3
- **When to use:** Infinite scroll container — load more items as the user scrolls to the bottom. Use for paginated lists, feeds, search results.
4
-
5
- **Keywords:** pagination
6
-
7
- **Import:** `import { InfiniteBlock } from '@ahrowe/ui'`
8
-
9
- ```tsx
10
- import { InfiniteBlock } from '@ahrowe/ui';
11
-
12
- <InfiniteBlock
13
- onLoadMore={async () => {
14
- await fetchNextPage();
15
- }}
16
- hasMore={hasNextPage}
17
- isLoading={isFetchingNextPage}
18
- >
19
- {items.map(item => <ItemCard key={item.id} item={item} />)}
20
- </InfiniteBlock>
21
- ```
22
-
23
- **Note:** This is a legacy JSX component — check [package/common/infiniteBlock/infiniteBlock.jsx](../common/infiniteBlock/infiniteBlock.jsx) for full prop details.