@cube-dev/ui-kit 0.172.0 → 0.174.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 (571) hide show
  1. package/dist/CHANGELOG.md +44 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/index.js +1 -1
  38. package/dist/components/actions/use-action.js +1 -1
  39. package/dist/components/actions/use-anchored-menu.js +1 -1
  40. package/dist/components/actions/use-context-menu.js +1 -1
  41. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  42. package/dist/components/content/Alert/Alert.js +1 -1
  43. package/dist/components/content/Alert/use-alert.js +1 -1
  44. package/dist/components/content/Avatar/Avatar.js +1 -1
  45. package/dist/components/content/Badge/Badge.js +1 -1
  46. package/dist/components/content/Card/Card.js +1 -1
  47. package/dist/components/content/Content.js +1 -1
  48. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  49. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  50. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  51. package/dist/components/content/Divider.js +1 -1
  52. package/dist/components/content/Footer.js +1 -1
  53. package/dist/components/content/Header.js +1 -1
  54. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  55. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  56. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  57. package/dist/components/content/Item/Item.js +1 -1
  58. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  59. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  60. package/dist/components/content/Layout/GridLayout.js +1 -1
  61. package/dist/components/content/Layout/Layout.js +1 -1
  62. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  63. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  64. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  65. package/dist/components/content/Layout/LayoutContent.js +1 -1
  66. package/dist/components/content/Layout/LayoutContext.js +1 -1
  67. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  68. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  69. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  70. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  71. package/dist/components/content/Layout/LayoutPane.js +1 -1
  72. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  75. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  76. package/dist/components/content/Layout/index.js +1 -1
  77. package/dist/components/content/Layout/utils.js +1 -1
  78. package/dist/components/content/Paragraph.js +1 -1
  79. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  80. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  81. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  82. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  83. package/dist/components/content/Result/Result.js +1 -1
  84. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  85. package/dist/components/content/Tag/Tag.js +1 -1
  86. package/dist/components/content/Text.js +1 -1
  87. package/dist/components/content/TextItem/TextItem.js +1 -1
  88. package/dist/components/content/Title.js +1 -1
  89. package/dist/components/content/Tree/Tree.js +1 -1
  90. package/dist/components/content/Tree/TreeNode.js +1 -1
  91. package/dist/components/content/Tree/styled.js +1 -1
  92. package/dist/components/content/Tree/tree-index.js +1 -1
  93. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  94. package/dist/components/content/Tree/use-load-data.js +1 -1
  95. package/dist/components/content/highlightText.js +1 -1
  96. package/dist/components/content/use-auto-tooltip.js +1 -1
  97. package/dist/components/data/DataTable/DataTable.js +1 -1
  98. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  99. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  100. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  103. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  104. package/dist/components/data/TableBase/RowCollection.js +1 -1
  105. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  106. package/dist/components/data/TableBase/TableRow.js +1 -1
  107. package/dist/components/data/TableBase/TableView.js +1 -1
  108. package/dist/components/data/TableBase/column-menu.js +1 -1
  109. package/dist/components/data/TableBase/column-tint.js +1 -1
  110. package/dist/components/data/TableBase/row-menu.js +1 -1
  111. package/dist/components/data/TableBase/styled.js +1 -1
  112. package/dist/components/data/TableBase/table-tree.js +1 -1
  113. package/dist/components/data/TableBase/types.js +1 -1
  114. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  115. package/dist/components/data/TableBase/use-column-order.js +1 -1
  116. package/dist/components/data/TableBase/use-container-width.js +1 -1
  117. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  118. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  119. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  120. package/dist/components/data/TableBase/use-table-search.js +1 -1
  121. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  122. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  123. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  124. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  125. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  126. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  127. package/dist/components/fields/Checkbox/CheckboxGroup.js +2 -2
  128. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  129. package/dist/components/fields/Checkbox/context.js +1 -1
  130. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  131. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  132. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  133. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  134. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  135. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  136. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  137. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  138. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  139. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  140. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  141. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  142. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  143. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  144. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  145. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  146. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  147. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  148. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  149. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  150. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  151. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  152. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  153. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  154. package/dist/components/fields/DatePicker/period.js +1 -1
  155. package/dist/components/fields/DatePicker/props.js +1 -1
  156. package/dist/components/fields/DatePicker/utils.js +1 -1
  157. package/dist/components/fields/FileInput/FileInput.js +1 -1
  158. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  159. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  160. package/dist/components/fields/Input/Input.js +1 -1
  161. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  162. package/dist/components/fields/ListBox/ListBox.js +1 -1
  163. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  164. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  165. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  166. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  167. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  168. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  169. package/dist/components/fields/Picker/Picker.js +1 -1
  170. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  171. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  172. package/dist/components/fields/RadioGroup/context.js +1 -1
  173. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  174. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  175. package/dist/components/fields/Select/Select.js +1 -1
  176. package/dist/components/fields/Slider/Gradation.js +1 -1
  177. package/dist/components/fields/Slider/HueSlider.js +1 -1
  178. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  179. package/dist/components/fields/Slider/Slider.js +1 -1
  180. package/dist/components/fields/Slider/SliderBase.js +1 -1
  181. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  182. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  183. package/dist/components/fields/Slider/elements.js +1 -1
  184. package/dist/components/fields/Slider/index.js +1 -1
  185. package/dist/components/fields/Switch/Switch.js +1 -1
  186. package/dist/components/fields/TextArea/TextArea.js +1 -1
  187. package/dist/components/fields/TextInput/TextInput.js +1 -1
  188. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  189. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  190. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  191. package/dist/components/fields/color/ColorPanel.js +1 -1
  192. package/dist/components/fields/color/channels.js +1 -1
  193. package/dist/components/fields/color/color.js +1 -1
  194. package/dist/components/fields/color/context.js +1 -1
  195. package/dist/components/form/FieldWrapper/FieldWrapper.d.ts +2 -2
  196. package/dist/components/form/FieldWrapper/FieldWrapper.js +12 -5
  197. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  198. package/dist/components/form/FieldWrapper/types.d.ts +3 -3
  199. package/dist/components/form/Form/Field.js +8 -6
  200. package/dist/components/form/Form/Field.js.map +1 -1
  201. package/dist/components/form/Form/Form.js +1 -1
  202. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  203. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  204. package/dist/components/form/Form/SubmitError.js +1 -1
  205. package/dist/components/form/Form/index.js +1 -1
  206. package/dist/components/form/Form/use-field/types.d.ts +13 -1
  207. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  208. package/dist/components/form/Form/use-field/use-field.js +5 -2
  209. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  210. package/dist/components/form/Form/use-form.js +1 -1
  211. package/dist/components/form/Form/validation.js +1 -1
  212. package/dist/components/form/Label.d.ts +16 -4
  213. package/dist/components/form/Label.js +34 -12
  214. package/dist/components/form/Label.js.map +1 -1
  215. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  216. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  217. package/dist/components/form/validation/use-validation-props.js +1 -1
  218. package/dist/components/form/wrapper.js +3 -2
  219. package/dist/components/form/wrapper.js.map +1 -1
  220. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  221. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  222. package/dist/components/layout/Board/Board.js +1 -1
  223. package/dist/components/layout/Board/BoardProvider.js +1 -1
  224. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  225. package/dist/components/layout/Board/Widget.js +1 -1
  226. package/dist/components/layout/Board/WidgetHost.js +1 -1
  227. package/dist/components/layout/Board/board-context.js +1 -1
  228. package/dist/components/layout/Board/board-store.js +1 -1
  229. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  230. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  231. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  232. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  233. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  234. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  235. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  236. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  237. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  238. package/dist/components/layout/Board/index.js +1 -1
  239. package/dist/components/layout/Board/responsive-utils.js +1 -1
  240. package/dist/components/layout/Board/use-board-layout.js +1 -1
  241. package/dist/components/layout/Board/use-board-registry.js +1 -1
  242. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  243. package/dist/components/layout/Board/use-board-selection.js +1 -1
  244. package/dist/components/layout/Flex.js +1 -1
  245. package/dist/components/layout/Flow.js +1 -1
  246. package/dist/components/layout/Grid.js +1 -1
  247. package/dist/components/layout/Panel.js +1 -1
  248. package/dist/components/layout/Prefix.js +1 -1
  249. package/dist/components/layout/ResizablePanel.js +1 -1
  250. package/dist/components/layout/Space.js +1 -1
  251. package/dist/components/layout/Suffix.js +1 -1
  252. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  253. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  254. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  255. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  256. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  257. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  258. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  259. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  260. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  261. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  262. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  263. package/dist/components/navigation/Tabs/styled.js +1 -1
  264. package/dist/components/navigation/Tabs/types.js +1 -1
  265. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  266. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  267. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  268. package/dist/components/other/Calendar/Calendar.js +1 -1
  269. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  270. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  271. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  272. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  273. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  274. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  275. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  276. package/dist/components/other/Calendar/styled.js +1 -1
  277. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  278. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  279. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  280. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  281. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  282. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  283. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  284. package/dist/components/overlays/Dialog/DialogForm.js +2 -3
  285. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  286. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  287. package/dist/components/overlays/Dialog/context.js +1 -1
  288. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  289. package/dist/components/overlays/Modal/Modal.js +1 -1
  290. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  291. package/dist/components/overlays/Modal/Overlay.js +1 -1
  292. package/dist/components/overlays/Modal/Popover.js +1 -1
  293. package/dist/components/overlays/Modal/Tray.js +1 -1
  294. package/dist/components/overlays/Modal/Underlay.js +1 -1
  295. package/dist/components/overlays/Notifications/Notification.js +1 -1
  296. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  297. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  298. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  299. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  300. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  301. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  302. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  303. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  304. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  305. package/dist/components/overlays/Notifications/index.js +1 -1
  306. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  307. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  308. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  309. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  310. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  311. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  312. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  313. package/dist/components/overlays/Toast/index.js +1 -1
  314. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  315. package/dist/components/overlays/Toast/useToast.js +1 -1
  316. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  317. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  318. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  319. package/dist/components/overlays/Tooltip/context.js +1 -1
  320. package/dist/components/portal/Portal.js +1 -1
  321. package/dist/components/portal/PortalProvider.js +1 -1
  322. package/dist/components/portal/usePortal.js +1 -1
  323. package/dist/components/shared/DraggableCollection.js +1 -1
  324. package/dist/components/shared/InvalidIcon.js +1 -1
  325. package/dist/components/shared/ValidIcon.js +1 -1
  326. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  327. package/dist/components/status/Spin/Cube.js +1 -1
  328. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  329. package/dist/components/status/Spin/Spin.js +1 -1
  330. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  331. package/dist/data/item-themes.js +1 -1
  332. package/dist/data/themes.js +1 -1
  333. package/dist/eslint-plugin/defaults.generated.js +1 -1
  334. package/dist/eslint-plugin/index.js +1 -1
  335. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  336. package/dist/i18n/I18nProvider.js +1 -1
  337. package/dist/i18n/createFormatter.js +1 -1
  338. package/dist/i18n/index.js +1 -1
  339. package/dist/i18n/instance.js +1 -1
  340. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  341. package/dist/i18n/locales/en-US/uikit.js +1 -1
  342. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  343. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  344. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  345. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  346. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  347. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  348. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  349. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  350. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  351. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  352. package/dist/i18n/locales.js +1 -1
  353. package/dist/i18n/useFormatter.js +1 -1
  354. package/dist/i18n/useI18n.js +1 -1
  355. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  356. package/dist/icons/AdjustmentsIcon.js +1 -1
  357. package/dist/icons/AiIcon.js +1 -1
  358. package/dist/icons/AreaChartIcon.js +1 -1
  359. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  360. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  361. package/dist/icons/BackwardIcon.js +1 -1
  362. package/dist/icons/BarChartIcon.js +1 -1
  363. package/dist/icons/BellFilledIcon.js +1 -1
  364. package/dist/icons/BellIcon.js +1 -1
  365. package/dist/icons/BooleanIcon.js +1 -1
  366. package/dist/icons/CalendarEditIcon.js +1 -1
  367. package/dist/icons/CalendarIcon.js +1 -1
  368. package/dist/icons/CaretDownIcon.js +1 -1
  369. package/dist/icons/CaretUpIcon.js +1 -1
  370. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  371. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  372. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  373. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  374. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  375. package/dist/icons/ChartBarLineIcon.js +1 -1
  376. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  377. package/dist/icons/ChartBarStackedIcon.js +1 -1
  378. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  379. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  380. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  381. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  382. package/dist/icons/ChartBubbleIcon.js +1 -1
  383. package/dist/icons/ChartDonut2Icon.js +1 -1
  384. package/dist/icons/ChartFunnelIcon.js +1 -1
  385. package/dist/icons/ChartHeatmapIcon.js +1 -1
  386. package/dist/icons/ChartKPIIcon.js +1 -1
  387. package/dist/icons/ChartPie2Icon.js +1 -1
  388. package/dist/icons/ChartScatterIcon.js +1 -1
  389. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  390. package/dist/icons/CheckCircleIcon.js +1 -1
  391. package/dist/icons/CheckIcon.js +1 -1
  392. package/dist/icons/CircleFilledIcon.js +1 -1
  393. package/dist/icons/ClearIcon.js +1 -1
  394. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  395. package/dist/icons/CloseCircleIcon.js +1 -1
  396. package/dist/icons/CloseIcon.js +1 -1
  397. package/dist/icons/CodeIcon.js +1 -1
  398. package/dist/icons/ColumnTotalIcon.js +1 -1
  399. package/dist/icons/CopyIcon.js +1 -1
  400. package/dist/icons/CountIcon.js +1 -1
  401. package/dist/icons/CubeIcon.js +1 -1
  402. package/dist/icons/CubePauseIcon.js +1 -1
  403. package/dist/icons/CubePlayIcon.js +1 -1
  404. package/dist/icons/CurrencyDollarIcon.js +1 -1
  405. package/dist/icons/DangerIcon.js +1 -1
  406. package/dist/icons/DashboardIcon.js +1 -1
  407. package/dist/icons/DatabaseIcon.js +1 -1
  408. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  409. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  410. package/dist/icons/DirectionIcon.js +1 -1
  411. package/dist/icons/DonutIcon.js +1 -1
  412. package/dist/icons/DownIcon.js +1 -1
  413. package/dist/icons/EditIcon.js +1 -1
  414. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  415. package/dist/icons/ExclamationCircleIcon.js +1 -1
  416. package/dist/icons/ExclamationIcon.js +1 -1
  417. package/dist/icons/EyeIcon.js +1 -1
  418. package/dist/icons/EyeInvisibleIcon.js +1 -1
  419. package/dist/icons/FilterIcon.js +1 -1
  420. package/dist/icons/FolderFilledIcon.js +1 -1
  421. package/dist/icons/FolderIcon.js +1 -1
  422. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  423. package/dist/icons/FolderOpenIcon.js +1 -1
  424. package/dist/icons/ForwardIcon.js +1 -1
  425. package/dist/icons/GripVerticalIcon.js +1 -1
  426. package/dist/icons/HierarchyIcon.js +1 -1
  427. package/dist/icons/HierarchyOpenIcon.js +1 -1
  428. package/dist/icons/Icon.js +1 -1
  429. package/dist/icons/InfoCircleIcon.js +1 -1
  430. package/dist/icons/InfoIcon.js +1 -1
  431. package/dist/icons/KeyIcon.js +1 -1
  432. package/dist/icons/LeftIcon.js +1 -1
  433. package/dist/icons/LineChartIcon.js +1 -1
  434. package/dist/icons/LoadingIcon.js +1 -1
  435. package/dist/icons/LockFilledIcon.js +1 -1
  436. package/dist/icons/LockIcon.js +1 -1
  437. package/dist/icons/MoreIcon.js +1 -1
  438. package/dist/icons/NotAllowedIcon.js +1 -1
  439. package/dist/icons/Number123Icon.js +1 -1
  440. package/dist/icons/NumberIcon.js +1 -1
  441. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  442. package/dist/icons/PauseCircleIcon.js +1 -1
  443. package/dist/icons/PauseIcon.js +1 -1
  444. package/dist/icons/PercentageIcon.js +1 -1
  445. package/dist/icons/PieChartIcon.js +1 -1
  446. package/dist/icons/PipetteIcon.js +1 -1
  447. package/dist/icons/PlayCircleIcon.js +1 -1
  448. package/dist/icons/PlayIcon.js +1 -1
  449. package/dist/icons/PlusIcon.js +1 -1
  450. package/dist/icons/ProgressBarIcon.js +1 -1
  451. package/dist/icons/ReloadIcon.js +1 -1
  452. package/dist/icons/ReportIcon.js +1 -1
  453. package/dist/icons/ReturnIcon.js +1 -1
  454. package/dist/icons/RightIcon.js +1 -1
  455. package/dist/icons/RowTotalsIcon.js +1 -1
  456. package/dist/icons/SchemeIcon.js +1 -1
  457. package/dist/icons/SearchIcon.js +1 -1
  458. package/dist/icons/SemanticQueryIcon.js +1 -1
  459. package/dist/icons/SettingsIcon.js +1 -1
  460. package/dist/icons/ShieldFilledIcon.js +1 -1
  461. package/dist/icons/ShieldIcon.js +1 -1
  462. package/dist/icons/SlashIcon.js +1 -1
  463. package/dist/icons/SparklesIcon.js +1 -1
  464. package/dist/icons/SqlIcon.js +1 -1
  465. package/dist/icons/StatsIcon.js +1 -1
  466. package/dist/icons/StopIcon.js +1 -1
  467. package/dist/icons/StringIcon.js +1 -1
  468. package/dist/icons/SubtotalsIcon.js +1 -1
  469. package/dist/icons/SwitchIcon.js +1 -1
  470. package/dist/icons/TableIcon.js +1 -1
  471. package/dist/icons/ThumbsDownIcon.js +1 -1
  472. package/dist/icons/ThumbsUpIcon.js +1 -1
  473. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  474. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  475. package/dist/icons/ThunderboltIcon.js +1 -1
  476. package/dist/icons/TimeIcon.js +1 -1
  477. package/dist/icons/TrashIcon.js +1 -1
  478. package/dist/icons/UnlockIcon.js +1 -1
  479. package/dist/icons/UpIcon.js +1 -1
  480. package/dist/icons/UserGroupIcon.js +1 -1
  481. package/dist/icons/UserIcon.js +1 -1
  482. package/dist/icons/UserLockIcon.js +1 -1
  483. package/dist/icons/ViewIcon.js +1 -1
  484. package/dist/icons/WarningFilledIcon.js +1 -1
  485. package/dist/icons/WarningIcon.js +1 -1
  486. package/dist/icons/wrap-icon.js +1 -1
  487. package/dist/index.js +1 -1
  488. package/dist/probe/canonicalize.js +1 -1
  489. package/dist/probe/css.js +1 -1
  490. package/dist/probe/index.js +1 -1
  491. package/dist/provider.js +1 -1
  492. package/dist/providers/TrackingProvider.js +1 -1
  493. package/dist/providers/navigationAdapter.default.js +1 -1
  494. package/dist/shared/form.d.ts +17 -7
  495. package/dist/tokens/all-tokens.js +1 -1
  496. package/dist/tokens/base.js +1 -1
  497. package/dist/tokens/color-seed.js +1 -1
  498. package/dist/tokens/color-theme.js +1 -1
  499. package/dist/tokens/colors.js +1 -1
  500. package/dist/tokens/layout.js +1 -1
  501. package/dist/tokens/lazy-styles.js +1 -1
  502. package/dist/tokens/palette-config.js +1 -1
  503. package/dist/tokens/palette.js +1 -1
  504. package/dist/tokens/resolve.js +1 -1
  505. package/dist/tokens/shadows.js +1 -1
  506. package/dist/tokens/sizes.js +1 -1
  507. package/dist/tokens/spacing.js +1 -1
  508. package/dist/tokens/typography.js +1 -1
  509. package/dist/utils/ResizeSensor.js +1 -1
  510. package/dist/utils/is-dev-env.js +1 -1
  511. package/dist/utils/modules.js +1 -1
  512. package/dist/utils/promise.js +1 -1
  513. package/dist/utils/raf.js +1 -1
  514. package/dist/utils/random.js +1 -1
  515. package/dist/utils/range.js +1 -1
  516. package/dist/utils/react/RenderCache.js +1 -1
  517. package/dist/utils/react/Slots.js +1 -1
  518. package/dist/utils/react/chain.js +1 -1
  519. package/dist/utils/react/disabledProps.js +1 -1
  520. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  521. package/dist/utils/react/index.js +1 -1
  522. package/dist/utils/react/interactions.js +1 -1
  523. package/dist/utils/react/isTextOnly.js +1 -1
  524. package/dist/utils/react/mapProps.js +1 -1
  525. package/dist/utils/react/mergeProps.js +1 -1
  526. package/dist/utils/react/nullableValue.js +1 -1
  527. package/dist/utils/react/resolveIcon.js +1 -1
  528. package/dist/utils/react/sharedStore.js +1 -1
  529. package/dist/utils/react/useBufferedValue.js +1 -1
  530. package/dist/utils/react/useCombinedRefs.js +1 -1
  531. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  532. package/dist/utils/react/useEventBus.js +1 -1
  533. package/dist/utils/react/useId.js +1 -1
  534. package/dist/utils/react/useIsDarwin.js +1 -1
  535. package/dist/utils/react/useKeySymbols.js +1 -1
  536. package/dist/utils/react/useLayoutEffect.js +1 -1
  537. package/dist/utils/react/useLocalStorage.js +1 -1
  538. package/dist/utils/react/useMergeStyles.js +1 -1
  539. package/dist/utils/react/usePopoverSync.js +1 -1
  540. package/dist/utils/react/useQaProps.js +1 -1
  541. package/dist/utils/react/useScheme.js +1 -1
  542. package/dist/utils/react/useViewportSize.js +1 -1
  543. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  544. package/dist/utils/selection.js +1 -1
  545. package/dist/utils/styles.js +1 -1
  546. package/dist/utils/tree.js +1 -1
  547. package/dist/utils/warnings.js +1 -1
  548. package/dist/version.js +3 -3
  549. package/docs/FieldProperties.md +25 -3
  550. package/docs/components/form/Field.md +6 -6
  551. package/docs/components/form/Form.md +3 -3
  552. package/docs/components/overlays/DialogForm.md +0 -1
  553. package/docs/tasty/README.md +13 -8
  554. package/docs/tasty/adoption.md +56 -31
  555. package/docs/tasty/ai-agents.md +78 -77
  556. package/docs/tasty/comparison.md +69 -40
  557. package/docs/tasty/configuration.md +97 -87
  558. package/docs/tasty/debug.md +4 -2
  559. package/docs/tasty/design-system.md +41 -22
  560. package/docs/tasty/dsl.md +225 -195
  561. package/docs/tasty/getting-started.md +60 -39
  562. package/docs/tasty/injector.md +63 -26
  563. package/docs/tasty/methodology.md +42 -36
  564. package/docs/tasty/migration-v3.md +49 -49
  565. package/docs/tasty/plugins.md +37 -33
  566. package/docs/tasty/react-api.md +65 -44
  567. package/docs/tasty/runtime-benchmarks.md +178 -0
  568. package/docs/tasty/ssr.md +99 -61
  569. package/docs/tasty/styles.md +1 -1
  570. package/docs/tasty/tasty-static.md +137 -104
  571. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../../provider.js";
3
3
  import { Button } from "../../../actions/Button/Button.js";
4
4
  import { useFormProps } from "../Form.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
3
  import { FormContext } from "./Form.js";
4
4
  import { Alert } from "../../content/Alert/Alert.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useForm } from "./use-form.js";
3
3
  import { FormContext, _Form, useFormProps } from "./Form.js";
4
4
  import { useField } from "./use-field/use-field.js";
@@ -1,5 +1,5 @@
1
1
 
2
- import { FieldCoreProps, ValidateTrigger, ValidationProps, ValidationState } from "../../../../shared/form.js";
2
+ import { FieldCoreProps, NecessityIndicator, ValidateTrigger, ValidationProps, ValidationState } from "../../../../shared/form.js";
3
3
  import "../../../../shared/index.js";
4
4
  import { CubeFieldData, FieldTypes } from "../types.js";
5
5
  import { CubeFormInstance } from "../use-form.js";
@@ -20,6 +20,11 @@ interface UseFieldProps<T extends FieldTypes> extends FieldCoreProps, Validation
20
20
  showValid?: boolean;
21
21
  /** On which event perform the validation for the field */
22
22
  validateTrigger?: ValidateTrigger;
23
+ /**
24
+ * The type of necessity indicator. Read only to tell an explicit request for
25
+ * one apart from an omitted prop — see `suppressNecessityIndicator`.
26
+ */
27
+ necessityIndicator?: NecessityIndicator | null;
23
28
  }
24
29
  type FieldReturnValue<T extends FieldTypes> = ValidationProps & {
25
30
  id: string;
@@ -36,6 +41,13 @@ type FieldReturnValue<T extends FieldTypes> = ValidationProps & {
36
41
  description?: ReactNode; /** Error message for the field. Always displayed in danger state regardless of validation state */
37
42
  errorMessage?: ReactNode;
38
43
  isRequired?: boolean;
44
+ /**
45
+ * Set to `null` when `isRequired` was derived from a `required` rule rather
46
+ * than authored, which suppresses the label marker while leaving validation
47
+ * and `aria-required` in place. Absent otherwise, so an authored indicator
48
+ * survives the merge in `useFieldProps`.
49
+ */
50
+ necessityIndicator?: NecessityIndicator | null;
39
51
  onBlur: () => void;
40
52
  nonInput: boolean;
41
53
  field?: CubeFieldData<keyof FieldTypes & string, T[keyof FieldTypes]>;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../../_internal/hooks/use-event.js";
4
4
  import { warn } from "../../../../utils/warnings.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../../_internal/hooks/use-event.js";
3
3
  import { useIsFirstRender } from "../../../../_internal/hooks/use-is-first-render.js";
4
4
  import { resolveValidationProps } from "../../validation/resolve-validation-props.js";
@@ -26,7 +26,7 @@ function removeId(name, id) {
26
26
  }
27
27
  function useField(props, params) {
28
28
  props = useFormProps(props);
29
- let { defaultValue, id, idPrefix, name, form, rules, message, description, errorMessage, validateTrigger = params.defaultValidationTrigger, validationDelay, showValid, shouldUpdate, isRequired: isRequiredProp } = props;
29
+ let { defaultValue, id, idPrefix, name, form, rules, message, description, errorMessage, validateTrigger = params.defaultValidationTrigger, validationDelay, showValid, shouldUpdate, isRequired: isRequiredProp, necessityIndicator: necessityIndicatorProp } = props;
30
30
  const { isInvalid: isInvalidProp, isValid: isValidProp } = resolveValidationProps(props);
31
31
  const processedRules = useMemo(() => {
32
32
  let finalRules = rules;
@@ -58,6 +58,7 @@ function useField(props, params) {
58
58
  let field = form?.getFieldInstance(fieldName);
59
59
  if (field) field.rules = processedRules;
60
60
  let isRequired = !!processedRules?.find((rule) => "required" in rule && rule.required === true);
61
+ const suppressNecessityIndicator = isRequired && !isRequiredProp && necessityIndicatorProp === void 0;
61
62
  useEffect(() => {
62
63
  if (!form) return;
63
64
  if (field) form.forceReRender();
@@ -104,6 +105,7 @@ function useField(props, params) {
104
105
  isInvalid: isInvalidProp ?? !!field?.errors?.length,
105
106
  isValid: isValidProp ?? !!(showValid && field?.status === "valid"),
106
107
  ...isRequired && { isRequired },
108
+ ...suppressNecessityIndicator && { necessityIndicator: null },
107
109
  message: message !== void 0 ? message : field?.status === "invalid" && field?.errors?.[0],
108
110
  description,
109
111
  errorMessage: errorMessage !== void 0 ? errorMessage : field?.status === "invalid" && field?.errors?.length ? field.errors[0] : void 0,
@@ -118,6 +120,7 @@ function useField(props, params) {
118
120
  fieldId,
119
121
  fieldName,
120
122
  isRequired,
123
+ suppressNecessityIndicator,
121
124
  message,
122
125
  description,
123
126
  errorMessage,
@@ -1 +1 @@
1
- {"version":3,"file":"use-field.js","names":[],"sources":["../../../../../src/components/form/Form/use-field/use-field.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport { useEvent, useIsFirstRender } from '../../../../_internal/index';\nimport { ValidateTrigger } from '../../../../shared/index';\nimport { resolveValidationProps } from '../../validation/index';\nimport { useFormProps } from '../Form';\nimport { FieldTypes } from '../types';\nimport { delayValidationRule } from '../validation';\n\nimport { FieldReturnValue, UseFieldProps } from './types';\n\nconst ID_MAP = {};\n\nfunction createId(name) {\n if (!name) return;\n\n if (!ID_MAP[name]) {\n ID_MAP[name] = [];\n }\n\n let i = 0;\n let id;\n\n do {\n id = i ? `${name}_${i}` : name;\n i++;\n } while (ID_MAP[name].includes(id));\n\n ID_MAP[name].push(id);\n\n return id;\n}\n\nfunction removeId(name, id) {\n if (!ID_MAP[name]) return;\n\n ID_MAP[name] = ID_MAP[name].filter((_id) => _id !== id);\n}\n\nexport type UseFieldParams = {\n defaultValidationTrigger?: ValidateTrigger;\n};\n\nexport function useField<T extends FieldTypes, Props extends UseFieldProps<T>>(\n props: Props,\n params: UseFieldParams,\n): FieldReturnValue<T> {\n props = useFormProps(props);\n\n let {\n defaultValue,\n id,\n idPrefix,\n name,\n form,\n rules,\n message,\n description,\n errorMessage,\n validateTrigger = params.defaultValidationTrigger,\n validationDelay,\n showValid,\n shouldUpdate,\n isRequired: isRequiredProp,\n } = props;\n\n const { isInvalid: isInvalidProp, isValid: isValidProp } =\n resolveValidationProps(props);\n\n const processedRules = useMemo(() => {\n let finalRules = rules;\n\n // If isRequired prop is set, ensure there's a required rule\n if (isRequiredProp) {\n const hasRequiredRule = finalRules?.some(\n (rule) => 'required' in rule && rule.required === true,\n );\n\n if (!hasRequiredRule) {\n finalRules = finalRules\n ? [{ required: true }, ...finalRules]\n : [{ required: true }];\n }\n }\n\n // Add delay rule if needed\n if (finalRules && finalRules.length && validationDelay) {\n return [delayValidationRule(validationDelay), ...finalRules];\n }\n\n return finalRules;\n }, [rules, validationDelay, isRequiredProp]);\n\n const nonInput = !name;\n const fieldName: string = name != null ? name : '';\n\n const isFirstRender = useIsFirstRender();\n let [fieldId, setFieldId] = useState(\n id || (idPrefix ? `${idPrefix}_${fieldName}` : fieldName),\n );\n\n useEffect(() => {\n let newId;\n\n if (!id && !nonInput) {\n newId = createId(fieldId);\n\n setFieldId(newId);\n }\n\n return () => {\n if (!id) {\n removeId(idPrefix ? `${idPrefix}_${fieldName}` : fieldName, newId);\n }\n\n if (fieldName && form) {\n form.removeField(fieldName);\n }\n };\n }, [fieldName]);\n\n let field = form?.getFieldInstance(fieldName);\n\n if (field) {\n field.rules = processedRules;\n }\n\n let isRequired = !!processedRules?.find(\n (rule) => 'required' in rule && rule.required === true,\n );\n\n useEffect(() => {\n if (!form) return;\n\n if (field) {\n form.forceReRender();\n } else {\n field = form.createField(fieldName);\n }\n }, [field]);\n\n if (form) {\n if (isFirstRender) {\n if (!field) {\n field = form.createField(fieldName, true);\n }\n\n if (field?.value == null && defaultValue != null) {\n form.setFieldValue(fieldName, defaultValue, false, true);\n form.updateInitialFieldsValue({ [fieldName]: defaultValue });\n\n field = form?.getFieldInstance(fieldName);\n }\n }\n\n if (!field?.touched && defaultValue != null) {\n form.setFieldValue(fieldName, defaultValue, false, true);\n }\n }\n\n const onChangeHandler = useEvent((val: any, dontTouch: boolean) => {\n if (!form) return;\n\n const field = form.getFieldInstance(fieldName);\n\n if (shouldUpdate) {\n const fieldsValue = form.getFieldsValue();\n\n // check if we should update the value of the field\n const shouldNotBeUpdated =\n typeof shouldUpdate === 'boolean'\n ? !shouldUpdate\n : !shouldUpdate(fieldsValue, {\n ...fieldsValue,\n [fieldName]: val,\n });\n\n if (shouldNotBeUpdated) {\n return;\n }\n }\n\n form.setFieldValue(fieldName, val, !dontTouch);\n\n if (\n !dontTouch &&\n (validateTrigger === 'onChange' ||\n (field && field.errors && field.errors.length))\n ) {\n form.validateField(fieldName).catch(() => {}); // do nothing on fail\n }\n });\n\n const onBlurHandler = useEvent(() => {\n if (validateTrigger === 'onBlur') {\n // We need a timeout so the change event can be done.\n setTimeout(() => {\n form?.validateField(fieldName).catch(() => {}); // do nothing on fail\n });\n }\n });\n\n let value = field?.value;\n\n return useMemo(\n () => ({\n id: fieldId,\n name: fieldName,\n value,\n validateTrigger,\n form,\n field,\n nonInput,\n\n // Explicit validation props always win over the state derived from the form\n isInvalid: isInvalidProp ?? !!field?.errors?.length,\n isValid: isValidProp ?? !!(showValid && field?.status === 'valid'),\n ...(isRequired && { isRequired }),\n message:\n message !== undefined\n ? message\n : field?.status === 'invalid' && field?.errors?.[0],\n description,\n errorMessage:\n errorMessage !== undefined\n ? errorMessage\n : field?.status === 'invalid' && field?.errors?.length\n ? field.errors[0]\n : undefined,\n onBlur: onBlurHandler,\n onChange: onChangeHandler,\n }),\n [\n form,\n field,\n field?.value,\n field?.errors?.length,\n field?.status,\n fieldId,\n fieldName,\n isRequired,\n message,\n description,\n errorMessage,\n onBlurHandler,\n onChangeHandler,\n validateTrigger,\n isInvalidProp,\n isValidProp,\n showValid,\n nonInput,\n ],\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-field.js","names":[],"sources":["../../../../../src/components/form/Form/use-field/use-field.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport { useEvent, useIsFirstRender } from '../../../../_internal/index';\nimport { ValidateTrigger } from '../../../../shared/index';\nimport { resolveValidationProps } from '../../validation/index';\nimport { useFormProps } from '../Form';\nimport { FieldTypes } from '../types';\nimport { delayValidationRule } from '../validation';\n\nimport { FieldReturnValue, UseFieldProps } from './types';\n\nconst ID_MAP = {};\n\nfunction createId(name) {\n if (!name) return;\n\n if (!ID_MAP[name]) {\n ID_MAP[name] = [];\n }\n\n let i = 0;\n let id;\n\n do {\n id = i ? `${name}_${i}` : name;\n i++;\n } while (ID_MAP[name].includes(id));\n\n ID_MAP[name].push(id);\n\n return id;\n}\n\nfunction removeId(name, id) {\n if (!ID_MAP[name]) return;\n\n ID_MAP[name] = ID_MAP[name].filter((_id) => _id !== id);\n}\n\nexport type UseFieldParams = {\n defaultValidationTrigger?: ValidateTrigger;\n};\n\nexport function useField<T extends FieldTypes, Props extends UseFieldProps<T>>(\n props: Props,\n params: UseFieldParams,\n): FieldReturnValue<T> {\n props = useFormProps(props);\n\n let {\n defaultValue,\n id,\n idPrefix,\n name,\n form,\n rules,\n message,\n description,\n errorMessage,\n validateTrigger = params.defaultValidationTrigger,\n validationDelay,\n showValid,\n shouldUpdate,\n isRequired: isRequiredProp,\n necessityIndicator: necessityIndicatorProp,\n } = props;\n\n const { isInvalid: isInvalidProp, isValid: isValidProp } =\n resolveValidationProps(props);\n\n const processedRules = useMemo(() => {\n let finalRules = rules;\n\n // If isRequired prop is set, ensure there's a required rule\n if (isRequiredProp) {\n const hasRequiredRule = finalRules?.some(\n (rule) => 'required' in rule && rule.required === true,\n );\n\n if (!hasRequiredRule) {\n finalRules = finalRules\n ? [{ required: true }, ...finalRules]\n : [{ required: true }];\n }\n }\n\n // Add delay rule if needed\n if (finalRules && finalRules.length && validationDelay) {\n return [delayValidationRule(validationDelay), ...finalRules];\n }\n\n return finalRules;\n }, [rules, validationDelay, isRequiredProp]);\n\n const nonInput = !name;\n const fieldName: string = name != null ? name : '';\n\n const isFirstRender = useIsFirstRender();\n let [fieldId, setFieldId] = useState(\n id || (idPrefix ? `${idPrefix}_${fieldName}` : fieldName),\n );\n\n useEffect(() => {\n let newId;\n\n if (!id && !nonInput) {\n newId = createId(fieldId);\n\n setFieldId(newId);\n }\n\n return () => {\n if (!id) {\n removeId(idPrefix ? `${idPrefix}_${fieldName}` : fieldName, newId);\n }\n\n if (fieldName && form) {\n form.removeField(fieldName);\n }\n };\n }, [fieldName]);\n\n let field = form?.getFieldInstance(fieldName);\n\n if (field) {\n field.rules = processedRules;\n }\n\n let isRequired = !!processedRules?.find(\n (rule) => 'required' in rule && rule.required === true,\n );\n\n // `isRequired` has two sources with different intent. A `required` rule states\n // how the field behaves: it is what validation runs, and `aria-required` is\n // its programmatic mirror, so the flag has to reach the input either way. The\n // `isRequired` prop additionally states what the label should say. So unless\n // the prop itself asked for the marker, suppress it — an absent prop and an\n // explicit `isRequired={false}` both mean \"do not mark this\", the latter\n // rather more loudly. An explicit `necessityIndicator` overrides either way,\n // being a request for the marker in its own right.\n const suppressNecessityIndicator =\n isRequired && !isRequiredProp && necessityIndicatorProp === undefined;\n\n useEffect(() => {\n if (!form) return;\n\n if (field) {\n form.forceReRender();\n } else {\n field = form.createField(fieldName);\n }\n }, [field]);\n\n if (form) {\n if (isFirstRender) {\n if (!field) {\n field = form.createField(fieldName, true);\n }\n\n if (field?.value == null && defaultValue != null) {\n form.setFieldValue(fieldName, defaultValue, false, true);\n form.updateInitialFieldsValue({ [fieldName]: defaultValue });\n\n field = form?.getFieldInstance(fieldName);\n }\n }\n\n if (!field?.touched && defaultValue != null) {\n form.setFieldValue(fieldName, defaultValue, false, true);\n }\n }\n\n const onChangeHandler = useEvent((val: any, dontTouch: boolean) => {\n if (!form) return;\n\n const field = form.getFieldInstance(fieldName);\n\n if (shouldUpdate) {\n const fieldsValue = form.getFieldsValue();\n\n // check if we should update the value of the field\n const shouldNotBeUpdated =\n typeof shouldUpdate === 'boolean'\n ? !shouldUpdate\n : !shouldUpdate(fieldsValue, {\n ...fieldsValue,\n [fieldName]: val,\n });\n\n if (shouldNotBeUpdated) {\n return;\n }\n }\n\n form.setFieldValue(fieldName, val, !dontTouch);\n\n if (\n !dontTouch &&\n (validateTrigger === 'onChange' ||\n (field && field.errors && field.errors.length))\n ) {\n form.validateField(fieldName).catch(() => {}); // do nothing on fail\n }\n });\n\n const onBlurHandler = useEvent(() => {\n if (validateTrigger === 'onBlur') {\n // We need a timeout so the change event can be done.\n setTimeout(() => {\n form?.validateField(fieldName).catch(() => {}); // do nothing on fail\n });\n }\n });\n\n let value = field?.value;\n\n return useMemo(\n () => ({\n id: fieldId,\n name: fieldName,\n value,\n validateTrigger,\n form,\n field,\n nonInput,\n\n // Explicit validation props always win over the state derived from the form\n isInvalid: isInvalidProp ?? !!field?.errors?.length,\n isValid: isValidProp ?? !!(showValid && field?.status === 'valid'),\n ...(isRequired && { isRequired }),\n ...(suppressNecessityIndicator && { necessityIndicator: null }),\n message:\n message !== undefined\n ? message\n : field?.status === 'invalid' && field?.errors?.[0],\n description,\n errorMessage:\n errorMessage !== undefined\n ? errorMessage\n : field?.status === 'invalid' && field?.errors?.length\n ? field.errors[0]\n : undefined,\n onBlur: onBlurHandler,\n onChange: onChangeHandler,\n }),\n [\n form,\n field,\n field?.value,\n field?.errors?.length,\n field?.status,\n fieldId,\n fieldName,\n isRequired,\n suppressNecessityIndicator,\n message,\n description,\n errorMessage,\n onBlurHandler,\n onChangeHandler,\n validateTrigger,\n isInvalidProp,\n isValidProp,\n showValid,\n nonInput,\n ],\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { applyRules } from "./validation.js";
3
3
  import { dotize } from "@tenphi/tasty";
4
4
  import { useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { validate } from "email-validator";
3
3
  import validUrl from "valid-url";
4
4
 
@@ -9,11 +9,21 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
9
9
  interface CubeNecessityIndicatorProps {
10
10
  /**
11
11
  * `'icon'` renders the asterisk, `'label'` the `(required)` / `(optional)`
12
- * text. `null` suppresses it `Label` resolves its own default to that when
13
- * `isRequired` was never passed, and forwards the result here.
12
+ * text. Defaults to `'icon'`, which has no optional form and so only ever
13
+ * marks a required field. `null` suppresses the indicator entirely.
14
14
  */
15
15
  necessityIndicator?: NecessityIndicator | null;
16
+ /**
17
+ * Marks the label as required. Only an `isRequired` authored on the input,
18
+ * the label or the `Form` reaches this — a `required` validation rule drives
19
+ * validation and `aria-required` without decorating the label.
20
+ */
16
21
  isRequired?: boolean;
22
+ /**
23
+ * Marks the label as optional. Purely presentational, and ignored when the
24
+ * field is required.
25
+ */
26
+ isOptional?: boolean;
17
27
  /**
18
28
  * Whether the indicator contributes to the field's accessible name. Off by
19
29
  * default because a required field already announces `aria-required`, and
@@ -29,15 +39,17 @@ interface CubeNecessityIndicatorProps {
29
39
  * builds a element tree around the label and therefore has to place the marker
30
40
  * beside the label text itself rather than after the whole tree.
31
41
  *
32
- * Renders nothing unless a marker was actually asked for.
42
+ * Both marks are opt-in: nothing renders unless the call site passed
43
+ * `isRequired` or `isOptional`.
33
44
  */
34
45
  declare function NecessityIndicatorMark(props: CubeNecessityIndicatorProps): react_jsx_runtime0.JSX.Element | null;
35
46
  declare const INLINE_LABEL_STYLES: Styles;
36
47
  declare const LABEL_STYLES: Styles;
37
48
  interface CubeLabelProps extends BaseProps, ContainerStyleProps, ValidationProps {
38
49
  labelPosition?: LabelPosition;
39
- necessityIndicator?: NecessityIndicator;
50
+ necessityIndicator?: NecessityIndicator | null;
40
51
  isRequired?: boolean;
52
+ isOptional?: boolean;
41
53
  includeNecessityIndicatorInAccessibilityName?: boolean;
42
54
  htmlFor?: string;
43
55
  for?: string;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useProviderProps } from "../../provider.js";
4
4
  import { useI18n } from "../../i18n/useI18n.js";
@@ -27,6 +27,25 @@ const REQUIRED_ICON = /* @__PURE__ */ jsx("svg", {
27
27
  }) }) })
28
28
  });
29
29
  /**
30
+ * The `(required)` / `(optional)` note. Deliberately quieter than the label it
31
+ * follows: it is an aside about the field, not part of its name.
32
+ *
33
+ * `t4` / `#dark-03` is the same tier `FieldWrapper` already gives `description`
34
+ * and `message`, so the note joins the established secondary text rather than
35
+ * inventing a size of its own. The weight is dropped back to 400 — `t4` carries
36
+ * 500, the same weight as the label — because that contrast is what makes the
37
+ * note read as an aside at a glance.
38
+ */
39
+ const NecessityLabelElement = tasty({
40
+ as: "span",
41
+ qa: "NecessityLabel",
42
+ styles: {
43
+ preset: "t4",
44
+ color: "#dark-03",
45
+ fontWeight: 400
46
+ }
47
+ });
48
+ /**
30
49
  * The `*` or `(required)` / `(optional)` marker that follows a field label.
31
50
  *
32
51
  * Its own component because two places render it and both need the same
@@ -34,25 +53,27 @@ const REQUIRED_ICON = /* @__PURE__ */ jsx("svg", {
34
53
  * builds a element tree around the label and therefore has to place the marker
35
54
  * beside the label text itself rather than after the whole tree.
36
55
  *
37
- * Renders nothing unless a marker was actually asked for.
56
+ * Both marks are opt-in: nothing renders unless the call site passed
57
+ * `isRequired` or `isOptional`.
38
58
  */
39
59
  function NecessityIndicatorMark(props) {
40
- const { isRequired, necessityIndicator = isRequired != null ? "icon" : null, includeNecessityIndicatorInAccessibilityName = false } = props;
60
+ const { isRequired, isOptional, necessityIndicator = "icon", includeNecessityIndicatorInAccessibilityName = false } = props;
41
61
  const { t } = useI18n();
42
62
  const requiredLabel = t("form.required", "(required)");
43
63
  const separator = " ​";
44
- if (necessityIndicator === "icon") {
45
- if (!isRequired) return null;
46
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [separator, /* @__PURE__ */ jsx("span", {
64
+ if (necessityIndicator !== "icon" && necessityIndicator !== "label") return null;
65
+ if (isRequired) {
66
+ if (necessityIndicator === "icon") return /* @__PURE__ */ jsxs(Fragment$1, { children: [separator, /* @__PURE__ */ jsx("span", {
47
67
  "aria-label": includeNecessityIndicatorInAccessibilityName ? requiredLabel : void 0,
48
68
  children: REQUIRED_ICON
49
69
  })] });
70
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [separator, /* @__PURE__ */ jsx(NecessityLabelElement, {
71
+ "aria-hidden": !includeNecessityIndicatorInAccessibilityName ? true : void 0,
72
+ children: requiredLabel
73
+ })] });
50
74
  }
51
- if (necessityIndicator !== "label") return null;
52
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [separator, /* @__PURE__ */ jsx("span", {
53
- "aria-hidden": !includeNecessityIndicatorInAccessibilityName ? isRequired : void 0,
54
- children: isRequired ? requiredLabel : t("form.optional", "(optional)")
55
- })] });
75
+ if (!isOptional) return null;
76
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [separator, /* @__PURE__ */ jsx(NecessityLabelElement, { children: t("form.optional", "(optional)") })] });
56
77
  }
57
78
  const INLINE_LABEL_STYLES = {
58
79
  preset: "t3",
@@ -85,11 +106,12 @@ const LabelElement = tasty({
85
106
  function Label(props, ref) {
86
107
  props = useProviderProps(props);
87
108
  const { t } = useI18n();
88
- let { as, qa, children, labelPosition = "top", isRequired, necessityIndicator = isRequired != null ? "icon" : null, includeNecessityIndicatorInAccessibilityName = false, htmlFor, isDisabled, isInvalid, isValid, size = "medium", for: labelFor, ...otherProps } = props;
109
+ let { as, qa, children, labelPosition = "top", isRequired, isOptional, necessityIndicator, includeNecessityIndicatorInAccessibilityName = false, htmlFor, isDisabled, isInvalid, isValid, size = "medium", for: labelFor, ...otherProps } = props;
89
110
  let domRef = useObjectRef(ref);
90
111
  const styles = extractStyles(otherProps, CONTAINER_STYLES);
91
112
  const mark = /* @__PURE__ */ jsx(NecessityIndicatorMark, {
92
113
  isRequired,
114
+ isOptional,
93
115
  necessityIndicator,
94
116
  includeNecessityIndicatorInAccessibilityName
95
117
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Label.js","names":[],"sources":["../../../src/components/form/Label.tsx"],"sourcesContent":["import { useObjectRef } from '@react-aria/utils';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef } from 'react';\n\nimport { useI18n } from '../../i18n';\nimport { useProviderProps } from '../../provider';\nimport {\n LabelPosition,\n NecessityIndicator,\n ValidationProps,\n} from '../../shared/index';\nimport { extractStyles } from '../../utils/styles';\n\nimport { getValidationMods } from './validation/index';\n\nconst REQUIRED_ICON = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 100 125\"\n style={{\n // @ts-ignore\n enableBackground: 'new 0 0 100 100',\n width: '.8em',\n height: '.8em',\n transform: 'rotate(-5deg)',\n }}\n >\n <switch>\n <g>\n <polygon\n fill=\"currentColor\"\n points=\"97.5,47.5 90.5,26.1 61.3,35.6 61.3,4.8 38.7,4.8 38.7,35.6 9.5,26.1 2.5,47.5 31.8,57 13.7,82 31.9,95.2 50,70.3 68.1,95.2 86.3,82 68.2,57\"\n />\n </g>\n </switch>\n </svg>\n);\n\nexport interface CubeNecessityIndicatorProps {\n /**\n * `'icon'` renders the asterisk, `'label'` the `(required)` / `(optional)`\n * text. `null` suppresses it `Label` resolves its own default to that when\n * `isRequired` was never passed, and forwards the result here.\n */\n necessityIndicator?: NecessityIndicator | null;\n isRequired?: boolean;\n /**\n * Whether the indicator contributes to the field's accessible name. Off by\n * default because a required field already announces `aria-required`, and\n * repeating it in the name is noise.\n */\n includeNecessityIndicatorInAccessibilityName?: boolean;\n}\n\n/**\n * The `*` or `(required)` / `(optional)` marker that follows a field label.\n *\n * Its own component because two places render it and both need the same\n * strings: `Label` when it is given plain text, and `FieldWrapper`, which\n * builds a element tree around the label and therefore has to place the marker\n * beside the label text itself rather than after the whole tree.\n *\n * Renders nothing unless a marker was actually asked for.\n */\nexport function NecessityIndicatorMark(props: CubeNecessityIndicatorProps) {\n const {\n isRequired,\n // Same default as `Label`'s own prop: passing `isRequired` at all opts into\n // the asterisk, and `'label'` has to be asked for. Applied here so the two\n // call sites cannot disagree about what an omitted prop means.\n necessityIndicator = isRequired != null ? 'icon' : null,\n includeNecessityIndicatorInAccessibilityName = false,\n } = props;\n const { t } = useI18n();\n\n const requiredLabel = t('form.required', '(required)');\n\n // A plain space would collapse against the label text in a flex container,\n // and the zero-width space keeps the pair from being split across lines.\n const separator = ' ​';\n\n if (necessityIndicator === 'icon') {\n if (!isRequired) return null;\n\n return (\n <>\n {separator}\n <span\n aria-label={\n includeNecessityIndicatorInAccessibilityName\n ? requiredLabel\n : undefined\n }\n >\n {REQUIRED_ICON}\n </span>\n </>\n );\n }\n\n if (necessityIndicator !== 'label') return null;\n\n // Hidden from screen readers when the field is required, because\n // `aria-required` on the input already announces it. When the field is\n // optional there is nothing else saying so, so that one is announced.\n return (\n <>\n {separator}\n <span\n aria-hidden={\n !includeNecessityIndicatorInAccessibilityName ? isRequired : undefined\n }\n >\n {isRequired ? requiredLabel : t('form.optional', '(optional)')}\n </span>\n </>\n );\n}\n\nexport const INLINE_LABEL_STYLES: Styles = {\n preset: 't3',\n color: {\n '': '#dark-02',\n invalid: '#danger-text',\n },\n} as const;\n\nexport const LABEL_STYLES: Styles = {\n display: 'block',\n preset: {\n '': 't3m',\n 'size=small': 't4',\n },\n color: {\n '': '#dark',\n invalid: '#danger-text',\n },\n width: {\n '': 'initial',\n side: '($label-width, initial)',\n split: 'initial',\n },\n};\n\nconst LabelElement = tasty({\n as: 'label',\n qa: 'Label',\n styles: LABEL_STYLES,\n});\n\nexport interface CubeLabelProps\n extends BaseProps,\n ContainerStyleProps,\n ValidationProps {\n labelPosition?: LabelPosition;\n necessityIndicator?: NecessityIndicator;\n isRequired?: boolean;\n includeNecessityIndicatorInAccessibilityName?: boolean;\n htmlFor?: string;\n for?: string;\n size?: 'medium' | 'small';\n}\n\nfunction Label(props: CubeLabelProps, ref) {\n props = useProviderProps<CubeLabelProps>(props);\n\n const { t } = useI18n();\n\n let {\n as,\n qa,\n children,\n labelPosition = 'top',\n isRequired,\n necessityIndicator = isRequired != null ? 'icon' : null,\n includeNecessityIndicatorInAccessibilityName = false,\n htmlFor,\n isDisabled,\n isInvalid,\n isValid,\n size = 'medium',\n for: labelFor,\n ...otherProps\n } = props;\n\n let domRef = useObjectRef(ref);\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n const mark = (\n <NecessityIndicatorMark\n isRequired={isRequired}\n necessityIndicator={necessityIndicator}\n includeNecessityIndicatorInAccessibilityName={\n includeNecessityIndicatorInAccessibilityName\n }\n />\n );\n\n return (\n <LabelElement\n {...filterBaseProps(otherProps)}\n ref={domRef}\n styles={styles}\n htmlFor={labelFor || htmlFor}\n data-size={size}\n mods={{\n side: labelPosition === 'side',\n disabled: isDisabled,\n ...getValidationMods({ isInvalid, isValid }),\n }}\n >\n {/*\n A non-string child is a tree the caller laid out \\u2014 `FieldWrapper`'s\n full-width `Flex`, for one \\u2014 and appending the marker after it would put\n it at the far end of that layout rather than next to the label text. So\n the marker is only appended here for plain-text labels; callers that\n build their own tree place `NecessityIndicatorMark` where it belongs.\n */}\n {typeof children !== 'string' ? (\n children\n ) : (\n <>\n {children}\n {mark}\n </>\n )}\n </LabelElement>\n );\n}\n\nlet _Label = forwardRef(Label);\n\n_Label.displayName = 'Label';\n\nexport { _Label as Label };\n"],"mappings":";;;;;;;;;;;AAsBA,MAAM,gBACJ,oBAAC;CACC,OAAM;CACN,SAAQ;CACR,GAAE;CACF,GAAE;CACF,SAAQ;CACR,OAAO;EAEL,kBAAkB;EAClB,OAAO;EACP,QAAQ;EACR,WAAW;EACZ;WAED,oBAAC,sBACC,oBAAC,iBACC,oBAAC;EACC,MAAK;EACL,QAAO;GACP,GACA,GACG;EACL;;;;;;;;;;;AA6BR,SAAgB,uBAAuB,OAAoC;CACzE,MAAM,EACJ,YAIA,qBAAqB,cAAc,OAAO,SAAS,MACnD,+CAA+C,UAC7C;CACJ,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,gBAAgB,EAAE,iBAAiB,aAAa;CAItD,MAAM,YAAY;AAElB,KAAI,uBAAuB,QAAQ;AACjC,MAAI,CAAC,WAAY,QAAO;AAExB,SACE,8CACG,WACD,oBAAC;GACC,cACE,+CACI,gBACA;aAGL;IACI,IACN;;AAIP,KAAI,uBAAuB,QAAS,QAAO;AAK3C,QACE,8CACG,WACD,oBAAC;EACC,eACE,CAAC,+CAA+C,aAAa;YAG9D,aAAa,gBAAgB,EAAE,iBAAiB,aAAa;GACzD,IACN;;AAIP,MAAa,sBAA8B;CACzC,QAAQ;CACR,OAAO;EACL,IAAI;EACJ,SAAS;EACV;CACF;AAED,MAAa,eAAuB;CAClC,SAAS;CACT,QAAQ;EACN,IAAI;EACJ,cAAc;EACf;CACD,OAAO;EACL,IAAI;EACJ,SAAS;EACV;CACD,OAAO;EACL,IAAI;EACJ,MAAM;EACN,OAAO;EACR;CACF;AAED,MAAM,eAAe,MAAM;CACzB,IAAI;CACJ,IAAI;CACJ,QAAQ;CACT,CAAC;AAeF,SAAS,MAAM,OAAuB,KAAK;AACzC,SAAQ,iBAAiC,MAAM;CAE/C,MAAM,EAAE,MAAM,SAAS;CAEvB,IAAI,EACF,IACA,IACA,UACA,gBAAgB,OAChB,YACA,qBAAqB,cAAc,OAAO,SAAS,MACnD,+CAA+C,OAC/C,SACA,YACA,WACA,SACA,OAAO,UACP,KAAK,UACL,GAAG,eACD;CAEJ,IAAI,SAAS,aAAa,IAAI;CAE9B,MAAM,SAAS,cAAc,YAAY,iBAAiB;CAE1D,MAAM,OACJ,oBAAC;EACa;EACQ;EAElB;GAEF;AAGJ,QACE,oBAAC;EACC,GAAI,gBAAgB,WAAW;EAC/B,KAAK;EACG;EACR,SAAS,YAAY;EACrB,aAAW;EACX,MAAM;GACJ,MAAM,kBAAkB;GACxB,UAAU;GACV,GAAG,kBAAkB;IAAE;IAAW;IAAS,CAAC;GAC7C;YASA,OAAO,aAAa,WACnB,WAEA,8CACG,UACA,QACA;GAEQ;;AAInB,IAAI,SAAS,WAAW,MAAM;AAE9B,OAAO,cAAc"}
1
+ {"version":3,"file":"Label.js","names":[],"sources":["../../../src/components/form/Label.tsx"],"sourcesContent":["import { useObjectRef } from '@react-aria/utils';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef } from 'react';\n\nimport { useI18n } from '../../i18n';\nimport { useProviderProps } from '../../provider';\nimport {\n LabelPosition,\n NecessityIndicator,\n ValidationProps,\n} from '../../shared/index';\nimport { extractStyles } from '../../utils/styles';\n\nimport { getValidationMods } from './validation/index';\n\nconst REQUIRED_ICON = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n version=\"1.1\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 100 125\"\n style={{\n // @ts-ignore\n enableBackground: 'new 0 0 100 100',\n width: '.8em',\n height: '.8em',\n transform: 'rotate(-5deg)',\n }}\n >\n <switch>\n <g>\n <polygon\n fill=\"currentColor\"\n points=\"97.5,47.5 90.5,26.1 61.3,35.6 61.3,4.8 38.7,4.8 38.7,35.6 9.5,26.1 2.5,47.5 31.8,57 13.7,82 31.9,95.2 50,70.3 68.1,95.2 86.3,82 68.2,57\"\n />\n </g>\n </switch>\n </svg>\n);\n\n/**\n * The `(required)` / `(optional)` note. Deliberately quieter than the label it\n * follows: it is an aside about the field, not part of its name.\n *\n * `t4` / `#dark-03` is the same tier `FieldWrapper` already gives `description`\n * and `message`, so the note joins the established secondary text rather than\n * inventing a size of its own. The weight is dropped back to 400 — `t4` carries\n * 500, the same weight as the label — because that contrast is what makes the\n * note read as an aside at a glance.\n */\nconst NecessityLabelElement = tasty({\n as: 'span',\n qa: 'NecessityLabel',\n styles: {\n preset: 't4',\n color: '#dark-03',\n fontWeight: 400,\n },\n});\n\nexport interface CubeNecessityIndicatorProps {\n /**\n * `'icon'` renders the asterisk, `'label'` the `(required)` / `(optional)`\n * text. Defaults to `'icon'`, which has no optional form and so only ever\n * marks a required field. `null` suppresses the indicator entirely.\n */\n necessityIndicator?: NecessityIndicator | null;\n /**\n * Marks the label as required. Only an `isRequired` authored on the input,\n * the label or the `Form` reaches this — a `required` validation rule drives\n * validation and `aria-required` without decorating the label.\n */\n isRequired?: boolean;\n /**\n * Marks the label as optional. Purely presentational, and ignored when the\n * field is required.\n */\n isOptional?: boolean;\n /**\n * Whether the indicator contributes to the field's accessible name. Off by\n * default because a required field already announces `aria-required`, and\n * repeating it in the name is noise.\n */\n includeNecessityIndicatorInAccessibilityName?: boolean;\n}\n\n/**\n * The `*` or `(required)` / `(optional)` marker that follows a field label.\n *\n * Its own component because two places render it and both need the same\n * strings: `Label` when it is given plain text, and `FieldWrapper`, which\n * builds a element tree around the label and therefore has to place the marker\n * beside the label text itself rather than after the whole tree.\n *\n * Both marks are opt-in: nothing renders unless the call site passed\n * `isRequired` or `isOptional`.\n */\nexport function NecessityIndicatorMark(props: CubeNecessityIndicatorProps) {\n const {\n isRequired,\n isOptional,\n necessityIndicator = 'icon',\n includeNecessityIndicatorInAccessibilityName = false,\n } = props;\n const { t } = useI18n();\n\n const requiredLabel = t('form.required', '(required)');\n\n // A plain space would collapse against the label text in a flex container,\n // and the zero-width space keeps the pair from being split across lines.\n const separator = ' ​';\n\n // Anything that is not one of the two shapes means \"no indicator\" — `null`,\n // and also any stray falsy value a caller might still be passing.\n if (necessityIndicator !== 'icon' && necessityIndicator !== 'label') {\n return null;\n }\n\n if (isRequired) {\n if (necessityIndicator === 'icon') {\n return (\n <>\n {separator}\n <span\n aria-label={\n includeNecessityIndicatorInAccessibilityName\n ? requiredLabel\n : undefined\n }\n >\n {REQUIRED_ICON}\n </span>\n </>\n );\n }\n\n // Hidden from screen readers by default, because `aria-required` on the\n // input already announces it and repeating it in the name is noise.\n return (\n <>\n {separator}\n <NecessityLabelElement\n aria-hidden={\n !includeNecessityIndicatorInAccessibilityName ? true : undefined\n }\n >\n {requiredLabel}\n </NecessityLabelElement>\n </>\n );\n }\n\n // There is no icon form of \"optional\", so the note is rendered whichever\n // indicator was asked for. Nothing else tells a screen reader the field is\n // optional, so this one stays in the accessible name.\n if (!isOptional) return null;\n\n return (\n <>\n {separator}\n <NecessityLabelElement>\n {t('form.optional', '(optional)')}\n </NecessityLabelElement>\n </>\n );\n}\n\nexport const INLINE_LABEL_STYLES: Styles = {\n preset: 't3',\n color: {\n '': '#dark-02',\n invalid: '#danger-text',\n },\n} as const;\n\nexport const LABEL_STYLES: Styles = {\n display: 'block',\n preset: {\n '': 't3m',\n 'size=small': 't4',\n },\n color: {\n '': '#dark',\n invalid: '#danger-text',\n },\n width: {\n '': 'initial',\n side: '($label-width, initial)',\n split: 'initial',\n },\n};\n\nconst LabelElement = tasty({\n as: 'label',\n qa: 'Label',\n styles: LABEL_STYLES,\n});\n\nexport interface CubeLabelProps\n extends BaseProps,\n ContainerStyleProps,\n ValidationProps {\n labelPosition?: LabelPosition;\n necessityIndicator?: NecessityIndicator | null;\n isRequired?: boolean;\n isOptional?: boolean;\n includeNecessityIndicatorInAccessibilityName?: boolean;\n htmlFor?: string;\n for?: string;\n size?: 'medium' | 'small';\n}\n\nfunction Label(props: CubeLabelProps, ref) {\n props = useProviderProps<CubeLabelProps>(props);\n\n const { t } = useI18n();\n\n let {\n as,\n qa,\n children,\n labelPosition = 'top',\n isRequired,\n isOptional,\n necessityIndicator,\n includeNecessityIndicatorInAccessibilityName = false,\n htmlFor,\n isDisabled,\n isInvalid,\n isValid,\n size = 'medium',\n for: labelFor,\n ...otherProps\n } = props;\n\n let domRef = useObjectRef(ref);\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n const mark = (\n <NecessityIndicatorMark\n isRequired={isRequired}\n isOptional={isOptional}\n necessityIndicator={necessityIndicator}\n includeNecessityIndicatorInAccessibilityName={\n includeNecessityIndicatorInAccessibilityName\n }\n />\n );\n\n return (\n <LabelElement\n {...filterBaseProps(otherProps)}\n ref={domRef}\n styles={styles}\n htmlFor={labelFor || htmlFor}\n data-size={size}\n mods={{\n side: labelPosition === 'side',\n disabled: isDisabled,\n ...getValidationMods({ isInvalid, isValid }),\n }}\n >\n {/*\n A non-string child is a tree the caller laid out \\u2014 `FieldWrapper`'s\n full-width `Flex`, for one \\u2014 and appending the marker after it would put\n it at the far end of that layout rather than next to the label text. So\n the marker is only appended here for plain-text labels; callers that\n build their own tree place `NecessityIndicatorMark` where it belongs.\n */}\n {typeof children !== 'string' ? (\n children\n ) : (\n <>\n {children}\n {mark}\n </>\n )}\n </LabelElement>\n );\n}\n\nlet _Label = forwardRef(Label);\n\n_Label.displayName = 'Label';\n\nexport { _Label as Label };\n"],"mappings":";;;;;;;;;;;AAsBA,MAAM,gBACJ,oBAAC;CACC,OAAM;CACN,SAAQ;CACR,GAAE;CACF,GAAE;CACF,SAAQ;CACR,OAAO;EAEL,kBAAkB;EAClB,OAAO;EACP,QAAQ;EACR,WAAW;EACZ;WAED,oBAAC,sBACC,oBAAC,iBACC,oBAAC;EACC,MAAK;EACL,QAAO;GACP,GACA,GACG;EACL;;;;;;;;;;;AAaR,MAAM,wBAAwB,MAAM;CAClC,IAAI;CACJ,IAAI;CACJ,QAAQ;EACN,QAAQ;EACR,OAAO;EACP,YAAY;EACb;CACF,CAAC;;;;;;;;;;;;AAuCF,SAAgB,uBAAuB,OAAoC;CACzE,MAAM,EACJ,YACA,YACA,qBAAqB,QACrB,+CAA+C,UAC7C;CACJ,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,gBAAgB,EAAE,iBAAiB,aAAa;CAItD,MAAM,YAAY;AAIlB,KAAI,uBAAuB,UAAU,uBAAuB,QAC1D,QAAO;AAGT,KAAI,YAAY;AACd,MAAI,uBAAuB,OACzB,QACE,8CACG,WACD,oBAAC;GACC,cACE,+CACI,gBACA;aAGL;IACI,IACN;AAMP,SACE,8CACG,WACD,oBAAC;GACC,eACE,CAAC,+CAA+C,OAAO;aAGxD;IACqB,IACvB;;AAOP,KAAI,CAAC,WAAY,QAAO;AAExB,QACE,8CACG,WACD,oBAAC,mCACE,EAAE,iBAAiB,aAAa,GACX,IACvB;;AAIP,MAAa,sBAA8B;CACzC,QAAQ;CACR,OAAO;EACL,IAAI;EACJ,SAAS;EACV;CACF;AAED,MAAa,eAAuB;CAClC,SAAS;CACT,QAAQ;EACN,IAAI;EACJ,cAAc;EACf;CACD,OAAO;EACL,IAAI;EACJ,SAAS;EACV;CACD,OAAO;EACL,IAAI;EACJ,MAAM;EACN,OAAO;EACR;CACF;AAED,MAAM,eAAe,MAAM;CACzB,IAAI;CACJ,IAAI;CACJ,QAAQ;CACT,CAAC;AAgBF,SAAS,MAAM,OAAuB,KAAK;AACzC,SAAQ,iBAAiC,MAAM;CAE/C,MAAM,EAAE,MAAM,SAAS;CAEvB,IAAI,EACF,IACA,IACA,UACA,gBAAgB,OAChB,YACA,YACA,oBACA,+CAA+C,OAC/C,SACA,YACA,WACA,SACA,OAAO,UACP,KAAK,UACL,GAAG,eACD;CAEJ,IAAI,SAAS,aAAa,IAAI;CAE9B,MAAM,SAAS,cAAc,YAAY,iBAAiB;CAE1D,MAAM,OACJ,oBAAC;EACa;EACA;EACQ;EAElB;GAEF;AAGJ,QACE,oBAAC;EACC,GAAI,gBAAgB,WAAW;EAC/B,KAAK;EACG;EACR,SAAS,YAAY;EACrB,aAAW;EACX,MAAM;GACJ,MAAM,kBAAkB;GACxB,UAAU;GACV,GAAG,kBAAkB;IAAE;IAAW;IAAS,CAAC;GAC7C;YASA,OAAO,aAAa,WACnB,WAEA,8CACG,UACA,QACA;GAEQ;;AAInB,IAAI,SAAS,WAAW,MAAM;AAE9B,OAAO,cAAc"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { LoadingIcon } from "../../../icons/LoadingIcon.js";
3
3
  import { hasValidationState } from "./resolve-validation-props.js";
4
4
  import { InvalidIcon } from "../../shared/InvalidIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  //#region src/components/form/validation/resolve-validation-props.ts
3
3
  /**
4
4
  * Normalizes the validation props of a field into a pair of booleans.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useWarn } from "../../../_internal/hooks/use-warn.js";
3
3
  import { resolveValidationProps } from "./resolve-validation-props.js";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../utils/react/mergeProps.js";
3
3
  import { FieldWrapper } from "./FieldWrapper/FieldWrapper.js";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -9,7 +9,7 @@ import { jsx } from "react/jsx-runtime";
9
9
  * Only the field wrapper props are forwarded, so callers can pass their whole props object as is.
10
10
  */
11
11
  function wrapWithField(component, ref, props) {
12
- let { forceField, label, extra, labelPosition = "top", labelStyles, isRequired, isDisabled, necessityIndicator, message, messageStyles, description, errorMessage, isInvalid, isValid, labelProps, fieldProps, fieldStyles, requiredMark = true, tooltip, isHidden, labelSuffix } = props;
12
+ let { forceField, label, extra, labelPosition = "top", labelStyles, isRequired, isOptional, isDisabled, necessityIndicator, message, messageStyles, description, errorMessage, isInvalid, isValid, labelProps, fieldProps, fieldStyles, requiredMark = true, tooltip, isHidden, labelSuffix } = props;
13
13
  if (!label && !forceField) return component;
14
14
  const mergedFieldProps = fieldStyles ? mergeProps(fieldProps, { styles: fieldStyles }) : fieldProps;
15
15
  const mergedLabelProps = labelStyles ? mergeProps(labelProps, { styles: labelStyles }) : labelProps;
@@ -19,6 +19,7 @@ function wrapWithField(component, ref, props) {
19
19
  extra,
20
20
  labelPosition,
21
21
  isRequired,
22
+ isOptional,
22
23
  isDisabled,
23
24
  necessityIndicator,
24
25
  labelProps: mergedLabelProps,
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","names":[],"sources":["../../../src/components/form/wrapper.tsx"],"sourcesContent":["import { DOMRef, FocusableRef } from '@react-types/shared';\nimport { BaseProps } from '@tenphi/tasty';\nimport { ReactElement, RefObject } from 'react';\n\nimport { FieldBaseProps, FormBaseProps } from '../../shared/index';\nimport { mergeProps } from '../../utils/react/index';\n\nimport { FieldWrapper } from './FieldWrapper/index';\n\n// `children` is intentionally omitted: the input is passed as `component`, never through props.\ninterface WrapWithFieldProps\n extends FieldBaseProps,\n Omit<BaseProps, 'children'>,\n FormBaseProps {}\n\n/**\n * Wraps an input with the field chrome (label, description, message) when it has a `label` or `forceField`.\n * Only the field wrapper props are forwarded, so callers can pass their whole props object as is.\n */\nexport function wrapWithField<T extends WrapWithFieldProps>(\n component: ReactElement,\n ref: RefObject<unknown> | FocusableRef<HTMLElement> | DOMRef<HTMLElement>,\n props: T,\n) {\n let {\n forceField,\n label,\n extra,\n labelPosition = 'top',\n labelStyles,\n isRequired,\n isDisabled,\n necessityIndicator,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n labelProps,\n fieldProps,\n fieldStyles,\n requiredMark = true,\n tooltip,\n isHidden,\n labelSuffix,\n } = props;\n\n if (!label && !forceField) {\n return component;\n }\n\n // Merge fieldStyles as shorthand for fieldProps.styles (fieldStyles takes priority)\n const mergedFieldProps = fieldStyles\n ? mergeProps(fieldProps, { styles: fieldStyles })\n : fieldProps;\n\n // Merge labelStyles as shorthand for labelProps.styles (labelStyles takes priority)\n const mergedLabelProps = labelStyles\n ? mergeProps(labelProps, { styles: labelStyles })\n : labelProps;\n\n // Remove id from fieldProps to avoid duplication (id should be on the input element, not the field wrapper)\n const { id: _id, ...fieldPropsWithoutId } = (mergedFieldProps as any) || {};\n\n return (\n <FieldWrapper\n {...{\n label,\n extra,\n labelPosition,\n isRequired,\n isDisabled,\n necessityIndicator,\n labelProps: mergedLabelProps,\n fieldProps: fieldPropsWithoutId,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n requiredMark,\n tooltip,\n isHidden,\n labelSuffix,\n Component: component,\n ref,\n }}\n />\n );\n}\n"],"mappings":";;;;;;;;;;AAmBA,SAAgB,cACd,WACA,KACA,OACA;CACA,IAAI,EACF,YACA,OACA,OACA,gBAAgB,OAChB,aACA,YACA,YACA,oBACA,SACA,eACA,aACA,cACA,WACA,SACA,YACA,YACA,aACA,eAAe,MACf,SACA,UACA,gBACE;AAEJ,KAAI,CAAC,SAAS,CAAC,WACb,QAAO;CAIT,MAAM,mBAAmB,cACrB,WAAW,YAAY,EAAE,QAAQ,aAAa,CAAC,GAC/C;CAGJ,MAAM,mBAAmB,cACrB,WAAW,YAAY,EAAE,QAAQ,aAAa,CAAC,GAC/C;CAGJ,MAAM,EAAE,IAAI,KAAK,GAAG,wBAAyB,oBAA4B,EAAE;AAE3E,QACE,oBAAC;EAEG;EACA;EACA;EACA;EACA;EACA;EACA,YAAY;EACZ,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;GAEF"}
1
+ {"version":3,"file":"wrapper.js","names":[],"sources":["../../../src/components/form/wrapper.tsx"],"sourcesContent":["import { DOMRef, FocusableRef } from '@react-types/shared';\nimport { BaseProps } from '@tenphi/tasty';\nimport { ReactElement, RefObject } from 'react';\n\nimport { FieldBaseProps, FormBaseProps } from '../../shared/index';\nimport { mergeProps } from '../../utils/react/index';\n\nimport { FieldWrapper } from './FieldWrapper/index';\n\n// `children` is intentionally omitted: the input is passed as `component`, never through props.\ninterface WrapWithFieldProps\n extends FieldBaseProps,\n Omit<BaseProps, 'children'>,\n FormBaseProps {}\n\n/**\n * Wraps an input with the field chrome (label, description, message) when it has a `label` or `forceField`.\n * Only the field wrapper props are forwarded, so callers can pass their whole props object as is.\n */\nexport function wrapWithField<T extends WrapWithFieldProps>(\n component: ReactElement,\n ref: RefObject<unknown> | FocusableRef<HTMLElement> | DOMRef<HTMLElement>,\n props: T,\n) {\n let {\n forceField,\n label,\n extra,\n labelPosition = 'top',\n labelStyles,\n isRequired,\n isOptional,\n isDisabled,\n necessityIndicator,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n labelProps,\n fieldProps,\n fieldStyles,\n requiredMark = true,\n tooltip,\n isHidden,\n labelSuffix,\n } = props;\n\n if (!label && !forceField) {\n return component;\n }\n\n // Merge fieldStyles as shorthand for fieldProps.styles (fieldStyles takes priority)\n const mergedFieldProps = fieldStyles\n ? mergeProps(fieldProps, { styles: fieldStyles })\n : fieldProps;\n\n // Merge labelStyles as shorthand for labelProps.styles (labelStyles takes priority)\n const mergedLabelProps = labelStyles\n ? mergeProps(labelProps, { styles: labelStyles })\n : labelProps;\n\n // Remove id from fieldProps to avoid duplication (id should be on the input element, not the field wrapper)\n const { id: _id, ...fieldPropsWithoutId } = (mergedFieldProps as any) || {};\n\n return (\n <FieldWrapper\n {...{\n label,\n extra,\n labelPosition,\n isRequired,\n isOptional,\n isDisabled,\n necessityIndicator,\n labelProps: mergedLabelProps,\n fieldProps: fieldPropsWithoutId,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n requiredMark,\n tooltip,\n isHidden,\n labelSuffix,\n Component: component,\n ref,\n }}\n />\n );\n}\n"],"mappings":";;;;;;;;;;AAmBA,SAAgB,cACd,WACA,KACA,OACA;CACA,IAAI,EACF,YACA,OACA,OACA,gBAAgB,OAChB,aACA,YACA,YACA,YACA,oBACA,SACA,eACA,aACA,cACA,WACA,SACA,YACA,YACA,aACA,eAAe,MACf,SACA,UACA,gBACE;AAEJ,KAAI,CAAC,SAAS,CAAC,WACb,QAAO;CAIT,MAAM,mBAAmB,cACrB,WAAW,YAAY,EAAE,QAAQ,aAAa,CAAC,GAC/C;CAGJ,MAAM,mBAAmB,cACrB,WAAW,YAAY,EAAE,QAAQ,aAAa,CAAC,GAC/C;CAGJ,MAAM,EAAE,IAAI,KAAK,GAAG,wBAAyB,oBAA4B,EAAE;AAE3E,QACE,oBAAC;EAEG;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY;EACZ,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;GAEF"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useCallback, useLayoutEffect, useRef, useState } from "react";
3
3
 
4
4
  //#region src/components/helpers/DisplayTransition/DisplayTransition.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { DisplayTransition } from "../DisplayTransition/DisplayTransition.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { isValidElement, useCallback, useLayoutEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { BoardDragActiveContext, BoardRegistryContext } from "./board-context.js";
3
3
  import { useBoardRegistry } from "./use-board-registry.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { getCompactor } from "./grid-core/compactors.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
4
4
  import { useBoardRegistry } from "./board-context.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
 
4
4
  //#region src/components/layout/Board/board-context.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/board-store.ts
3
3
  /**
4
4
  * A tiny external store mapping widget id -> registration.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/grid-core/calculate.ts
3
3
  /** Calculate the width of a single grid column in pixels. */
4
4
  function calcGridColWidth(positionParams) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/grid-core/collision-modes.ts
3
3
  /** Whether a single grid cell is free of every item in `others`. */
4
4
  function cellFree(others, x, y) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/grid-core/collision.ts
3
3
  /**
4
4
  * Check if two layout items collide (overlap).
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { collides, getFirstCollision } from "./collision.js";
3
3
  import { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from "./sort.js";
4
4
  import { bottom, cloneLayout, cloneLayoutItem, getStatics } from "./layout.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/grid-core/constraints.ts
3
3
  function clamp(value, min, max) {
4
4
  return Math.max(min, Math.min(max, value));
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { collides, getFirstCollision } from "./collision.js";
3
3
  import { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from "./sort.js";
4
4
  import { bottom, cloneLayout, cloneLayoutItem, getStatics } from "./layout.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { getAllCollisions, getFirstCollision } from "./collision.js";
3
3
  import { sortLayoutItems } from "./sort.js";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { collides } from "./collision.js";
3
3
 
4
4
  //#region src/components/layout/Board/grid-core/placement.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/grid-core/sort.ts
3
3
  /**
4
4
  * Sort layout items based on the compaction type.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { distributeEvenly, placeInFreeSlot } from "./grid-core/placement.js";
3
3
  import { getCompactor, horizontalCompactor, noCompactor, verticalCompactor } from "./grid-core/compactors.js";
4
4
  import { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid } from "./grid-core/constraints.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { cloneLayout, correctBounds } from "./grid-core/layout.js";
3
3
 
4
4
  //#region src/components/layout/Board/responsive-utils.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { cloneLayout } from "./grid-core/layout.js";
4
4
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { BoardWidgetStore } from "./board-store.js";
4
4
  import { collides } from "./grid-core/collision.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useIsDarwin } from "../../../utils/react/useIsDarwin.js";
3
3
 
4
4
  //#region src/components/layout/Board/use-board-select-modifier-key.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.174.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";