altum 0.0.4 → 0.0.6

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 (295) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +47 -1
  3. package/dist/base/FieldPopup/FieldPopup.js +1 -1
  4. package/dist/base/PeriodHeader/PeriodHeader.js +1 -1
  5. package/dist/base/ToggleControlBase/ToggleControlBase.js +1 -1
  6. package/dist/base/ToggleControlBase/ToggleControlBase.module.css.js +1 -1
  7. package/dist/components/Accordion/Accordion.js +1 -1
  8. package/dist/components/Accordion/Accordion.module.css.js +1 -1
  9. package/dist/components/ActionList/ActionList.js +1 -1
  10. package/dist/components/ActionList/ActionList.module.css.js +1 -1
  11. package/dist/components/ActionSheetTrigger/ActionSheetTrigger.js +1 -1
  12. package/dist/components/ActionSheetTrigger/ActionSheetTrigger.module.css.js +1 -1
  13. package/dist/components/Alert/Alert.js +1 -1
  14. package/dist/components/Alert/Alert.module.css.js +1 -1
  15. package/dist/components/Avatar/Avatar.module.css.js +1 -1
  16. package/dist/components/Badge/Badge.js +1 -1
  17. package/dist/components/Badge/Badge.module.css.js +1 -1
  18. package/dist/components/Box/Box.js +1 -1
  19. package/dist/components/Box/Box.module.css.js +1 -1
  20. package/dist/components/Bubble/Bubble.js +1 -1
  21. package/dist/components/Bubble/Bubble.module.css.js +1 -1
  22. package/dist/components/Button/Button.js +1 -1
  23. package/dist/components/Button/Button.module.css.js +1 -0
  24. package/dist/components/ButtonGroup/ButtonGroup.js +1 -1
  25. package/dist/components/ButtonGroup/ButtonGroup.module.css.js +1 -1
  26. package/dist/components/ButtonIcon/ButtonIcon.js +1 -1
  27. package/dist/components/ButtonIcon/ButtonIcon.module.css.js +1 -0
  28. package/dist/components/ButtonIcon/OverlayCloseButton.js +1 -0
  29. package/dist/components/Calendar/Calendar.context.js +1 -1
  30. package/dist/components/Calendar/Calendar.module.css.js +1 -1
  31. package/dist/components/Calendar/Calendar.slots.js +1 -1
  32. package/dist/components/Calendar/Calendar.utils.js +1 -1
  33. package/dist/components/Calendar/Calendar.views.js +1 -1
  34. package/dist/components/CalendarBoard/CalendarBoard.MonthView.js +1 -1
  35. package/dist/components/CalendarBoard/CalendarBoard.Schedule.js +1 -1
  36. package/dist/components/CalendarBoard/CalendarBoard.Schedule.module.css.js +1 -1
  37. package/dist/components/CalendarBoard/CalendarBoard.Schedule.utils.js +1 -1
  38. package/dist/components/CalendarBoard/CalendarBoard.YearView.js +2 -2
  39. package/dist/components/CalendarBoard/CalendarBoard.chrome.js +1 -1
  40. package/dist/components/CalendarBoard/CalendarBoard.context.js +1 -1
  41. package/dist/components/CalendarBoard/CalendarBoard.module.css.js +1 -1
  42. package/dist/components/CalendarBoard/CalendarBoard.utils.js +1 -1
  43. package/dist/components/CalendarBoard/calendar.schedule.js +1 -1
  44. package/dist/components/Card/Card.js +1 -1
  45. package/dist/components/Card/Card.module.css.js +1 -1
  46. package/dist/components/Chip/Chip.js +1 -1
  47. package/dist/components/Chip/Chip.module.css.js +1 -1
  48. package/dist/components/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  49. package/dist/components/ColorSwatchGroup/ColorSwatchGroup.module.css.js +1 -1
  50. package/dist/components/CommandPalette/CommandPalette.js +1 -1
  51. package/dist/components/CommandPalette/CommandPalette.module.css.js +1 -1
  52. package/dist/components/ConfirmDialog/ConfirmDialog.js +1 -1
  53. package/dist/components/DateField/DateField.js +1 -1
  54. package/dist/components/DateField/DateField.utils.js +1 -1
  55. package/dist/components/DateRangeField/DateRangeField.js +1 -1
  56. package/dist/components/DayStripCalendar/DayStripCalendar.js +1 -1
  57. package/dist/components/DialogLayout/DialogLayout.js +1 -0
  58. package/dist/components/DialogLayout/DialogLayout.module.css.js +1 -0
  59. package/dist/components/Dropdown/Dropdown.js +1 -1
  60. package/dist/components/Dropdown/Dropdown.module.css.js +1 -1
  61. package/dist/components/Dropdown/DropdownMobileSheet.js +1 -1
  62. package/dist/components/FileList/FileList.js +1 -1
  63. package/dist/components/Grid/Grid.js +1 -1
  64. package/dist/components/Grid/Grid.utils.js +1 -1
  65. package/dist/components/ImageCrop/ImageCrop.js +1 -1
  66. package/dist/components/ImageCrop/ImageCrop.module.css.js +1 -1
  67. package/dist/components/ImageGallery/ImageGallery.js +1 -1
  68. package/dist/components/ImageGallery/ImageGallery.module.css.js +1 -1
  69. package/dist/components/ImageLightbox/ImageLightbox.js +1 -1
  70. package/dist/components/ImageLightbox/ImageLightbox.module.css.js +1 -1
  71. package/dist/components/Layout/Layout.js +1 -1
  72. package/dist/components/Layout/Layout.module.css.js +1 -1
  73. package/dist/components/Link/Link.js +1 -1
  74. package/dist/components/Listbox/Listbox.js +1 -1
  75. package/dist/components/Listbox/Listbox.module.css.js +1 -1
  76. package/dist/components/LiveRegion/LiveRegion.js +1 -0
  77. package/dist/components/LocaleProvider/LocaleProvider.js +1 -1
  78. package/dist/components/MaskedField/MaskedField.js +1 -1
  79. package/dist/components/MaskedField/MaskedField.module.css.js +1 -1
  80. package/dist/components/Menu/Menu.js +1 -1
  81. package/dist/components/Menu/Menu.module.css.js +1 -1
  82. package/dist/components/Modal/Modal.js +1 -1
  83. package/dist/components/Modal/Modal.module.css.js +1 -1
  84. package/dist/components/Notification/Notification.js +1 -1
  85. package/dist/components/Notification/Notification.module.css.js +1 -1
  86. package/dist/components/Notification/toast.js +1 -1
  87. package/dist/components/NumberField/NumberField.js +1 -1
  88. package/dist/components/Overflow/Overflow.js +1 -1
  89. package/dist/components/Overflow/Overflow.module.css.js +1 -1
  90. package/dist/components/Overlay/Overlay.frame.js +1 -0
  91. package/dist/components/Overlay/Overlay.js +1 -1
  92. package/dist/components/Overlay/Overlay.module.css.js +1 -1
  93. package/dist/components/Pagination/Pagination.js +1 -1
  94. package/dist/components/PasswordField/PasswordField.js +1 -1
  95. package/dist/components/PasswordField/PasswordField.module.css.js +1 -1
  96. package/dist/components/PinInput/PinInput.js +1 -1
  97. package/dist/components/PinInput/PinInput.module.css.js +1 -1
  98. package/dist/components/Popover/Popover.js +1 -1
  99. package/dist/components/Popover/Popover.module.css.js +1 -1
  100. package/dist/components/PopupSwitch/PopupSwitch.js +1 -0
  101. package/dist/components/PopupSwitch/PopupSwitch.module.css.js +1 -0
  102. package/dist/components/PopupSwitch/PopupSwitch.utils.js +1 -0
  103. package/dist/components/PullToRefresh/PullToRefresh.js +1 -1
  104. package/dist/components/Rating/Rating.js +1 -1
  105. package/dist/components/RelativeTime/RelativeTime.js +1 -1
  106. package/dist/components/SearchField/SearchField.js +1 -1
  107. package/dist/components/SegmentedControl/SegmentedControl.js +1 -1
  108. package/dist/components/Select/Select.js +1 -1
  109. package/dist/components/Select/Select.module.css.js +1 -1
  110. package/dist/components/SelectionGroup/SelectionGroup.js +1 -1
  111. package/dist/components/Sheet/Sheet.js +1 -1
  112. package/dist/components/Sheet/Sheet.module.css.js +1 -1
  113. package/dist/components/Sidebar/Sidebar.js +1 -1
  114. package/dist/components/Sidebar/Sidebar.module.css.js +1 -1
  115. package/dist/components/SkipLink/SkipLink.js +1 -1
  116. package/dist/components/Slider/Slider.js +1 -1
  117. package/dist/components/SortableList/SortableList.js +1 -1
  118. package/dist/components/SortableList/SortableList.module.css.js +1 -1
  119. package/dist/components/Spinner/Spinner.js +1 -1
  120. package/dist/components/Steps/Steps.js +1 -1
  121. package/dist/components/Steps/Steps.module.css.js +1 -1
  122. package/dist/components/SuggestField/SuggestField.js +1 -1
  123. package/dist/components/Table/Table.js +1 -1
  124. package/dist/components/Table/TableRowActions.js +1 -1
  125. package/dist/components/Table/TableView.js +1 -1
  126. package/dist/components/TextField/TextField.js +1 -1
  127. package/dist/components/TextField/TextField.module.css.js +1 -0
  128. package/dist/components/TextareaField/TextareaField.js +1 -1
  129. package/dist/components/TextareaField/TextareaField.module.css.js +1 -0
  130. package/dist/components/ThemeProvider/ThemeProvider.js +1 -1
  131. package/dist/components/ThemeProvider/ThemeProvider.module.css.js +1 -1
  132. package/dist/components/TimeField/TimeField.js +1 -1
  133. package/dist/components/Tooltip/Tooltip.js +1 -1
  134. package/dist/components/Tooltip/Tooltip.module.css.js +1 -1
  135. package/dist/components/UploadZone/UploadZone.js +1 -1
  136. package/dist/components/VirtualList/VirtualList.js +1 -1
  137. package/dist/components/VirtualList/VirtualList.module.css.js +1 -1
  138. package/dist/components/VirtualList/VirtualList.utils.js +1 -1
  139. package/dist/components/VisuallyHidden/VisuallyHidden.js +1 -1
  140. package/dist/components/WheelTimePicker/WheelTimePicker.js +1 -1
  141. package/dist/entries/hooks.js +1 -1
  142. package/dist/entries/icons.js +1 -1
  143. package/dist/entries/locales.js +1 -0
  144. package/dist/entries/utils.js +1 -1
  145. package/dist/hooks/useAutoResize.js +1 -1
  146. package/dist/hooks/useForm.js +1 -1
  147. package/dist/hooks/useFormProvider.js +1 -0
  148. package/dist/hooks/useOtpInputs.js +1 -1
  149. package/dist/hooks/useTrackThumb.js +1 -1
  150. package/dist/icons/icons/IconChevronUpDown.js +1 -0
  151. package/dist/index.js +1 -1
  152. package/dist/locales/en.js +1 -1
  153. package/dist/locales/localeContext.js +1 -1
  154. package/dist/locales/ru.js +1 -1
  155. package/dist/locales/slices/actionList.en.js +1 -0
  156. package/dist/locales/slices/actionList.ru.js +1 -0
  157. package/dist/locales/slices/bubble.en.js +1 -0
  158. package/dist/locales/slices/bubble.ru.js +1 -0
  159. package/dist/locales/slices/buttonGroup.en.js +1 -0
  160. package/dist/locales/slices/buttonGroup.ru.js +1 -0
  161. package/dist/locales/slices/calendar.en.js +1 -0
  162. package/dist/locales/slices/calendar.ru.js +1 -0
  163. package/dist/locales/slices/calendarBoard.en.js +1 -0
  164. package/dist/locales/slices/calendarBoard.ru.js +1 -0
  165. package/dist/locales/slices/chip.en.js +1 -0
  166. package/dist/locales/slices/chip.ru.js +1 -0
  167. package/dist/locales/slices/commandPalette.en.js +1 -0
  168. package/dist/locales/slices/commandPalette.ru.js +1 -0
  169. package/dist/locales/slices/common.en.js +1 -0
  170. package/dist/locales/slices/common.ru.js +1 -0
  171. package/dist/locales/slices/confirmDialog.en.js +1 -0
  172. package/dist/locales/slices/confirmDialog.ru.js +1 -0
  173. package/dist/locales/slices/customSelect.en.js +1 -0
  174. package/dist/locales/slices/customSelect.ru.js +1 -0
  175. package/dist/locales/slices/dateRangeField.en.js +1 -0
  176. package/dist/locales/slices/dateRangeField.ru.js +1 -0
  177. package/dist/locales/slices/dayStrip.en.js +1 -0
  178. package/dist/locales/slices/dayStrip.ru.js +1 -0
  179. package/dist/locales/slices/fileList.en.js +1 -0
  180. package/dist/locales/slices/fileList.ru.js +1 -0
  181. package/dist/locales/slices/imageCrop.en.js +1 -0
  182. package/dist/locales/slices/imageCrop.ru.js +1 -0
  183. package/dist/locales/slices/imageGallery.en.js +1 -0
  184. package/dist/locales/slices/imageGallery.ru.js +1 -0
  185. package/dist/locales/slices/imageLightbox.en.js +1 -0
  186. package/dist/locales/slices/imageLightbox.ru.js +1 -0
  187. package/dist/locales/slices/listbox.en.js +1 -0
  188. package/dist/locales/slices/listbox.ru.js +1 -0
  189. package/dist/locales/slices/menu.en.js +1 -0
  190. package/dist/locales/slices/menu.ru.js +1 -0
  191. package/dist/locales/slices/modal.en.js +1 -0
  192. package/dist/locales/slices/modal.ru.js +1 -0
  193. package/dist/locales/slices/numberField.en.js +1 -0
  194. package/dist/locales/slices/numberField.ru.js +1 -0
  195. package/dist/locales/slices/overflow.en.js +1 -0
  196. package/dist/locales/slices/overflow.ru.js +1 -0
  197. package/dist/locales/slices/pagination.en.js +1 -0
  198. package/dist/locales/slices/pagination.ru.js +1 -0
  199. package/dist/locales/slices/password.en.js +1 -0
  200. package/dist/locales/slices/password.ru.js +1 -0
  201. package/dist/locales/slices/pinInput.en.js +1 -0
  202. package/dist/locales/slices/pinInput.ru.js +1 -0
  203. package/dist/locales/slices/pullToRefresh.en.js +1 -0
  204. package/dist/locales/slices/pullToRefresh.ru.js +1 -0
  205. package/dist/locales/slices/rating.en.js +1 -0
  206. package/dist/locales/slices/rating.ru.js +1 -0
  207. package/dist/locales/slices/searchField.en.js +1 -0
  208. package/dist/locales/slices/searchField.ru.js +1 -0
  209. package/dist/locales/slices/select.en.js +1 -0
  210. package/dist/locales/slices/select.ru.js +1 -0
  211. package/dist/locales/slices/sheet.en.js +1 -0
  212. package/dist/locales/slices/sheet.ru.js +1 -0
  213. package/dist/locales/slices/sidebar.en.js +1 -0
  214. package/dist/locales/slices/sidebar.ru.js +1 -0
  215. package/dist/locales/slices/skipLink.en.js +1 -0
  216. package/dist/locales/slices/skipLink.ru.js +1 -0
  217. package/dist/locales/slices/slider.en.js +1 -0
  218. package/dist/locales/slices/slider.ru.js +1 -0
  219. package/dist/locales/slices/sortable.en.js +1 -0
  220. package/dist/locales/slices/sortable.ru.js +1 -0
  221. package/dist/locales/slices/spinner.en.js +1 -0
  222. package/dist/locales/slices/spinner.ru.js +1 -0
  223. package/dist/locales/slices/steps.en.js +1 -0
  224. package/dist/locales/slices/steps.ru.js +1 -0
  225. package/dist/locales/slices/suggestField.en.js +1 -0
  226. package/dist/locales/slices/suggestField.ru.js +1 -0
  227. package/dist/locales/slices/table.en.js +1 -0
  228. package/dist/locales/slices/table.ru.js +1 -0
  229. package/dist/locales/slices/timeField.en.js +1 -0
  230. package/dist/locales/slices/timeField.ru.js +1 -0
  231. package/dist/locales/slices/upload.en.js +1 -0
  232. package/dist/locales/slices/upload.ru.js +1 -0
  233. package/dist/locales/slices/virtualList.en.js +1 -0
  234. package/dist/locales/slices/virtualList.ru.js +1 -0
  235. package/dist/locales/translate.js +1 -1
  236. package/dist/shared/form/Form.utils.js +1 -0
  237. package/dist/shared/form/formRules.js +1 -0
  238. package/dist/shared/form/formValues.js +1 -0
  239. package/dist/styles/calendarChrome.module.css.js +1 -1
  240. package/dist/styles/status.module.css.js +1 -1
  241. package/dist/styles/toggleBox.module.css.js +1 -1
  242. package/dist/styles/visuallyHidden.module.css.js +1 -0
  243. package/dist/utils/autoHeight.js +1 -1
  244. package/dist/utils/date.js +1 -0
  245. package/dist/utils/duration.js +1 -0
  246. package/dist/utils/eventTarget.js +1 -0
  247. package/dist/utils/fieldMessage.js +1 -0
  248. package/dist/utils/injectCss.js +1 -1
  249. package/dist/utils/locale.js +1 -0
  250. package/dist/utils/plural.js +1 -0
  251. package/dist/utils/timezone.js +1 -0
  252. package/dist/utils/visitElementTree.js +1 -1
  253. package/docs/COMPONENTS.md +18 -16
  254. package/docs/LAYOUT.md +9 -9
  255. package/docs/THEMING.md +9 -16
  256. package/package.json +6 -1
  257. package/types/entries/hooks.d.ts +61 -13
  258. package/types/entries/icons.d.ts +3 -1
  259. package/types/entries/locales.d.ts +275 -0
  260. package/types/entries/utils.d.ts +71 -8
  261. package/types/index.d.ts +583 -661
  262. package/dist/base/ButtonBase/ButtonBase.js +0 -1
  263. package/dist/base/ButtonBase/ButtonBase.module.css.js +0 -1
  264. package/dist/base/ChevronButton/ChevronButton.js +0 -1
  265. package/dist/base/DialogBase/DialogBase.js +0 -1
  266. package/dist/base/DialogBase/DialogBase.module.css.js +0 -1
  267. package/dist/base/FieldBase/FieldBase.js +0 -1
  268. package/dist/base/FieldBase/FieldBase.module.css.js +0 -1
  269. package/dist/base/TextControl/TextControl.js +0 -1
  270. package/dist/components/CustomSelect/CustomSelect.Filter.js +0 -1
  271. package/dist/components/CustomSelect/CustomSelect.List.js +0 -1
  272. package/dist/components/CustomSelect/CustomSelect.Shell.js +0 -1
  273. package/dist/components/CustomSelect/CustomSelect.Shell.module.css.js +0 -1
  274. package/dist/components/CustomSelect/CustomSelect.context.js +0 -1
  275. package/dist/components/CustomSelect/CustomSelect.js +0 -1
  276. package/dist/components/CustomSelect/CustomSelect.module.css.js +0 -1
  277. package/dist/components/CustomSelect/useCustomSelectComboboxKeyboard.js +0 -1
  278. package/dist/components/FocusTrap/FocusTrap.js +0 -1
  279. package/dist/components/Overflow/OverflowActionsMode.js +0 -1
  280. package/dist/components/Overflow/OverflowMeasure.js +0 -1
  281. package/dist/components/Overflow/OverflowMore.js +0 -1
  282. package/dist/components/Overlay/Overlay.Dismiss.js +0 -1
  283. package/dist/components/Overlay/Overlay.Positioner.js +0 -1
  284. package/dist/components/Overlay/Overlay.types.js +0 -1
  285. package/dist/components/SortableList/SortableList.types.js +0 -1
  286. package/dist/components/SortableList/useSortableListDnD.js +0 -1
  287. package/dist/components/TimeField/TimeField.module.css.js +0 -1
  288. package/dist/hooks/useDigitMask.js +0 -1
  289. package/dist/hooks/useFieldControl.js +0 -1
  290. package/dist/hooks/useOverflowEdges.js +0 -1
  291. package/dist/hooks/useScrollFocusedChildIntoView.js +0 -1
  292. package/dist/styles/ControlTrack.module.css.js +0 -1
  293. package/dist/styles/srOnly.module.css.js +0 -1
  294. package/dist/utils/controlTrack.js +0 -1
  295. package/dist/utils/fieldPlaceholder.js +0 -1
@@ -1 +1 @@
1
- "use client";import{injectCss as t}from"../utils/injectCss.js";var e=".wQhie{align-items:center;display:flex;gap:var(--altum-g-space-2);justify-content:space-between;min-height:var(--altum-g-space-8,32px)}.XP4XB{color:var(--altum-color-ink-default);font-size:var(--altum-g-font-size-base);font-weight:var(--altum-g-font-weight-semibold);line-height:var(--altum-g-line-height-base);text-align:center}.X109C,.XP4XB{flex:1 1 auto}.LfSZJ{align-items:center;border-radius:var(--altum-g-radius-sm);color:var(--altum-color-muted);display:inline-flex;flex-shrink:0;height:var(--altum-g-space-8,32px);justify-content:center;transition:var(--altum-transition-smooth);width:var(--altum-g-space-8,32px)}.LfSZJ:hover:not(:disabled){background-color:var(--altum-color-option-hover);color:var(--altum-color-input-text)}.njMp-{border-radius:var(--altum-g-radius-sm);transition:var(--altum-transition-smooth)}.njMp-:hover:not(:disabled){background-color:var(--altum-color-option-hover)}.njMp-:focus-visible{outline-offset:-2px}.AmBrO{background-color:var(--altum-color-selection-fill)}.AmBrO,.AmBrO:hover:not(:disabled){color:var(--altum-color-selection-fill-fg)}.AmBrO:hover:not(:disabled){background-color:var(--altum-color-selection-fill-emphasis)}.SZQFN:not(.AmBrO){box-shadow:inset 0 0 0 1px var(--altum-color-brand)}.hHqSW{display:grid;gap:var(--altum-g-space-1);grid-template-columns:repeat(7,1fr);text-align:center}";const a={header:"wQhie",title:"XP4XB",titleSpacer:"X109C",navBtn:"LfSZJ",cell:"njMp-",selected:"AmBrO",today:"SZQFN",weekGrid:"hHqSW"};t(e);export{a as default};
1
+ "use client";import{injectCss as e}from"../utils/injectCss.js";var t=".wQhie{align-items:center;display:flex;gap:var(--altum-g-space-2);justify-content:space-between;min-height:var(--altum-g-space-8,32px)}.XP4XB{color:var(--altum-color-ink-default);font-size:var(--altum-g-font-size-base);font-weight:var(--altum-g-font-weight-semibold);line-height:var(--altum-g-line-height-base);text-align:center}.X109C,.XP4XB{flex:1 1 auto}.njMp-{border-radius:var(--altum-g-radius-sm);transition:var(--altum-transition-smooth)}.njMp-:hover:not(:disabled){background-color:var(--altum-color-option-hover)}.njMp-:focus-visible{outline-offset:-2px}.AmBrO{background-color:var(--altum-color-selection-fill)}.AmBrO,.AmBrO:hover:not(:disabled){color:var(--altum-color-selection-fill-fg)}.AmBrO:hover:not(:disabled){background-color:var(--altum-color-selection-fill-emphasis)}.SZQFN:not(.AmBrO){box-shadow:inset 0 0 0 1px var(--altum-color-brand)}.hHqSW{display:grid;gap:var(--altum-g-space-1);grid-template-columns:repeat(7,1fr);text-align:center}";const a={header:"wQhie",title:"XP4XB",titleSpacer:"X109C",cell:"njMp-",selected:"AmBrO",today:"SZQFN",weekGrid:"hHqSW"};e(t);export{a as default};
@@ -1 +1 @@
1
- "use client";import{injectCss as t}from"../utils/injectCss.js";var a=".f6EDo{--altum-status-border:var(--altum-color-status-success-border);--altum-status-fg:var(--altum-color-status-success-fg);--altum-status-bg:var(--altum-color-status-success-bg);--altum-status-fill:var(--altum-color-status-success);--altum-status-strong:var(--altum-color-status-success-strong);--altum-status-border-hover:var(--altum-color-status-success-border-hover);--altum-status-bg-hover:var(--altum-color-status-success-bg-hover)}.kxhxS{--altum-status-border:var(--altum-color-status-info-border);--altum-status-fg:var(--altum-color-status-info-fg);--altum-status-bg:var(--altum-color-status-info-bg);--altum-status-fill:var(--altum-color-status-info);--altum-status-strong:var(--altum-color-status-info);--altum-status-border-hover:var(--altum-color-status-info-border-hover);--altum-status-bg-hover:var(--altum-color-status-info-bg-hover)}.KVEW3{--altum-status-border:var(--altum-color-status-warning-border);--altum-status-fg:var(--altum-color-status-warning-fg);--altum-status-bg:var(--altum-color-status-warning-bg);--altum-status-fill:var(--altum-color-status-warning);--altum-status-strong:var(--altum-color-status-warning-strong);--altum-status-border-hover:var(--altum-color-status-warning-border-hover);--altum-status-bg-hover:var(--altum-color-status-warning-bg-hover)}._9J4Mh{--altum-status-border:var(--altum-color-status-danger-border);--altum-status-fg:var(--altum-color-status-danger-fg);--altum-status-bg:var(--altum-color-status-danger-bg);--altum-status-fill:var(--altum-color-status-error);--altum-status-strong:var(--altum-color-danger-text-secondary);--altum-status-border-hover:var(--altum-color-status-danger-border-hover);--altum-status-bg-hover:var(--altum-color-status-danger-bg-hover)}.KVEW3.AI6TD,._9J4Mh.AI6TD,.f6EDo.AI6TD,.kxhxS.AI6TD{background-color:var(--altum-status-bg);border-color:var(--altum-status-border);color:var(--altum-status-fg)}.KOZKu.AI6TD:hover:not(:disabled){background-color:var(--altum-status-bg-hover);border-color:var(--altum-status-border-hover)}._2pTv-{background-color:color-mix(in srgb,var(--altum-status-fill) 28%,#0000);border-color:color-mix(in srgb,var(--altum-status-fill) 70%,#0000)}.w6zDz{background-color:var(--altum-status-fill);color:var(--altum-color-brand-text)}.KVEW3 .yuC6o,._9J4Mh .yuC6o,.f6EDo .yuC6o,.kxhxS .yuC6o,.yuC6o{color:var(--altum-status-strong)}";const r={success:"f6EDo",info:"kxhxS",warning:"KVEW3",error:"_9J4Mh",surface:"AI6TD",clickable:"KOZKu",active:"_2pTv-",fill:"w6zDz",fg:"yuC6o"};t(a);export{r as default};
1
+ "use client";import{injectCss as t}from"../utils/injectCss.js";var a=".KVEW3,._9J4Mh,.f6EDo,.kxhxS{--altum-status-bg:color-mix(in srgb,var(--altum-status-fill) var(--altum-status-bg-amt,11%),var(--altum-status-bg-base,#0000));--altum-status-border:color-mix(in srgb,var(--altum-status-fill) var(--altum-status-border-amt,34%),#0000);--altum-status-bg-hover:color-mix(in srgb,var(--altum-status-fill) var(--altum-status-bg-hover-amt,18%),var(--altum-status-bg-base,#0000));--altum-status-border-hover:color-mix(in srgb,var(--altum-status-fill) var(--altum-status-border-hover-amt,46%),#0000)}.f6EDo{--altum-status-fill:var(--altum-color-status-success);--altum-status-strong:var(--altum-color-status-success-strong);--altum-status-fg:var(--altum-status-strong)}.kxhxS{--altum-status-fill:var(--altum-color-status-info);--altum-status-strong:var(--altum-color-status-info);--altum-status-fg:var(--altum-status-fill)}.KVEW3{--altum-status-fill:var(--altum-color-status-warning);--altum-status-strong:var(--altum-color-status-warning-strong);--altum-status-fg:var(--altum-status-strong);--altum-status-bg-amt:var(--altum-status-warning-bg-amt,12%);--altum-status-border-amt:var(--altum-status-warning-border-amt,36%);--altum-status-bg-hover-amt:var(--altum-status-warning-bg-hover-amt,20%);--altum-status-border-hover-amt:var(--altum-status-warning-border-hover-amt,48%)}._9J4Mh{--altum-status-fill:var(--altum-color-status-error);--altum-status-strong:var(--altum-color-danger-text-secondary);--altum-status-fg:var(--altum-status-fill);--altum-status-bg-hover-amt:var(--altum-status-danger-bg-hover-amt,18%);--altum-status-border-hover-amt:var(--altum-status-danger-border-hover-amt,46%)}.KVEW3.AI6TD,._9J4Mh.AI6TD,.f6EDo.AI6TD,.kxhxS.AI6TD{background-color:var(--altum-status-bg);border-color:var(--altum-status-border);color:var(--altum-status-fg)}.KOZKu.AI6TD:hover:not(:disabled){background-color:var(--altum-status-bg-hover);border-color:var(--altum-status-border-hover)}._2pTv-{background-color:color-mix(in srgb,var(--altum-status-fill) 28%,#0000);border-color:color-mix(in srgb,var(--altum-status-fill) 70%,#0000)}.w6zDz{background-color:var(--altum-status-fill);color:var(--altum-color-brand-text)}.KVEW3 .yuC6o,._9J4Mh .yuC6o,.f6EDo .yuC6o,.kxhxS .yuC6o,.yuC6o{color:var(--altum-status-strong)}";const s={success:"f6EDo",info:"kxhxS",warning:"KVEW3",error:"_9J4Mh",surface:"AI6TD",clickable:"KOZKu",active:"_2pTv-",fill:"w6zDz",fg:"yuC6o"};t(a);export{s as default};
@@ -1 +1 @@
1
- "use client";import{injectCss as o}from"../utils/injectCss.js";var r='._9TRXw[data-align=start] .yMKDd{margin-top:var(--altum-toggle-align-nudge)}._9TRXw:active .sppC0:not(:disabled,[aria-readonly=true])~.yMKDd,._9TRXw:hover .sppC0:not(:checked):not(:disabled,[aria-readonly=true])~.yMKDd{border-color:var(--altum-color-border-hover)}._9TRXw:has(.sppC0[aria-readonly=true]) .yMKDd{background-color:var(--altum-color-control-bg-readonly);border-color:var(--altum-color-control-border-readonly);border-style:dashed}._9TRXw:has(.sppC0[aria-readonly=true]):hover .yMKDd{border-color:var(--altum-color-control-border-readonly)}._9TRXw .sppC0:checked~.yMKDd{background-color:var(--altum-color-control-bg-checked);border-color:var(--altum-color-control-border-checked)}:is(._9TRXw .sppC0:checked~.yMKDd):after{opacity:1}._9TRXw .sppC0:focus-visible~.yMKDd{outline:var(--altum-focus-ring-width) solid var(--altum-focus-ring-color);outline-offset:var(--altum-focus-ring-offset)}.sppC0{appearance:none}.yMKDd{background-color:var(--altum-color-control-bg);border:1px solid var(--altum-color-control-border);box-sizing:border-box;display:inline-block;height:var(--altum-toggle-box-size);position:relative;width:var(--altum-toggle-box-size)}.yMKDd,.yMKDd:after{transition:var(--altum-transition-smooth)}.yMKDd:after{content:"";left:50%;opacity:0;position:absolute;top:50%}@media (prefers-reduced-motion:reduce){.yMKDd,.yMKDd:after{transition:none}}';const a={root:"_9TRXw",box:"yMKDd",input:"sppC0"};o(r);export{a as default};
1
+ "use client";import{injectCss as o}from"../utils/injectCss.js";var r='._9TRXw[data-align=start] .yMKDd{margin-top:var(--altum-toggle-align-nudge)}._9TRXw:active .sppC0:not(:disabled,[aria-readonly=true])~.yMKDd,._9TRXw:hover .sppC0:not(:checked):not(:disabled,[aria-readonly=true])~.yMKDd{border-color:var(--altum-color-border-hover)}._9TRXw:has(.sppC0[aria-readonly=true]) .yMKDd{background-color:var(--altum-color-control-bg-readonly);border-color:var(--altum-color-control-border-readonly);border-style:dashed}._9TRXw:has(.sppC0[aria-readonly=true]):hover .yMKDd{border-color:var(--altum-color-control-border-readonly)}._9TRXw .sppC0:checked~.yMKDd{background-color:var(--altum-color-control-bg-checked);border-color:var(--altum-color-control-border-checked)}:is(._9TRXw .sppC0:checked~.yMKDd):after{opacity:1}._9TRXw .sppC0:focus-visible~.yMKDd{outline:var(--altum-focus-ring-width) solid var(--altum-focus-ring-color);outline-offset:var(--altum-focus-ring-offset)}.sppC0{appearance:none}.yMKDd{background-color:var(--altum-color-control-bg);border:1px solid var(--altum-color-control-border);box-sizing:border-box;display:inline-block;flex-shrink:0;height:var(--altum-toggle-box-size);min-height:var(--altum-toggle-box-size);min-width:var(--altum-toggle-box-size);position:relative;width:var(--altum-toggle-box-size)}.yMKDd,.yMKDd:after{transition:var(--altum-transition-smooth)}.yMKDd:after{content:"";left:50%;opacity:0;position:absolute;top:50%}@media (prefers-reduced-motion:reduce){.yMKDd,.yMKDd:after{transition:none}}';const e={root:"_9TRXw",box:"yMKDd",input:"sppC0"};o(r);export{e as default};
@@ -0,0 +1 @@
1
+ "use client";import{injectCss as e}from"../utils/injectCss.js";var o=".POwhD{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}";const t={root:"POwhD"};e(o);export{t as default};
@@ -1 +1 @@
1
- function n(e,a={}){const{minHeightPx:t=0,maxHeight:o}=a;e.style.maxHeight=o!==void 0?typeof o=="number"?`${o}px`:o:"",e.style.height="auto";const i=e.scrollHeight,r=parseFloat(getComputedStyle(e).maxHeight),l=Number.isFinite(r)?r:1/0,h=Math.min(Math.max(i,t),l);e.style.height=`${h}px`,e.style.overflowY=i>l?"auto":"hidden"}function p(e,a){const t=getComputedStyle(e),o=parseFloat(t.getPropertyValue("--altum-field-control-height"))||0,i=parseFloat(t.lineHeight)||parseFloat(t.fontSize)*1.25,r=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),l=parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),h=r+l+i*a;return a<=1&&o>0?Math.max(h,o):h}export{n as adjustElementHeight,p as getTextareaMinHeightPx};
1
+ function n(e,o={}){const{minHeightPx:t=0,maxHeight:a}=o;e.style.maxHeight=a!==void 0?typeof a=="number"?`${a}px`:a:"",e.style.height="auto";const i=e.scrollHeight,r=parseFloat(getComputedStyle(e).maxHeight),h=Number.isFinite(r)?r:1/0,l=Math.min(Math.max(i,t),h);e.style.height=`${l}px`,e.style.overflowY=i>h?"auto":"hidden"}function p(e,o){const t=getComputedStyle(e),a=parseFloat(t.getPropertyValue("--altum-field-size-height"))||0,i=parseFloat(t.lineHeight)||parseFloat(t.fontSize)*1.25,r=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),h=parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),l=r+h+i*o;return o<=1&&a>0?Math.max(l,a):l}export{n as adjustElementHeight,p as getTextareaMinHeightPx};
@@ -0,0 +1 @@
1
+ import{localeToBcp47 as l}from"./locale.js";function u(t,e=1){const r=new Date(t),n=r.getDay(),a=e===1?n===0?6:n-1:n;return r.setDate(r.getDate()-a),r.setHours(0,0,0,0),r}function f(t,e=1){const r=u(t,e);return Array.from({length:7},(n,a)=>{const o=new Date(r);return o.setDate(r.getDate()+a),o})}function c(t,e,r){const n=new Date(t.getTime());switch(r){case"minute":n.setMinutes(n.getMinutes()+e);break;case"hour":n.setHours(n.getHours()+e);break;case"day":n.setDate(n.getDate()+e);break;case"week":n.setDate(n.getDate()+e*7);break;case"month":n.setMonth(n.getMonth()+e);break;case"year":n.setFullYear(n.getFullYear()+e);break;default:return r}return n}function s(t){return new Date(t.getFullYear(),t.getMonth(),t.getDate())}function m(t,e){return c(s(t),e,"day")}function d(t,e){return i(t,e)===0}function i(t,e){const r=t.getFullYear()-e.getFullYear();if(r)return r<0?-1:1;const n=t.getMonth()-e.getMonth();if(n)return n<0?-1:1;const a=t.getDate()-e.getDate();return a<0?-1:a>0?1:0}function g(t,e,r){const n=new Date(t,e,r);return n.getFullYear()===t&&n.getMonth()===e&&n.getDate()===r}function h(t){const e=/^(\d{4})-(\d{2})-(\d{2})$/.exec(t);if(!e)return null;const r=Number(e[1]),n=Number(e[2])-1,a=Number(e[3]);return g(r,n,a)?new Date(r,n,a):null}function b(t){const e=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${t.getFullYear()}-${e}-${r}`}function D(t){return(Math.trunc(t)%24+24)%24}function w(t,e){const r=new Date(Date.UTC(2020,0,15,D(t),0,0));return new Intl.DateTimeFormat(l(e),{timeZone:"UTC",hour:"numeric",minute:"2-digit"}).format(r)}function y(t){return`${String(D(t)).padStart(2,"0")}:00`}export{m as addDays,c as addToDate,i as compareDay,w as formatHourLabel,y as formatHourTime,b as formatLocalDate,f as getWeekDays,u as getWeekStart,g as isExistingLocalDate,d as isSameDay,h as parseLocalDate,s as startOfDay};
@@ -0,0 +1 @@
1
+ const i=60,o=3600,t=86400,r=604800,e={minute:60,hour:3600,day:86400,week:604800};function S(n,u){return n/e[u]}function a(n,u){return n*e[u]}function c(n){return n!==0&&n%604800===0?{unit:"week",value:n/604800}:n!==0&&n%86400===0?{unit:"day",value:n/86400}:n!==0&&n%3600===0?{unit:"hour",value:n/3600}:{unit:"minute",value:n/60}}export{t as DAY_SECONDS,o as HOUR_SECONDS,i as MINUTE_SECONDS,r as WEEK_SECONDS,c as getDurationUnitAndValue,S as secondsToUnit,a as unitToSeconds};
@@ -0,0 +1 @@
1
+ const i=["input","textarea","select","a",'[contenteditable="true"]'].join(", "),r=['[role="dialog"]','[role="listbox"]','[role="menu"]','[role="tree"]',"[data-side]"].join(",");function a(e){return`[class*="${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"]`}function s(e){if(typeof HTMLElement>"u"||!(e instanceof HTMLElement))return!1;const{tagName:t}=e;return t==="INPUT"||t==="TEXTAREA"||t==="SELECT"||e.isContentEditable}function l(e,t){return typeof Element>"u"||!(e instanceof Element)||!t?!1:!!e.closest(t)}function c(e,t,n,o){return typeof Node>"u"||!(e instanceof Node)?!0:!(t?.contains(e)||e instanceof Element&&(n&&e.closest(n)||o&&e.closest(a(o))))}export{i as DEFAULT_DRAG_BLOCKED_SELECTOR,r as DEFAULT_PORTAL_SELECTOR,l as isDragBlockedTarget,s as isEditableTarget,c as isOutsideFormInteraction};
@@ -0,0 +1 @@
1
+ function s(r){return typeof r=="string"&&r.length>0}function l(r,d){const{error:i,description:c}=d,e=!!i,o=s(c),t=typeof i=="string"?`${r}-error`:void 0,n=o&&!e?`${r}-description`:void 0,p=[t,n].filter(Boolean).join(" ")||void 0;return{hasError:e,isDescriptionText:o,errorId:t,descriptionId:n,describedBy:p}}export{s as isFieldDescriptionText,l as resolveFieldMessages};
@@ -1 +1 @@
1
- function n(t){if(typeof document>"u")return;const e=document.createElement("style");e.textContent=t,document.head.appendChild(e)}export{n as injectCss};
1
+ function n(t){if(typeof document>"u")return;const e=document.createElement("style");e.textContent=`@layer altum{${t}}`,document.head.appendChild(e)}export{n as injectCss};
@@ -0,0 +1 @@
1
+ function n(e){return e==="en"?"en-US":"ru-RU"}export{n as localeToBcp47};
@@ -0,0 +1 @@
1
+ function o(u,t,n,l){const e=Math.abs(Math.trunc(u)),a=e%10,r=e%100;return a===1&&r!==11?t:a>=2&&a<=4&&(r<12||r>14)?n:l}function c(u,t,n){return Math.abs(Math.trunc(u))===1?t:n}function f(u,t,n){return u==="en"?c(t,n.one,n.many):o(t,n.one,n.few,n.many)}export{f as plural,c as pluralEn,o as pluralRu};
@@ -0,0 +1 @@
1
+ import{localeToBcp47 as m}from"./locale.js";const c=["UTC","Africa/Cairo","Africa/Johannesburg","America/Anchorage","America/Argentina/Buenos_Aires","America/Chicago","America/Denver","America/Los_Angeles","America/Mexico_City","America/New_York","America/Sao_Paulo","Asia/Dubai","Asia/Hong_Kong","Asia/Kolkata","Asia/Shanghai","Asia/Singapore","Asia/Tokyo","Australia/Sydney","Europe/Berlin","Europe/London","Europe/Moscow","Europe/Paris","Pacific/Auckland","Pacific/Honolulu"];function s(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC"}catch{return"UTC"}}function f(){const e=Intl,t=typeof e.supportedValuesOf=="function"?[...e.supportedValuesOf("timeZone")]:[...c];return t.includes("UTC")||t.unshift("UTC"),t}function l(e){if(!e)return!1;try{return!0}catch{return!1}}function a(e,t){try{const n=new Intl.DateTimeFormat("en-US",{timeZone:t,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).formatToParts(e),r={};for(const i of n)i.type!=="literal"&&(r[i.type]=i.value);const o=Number(r.hour);return{year:Number(r.year),month:Number(r.month),day:Number(r.day),hour:o===24?0:o,minute:Number(r.minute),second:Number(r.second)}}catch{return null}}function d(e,t=new Date){const n=a(t,e);if(!n)return null;const r=Date.UTC(n.year,n.month-1,n.day,n.hour,n.minute,n.second);return Math.round((r-t.getTime())/6e4)}function y(e,t,n){const r=a(e,n),o=a(t,n);return!r||!o?!1:r.year===o.year&&r.month===o.month&&r.day===o.day}function h(e,t,n,r={}){try{return new Intl.DateTimeFormat(m(n),{...r,timeZone:t}).format(e)}catch{return""}}function u(e,t=new Date){try{return new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"shortOffset"}).formatToParts(t).find(n=>n.type==="timeZoneName")?.value??""}catch{return""}}function A(e){const t=u(e);return t?`${e} (${t})`:e}export{h as formatInTimeZone,A as formatTimezoneLabel,u as formatTimezoneOffset,s as getBrowserTimezone,f as getSupportedTimezones,d as getTimezoneOffsetMinutes,a as getZonedParts,y as isSameZonedDay,l as isValidTimeZone};
@@ -1 +1 @@
1
- import{Children as o,isValidElement as f,Fragment as c}from"react";function a(e){return e.type===c}function i(e,t,n=()=>!0){o.forEach(e,r=>{if(!f(r))return;if(a(r)){i(r.props.children,t,n);return}if(t(r),!n(r))return;const l=r.props.children;l!=null&&i(l,t,n)})}const u=Symbol.for("altum.dialogTitle");function p(e){return Object.defineProperty(e,u,{value:!0,enumerable:!1}),e}function m(e){return(typeof e=="function"||typeof e=="object"&&e!=null)&&u in e}function s(e){let t=!1;return i(e,n=>{m(n.type)&&(t=!0)}),t}export{p as markDialogTitle,s as treeContainsDialogTitle,i as visitElementTree};
1
+ import{Children as l,isValidElement as u,Fragment as f}from"react";function p(n){return n.type===f}function e(n,i,t=()=>!0){l.forEach(n,r=>{if(!u(r))return;if(p(r)){e(r.props.children,i,t);return}if(i(r),!t(r))return;const o=r.props.children;o!=null&&e(o,i,t)})}export{e as visitElementTree};
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Link:** единственный элемент-потомок получает стили через Slot (роутерный `Link`). Смена HTML-тега у кнопок — `as` (`button` | `a`). **`Dropdown`** / **`Popover`**: якорь — `renderTrigger(props, ref)`; **`Tooltip`**: элемент-child или render-prop. Без пропа `asChild`.
6
6
 
7
- Оверлеи: кнопки — в `Modal.Footer` / `Modal.FormFooter` / `Sheet.Footer`, sibling к `Body`, не внутри скролла.
7
+ Оверлеи: кнопки — в `Modal.Footer` / `Sheet.Footer`, sibling к `Body`, не внутри скролла. Статус и кнопки в одном ряду — `ControlRow` внутри футера.
8
8
 
9
9
  ---
10
10
 
@@ -12,8 +12,8 @@
12
12
 
13
13
  | Компонент | Описание |
14
14
  |-----------|----------|
15
- | **Button** | Кнопка: `variant` (`primary` / `tinted` / `secondary` / `ghost` / `link`) × `status` (`default` / `danger`), иконки, `loading`, `fullWidth`, `shortcut`. |
16
- | **ButtonIcon** | Иконка-кнопка; `circle` / `square`; по умолчанию `variant="ghost"`. |
15
+ | **Button** | Кнопка: `variant` (`primary` / `tinted` / `secondary` / `danger` / `danger_tinted` / `ghost` / `link`), `prefix` / `postfix`, `loading`, `fullWidth`. |
16
+ | **ButtonIcon** | Иконка-кнопка на базе **Button**; `circle` / `square`; по умолчанию `variant="ghost"`. |
17
17
  | **ButtonGroup** | Составная группа (`ButtonGroup` + `ButtonGroup.Item`): `mode` `button` (независимые, выбранность через `active` на Item) / `toggle` (один выбранный, слайдер) / `multi_toggle` (несколько); `itemFit` `equal` \| `content`; `width` `auto` \| `full`; `variant` / `status` / `size` / `borderless` на Root. |
18
18
  | **SegmentedControl** | Обёртка над `ButtonGroup` (`mode="toggle"`, `width="full"`): `options` + `value` / `onChange`; `itemFit` `equal` \| `content`; варианты `primary` / `tinted` / `secondary` (по умолчанию) / `ghost` / `plain`. |
19
19
  | **Overflow** | Лишние пункты за ⋯ в `Dropdown`. `Overflow.Item` — панель действий; прочие дети — измерение ширины. `longPress` открывает меню долгим нажатием (хост — **`ActionSheetTrigger`**). |
@@ -26,13 +26,13 @@
26
26
 
27
27
  | Компонент | Описание |
28
28
  |-----------|----------|
29
- | **TextField** | Однострочное поле. `keepPlaceholder` — не скрывать placeholder при фокусе пустого поля. |
29
+ | **TextField** | Примитив поля: chrome + `as` (`input` / `textarea` / `button` / `div`). `label` — floating-лейбл; без `label` — поле без подписи (`aria-label` / `placeholder`). `description` — подсказка или слот под chrome. `keepPlaceholder` — не скрывать placeholder при фокусе пустого поля. |
30
30
  | **PasswordField** | Пароль на базе TextField: показать/скрыть, опциональный индикатор сложности. |
31
- | **SearchField** | Обёртка над `TextField` с `labelPlacement="none"` по умолчанию и иконкой поиска (`onClear` от TextField). |
32
- | **TextareaField** | Многострочное поле на **FieldBase**; авто-рост высоты. |
31
+ | **SearchField** | Обёртка над `TextField` с иконкой поиска (`onClear` от TextField). Без `label` — тулбарный вид. |
32
+ | **TextareaField** | Многострочное поле на **TextField** `as="textarea"`; авто-рост высоты. |
33
33
  | **NumberField** | Числовой ввод на базе `TextField` с кнопками +/-. |
34
34
  | **MaskedField** | Поле с маской ввода (телефон, дата и т.п.) на базе `TextField`; опционально `maskAsPlaceholder`. Не переопределяйте `padding` / `font-size` на inner `input`. |
35
- | **PinInput** | PIN / OTP (2FA, код из SMS). |
35
+ | **PinInput** | PIN / OTP: группа ячеек на **TextField**. `label` — **FieldLabel**; `description` / `error` — **FormMessage**. |
36
36
  | **Rating** | Оценка звёздами. |
37
37
  | **FormMessage** | Подсказка / ошибка / успех под полем; `variant` `hint` / `error` / `success`. |
38
38
  | **Select** | Поле выбора: `options`, `value` / `onChange`, `label`, `filterable`; `selectionMode="multiple"` рисует chips. |
@@ -59,15 +59,16 @@
59
59
 
60
60
  | Компонент | Описание |
61
61
  |-----------|----------|
62
- | **Modal** | Составной диалог: `Header` / `Title` / `Close` / `Body` / `Footer` / **`FormFooter`**. `open` / `onOpenChange`. |
62
+ | **DialogLayout** | Поверхность `Box` с крестиком в правом верхнем углу поверх контента. `onClose`, `showClose`. |
63
+ | **Modal** | Составной диалог: корень — **`DialogLayout`**, шапка / тело / футер — **`Layout`**. `Header` / `Body` / `Footer`. Заголовок — **`Title`**. Ряд действий — **`ControlRow`** внутри `Footer`. `open` / `onOpenChange`, `showClose` на корне. |
63
64
  | **ConfirmDialog** | Готовый диалог на **`Modal`**: отмена + подтверждение, `confirmLabel`, `secondaryAction`, `status="danger"`, `onOpenChange`. |
64
- | **Sheet** | Панель: `Header` / `Title` / `Close` / `Body` / `Footer`; `mode` / `direction` / `backdrop` / `showHandle`. `open` / `onOpenChange`. |
65
+ | **Sheet** | Панель: поверхность **`Box`**, шапка / тело / футер — **`Layout`**. `Header` / `Body` / `Footer`. Заголовок — **`Title`**. Крестик — `showClose` на `Header`. `mode` / `direction` / `backdrop` / `showHandle`. |
65
66
  | **ImageLightbox** | Полноэкранный просмотр; `open` / `onOpenChange`. |
66
- | **Dropdown** | Выпадающая панель. Якорь — `renderTrigger(props, ref)`; содержимое — `children`. `align` `start` \| `center` \| `end` \| `auto` (`left`/`right` — алиасы). `triggerMode` `toggle` \| `combobox`. `open` / `onOpenChange`. На мобильных — нижний Sheet. |
67
+ | **Dropdown** | Список или меню у кнопки, на базе **`Popover`**. Стрелки по пунктам, выбор пункта закрывает панель, клик снаружи тоже. `align`, `widthMode`, `triggerMode` `toggle` \| `combobox`. На мобильных — нижний Sheet. Форма и календарь — **`Popover`**. |
67
68
  | **Menu** | Меню действий: клик по `trigger` (Dropdown + ActionList) или `trigger="context"` (ПКМ / Shift+F10 у курсора). |
68
- | **Tooltip** | Подсказка при наведении / фокусе; триггер — элемент-child или render-prop; `side` (алиас `position`), `openDelay` / `closeDelay`, wrap, arrow. |
69
- | **Popover** | Плавающий слой. Якорь — `renderTrigger`; содержимое — `children`. `trigger` click/hover/manual; `variant` panel/plain, `side` / `align` / delays, стрелка `arrow`. Подсказки — **Tooltip**. |
70
- | **CommandPalette** | Палитра Cmd+K: `items` / `groups`, фильтр — **`ActionList`** с `filterable`. |
69
+ | **Tooltip** | Подсказка при наведении / фокусе; триггер — элемент-child или render-prop; `side`, `openDelay` / `closeDelay`, wrap. |
70
+ | **Popover** | Немодальная панель для произвольного контента: текст, форма, фильтры, календарь. Клик внутри не закрывает, `Tab` ходит по полям. Якорь — `renderTrigger`, без корневой обёртки. `trigger` click/hover/manual, `variant` panel/plain, `side` / `align` / `widthMode`. Подсказки — **Tooltip**. |
71
+ | **CommandPalette** | Палитра Cmd+K: поверхность **`Box`**, подпись **`Text`**. `items` / `groups`, фильтр — **`ActionList`** с `filterable`. |
71
72
 
72
73
  ---
73
74
 
@@ -76,7 +77,7 @@
76
77
  | Компонент | Описание |
77
78
  |-----------|----------|
78
79
  | **Pagination** | Постраничная навигация. Без `children` — `Controls`; опционально `totalItems` / `pageSize` / `onPageSizeChange`. Составной: `Summary`, `Controls`, `PageSize`. |
79
- | **Sidebar** | Составной: `Root`, `Header`, `Title`, `Collapse`, `Content`, `Group`, `GroupLabel`, `Item`, `Footer`, `MobileTrigger`; `value` / `onChange`; десктопный rail + мобильный Sheet. |
80
+ | **Sidebar** | Составной: `Root`, `Header`, `Title`, `Content`, `Group`, `GroupLabel`, `Item`, `Footer`, `MobileTrigger`. Шапка, меню и футер — `Layout`. Кнопка сворачивания — на корне, по центру правой границы. `value` / `onChange`; десктопный rail + мобильный Sheet. |
80
81
  | **Steps** | Мастер: горизонтальный/вертикальный, статус шага, `onStepClick`. |
81
82
  | **Tabs** | Составные вкладки: `Tabs.List` / `Tabs.Trigger` / `Tabs.Panel`; `value` / `defaultValue` / `onChange` (без `defaultValue` вкладка не выбирается сама); `line` / `pill`, горизонтальные/вертикальные и бейдж на Trigger. |
82
83
 
@@ -92,7 +93,7 @@
92
93
  | **Accordion** | `Accordion.Item` с `title` и содержимым в `children`; `flush` (по умолчанию) / `bordered`; `multiple`, отключённый пункт. |
93
94
  | **Badge** | `size` sm/md, `position` overlay/standalone, `variant` включая `error`; overlay — `--altum-badge-overhang`. Числовой `label` ограничивается через `max`; `children` — якорь overlay. |
94
95
  | **Avatar** / **AvatarGroup** | Размеры `xs`…`xl`, кольцо статуса, запасная иконка; группа с наложением. |
95
- | **Chip** | Тег / фильтр: `mode` `chip` \| `tag` \| `toggle` (`as` — deprecated-алиас), `size`, `onRemove` / `onClick`. **`ChipGroup`**: `mode` `chip` \| `tag`, `layout` `wrap` \| `scrollX`. |
96
+ | **Chip** | Тег / фильтр: `mode` `chip` \| `tag` \| `toggle`, `size`, `onRemove` / `onClick`. **`ChipGroup`**: `mode` `chip` \| `tag`, `gap`. |
96
97
  | **StatBadge** | Компактный блок статистики: число + подпись; `variant` `default` / `success` / `warning` / `error`; `size` `md` / `sm`. |
97
98
  | **EmptyState** | Пустое состояние: иконка (`--altum-color-empty-icon`), заголовок, описание, действие; `size` для вложенных панелей. |
98
99
  | **DescriptionList** | Список «ключ — значение» (`stacked` / `inline`, колонки). |
@@ -137,7 +138,7 @@
137
138
  | Компонент | Описание |
138
139
  |-----------|----------|
139
140
  | **ImageGallery** | Галерея: `images`, chrome `default` \| `none`, `showNav` / `showThumbnails` / `showCounter`. |
140
- | **ImageCrop** | Обрезка изображения. |
141
+ | **ImageCrop** | Обрезка изображения. Корень — **`DialogLayout`**, шапка, сцена и кнопки — **`Layout`**, заголовок — **`Title`**. |
141
142
  | **FileList** | Список загрузок на **`Item`**: progress / retry / remove через `FileList.Item`. |
142
143
  | **Attachment** | Карточка файла: `Item` + статус загрузки (`idle` / `uploading` / `error` / `done`). Действия в слоте — **`ButtonIcon`**. |
143
144
 
@@ -194,4 +195,5 @@
194
195
  | **ru** / **en** | Встроенные словари. |
195
196
  | **useTheme** | Хук `{ theme, setTheme, toggleTheme }` внутри `ThemeProvider`. |
196
197
  | **VisuallyHidden** | Контент только для скринридеров (скрыт визуально). |
198
+ | **LiveRegion** | Скрытая область: озвучивает `message`. `politeness` `polite` / `assertive`. Пустое сообщение ничего не рендерит. |
197
199
  | **SkipLink** | «Перейти к содержимому» (виден при фокусе). |
package/docs/LAYOUT.md CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  } from 'altum';
20
20
  ```
21
21
 
22
- Связанные: **FieldBase** — см. [COMPONENTS.md](./COMPONENTS.md).
22
+ Связанные: **TextField** — см. [COMPONENTS.md](./COMPONENTS.md).
23
23
 
24
24
  ---
25
25
 
@@ -32,9 +32,9 @@ import {
32
32
  | Чипы / теги / мелкие кнопки в ряд с переносом | **Inline** |
33
33
  | Слева заголовок, справа действия | **Split** |
34
34
  | Поля + Chip + Button в одной строке фильтров | **ControlRow** |
35
- | Одному ребёнку — `flex: 1` или «не сжимать» | **LayoutItem** (`ControlRow.Item` / `Layout.Item`) |
35
+ | Одному ребёнку — `flex: 1` или «не сжимать» | **LayoutItem** (`ControlRow.Item`) |
36
36
  | Колонки сетки | **Grid** |
37
- | Оболочка input (label / prefix / clear) | **FieldBase** |
37
+ | Оболочка input (label / prefix / clear) | **TextField** |
38
38
 
39
39
  ---
40
40
 
@@ -58,7 +58,7 @@ import {
58
58
 
59
59
  | Часть | Роль | Ключевые пропсы |
60
60
  |-------|------|-----------------|
61
- | `Layout` | Корень-scrollport (`overflow-y: auto`, flex-колонка) | `as` (по умолчанию `div`) |
61
+ | `Layout` | Корень-scrollport (`overflow-y: auto`, flex-колонка) | `as`, `padding` (отступ корня), `gap` (между секциями). Оба: `sm` 12px, `md` 16px, `lg` 24px |
62
62
  | `Layout.Header` | Шапка | `sticky`, `as="header"` |
63
63
  | `Layout.Content` | Середина (без собственного overflow) | `as` |
64
64
  | `Layout.Footer` | Низ с действиями | `sticky`, `align` (`start` \| `center` \| `end` \| `space-between`), `as="footer"` |
@@ -100,11 +100,11 @@ import {
100
100
  </Layout>
101
101
  ```
102
102
 
103
- ### Namespace
103
+ ### Состав объекта
104
104
 
105
- На `Layout` также висят алиасы: `Layout.Inline`, `.Split`, `.ControlRow`, `.Item`.
105
+ На `Layout` висят только `Layout.Header`, `Layout.Content` и `Layout.Footer`.
106
106
 
107
- В приложении предпочтительны **именованные импорты**; `Layout.*` удобен, когда вы уже внутри панели.
107
+ `Inline`, `Split`, `ControlRow` и `LayoutItem` — отдельные компоненты, их импортируют по имени.
108
108
 
109
109
  Также экспортируются: `LayoutRoot`, `LayoutHeader`, `LayoutContent`, `LayoutFooter`.
110
110
 
@@ -228,7 +228,7 @@ Flex-ячейка внутри Stack / Inline / Split / ControlRow.
228
228
  | `grow` | `false` | `flex: 1` — занять оставшееся место |
229
229
  | `shrink` | `true` | `false` — кнопка/чип не сжимаются |
230
230
 
231
- Алиасы: `ControlRow.Item`, `Layout.Item`.
231
+ Алиас: `ControlRow.Item`.
232
232
 
233
233
  **Использовать:** поле поиска растягивается, кнопка — по контенту; иконка/чип с `shrink={false}`.
234
234
 
@@ -279,4 +279,4 @@ Flex-ячейка внутри Stack / Inline / Split / ControlRow.
279
279
  | `Stack` для чипов в ряд | **Inline** |
280
280
  | `div` + `display:flex` + px `gap` | **Stack** / **Inline** с токенами |
281
281
  | Оборачивать всё в `LayoutItem` | Только где нужны `grow` / `shrink` |
282
- | Путать `Layout` и `FieldBase` | `Layout` — панель UI; `FieldBase` — оболочка поля ввода |
282
+ | Путать `Layout` и `TextField` | `Layout` — панель UI; `TextField` — оболочка поля ввода |
package/docs/THEMING.md CHANGED
@@ -4,7 +4,7 @@ altum использует **CSS custom properties** для всех дизай
4
4
 
5
5
  ## Быстрый старт
6
6
 
7
- Оберните приложение в `ThemeProvider` (установка — [README](../README.md)). Стили инжектятся из JS — отдельный `styles.css` не нужен. По умолчанию `applyTo="wrapper"`. Для порталов (`Modal`, `Sheet`, выпадающие панели, `Notification`) используйте **`applyTo="document"`**, чтобы классы и `data-theme` попали на `html` / `body`. Синхронизация идёт в **`useLayoutEffect`**, чтобы первый кадр совпадал с `initialTheme` / контролируемой `theme`.
7
+ Оберните приложение в `ThemeProvider` (установка — [README](../README.md)). Стили инжектятся из JS — отдельный `styles.css` не нужен. По умолчанию `applyTo="wrapper"`. Для порталов (`Modal`, `Sheet`, выпадающие панели, `Notification`) используйте **`applyTo="document"`**, чтобы классы и `data-theme` попали на `html` / `body` и не дублировались на обёртке. Тогда переопределение токенов на `body` доходит до детей. Синхронизация идёт в **`useLayoutEffect`**, чтобы первый кадр совпадал с `initialTheme` / контролируемой `theme`.
8
8
 
9
9
  ### Контролируемая тема и хранилище
10
10
 
@@ -72,7 +72,7 @@ return (
72
72
  | `--altum-field-width-default` | Макс. ширина поля при `width="md"` (320px) |
73
73
  | `--altum-badge-size-sm` / `md` / `--altum-badge-font-size` / `--altum-badge-font-size-sm` | Компактный chrome счётчика (Badge / Tabs); sm-кегль для числового standalone |
74
74
  | `--altum-g-space-1` … `--altum-g-space-9` | Шкала отступов (4px … 36px) |
75
- | `--altum-shadow-sm` / `--altum-shadow-md` / `--altum-shadow-lg` | Лестница теней (алиасы `--altum-shadow-surface` / `--altum-shadow-dropdown` / deep) |
75
+ | `--altum-shadow-surface` / `--altum-shadow-dropdown` / `--altum-shadow-lg` | Тени карточки, выпадающего слоя и глубокого возвышения |
76
76
 
77
77
  ### Типографика
78
78
 
@@ -97,15 +97,9 @@ return (
97
97
 
98
98
  | Переменная | По умолчанию | Назначение |
99
99
  |------------|--------------|------------|
100
- | `--altum-dialog-header-padding` | асимметричный `--altum-g-space-4` / `--altum-g-space-3` | Шапка Modal / Sheet |
101
- | `--altum-dialog-body-padding` | `--altum-g-space-4` | Тело Modal / Sheet |
102
- | `--altum-dialog-footer-padding` | асимметричный футер | Футер Modal / Sheet |
103
- | `--altum-dialog-title-size` | `--altum-g-font-size-lg` | Заголовок диалога |
104
- | `--altum-dialog-title-weight` | `--altum-g-font-weight-semibold` | Начертание заголовка |
105
100
  | `--altum-dialog-body-size` | `--altum-g-font-size-base` | Текст тела диалога |
106
- | `--altum-dialog-max-width-sm` / `md` / `lg` | 420 / 500 / 600 | Modal / Sheet |
101
+ | `--altum-dialog-max-width-md` / `lg` | 500 / 600 | Modal / Sheet |
107
102
  | `--altum-dialog-max-height` | 85vh | Максимальная высота Modal |
108
- | `--altum-list-max-height` | 280px | Область скролла выпадающего списка |
109
103
  | `--altum-option-padding-y` / `--altum-option-padding-x` | `--altum-g-space-2` / `--altum-g-space-3` | Внутренние отступы опции списка |
110
104
 
111
105
  ### Тоггл / фокус / chrome оверлея
@@ -131,7 +125,7 @@ return (
131
125
  | `--altum-button-focus-inner` / `--altum-button-focus-outer` | light 1px / 3px; dark 2px / 4px | Ширины двойного кольца кнопки |
132
126
  | `--altum-opacity-disabled` | 0.5 | Отключённые контролы; **Button** — та же заливка × opacity |
133
127
  | `--altum-field-disabled-opacity` | 0.8 | Chrome отключённого поля (текст остаётся читаемым) |
134
- | `--altum-field-label-gap` / `--altum-field-message-gap` | `--altum-g-space-1` | Зазор внешнего лейбла / helper+ошибка |
128
+ | `--altum-field-message-gap` | `--altum-g-space-1` | Зазор helper и ошибки |
135
129
  | `--altum-form-helper-indent` | `--altum-g-space-1` | Левый отступ helper / ошибки |
136
130
  | `--altum-field-placeholder` / `--altum-color-input-placeholder` | `color-mix(… label 88%, transparent)` | Текст плейсхолдера |
137
131
  | `--altum-switch-track-width/height/thumb-size-*` | sm/md/lg | Геометрия Switch (из toggle-box + inset) |
@@ -139,7 +133,6 @@ return (
139
133
  | `--altum-overlay-close-size` | 28px | Хит-зона закрытия Overlay / Alert / Notification |
140
134
  | `--altum-overlay-close-icon-size` | 16px | Кегль × в overlay-close |
141
135
  | `--altum-overlay-close-fg` / `--altum-overlay-close-fg-hover` / `--altum-overlay-close-bg` / `--altum-overlay-close-bg-hover` | тема | Голый крестик overlay (Modal / Sheet, `ButtonIcon` `diskClose`); chrome только на hover |
142
- | `--altum-overlay-arrow-size` | 8px | Стрелка Popover / tooltip |
143
136
  | `--altum-badge-overhang` | `space-1` + `control-inset` (6px) | Запас раскладки + смещение overlay-бейджа |
144
137
  | `--altum-badge-digit-nudge` | `0.5px` | Сдвиг цифры в круглом **Badge** вниз (оптический центр) |
145
138
  | `--altum-slider-track-height` | `3px` | Высота трека **Slider** |
@@ -240,13 +233,13 @@ return (
240
233
 
241
234
  ### Опасность / деструктив (`--altum-color-danger-*`)
242
235
 
243
- Действия удаления, состояния ошибки. API кнопки: `status="danger"` вместе с `variant` (`primary` — заливка, `secondary` — контур по поверхности, `tinted` — мягкая смывка).
236
+ Действия удаления, состояния ошибки. API кнопки: `variant="danger"` (заливка) и `variant="danger_tinted"` (мягкая смывка).
244
237
 
245
238
  | Переменная | Назначение |
246
239
  |------------|------------|
247
240
  | `--altum-color-danger-bg-solid` | Залитая деструктивная кнопка |
248
- | `--altum-color-danger-text-secondary` | Текст контурной деструктивной (`variant="secondary"`) |
249
- | `--altum-color-danger-tint-bg` / `--altum-color-danger-tint-text` | Мягкий tint опасности (`variant="tinted"`) |
241
+ | `--altum-color-danger-text-secondary` | Текст контурной деструктивной |
242
+ | `--altum-color-danger-tint-bg` / `--altum-color-danger-tint-text` | Мягкий tint опасности (`variant="danger_tinted"`) |
250
243
 
251
244
  ### Контролы формы (`--altum-color-input-*`, `--altum-color-control-*`)
252
245
 
@@ -272,10 +265,10 @@ TextField, Checkbox (`mode="task"`), Switch, Radio. Примитивы — ис
272
265
  | Поле | `--altum-color-field-bg`, `--altum-color-field-border`, `--altum-color-border-hover`, `--altum-color-field-text`, `--altum-field-label` |
273
266
  | Кнопка (secondary / tinted / ghost) | `--altum-color-button-secondary-bg`, `--altum-color-button-tinted-border`, `--altum-color-button-ghost-text` (muted, не secondary), `--altum-color-button-ghost-hover-bg` |
274
267
  | Chip | `--altum-color-chip-secondary-bg`, `--altum-color-chip-tinted-text` |
275
- | Segmented | `--altum-color-segmented-*`: колодец (`*-track-bg`) + приглушённый thumb (`*-slider-bg`, `--altum-color-segmented-slider-shadow`). Один thumb на secondary / tinted / ghost |
268
+ | Segmented | `--altum-color-segmented-ghost-slider-bg`, `--altum-color-segmented-slider-shadow` |
276
269
  | Панель | `--altum-color-panel-bg`, `--altum-color-panel-border`, `--altum-color-panel-bg-hover` |
277
270
  | Типографика | `--altum-color-type`, `--altum-color-type-secondary`, `--altum-color-type-tertiary`, `--altum-color-type-muted` (`Title` / `Text`) |
278
- | Ссылка | `--altum-color-link-color`, `--altum-color-link-secondary`, `--altum-color-link-muted`, `--altum-color-link-danger`, `--altum-color-link-focus-ring` |
271
+ | Ссылка | `--altum-color-link-color`, `--altum-color-link-secondary`, `--altum-color-link-muted`, `--altum-color-link-danger`. Фокус — `--altum-focus-ring-color` |
279
272
  | Tooltip | `--altum-color-tooltip-bg` / `--altum-color-tooltip-fg` (инверсия ink, не brand-кнопка) |
280
273
  | Индикатор Tabs / Pagination | `--altum-color-tabs-indicator` |
281
274
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "altum",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "Библиотека React + TypeScript UI-компонентов: CSS Modules, токены ThemeProvider, адаптация overlay/sheet.",
5
5
  "license": "MIT",
6
6
  "author": "Alexander <azeeson@gmail.com>",
@@ -40,6 +40,11 @@
40
40
  "import": "./dist/entries/icons.js",
41
41
  "default": "./dist/entries/icons.js"
42
42
  },
43
+ "./locales": {
44
+ "types": "./types/entries/locales.d.ts",
45
+ "import": "./dist/entries/locales.js",
46
+ "default": "./dist/entries/locales.js"
47
+ },
43
48
  "./package.json": "./package.json"
44
49
  },
45
50
  "files": [
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { RefObject, PointerEvent, MouseEvent as MouseEvent$1 } from 'react';
2
+ import { RefObject, PointerEvent, MouseEvent as MouseEvent$1, Dispatch, SetStateAction, ReactNode } from 'react';
3
3
 
4
4
  interface UseOutsideClickOptions {
5
5
  enabled?: boolean;
@@ -84,6 +84,62 @@ declare function usePresence(open: boolean, durationMs: number): {
84
84
  presented: boolean;
85
85
  };
86
86
 
87
+ type FormErrors<T extends Record<string, unknown>> = Partial<Record<keyof T, string>>;
88
+ type FieldValidate<T extends Record<string, unknown>, K extends keyof T> = (value: T[K], values: T) => string | undefined;
89
+ interface RegisterOptions<T extends Record<string, unknown>, K extends keyof T> {
90
+ getValue?: (payload: unknown) => T[K];
91
+ validate?: FieldValidate<T, K>;
92
+ }
93
+ declare function useForm<T extends Record<string, unknown>>(initialValues: T): {
94
+ values: T;
95
+ errors: Partial<Record<keyof T, string>>;
96
+ isDirty: boolean;
97
+ register: <K extends keyof T>(name: K, options?: RegisterOptions<T, K>) => {
98
+ value: T[K];
99
+ onChange: (payload: unknown) => void;
100
+ };
101
+ hasErrors: boolean;
102
+ setValues: Dispatch<SetStateAction<T>>;
103
+ setValue: <K extends keyof T>(name: K, value: T[K]) => void;
104
+ setError: (name: keyof T, message: string) => void;
105
+ clearErrors: (name?: keyof T) => void;
106
+ reset: (next?: T) => void;
107
+ handleSubmit: (onValid: (values: T) => void) => (event?: {
108
+ preventDefault?: () => void;
109
+ }) => void;
110
+ };
111
+ type UseFormReturn<T extends Record<string, unknown>> = ReturnType<typeof useForm<T>>;
112
+
113
+ declare function useFormContext<T extends Record<string, unknown>>(): UseFormReturn<T>;
114
+ declare function useFormProvider<T extends Record<string, unknown>>(initialValues: T): {
115
+ FormProvider: {
116
+ ({ children }: {
117
+ children?: ReactNode;
118
+ }): react.FunctionComponentElement<react.ProviderProps<UseFormReturn<Record<string, unknown>> | null>>;
119
+ displayName: string;
120
+ };
121
+ values: T;
122
+ errors: Partial<Record<keyof T, string>>;
123
+ isDirty: boolean;
124
+ register: <K extends keyof T>(name: K, options?: RegisterOptions<T, K> | undefined) => {
125
+ value: T[K];
126
+ onChange: (payload: unknown) => void;
127
+ };
128
+ hasErrors: boolean;
129
+ setValues: react.Dispatch<react.SetStateAction<T>>;
130
+ setValue: <K extends keyof T>(name: K, value: T[K]) => void;
131
+ setError: (name: keyof T, message: string) => void;
132
+ clearErrors: (name?: keyof T | undefined) => void;
133
+ reset: (next?: T | undefined) => void;
134
+ handleSubmit: (onValid: (values: T) => void) => (event?: {
135
+ preventDefault?: (() => void) | undefined;
136
+ }) => void;
137
+ };
138
+
139
+ type FormRule<T extends Record<string, unknown> = Record<string, unknown>> = (value: unknown, values: T) => string | undefined;
140
+ declare function required(message: string): FormRule;
141
+ declare function pattern(regex: RegExp, message: string): FormRule;
142
+ declare function compose<T extends Record<string, unknown> = Record<string, unknown>>(...rules: FormRule<T>[]): FormRule<T>;
87
143
  interface ValidationRules {
88
144
  required?: string;
89
145
  pattern?: {
@@ -92,16 +148,8 @@ interface ValidationRules {
92
148
  };
93
149
  validate?: (val: unknown) => string | boolean;
94
150
  }
95
- declare function useForm<T extends Record<string, unknown>>(initialValues: T): {
96
- values: T;
97
- errors: Record<string, string>;
98
- register: (name: keyof T, rules?: ValidationRules) => {
99
- value: T[keyof T];
100
- onChange: (val: unknown) => void;
101
- };
102
- hasErrors: boolean;
103
- setValues: react.Dispatch<react.SetStateAction<T>>;
104
- };
151
+ declare function fieldRules(rules: ValidationRules): FormRule;
152
+ declare function checkedValue(payload: unknown): boolean;
105
153
 
106
- export { MOBILE_MEDIA_QUERY, REDUCED_MOTION_QUERY, useBodyScrollLock, useControlledState, useControlledStateWithCallback, useDocumentKeyDown, useEscapeKey, useFocusRestore, useFocusTrap, useForm, useInertSiblings, useLongPress, useMediaQuery, useNow, useOutsideClick, useOverlay, useOverlayPanel, usePrefersReducedMotion, usePresence };
107
- export type { DocumentKeyDownTarget, UseDocumentKeyDownOptions, UseEscapeKeyOptions, UseFocusTrapOptions, UseLongPressHandlers, UseLongPressOptions, UseOutsideClickOptions, UseOverlayOptions, UseOverlayPanelOptions, ValidationRules };
154
+ export { MOBILE_MEDIA_QUERY, REDUCED_MOTION_QUERY, checkedValue, compose, fieldRules, pattern, required, useBodyScrollLock, useControlledState, useControlledStateWithCallback, useDocumentKeyDown, useEscapeKey, useFocusRestore, useFocusTrap, useForm, useFormContext, useFormProvider, useInertSiblings, useLongPress, useMediaQuery, useNow, useOutsideClick, useOverlay, useOverlayPanel, usePrefersReducedMotion, usePresence };
155
+ export type { DocumentKeyDownTarget, FieldValidate, FormErrors, FormRule, RegisterOptions, UseDocumentKeyDownOptions, UseEscapeKeyOptions, UseFocusTrapOptions, UseFormReturn, UseLongPressHandlers, UseLongPressOptions, UseOutsideClickOptions, UseOverlayOptions, UseOverlayPanelOptions, ValidationRules };
@@ -105,6 +105,8 @@ declare const IconChevronRight: react.FC<IconProps>;
105
105
 
106
106
  declare const IconChevronUp: react.FC<IconProps>;
107
107
 
108
+ declare const IconChevronUpDown: react.FC<IconProps>;
109
+
108
110
  declare const IconClipboard: react.FC<IconProps>;
109
111
 
110
112
  declare const IconClock: react.FC<IconProps>;
@@ -411,5 +413,5 @@ declare const IconZoomIn: react.FC<IconProps>;
411
413
 
412
414
  declare const IconZoomOut: react.FC<IconProps>;
413
415
 
414
- export { IconAlarm, IconAlignCenter, IconAlignJustify, IconAlignLeft, IconAlignRight, IconAnchor, IconArchive, IconArrowDown, IconArrowLeft, IconArrowRight, IconArrowThinDown, IconArrowThinLeft, IconArrowThinRight, IconArrowThinUp, IconArrowUp, IconArticle, IconBackspace, IconBasket, IconBasketball, IconBatteryEmpty, IconBatteryFull, IconBatteryLow, IconBatteryMedium, IconBell, IconBlog, IconBluetooth, IconBold, IconBookmark, IconBookmarks, IconBox, IconBriefcase, IconBrightnessLow, IconBrightnessMax, IconBrightnessMedium, IconBroadcast, IconBrowser, IconBrowserUpload, IconBrush, IconCalendar, IconCamcorder, IconCamera, IconCard, IconCart, IconChecklist, IconCheckmark, IconChevronDown, IconChevronLeft, IconChevronRight, IconChevronUp, IconClipboard, IconClock, IconClockwise, IconCloud, IconCloudDownload, IconCloudUpload, IconCode, IconContract, IconContract2, IconConversation, IconCopy, IconCrop, IconCross, IconCrosshair, IconCutlery, IconDeviceDesktop, IconDeviceMobile, IconDeviceTablet, IconDirection, IconDisc, IconDocument, IconDocumentDelete, IconDocumentEdit, IconDocumentNew, IconDocumentRemove, IconDot, IconDots2, IconDots3, IconDownload, IconDragHandle, IconDuplicate, IconEnter, IconExit, IconExpand, IconExpand2, IconExperiment, IconExport, IconFeed, IconFlag, IconFlashlight, IconFolder, IconFolderOpen, IconForward, IconGaming, IconGear, IconGraduation, IconGraphBar, IconGraphLine, IconGraphPie, IconHeadset, IconHeart, IconHelp, IconHome, IconHourglass, IconInbox, IconInformation, IconItalic, IconJewel, IconLifting, IconLightbulb, IconLink, IconLinkBroken, IconList, IconLoading, IconLocation, IconLock, IconLockOpen, IconMail, IconMap, IconMediaLoop, IconMediaNext, IconMediaPause, IconMediaPlay, IconMediaPrevious, IconMediaRecord, IconMediaShuffle, IconMediaStop, IconMedical, IconMenu, IconMessage, IconMeter, IconMicrophone, IconMinus, IconMonitor, IconMove, IconMusic, IconNetwork1, IconNetwork2, IconNetwork3, IconNetwork4, IconNetwork5, IconPamphlet, IconPaperclip, IconPencil, IconPhone, IconPhoto, IconPhotoGroup, IconPill, IconPin, IconPlus, IconPower, IconPreview, IconPreviewOff, IconPrint, IconPulse, IconQuestion, IconReply, IconReplyAll, IconReturn, IconRetweet, IconRocket, IconScale, IconSearch, IconShoppingBag, IconSkip, IconStack, IconStar, IconStopwatch, IconStore, IconSuitcase, IconSwap, IconTag, IconTagDelete, IconTags, IconThumbsDown, IconThumbsUp, IconTicket, IconTimeReverse, IconToDo, IconToggles, IconTrash, IconTrophy, IconUpload, IconUser, IconUserGroup, IconUserId, IconVibrate, IconViewApps, IconViewList, IconViewListLarge, IconViewThumb, IconVolumeFull, IconVolumeLow, IconVolumeMedium, IconVolumeOff, IconWallet, IconWarning, IconWeb, IconWeight, IconWifi, IconWrong, IconZoomIn, IconZoomOut, createIcon };
416
+ export { IconAlarm, IconAlignCenter, IconAlignJustify, IconAlignLeft, IconAlignRight, IconAnchor, IconArchive, IconArrowDown, IconArrowLeft, IconArrowRight, IconArrowThinDown, IconArrowThinLeft, IconArrowThinRight, IconArrowThinUp, IconArrowUp, IconArticle, IconBackspace, IconBasket, IconBasketball, IconBatteryEmpty, IconBatteryFull, IconBatteryLow, IconBatteryMedium, IconBell, IconBlog, IconBluetooth, IconBold, IconBookmark, IconBookmarks, IconBox, IconBriefcase, IconBrightnessLow, IconBrightnessMax, IconBrightnessMedium, IconBroadcast, IconBrowser, IconBrowserUpload, IconBrush, IconCalendar, IconCamcorder, IconCamera, IconCard, IconCart, IconChecklist, IconCheckmark, IconChevronDown, IconChevronLeft, IconChevronRight, IconChevronUp, IconChevronUpDown, IconClipboard, IconClock, IconClockwise, IconCloud, IconCloudDownload, IconCloudUpload, IconCode, IconContract, IconContract2, IconConversation, IconCopy, IconCrop, IconCross, IconCrosshair, IconCutlery, IconDeviceDesktop, IconDeviceMobile, IconDeviceTablet, IconDirection, IconDisc, IconDocument, IconDocumentDelete, IconDocumentEdit, IconDocumentNew, IconDocumentRemove, IconDot, IconDots2, IconDots3, IconDownload, IconDragHandle, IconDuplicate, IconEnter, IconExit, IconExpand, IconExpand2, IconExperiment, IconExport, IconFeed, IconFlag, IconFlashlight, IconFolder, IconFolderOpen, IconForward, IconGaming, IconGear, IconGraduation, IconGraphBar, IconGraphLine, IconGraphPie, IconHeadset, IconHeart, IconHelp, IconHome, IconHourglass, IconInbox, IconInformation, IconItalic, IconJewel, IconLifting, IconLightbulb, IconLink, IconLinkBroken, IconList, IconLoading, IconLocation, IconLock, IconLockOpen, IconMail, IconMap, IconMediaLoop, IconMediaNext, IconMediaPause, IconMediaPlay, IconMediaPrevious, IconMediaRecord, IconMediaShuffle, IconMediaStop, IconMedical, IconMenu, IconMessage, IconMeter, IconMicrophone, IconMinus, IconMonitor, IconMove, IconMusic, IconNetwork1, IconNetwork2, IconNetwork3, IconNetwork4, IconNetwork5, IconPamphlet, IconPaperclip, IconPencil, IconPhone, IconPhoto, IconPhotoGroup, IconPill, IconPin, IconPlus, IconPower, IconPreview, IconPreviewOff, IconPrint, IconPulse, IconQuestion, IconReply, IconReplyAll, IconReturn, IconRetweet, IconRocket, IconScale, IconSearch, IconShoppingBag, IconSkip, IconStack, IconStar, IconStopwatch, IconStore, IconSuitcase, IconSwap, IconTag, IconTagDelete, IconTags, IconThumbsDown, IconThumbsUp, IconTicket, IconTimeReverse, IconToDo, IconToggles, IconTrash, IconTrophy, IconUpload, IconUser, IconUserGroup, IconUserId, IconVibrate, IconViewApps, IconViewList, IconViewListLarge, IconViewThumb, IconVolumeFull, IconVolumeLow, IconVolumeMedium, IconVolumeOff, IconWallet, IconWarning, IconWeb, IconWeight, IconWifi, IconWrong, IconZoomIn, IconZoomOut, createIcon };
415
417
  export type { IconProps };