@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/Hooks.md ADDED
@@ -0,0 +1,232 @@
1
+ # Hooks
2
+
3
+ **When to use:** Standalone React hooks the library uses internally and publishes for the same jobs in your own code: keyboard shortcuts, media queries, the mobile keyboard's viewport, scroll-edge detection, swipe-to-dismiss, and the Escape / focus-trap / scroll-lock behaviour behind a custom overlay.
4
+
5
+ **Keywords:** hotkey, keybinding, keyboard shortcut, cmd+k, command palette, breakpoint, responsive, touch device, on-screen keyboard, focus trap, scroll lock, swipe
6
+
7
+ **Import:** `import { useHotkeys, formatHotkey, useMediaQuery, useCoarsePointer, useVisualViewportSize, useScrollEdges, useSwipeDismiss, useOverlay, tabbablesIn } from '@ahrowe/ui'`
8
+ **Types:** `import type { HotkeyMap, HotkeyHandler, UseHotkeysOptions, VisualViewportSize, ScrollEdges, ScrollEdgesOptions, UseSwipeDismissOptions, UseSwipeDismissResult, UseOverlayArgs } from '@ahrowe/ui'`
9
+
10
+ ---
11
+
12
+ ## useHotkeys
13
+
14
+ Keyboard shortcuts for a whole app or for one element.
15
+
16
+ ```tsx
17
+ import { useHotkeys } from '@ahrowe/ui';
18
+
19
+ function App() {
20
+ const [isPaletteOpen, setPaletteOpen] = useState(false);
21
+
22
+ useHotkeys({
23
+ 'mod+k': () => setPaletteOpen(true),
24
+ 'mod+shift+d': () => toggleDarkMode(),
25
+ '?': () => setHelpOpen(true),
26
+ Escape: () => setPaletteOpen(false),
27
+ });
28
+ }
29
+ ```
30
+
31
+ The map is read through a ref at event time, so an inline object literal is fine: no handler needs
32
+ `useCallback` and no combo needs `useMemo`.
33
+
34
+ **Combo syntax** — modifiers and the key joined by `+`, case-insensitive:
35
+
36
+ | Part | Means |
37
+ | ---- | ----- |
38
+ | `mod` | Cmd on Apple platforms, Ctrl everywhere else |
39
+ | `ctrl` / `control` | Ctrl |
40
+ | `meta` / `cmd` / `command` | Cmd (Win key) |
41
+ | `alt` / `option` | Alt |
42
+ | `shift` | Shift |
43
+ | the key | any `event.key` value, lower-cased: `k`, `1`, `escape`, `arrowup`, `enter` |
44
+
45
+ Aliases for keys that are awkward to write: `esc`, `space`, `plus`, `up`, `down`, `left`, `right`.
46
+
47
+ Two rules worth knowing:
48
+
49
+ - **Shift is only compared when the combo names it.** `'?'` matches, even though `?` is typed with
50
+ Shift on most layouts.
51
+ - **The key is matched against the keycap as well as the event.** `'mod+1'` matches Ctrl+Shift+1,
52
+ and `'alt+k'` matches on a Mac, where Alt+K produces `˚` rather than `k`.
53
+
54
+ **Options**
55
+
56
+ | Prop | Type | Default | Description |
57
+ | ---- | ---- | ------- | ----------- |
58
+ | `enabled` | `boolean` | `true` | Attach the listener at all. Suspends every combo at once |
59
+ | `target` | `RefObject<HTMLElement \| null>` | window | Scope the shortcuts to one element |
60
+ | `enableInFields` | `boolean` | `false` | Let a combo fire while a text field or `contenteditable` has focus. Only combos the field would otherwise consume are held back: a single character, or an editing key (`arrowup`, `home`, `backspace`, `enter`, `tab`, …). Anything carrying Ctrl, Cmd or Alt fires regardless, and so do `f2`, `escape` and the other keys a field does not use |
61
+ | `preventDefault` | `boolean` | `true` | Call `preventDefault()` on a match, so `mod+s` does not also open the browser's save dialog |
62
+
63
+ Shortcuts keep firing while a `Modal` or `Drawer` is open, which is usually what a command palette
64
+ wants. Pass `enabled` for the ones that should not:
65
+
66
+ ```tsx
67
+ useHotkeys({ n: createRecord }, { enabled: !isModalOpen });
68
+ ```
69
+
70
+ A held key repeats, as it does natively. Check `event.repeat` in the handler to ignore repeats.
71
+
72
+ ### formatHotkey
73
+
74
+ The same combo written for the reader, so a hint beside a button cannot contradict what the binding
75
+ listens for:
76
+
77
+ ```tsx
78
+ formatHotkey('mod+shift+k'); // '⇧⌘K' on an Apple platform, 'Ctrl+Shift+K' elsewhere
79
+ formatHotkey('f2'); // 'F2'
80
+ ```
81
+
82
+ This is what `Menu` uses to draw the shortcut on an entry, from the same string `menuHotkeys`
83
+ turns into a binding, see [Menu.md](Menu.md). A combo it cannot parse is handed back unchanged. The platform is read at call
84
+ time, so a server-rendered page renders the non-Apple spelling.
85
+
86
+ ## useMediaQuery
87
+
88
+ `true` while the query matches, re-rendering on every change. Backed by `useSyncExternalStore`, so
89
+ it hydrates from the server's answer (`false`) instead of making the first client render disagree
90
+ with the server's HTML.
91
+
92
+ ```tsx
93
+ const isWide = useMediaQuery('(min-width: 1024px)');
94
+ const prefersReducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)');
95
+ ```
96
+
97
+ Prefer this over reading `window.innerWidth`: a resize listener re-renders on every pixel, a media
98
+ query only when the answer changes.
99
+
100
+ ## useCoarsePointer
101
+
102
+ `true` when the primary pointing device is touch — `useMediaQuery('(pointer: coarse)')`.
103
+
104
+ ```tsx
105
+ const isTouch = useCoarsePointer();
106
+ ```
107
+
108
+ Use it for affordances, not for layout: a touchscreen laptop is a coarse pointer at desktop width.
109
+ For "is this a phone", ask for both, as `Presentation.Auto` does — see [ConfigProvider.md](ConfigProvider.md).
110
+
111
+ ## useVisualViewportSize
112
+
113
+ Tracks `window.visualViewport`, so layout can react to the mobile on-screen keyboard opening.
114
+ `window.innerHeight` and CSS `vh` stay pinned to the full layout viewport and do not.
115
+
116
+ ```tsx
117
+ const { height, offsetTop } = useVisualViewportSize();
118
+
119
+ <div style={{ height, transform: `translateY(${offsetTop}px)` }} />;
120
+ ```
121
+
122
+ Falls back to `window.innerHeight` / `0` where the API is missing.
123
+
124
+ ## useScrollEdges
125
+
126
+ Which edges of a scroll container currently hide content, so the boundary can be marked — most
127
+ often by fading it.
128
+
129
+ ```tsx
130
+ const listRef = useRef<HTMLDivElement>(null);
131
+ const { hasStart, hasEnd } = useScrollEdges(listRef, { axis: 'vertical' });
132
+
133
+ <div ref={listRef} data-fade-top={hasStart} data-fade-bottom={hasEnd}>
134
+ {items}
135
+ </div>;
136
+ ```
137
+
138
+ | Option | Type | Default | Description |
139
+ | ------ | ---- | ------- | ----------- |
140
+ | `axis` | `'vertical' \| 'horizontal'` | `'vertical'` | Which axis to measure |
141
+ | `isEnabled` | `boolean` | `true` | Pass `false` while the element is hidden |
142
+
143
+ For the ready-made fade, use [ScrollFade.md](ScrollFade.md) instead.
144
+
145
+ ## useSwipeDismiss
146
+
147
+ Swipe-to-dismiss on any element. Attaches its own pointer listeners to the node, so there is
148
+ nothing to spread but the ref.
149
+
150
+ ```tsx
151
+ const { ref, isDragging } = useSwipeDismiss<HTMLDivElement>({
152
+ onDismiss: () => remove(notification.id),
153
+ axis: 'x',
154
+ });
155
+
156
+ <div ref={ref}>{notification.message}</div>;
157
+ ```
158
+
159
+ | Option | Type | Default | Description |
160
+ | ------ | ---- | ------- | ----------- |
161
+ | `onDismiss` | `() => void` | — | Called once the swipe commits, after the exit transition |
162
+ | `axis` | `'x' \| 'y'` | `'x'` | Which axis the drag tracks |
163
+ | `distanceThreshold` | `number` | `80` | px past which releasing commits, regardless of speed |
164
+ | `velocityThreshold` | `number` | `0.5` | px/ms past which releasing commits, regardless of distance |
165
+ | `mobileOnly` | `boolean` | `true` | Restrict the gesture to coarse pointers. On a mouse a drag is more likely a text selection |
166
+ | `disabled` | `boolean` | `false` | Attach no listeners at all |
167
+
168
+ `isDragging` is `true` for the duration of a drag — use it to pause an auto-dismiss timer.
169
+
170
+ `ref` is a **callback ref**, not a ref object: the hook has to know when the node changes, and an
171
+ element unmounted and rendered again is a different node. Attach it with `ref={ref}` as above. To
172
+ keep a ref of your own on the same element, call both from one callback:
173
+
174
+ ```tsx
175
+ <div
176
+ ref={(node) => {
177
+ ref(node);
178
+ myRef.current = node;
179
+ }}
180
+ />
181
+ ```
182
+
183
+ ## useOverlay
184
+
185
+ The three behaviours every blocking overlay needs: Escape to dismiss, a focus trap, and a scroll
186
+ lock on the page behind it. `Modal`, `Drawer` and `Popover` are built on it, and they all share one
187
+ stack: a custom overlay using this hook nests correctly with theirs, so Escape closes only the
188
+ innermost layer and the page stays locked until the last one closes.
189
+
190
+ ```tsx
191
+ function CustomOverlay({ isOpen, onClose, children }) {
192
+ const panelRef = useRef<HTMLDivElement>(null);
193
+ useOverlay({ isActive: isOpen, containerRef: panelRef, onEscape: onClose });
194
+
195
+ if (!isOpen) return null;
196
+ return (
197
+ <div ref={panelRef} role="dialog" aria-modal="true">
198
+ {children}
199
+ </div>
200
+ );
201
+ }
202
+ ```
203
+
204
+ | Arg | Type | Default | Description |
205
+ | --- | ---- | ------- | ----------- |
206
+ | `isActive` | `boolean` | — | Everything below is set up while this is true |
207
+ | `containerRef` | `RefObject<HTMLElement \| null>` | — | The panel. Focus is trapped inside it |
208
+ | `onEscape` | `() => void` | — | Called when Escape is pressed while this is the topmost layer. Omit to not handle Escape |
209
+ | `trapFocus` | `boolean` | `true` | Keep Tab inside the panel, and restore focus on close |
210
+ | `lockScroll` | `boolean` | `true` | Prevent the page behind it from scrolling |
211
+
212
+ Reach for [Modal.md](Modal.md) or [Drawer.md](Drawer.md) first; this is for an overlay they do not cover.
213
+
214
+ ## tabbablesIn
215
+
216
+ The tabbable descendants of an element, in DOM order. An element taken out of the tab order with
217
+ `tabindex="-1"` is skipped, whatever it is, so a roving-tabindex list reads as the one tab stop it
218
+ actually is.
219
+
220
+ ```tsx
221
+ const focusables = tabbablesIn(panelRef.current);
222
+ focusables[0]?.focus();
223
+ ```
224
+
225
+ ## Also exported
226
+
227
+ Hooks documented with the thing they belong to:
228
+
229
+ - `useTheme` — the active theme, see [ThemeProvider.md](ThemeProvider.md)
230
+ - `useComponentDefaults`, `useLabels` — see [ConfigProvider.md](ConfigProvider.md)
231
+ - `useFormValidator` — see [FormValidator.md](FormValidator.md)
232
+ - `useFormValidatorGroup` — see [FormValidatorGroup.md](FormValidatorGroup.md)
@@ -1,19 +1,49 @@
1
1
  # IdleManager
2
2
 
3
- **When to use:** Detects user inactivity — auto-logout, session timeout warnings, auto-save triggers, pausing background processes.
3
+ **When to use:** Show something only once the user has stopped interacting — a screen saver, a session-timeout warning, an "are you still there?" prompt, an idle dashboard view. It renders its children after a period of inactivity and hides them again the moment the user does anything.
4
4
 
5
- **Keywords:** auto logout, inactivity timer
5
+ **Keywords:** auto logout, inactivity timer, timeout, away, afk, screensaver, session expiry
6
6
 
7
7
  **Import:** `import { IdleManager } from '@ahrowe/ui'`
8
+ **Types:** `import type { IdleManagerProps } from '@ahrowe/ui'`
8
9
 
9
10
  ```tsx
10
11
  import { IdleManager } from '@ahrowe/ui';
11
12
 
12
- // Warn after 14 minutes of inactivity, log out after 15
13
- <IdleManager
14
- idleTimeout={14 * 60 * 1000}
15
- onIdle={() => showSessionWarning()}
16
- />
13
+ // Nothing is rendered until the user has been idle for 14 minutes.
14
+ <IdleManager idleAfterSeconds={14 * 60}>
15
+ <SessionWarning onStaySignedIn={keepAlive} />
16
+ </IdleManager>
17
+
18
+ // Only arm it where it makes sense — here, only while signed in.
19
+ <IdleManager idleAfterSeconds={60} renderCondition={isSignedIn}>
20
+ <ScreenSaver />
21
+ </IdleManager>
22
+ ```
23
+
24
+ **Key props:**
25
+
26
+ | Prop | Type | Description |
27
+ |------|------|-------------|
28
+ | `children` | `ReactNode` | Rendered only while the user is idle |
29
+ | `idleAfterSeconds` | `number` | Seconds of inactivity before the children appear. Default `600` |
30
+ | `renderCondition` | `boolean` | Children appear only when this is `true` **and** the user is idle. Default `true` |
31
+
32
+ **How idle is decided:** a `click`, `mousemove`, `keydown`, `scroll` or `touchstart` anywhere in the document counts as activity. Any of them restarts the countdown and hides the children again at once.
33
+
34
+ There is no callback. The component tells you nothing and renders instead, so whatever should happen on idle goes in the children: put the side effect in their own `useEffect`, which runs when they mount.
35
+
36
+ ```tsx
37
+ function AutoLogout() {
38
+ useEffect(() => {
39
+ signOut();
40
+ }, []);
41
+ return <p>Signed out for inactivity.</p>;
42
+ }
43
+
44
+ <IdleManager idleAfterSeconds={15 * 60}>
45
+ <AutoLogout />
46
+ </IdleManager>
17
47
  ```
18
48
 
19
- **Note:** This is a legacy JSX component — check the source at [package/common/idleManager/idleManager.jsx](../common/idleManager/idleManager.jsx) for full prop details as no TypeScript types file exists yet.
49
+ Changing `idleAfterSeconds` restarts the countdown without hiding what is already on screen; only real activity does that. The pending timer is cleared on unmount, so it never fires afterwards.
@@ -67,6 +67,17 @@ interface InputDropdownItem {
67
67
  | `error` | `string` | Manual error message (used when no `formValidator` is given) |
68
68
  | `isRequired` | `boolean` | Shows the required mark (`*`) next to the label. Also inferred automatically when `formValidator` has a `required` validator. Default `false` |
69
69
 
70
+ **Keyboard:** `↑`/`↓` move the highlight through the suggestions, and the text you typed is part of
71
+ the cycle rather than a dead end: arrowing off either end returns to it, and one more press carries
72
+ on to the far end of the list. So `↓` on the last suggestion shows your text again, then the first
73
+ suggestion. This is how a browser's own address bar behaves, and it is why the list does not wrap
74
+ straight around the way `Dropdown` and `MultiSelect` do — neither of those has typed text to pass
75
+ through. `Enter` picks the highlighted suggestion, and the list scrolls to keep it in view.
76
+
77
+ Inside a `<form>`, `Enter` on a highlighted suggestion picks it without submitting the form; `Enter`
78
+ with nothing highlighted submits as any text field would. So cycling to your own text and pressing
79
+ `Enter` twice is the way to submit exactly what you typed. `Home` and `End` are left to the text field, so they move the caret.
80
+
70
81
  **Slots:** `root` `dropdown` `item`
71
82
 
72
83
  Long lists are handled by capping how many matches are rendered (`maxItems`, default `100`) rather than by virtualizing: only about six rows fit in the scroll box, so anything past the cap is DOM the user never sees. Raise `maxItems` (or set it to `0`) if a list is genuinely meant to be scrolled end to end. For lists too large to pass as `items` at all, fetch on the server, keep the results in your own state and feed them in as `items`.
@@ -4,6 +4,12 @@
4
4
 
5
5
  Enter and Space dispatch a real click, the way a native button does, so `onClick` always receives a `MouseEvent` and a handler on an element above this one sees the activation too.
6
6
 
7
+ A click or a key on a control **inside** it belongs to that control: a field, a link, a button or
8
+ anything carrying an interactive `role` swallows the activation, so a clickable container can hold
9
+ a form without every click into it counting as a press. The event itself is never stopped, so a
10
+ handler on an element above this one, or one attached to the node with a `ref`, still sees every
11
+ click, including the ones this one declines.
12
+
7
13
  **Keywords:** custom button div
8
14
 
9
15
  **Import:** `import { InteractableDiv } from '@ahrowe/ui'`
@@ -17,4 +23,4 @@ import { InteractableDiv } from '@ahrowe/ui';
17
23
  </InteractableDiv>
18
24
  ```
19
25
 
20
- **Note:** Check [package/common/interactableDiv/](../common/interactableDiv/) for full prop details.
26
+ **Note:** Check [package/common/interactableDiv/](https://github.com/AndreasWeinzierl/ahrowe-ui/tree/master/package/common/interactableDiv) for full prop details.
@@ -36,7 +36,7 @@ import { KlipyPicker } from '@ahrowe/ui';
36
36
 
37
37
  | Prop | Type | Description |
38
38
  |------|------|-------------|
39
- | `token` | `string` | Klipy API key (defaults to a built-in demo key — replace in production) |
39
+ | `token` | `string` | Klipy API key. No default: without one the picker renders but every request fails |
40
40
  | `isModal` | `boolean` | Render the picker inside a `Modal` instead of inline |
41
41
  | `selected` | `string \| null` | Currently selected GIF id (for visual highlight) |
42
42
  | `onSelect` | `(preview: KlipyResult \| null) => void \| Promise<void>` | Fires when a GIF is picked; `null` when cleared |
package/docs/Loading.md CHANGED
@@ -1,25 +1,68 @@
1
- # Loading (IconLoading / SpinnerLoading)
1
+ # Loading (SpinnerLoading)
2
2
 
3
- **When to use:** Loading indicators for async operations — page loads, data fetching, button actions (when not using Button's built-in `isLoading`).
3
+ **When to use:** A loading indicator for async operations: page loads, data fetching, or covering a region while it refreshes. For a button use `Button`'s built-in `isLoading`, and for placeholder content that mirrors the shape of what is coming use [Skeleton.md](Skeleton.md).
4
4
 
5
- **Import:** `import { IconLoading, SpinnerLoading } from '@ahrowe/ui'`
5
+ **Keywords:** busy, waiting, activity indicator, throbber, progress, async, fetching, overlay
6
6
 
7
- ```tsx
8
- import { IconLoading, SpinnerLoading } from '@ahrowe/ui';
7
+ **Import:** `import { SpinnerLoading } from '@ahrowe/ui'`
9
8
 
10
- // Animated icon loader (uses FontAwesome spinner style)
11
- {isLoading && <IconLoading />}
9
+ ```tsx
10
+ import { SpinnerLoading } from '@ahrowe/ui';
12
11
 
13
- // Circular spinner
12
+ // Default: a 70x70 circular spinner stroked in var(--primary-color)
14
13
  {isLoading && <SpinnerLoading />}
15
14
 
16
- // With custom className
15
+ // Sized through className
17
16
  <SpinnerLoading className="my-spinner" />
18
17
  ```
19
18
 
20
- **Notes:**
21
- - `IconLoading` — icon-style spinner, small footprint, good inline with text
22
- - `SpinnerLoading` — circular progress ring, good for full-area loading states
23
- - Both components accept `className` for sizing/positioning
19
+ ```css
20
+ .my-spinner {
21
+ width: 24px;
22
+ height: 24px;
23
+ }
24
+ ```
25
+
26
+ **Key props:**
27
+
28
+ | Prop | Type | Description |
29
+ |------|------|-------------|
30
+ | `className` | `string` | Root `svg` element. This is also how you size it |
31
+
32
+ ## Covering a region while it loads
33
+
34
+ `SpinnerLoading` is the indicator only. To overlay it on content, centre it in a positioned parent:
35
+
36
+ ```tsx
37
+ <div className="panel">
38
+ <YourContent />
39
+ {isLoading && (
40
+ <div className="panel-overlay">
41
+ <SpinnerLoading className="my-spinner" />
42
+ </div>
43
+ )}
44
+ </div>
45
+ ```
46
+
47
+ ```css
48
+ .panel {
49
+ position: relative;
50
+ }
51
+
52
+ .panel-overlay {
53
+ position: absolute;
54
+ inset: 0;
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ pointer-events: none;
59
+ }
60
+ ```
61
+
62
+ Drop the `pointer-events: none` if the overlay should also block interaction with what is underneath, and add a translucent `background` if it should dim it.
63
+
64
+ For a branded loading screen rather than a generic spinner, [AnimatedLogo.md](AnimatedLogo.md) draws an SVG mark and sits in the same overlay.
65
+
66
+ **Note:** the spinner animates continuously even under `prefers-reduced-motion`. A frozen spinner would say the app has hung, which is the opposite of what it is there to communicate.
24
67
 
25
- Check [package/common/loading/](../common/loading/) for full prop details.
68
+ **Slots:** none. The root `svg` takes `className`.
package/docs/Menu.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Keywords:** context menu, action menu, overflow menu, kebab menu, three dots, popup menu, right click, anchored list
6
6
 
7
- **Import:** `import { Menu } from '@ahrowe/ui'`
7
+ **Import:** `import { Menu, menuHotkeys } from '@ahrowe/ui'`
8
8
  **Types:** `import type { MenuProps, MenuEntry, MenuAction } from '@ahrowe/ui'`
9
9
 
10
10
  **Requires:** `<div id="bodyEnd"></div>` in your app: the menu is portalled there, like every other anchored panel in the library.
@@ -15,7 +15,7 @@ import type { MenuEntry } from '@ahrowe/ui';
15
15
  import { faPen, faCopy, faTrash } from '@fortawesome/free-solid-svg-icons';
16
16
 
17
17
  const items: MenuEntry[] = [
18
- { id: 'edit', label: 'Edit', icon: faPen, shortcut: '⌘E' },
18
+ { id: 'edit', label: 'Edit', icon: faPen, shortcut: 'mod+e' },
19
19
  { id: 'duplicate', label: 'Duplicate', icon: faCopy },
20
20
  { separator: true },
21
21
  { id: 'delete', label: 'Delete', icon: faTrash, danger: true },
@@ -34,6 +34,28 @@ const items: MenuEntry[] = [
34
34
  { heading: 'This document' } // a label over what follows
35
35
  ```
36
36
 
37
+ **Shortcuts are drawn, not bound.** A `shortcut` is a combo in [useHotkeys](Hooks.md) spelling, and the menu writes it on the trailing edge for the platform the reader is on: `mod+s` shows as `⌘S` on an Apple one and `Ctrl+S` everywhere else. So there is one spelling per shortcut and a hand-written `'⌘S'` can no longer be wrong on Windows.
38
+
39
+ Listening for it is yours, because only your app knows what else is listening: if it already binds `⌘S` and the menu bound it too, both would fire and the action would run twice. `menuHotkeys` turns the same entries into a map for `useHotkeys`, so the one spelling covers the hint and the binding:
40
+
41
+ ```tsx
42
+ import { Menu, menuHotkeys, useHotkeys } from '@ahrowe/ui';
43
+
44
+ const items: MenuEntry[] = [
45
+ { id: 'save', label: 'Save', shortcut: 'mod+s', onClick: save },
46
+ { id: 'rename', label: 'Rename', shortcut: 'f2', onClick: rename },
47
+ ];
48
+
49
+ // Whenever the page is up, which is what a shortcut on a menu item usually means:
50
+ // ⌘S in a File menu works without opening the File menu.
51
+ useHotkeys(menuHotkeys(items, run));
52
+
53
+ // Or only while the menu is open, if that is what you want:
54
+ useHotkeys(menuHotkeys(items, run), { enabled: isOpen });
55
+ ```
56
+
57
+ It runs each entry the way clicking it does, its own `onClick` then `onAction`, and leaves out a `disabled` entry and any entry with no `shortcut`. Bind them yourself instead if the actions already live in a keymap of your own; the menu does not mind either way.
58
+
37
59
  An action runs its own `onClick` first, then `onAction` on the menu, then the menu closes. Use whichever of the two fits: a handler per entry when they are unrelated, `onAction` when they funnel into one place.
38
60
 
39
61
  ```tsx
@@ -95,7 +117,7 @@ Separators and headings are never focused. The trigger is given `aria-haspopup`,
95
117
  | `id` | `string` | Stable id, also what `onAction` reports |
96
118
  | `label` | `ReactNode` | What the entry says |
97
119
  | `icon` | `IconContent` | Leading icon |
98
- | `shortcut` | `ReactNode` | Hint on the trailing edge, e.g. `⌘K`. Display only: binding it is yours |
120
+ | `shortcut` | `string` | A combo in `useHotkeys` spelling, e.g. `'mod+k'`. Shown on the trailing edge, written for the platform. Binding it is yours, see `menuHotkeys` |
99
121
  | `disabled` | `boolean` | Not clickable, and skipped by the arrow keys |
100
122
  | `danger` | `boolean` | Renders in the destructive colour |
101
123
  | `onClick` | `() => void` | Runs before `onAction` |
@@ -104,4 +126,6 @@ Separators and headings are never focused. The trigger is given `aria-haspopup`,
104
126
 
105
127
  `root` and `trigger` generate no box, so your trigger keeps the place it would have had without a Menu around it. A `className` or `style` on those two cannot paint; style the trigger you pass in instead.
106
128
 
129
+ **Sheet dimensions:** as a sheet it spans the full width up to `--sheet-max-width` (560px) and centres beyond it, caps its height at `--sheet-max-height` (70dvh) of the space actually visible, and clears a phone's home indicator with `--sheet-safe-padding` (8px, or the device's own safe-area inset where that is larger). Set any of them per instance via `style` or theme-wide via `ThemeProvider`.
130
+
107
131
  **No submenus yet.** An entry is a single action. Nesting brings its own interaction model — hover intent, a second layer of focus management, and a different shape again as a sheet on touch — so it is a separate piece of work rather than a field on `MenuAction`.
package/docs/Modal.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  **When to use:** Full overlay dialog — forms, detail views, confirmations, wizards that need to block the rest of the UI.
4
4
 
5
- **Keywords:** popup, dialog, overlay, escape, focus trap, scroll lock, sticky header, bottom sheet, action sheet, mobile, touch
5
+ **Keywords:** popup, dialog, overlay, escape, focus trap, scroll lock, sticky header, sticky footer, actions, buttons, bottom sheet, action sheet, mobile, touch
6
6
 
7
7
  **Import:** `import { Modal } from '@ahrowe/ui'`
8
8
 
9
9
  **Requires:** `<div id="bodyEnd"></div>` in your HTML (renders via portal).
10
10
 
11
- The panel itself never scrolls: the header is fixed and the children scroll inside the `body` slot, so the title and close button stay visible no matter how long the content is.
11
+ The panel itself never scrolls: the header is fixed and the children scroll inside the `body` slot, so the title and close button stay visible no matter how long the content is. Pass `footer` for anything that should stay put below the content, typically the action buttons.
12
12
 
13
13
  While open, the modal traps focus (focus moves into the panel and returns to whatever was focused before on close), locks scrolling on the page behind it, and closes on Escape. Modals nest correctly: Escape closes only the topmost one, and the page stays locked until the last one closes. The same applies to anything opened from inside a modal — a `Menu`, `Dropdown` or `Popover` counts as the layer above it, so Escape closes that first, and the modal's focus trap leaves focus alone while it's open (all three render through the same portal, so their DOM sits beside the modal's panel rather than inside it).
14
14
 
@@ -23,16 +23,18 @@ const [isOpen, setIsOpen] = useState(false);
23
23
  isOpen={isOpen}
24
24
  title="Edit Profile"
25
25
  onClose={() => setIsOpen(false)}
26
+ footer={
27
+ <ActionButtons
28
+ onSubmit={handleSubmit}
29
+ onClose={() => setIsOpen(false)}
30
+ isSubmitButtonLoading={isSaving}
31
+ />
32
+ }
26
33
  >
27
34
  <form onSubmit={handleSubmit}>
28
35
  <Input label="Name" formValidator={nameValidator} />
29
36
  <Input label="Email" type={InputType.Email} formValidator={emailValidator} />
30
37
  </form>
31
- <ActionButtons
32
- onSubmit={handleSubmit}
33
- onClose={() => setIsOpen(false)}
34
- isSubmitButtonLoading={isSaving}
35
- />
36
38
  </Modal>
37
39
 
38
40
  // Modal without header
@@ -48,11 +50,12 @@ const [isOpen, setIsOpen] = useState(false);
48
50
  | `isOpen` | `boolean` | Controls visibility |
49
51
  | `title` | `string` | Header title |
50
52
  | `onClose` | `() => void` | Called when the backdrop is clicked, the close button is pressed, or Escape is pressed |
53
+ | `footer` | `ReactNode` | Pinned below the scrolling body, e.g. action buttons. Nothing renders when omitted |
51
54
  | `hideHeader` | `boolean` | Removes the header bar |
52
55
  | `closeOnEscape` | `boolean` | Close on Escape while this is the topmost modal. Default `true` |
53
56
  | `presentation` | `Presentation` | Present as a bottom sheet, always (`Sheet`) or only on a small touch screen (`Auto`). `Default`, or omitting it, is the centred dialog |
54
57
 
55
- **Bottom sheet:** `presentation={Presentation.Sheet}` pins the dialog to the bottom of the screen instead of centring it — full width up to 560px, rounded on its top corners only, sliding up rather than scaling in, and lifted above an open on-screen keyboard, shrinking to fit the space that leaves rather than running off the top of the screen. Nothing else changes: the header stays fixed and the body scrolls, which is what a sheet needs anyway, and the backdrop, focus trap, scroll lock and Escape all behave exactly as they do centred. `Presentation.Auto` applies it only when the pointer is coarse *and* the screen is under 768px wide.
58
+ **Bottom sheet:** `presentation={Presentation.Sheet}` pins the dialog to the bottom of the screen instead of centring it — full width up to 560px, rounded on its top corners only, sliding up rather than scaling in, and lifted above an open on-screen keyboard, shrinking to fit the space that leaves rather than running off the top of the screen. Nothing else changes: the header and footer stay fixed and the body scrolls, which is what a sheet needs anyway, and the backdrop, focus trap, scroll lock and Escape all behave exactly as they do centred. `Presentation.Auto` applies it only when the pointer is coarse *and* the screen is under 768px wide.
56
59
 
57
60
  `Presentation.Default` means "wherever the component normally puts it", which for a Modal is centred rather than anchored to anything — so an app-wide `<ConfigProvider presentation={Presentation.Default}>` switches sheets off everywhere, this included.
58
61
 
@@ -64,12 +67,33 @@ import { Modal, Presentation } from '@ahrowe/ui';
64
67
  </Modal>
65
68
  ```
66
69
 
67
- A sheet-presented Modal takes 90% of the screen height rather than the 70% a menu-sized sheet uses, since it carries forms and detail views. Override either with the `--sheet-max-height` and `--sheet-safe-padding` custom properties, per instance via `style` or theme-wide via `ThemeProvider`. `--sheet-max-height` is a ceiling, not a height: whatever it's set to, a sheet never grows past the area actually visible, which is measured live and so accounts for an open keyboard that no viewport unit can see.
70
+ A sheet-presented Modal takes 90% of the screen height rather than the 70% a menu-sized sheet uses, since it carries forms and detail views, and it takes its bottom safe-area padding from `--modal-padding`, so the panel's own spacing carries down to the screen edge. It sets both on the panel itself, so a `ThemeProvider` value for `--sheet-max-height` or `--sheet-safe-padding` never reaches a Modal sheet: override those two per instance via `style`. `--sheet-max-width` it leaves alone, so that one works theme-wide as well. A sheet spans the full width up to it (560px) and centres beyond, full-bleed on a phone and a centred panel on anything wider. `--sheet-max-height` is a ceiling, not a height: whatever it's set to, a sheet never grows past the area actually visible, which is measured live and so accounts for an open keyboard that no viewport unit can see.
71
+
72
+ **Theming:** override these CSS variables theme-wide via `ThemeProvider` or per instance via `style`; each falls back to a built-in default:
73
+
74
+ | Variable | Falls back to |
75
+ |----------|---------------|
76
+ | `--modal-padding` | `var(--spacing-l)` |
77
+ | `--modal-gap` | `var(--spacing-l)` — the gap between header, body and footer |
78
+ | `--modal-max-width` | `calc(100% - 2 * var(--modal-padding))` |
79
+ | `--modal-max-height` | `calc(100% - 2 * var(--modal-padding))` |
80
+ | `--modal-body-bleed` | `calc(var(--modal-gap) / 2)` |
81
+ | `--modal-scroll-fade` | `calc(var(--modal-gap) + var(--modal-body-bleed))` — `0px` switches the fade off |
82
+
83
+ The panel has no width of its own, so it grows to whatever its content asks for up to `--modal-max-width`. Give a text-heavy dialog an explicit `width` (or set `--modal-max-width` app-wide) rather than letting a long paragraph decide how wide the dialog is.
84
+
85
+ The cap is the same at every screen size: the panel never comes closer to the edge than its own padding. There is no breakpoint, so a phone and a desktop leave the same gap and the backdrop stays visible around the panel on both.
86
+
87
+ `--modal-body-bleed` is how far the body reaches past its own edge, as a negative margin cancelled by an equal padding, so a focus ring or a floating label on the first element inside isn't clipped by the scroll container. Adjust it through this variable rather than setting `padding` on the `body` slot, which drops the negative half and brings the clipping back. Because the two cancel, content always rests exactly `--modal-gap` from the header and footer whatever the bleed is; what the bleed sets is where scrolling content is *clipped*, at `gap - bleed` from each. It defaults to half the gap, putting that edge midway between the chrome and where the content rests.
88
+
89
+ **Scrolling.** Content dissolves into the edge it is scrolling past rather than being cut off against it: a `mask-image` fades the top of the body while content is hidden above, and the bottom while content continues below. Each end is independent, and both are fully opaque on a dialog that doesn't scroll, so a short modal renders exactly as before. A line sliced clean in half is what a rule or a shadow at that boundary would leave in place, which is why neither is used. Set `styles={{ body: { overflow: 'hidden' } }}` — for content that scrolls itself, say a `VirtualList` — and the fade goes quiet with it, rather than dimming content nobody can scroll to.
90
+
91
+ To switch it off and go back to a hard edge, set `--modal-scroll-fade: 0px`, per instance via `style` or across an app via `ThemeProvider`. It is also off automatically under `prefers-contrast: more`, since fading text costs contrast at exactly the edge someone may be reading.
68
92
 
69
93
  **Global defaults:** adopts `ConfigProvider`, e.g. `defaultProps={{ Modal: { presentation: Presentation.Auto } }}` — which also covers `DatePicker`, `TimeInput` and `KlipyPicker` when they open in a Modal via their own `isModal`. `presentation={Presentation.Auto}` on the provider itself sets every sheet-capable component at once. See [ConfigProvider.md](ConfigProvider.md).
70
94
 
71
95
  The panel also takes the full native `div` attribute set (`id`, `role`, `aria-*`, `data-*`, …). Pass `aria-label` when using `hideHeader`, since there is then no title to label the dialog with.
72
96
 
73
- **Slots:** `container` `backdrop` `modal` `header` `title` `closeButton` `body`
97
+ **Slots:** `container` `backdrop` `modal` `header` `title` `closeButton` `body` `footer`
74
98
 
75
99
  **Labels:** `close` — the text this component renders of its own. Pass `labels` to override any of them, on the component or app-wide through `ConfigProvider`; they merge per key. Type: `ModalLabels`.
@@ -31,7 +31,7 @@ const [value, setValue] = useState<MultiSelectValue[]>([]);
31
31
  <MultiSelect items={countries} searchable labels={{ searchPlaceholder: 'Filter countries…' }} />
32
32
 
33
33
  // Tag entry: type a value that isn't in `items` and pick the "add" row
34
- <MultiSelect items={commonTags} allowCustomValues labels={{ create: (value) => `Neu: ${value }}`} />
34
+ <MultiSelect items={commonTags} allowCustomValues labels={{ create: (value) => `Neu: ${value}` }} />
35
35
 
36
36
  // Cap the selection — unselected options disable once the cap is reached
37
37
  <MultiSelect items={items} maxSelected={3} />
@@ -84,7 +84,7 @@ import { Presentation } from '@ahrowe/ui';
84
84
  | `errorMessage` | `string` | Manual error, shown in a tooltip when there's no validator |
85
85
  | `isValid` | `boolean` | Manual valid state (default `true`) |
86
86
 
87
- **Keyboard:** `↓` or `Enter` opens the panel. `↑`/`↓` move the highlight and wrap around, `Home`/`End` jump to the ends, `Enter` toggles the highlighted option, `Escape` closes. `Backspace` removes the last selection when the search box is empty. With `searchable`, focus moves into the search box on open and the same keys work from there.
87
+ **Keyboard:** `↓` or `Enter` opens the panel. `↑`/`↓` move the highlight and wrap around, skipping options that cannot be picked — a disabled one, or any unselected one once `maxSelected` is reached. `Home`/`End` jump to the ends, `Enter` toggles the highlighted option, `Escape` closes. The panel scrolls to keep the highlighted option in view. `Backspace` removes the last selection when the search box is empty. With `searchable`, focus moves into the search box on open and the same keys work from there.
88
88
 
89
89
  **Accessibility:** the control is a `role="combobox"` with `aria-expanded`, `aria-haspopup="listbox"` and `aria-controls`; the panel is a `role="listbox"` with `aria-multiselectable="true"`, and each option carries `aria-selected`. The highlighted option is reported through `aria-activedescendant`, so focus stays on the control (or the search box) rather than moving between options. Each chip's remove button is labelled `Remove <label>`.
90
90
 
@@ -1,6 +1,6 @@
1
1
  # Pagination
2
2
 
3
- **When to use:** Move through server-paged results a page at a time — a results list, an admin table, a report. For endless scrolling instead, use `InfiniteBlock`; for a long list that's all in memory, use `VirtualList`.
3
+ **When to use:** Move through server-paged results a page at a time — a results list, an admin table, a report. For endless scrolling instead, or for a long list that's all in memory, use `VirtualList`.
4
4
 
5
5
  **Keywords:** pager, paging, page numbers, next page, previous page, page navigation, offset, results
6
6
 
package/docs/Popover.md CHANGED
@@ -69,10 +69,14 @@ import { Popover, PopoverPlacement, PopoverAlign, PopoverTrigger } from '@ahrowe
69
69
 
70
70
  **Bottom sheet:** `presentation={Presentation.Sheet}` drops the anchoring and the arrow, and pins the panel to the bottom of the screen instead — full width up to 560px, behind a backdrop, scrolling internally past 70% of the viewport height, lifted above an open on-screen keyboard, and shrunk to fit the space that leaves rather than running off the top of the screen. Scrolling on the page behind it is locked while it's open, and tapping the backdrop closes it without pressing whatever sits behind it (`closeOnOutsideClick={false}` leaves the backdrop inert but still blocking). `Presentation.Auto` applies that only when the pointer is coarse *and* the screen is under 768px wide.
71
71
 
72
+ **Sheet dimensions:** as a sheet it spans the full width up to `--sheet-max-width` (560px) and centres beyond it, caps its height at `--sheet-max-height` (70dvh) of the space actually visible, and clears a phone's home indicator with `--sheet-safe-padding` (8px, or the device's own safe-area inset where that is larger). Set any of them per instance via `style` or theme-wide via `ThemeProvider`.
73
+
72
74
  Only a `Click` trigger presents as a sheet. `Hover` and `Focus` open something small next to whatever caused them, which is the opposite of a screen-owning sheet, so they stay anchored regardless of `presentation`.
73
75
 
74
76
  **Global defaults:** adopts `ConfigProvider`, e.g. `defaultProps={{ Popover: { presentation: Presentation.Auto } }}`, or `presentation={Presentation.Auto}` on the provider itself to set every sheet-capable component at once. See [ConfigProvider.md](ConfigProvider.md).
75
77
 
76
78
  Requires a `<div id="bodyEnd"></div>` at the app root — the panel is portaled there, same as `Tooltip` and `Menu`.
77
79
 
80
+ **Scrolling:** where the browser supports CSS anchor positioning, including the trigger's transforms, the panel is anchored to the trigger in CSS, so it moves with a scrolling trigger in the same frame instead of catching up a frame later. Firefox resolves anchors without transforms, so it keeps the pixel positioning. While it is open the trigger carries an inline `anchor-name`, added to any inline one it already has; an `anchor-name` your stylesheet gives the trigger is overridden for that time.
81
+
78
82
  **Keyboard & focus (click trigger):** the panel is portaled to the end of the DOM, so Tab can't reach it naturally. When the panel has focusable content and the keyboard opened it (Enter or Space on the trigger, or ArrowDown/ArrowUp), focus moves to the first focusable element and the panel gets `role="dialog"`; a pointer click leaves the focus where it already is. `focusOnOpen` forces either. Tabbing past the last element closes the popover and moves focus to the element after the trigger; Shift+Tab past the first element, and Escape, close it and return focus to the trigger. This is non-modal: focus is not trapped, and hover/focus triggers don't steal focus. Escape closes only the innermost open layer, so a popover inside a `Modal` closes on the first press and leaves the modal open. Popovers with only static content don't manage focus or claim the dialog role.
@@ -66,7 +66,7 @@ interface RadioOption {
66
66
  | `onChange` | `(value, event?) => void` | Fires with the newly selected value |
67
67
  | `orientation` | `RadioGroupOrientation` | Layout direction (default `Vertical`) |
68
68
  | `disabled` | `boolean` | Disable the whole group |
69
- | `size` | `string` | Diameter of the radio circle (default `'18px'`) |
69
+ | `size` | `string` | Diameter of the radio circle. Defaults to `1.125em` of `--default-font-size`, i.e. 18px at a 16px base |
70
70
  | `formValidator` | `FormValidator` | Connects to form validation |
71
71
  | `errorMessage` | `string` | Manual error message (when not using a `formValidator`) |
72
72
  | `isValid` | `boolean` | Manual valid state (default `true`) |