@cube-dev/ui-kit 0.0.0-canary-b3fed8f → 0.0.0-canary-77836fa

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 (587) hide show
  1. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  2. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  3. package/dist/_internal/hooks/use-event.js +1 -1
  4. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  5. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  6. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  7. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  8. package/dist/_internal/hooks/use-warn.js +1 -1
  9. package/dist/components/Block.js +1 -1
  10. package/dist/components/CollectionItem.js +1 -1
  11. package/dist/components/GlobalStyles.js +1 -1
  12. package/dist/components/GridProvider.js +1 -1
  13. package/dist/components/HiddenInput.js +1 -1
  14. package/dist/components/Root.js +1 -1
  15. package/dist/components/actions/Action/Action.js +1 -1
  16. package/dist/components/actions/Banner/Banner.js +1 -1
  17. package/dist/components/actions/Button/Button.js +1 -1
  18. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  19. package/dist/components/actions/ButtonSplit/ButtonSplit.d.ts +9 -4
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +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/ItemActionsWrapper.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/actions-run.js +1 -1
  40. package/dist/components/actions/index.js +1 -1
  41. package/dist/components/actions/use-action.js +1 -1
  42. package/dist/components/actions/use-anchored-menu.js +1 -1
  43. package/dist/components/actions/use-context-menu.js +1 -1
  44. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  45. package/dist/components/content/Alert/Alert.js +1 -1
  46. package/dist/components/content/Alert/use-alert.js +1 -1
  47. package/dist/components/content/Avatar/Avatar.js +1 -1
  48. package/dist/components/content/Badge/Badge.js +1 -1
  49. package/dist/components/content/Card/Card.js +1 -1
  50. package/dist/components/content/Content.js +1 -1
  51. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  52. package/dist/components/content/CopySnippet/CopySnippet.d.ts +4 -4
  53. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  54. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  55. package/dist/components/content/Divider.js +1 -1
  56. package/dist/components/content/Footer.js +1 -1
  57. package/dist/components/content/Header.js +1 -1
  58. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  59. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  60. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  61. package/dist/components/content/Item/Item.js +1 -1
  62. package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
  63. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  64. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  65. package/dist/components/content/Layout/GridLayout.js +1 -1
  66. package/dist/components/content/Layout/Layout.js +2 -1
  67. package/dist/components/content/Layout/Layout.js.map +1 -1
  68. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  69. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  70. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  71. package/dist/components/content/Layout/LayoutContent.js +1 -1
  72. package/dist/components/content/Layout/LayoutContext.js +1 -1
  73. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  74. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  75. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  76. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutPane.js +1 -1
  78. package/dist/components/content/Layout/LayoutPanel.d.ts +4 -2
  79. package/dist/components/content/Layout/LayoutPanel.js +73 -2
  80. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  81. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  82. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  83. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  84. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  85. package/dist/components/content/Layout/index.js +1 -1
  86. package/dist/components/content/Layout/utils.js +1 -1
  87. package/dist/components/content/Paragraph.js +1 -1
  88. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  89. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  90. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  91. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  92. package/dist/components/content/Result/Result.js +1 -1
  93. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  94. package/dist/components/content/Tag/Tag.js +1 -1
  95. package/dist/components/content/Text.js +1 -1
  96. package/dist/components/content/TextItem/TextItem.js +1 -1
  97. package/dist/components/content/Title.js +1 -1
  98. package/dist/components/content/Tree/Tree.js +1 -1
  99. package/dist/components/content/Tree/TreeNode.js +1 -1
  100. package/dist/components/content/Tree/styled.js +1 -1
  101. package/dist/components/content/Tree/tree-index.js +1 -1
  102. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  103. package/dist/components/content/Tree/use-load-data.js +1 -1
  104. package/dist/components/content/highlightText.js +1 -1
  105. package/dist/components/content/use-auto-tooltip.js +1 -1
  106. package/dist/components/data/DataTable/DataTable.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  109. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  110. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  111. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  112. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  113. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  114. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  115. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  116. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  117. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  118. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  119. package/dist/components/data/TableBase/RowCollection.js +1 -1
  120. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  121. package/dist/components/data/TableBase/TableRow.js +1 -1
  122. package/dist/components/data/TableBase/TableView.js +1 -1
  123. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  124. package/dist/components/data/TableBase/column-header.js +1 -1
  125. package/dist/components/data/TableBase/column-menu.js +1 -1
  126. package/dist/components/data/TableBase/column-styles.js +1 -1
  127. package/dist/components/data/TableBase/column-tint.js +1 -1
  128. package/dist/components/data/TableBase/row-menu.js +1 -1
  129. package/dist/components/data/TableBase/styled.js +1 -1
  130. package/dist/components/data/TableBase/table-tree.js +1 -1
  131. package/dist/components/data/TableBase/types.js +1 -1
  132. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  133. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  134. package/dist/components/data/TableBase/use-column-order.js +1 -1
  135. package/dist/components/data/TableBase/use-column-window.js +1 -1
  136. package/dist/components/data/TableBase/use-container-width.js +1 -1
  137. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  138. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  139. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  140. package/dist/components/data/TableBase/use-table-search.js +1 -1
  141. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  142. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  143. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  144. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  145. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  146. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  147. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  148. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  149. package/dist/components/fields/Checkbox/context.js +1 -1
  150. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  151. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  152. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  153. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  154. package/dist/components/fields/ComboBox/ComboBox.d.ts +1 -1
  155. package/dist/components/fields/ComboBox/ComboBox.js +13 -13
  156. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  157. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  158. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  159. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  160. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  161. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  162. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  163. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  164. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  165. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  166. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  167. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  168. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  169. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  170. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  171. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  172. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  173. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  174. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  175. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  176. package/dist/components/fields/DatePicker/period.js +1 -1
  177. package/dist/components/fields/DatePicker/props.js +1 -1
  178. package/dist/components/fields/DatePicker/utils.js +1 -1
  179. package/dist/components/fields/FileInput/FileInput.js +1 -1
  180. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  181. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  182. package/dist/components/fields/Input/Input.js +1 -1
  183. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  184. package/dist/components/fields/ListBox/ListBox.js +1 -1
  185. package/dist/components/fields/ListBox/optionId.js +1 -1
  186. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +147 -140
  187. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  188. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  189. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  190. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  191. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  192. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  193. package/dist/components/fields/Picker/Picker.js +1 -1
  194. package/dist/components/fields/RadioGroup/Radio.d.ts +4 -4
  195. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  196. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  197. package/dist/components/fields/RadioGroup/context.js +1 -1
  198. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  199. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  200. package/dist/components/fields/Select/Select.js +1 -1
  201. package/dist/components/fields/Slider/Gradation.js +1 -1
  202. package/dist/components/fields/Slider/HueSlider.js +1 -1
  203. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  204. package/dist/components/fields/Slider/Slider.js +1 -1
  205. package/dist/components/fields/Slider/SliderBase.js +1 -1
  206. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  207. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  208. package/dist/components/fields/Slider/elements.js +1 -1
  209. package/dist/components/fields/Slider/index.js +1 -1
  210. package/dist/components/fields/Switch/Switch.js +1 -1
  211. package/dist/components/fields/TagInput/TagInput.js +1 -2
  212. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  213. package/dist/components/fields/TagInput/TagList.js +1 -1
  214. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  215. package/dist/components/fields/TagInput/useTagError.js +1 -1
  216. package/dist/components/fields/TextArea/TextArea.js +1 -1
  217. package/dist/components/fields/TextInput/TextInput.js +1 -1
  218. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  219. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  220. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  221. package/dist/components/fields/TriggerActions.js +1 -1
  222. package/dist/components/fields/color/ColorPanel.js +1 -1
  223. package/dist/components/fields/color/channels.js +1 -1
  224. package/dist/components/fields/color/color.js +1 -1
  225. package/dist/components/fields/color/context.js +1 -1
  226. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  227. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  228. package/dist/components/form/Form/Field.js +1 -1
  229. package/dist/components/form/Form/Form.js +1 -1
  230. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  231. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  232. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  233. package/dist/components/form/Form/SubmitError.js +1 -1
  234. package/dist/components/form/Form/backend.js +1 -1
  235. package/dist/components/form/Form/index.js +1 -1
  236. package/dist/components/form/Form/modern/actions.js +1 -1
  237. package/dist/components/form/Form/modern/context.js +1 -1
  238. package/dist/components/form/Form/modern/controller.js +1 -1
  239. package/dist/components/form/Form/modern/field-binding.js +1 -1
  240. package/dist/components/form/Form/modern/field.js +1 -1
  241. package/dist/components/form/Form/modern/react.js +1 -1
  242. package/dist/components/form/Form/modern/store.js +1 -1
  243. package/dist/components/form/Form/modern/validation.js +1 -1
  244. package/dist/components/form/Form/modern/values.js +1 -1
  245. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  246. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  247. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  248. package/dist/components/form/Form/use-field/use-field.js +1 -1
  249. package/dist/components/form/Form/use-form.js +1 -1
  250. package/dist/components/form/Form/validation.js +1 -1
  251. package/dist/components/form/Label.js +1 -1
  252. package/dist/components/form/field-chrome.js +1 -1
  253. package/dist/components/form/legacy-tooltip.js +1 -1
  254. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  255. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  256. package/dist/components/form/validation/use-validation-props.js +1 -1
  257. package/dist/components/form/wrapper.js +1 -1
  258. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  259. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  260. package/dist/components/layout/Flex.js +1 -1
  261. package/dist/components/layout/Flow.js +1 -1
  262. package/dist/components/layout/Grid.js +1 -1
  263. package/dist/components/layout/Panel.js +1 -1
  264. package/dist/components/layout/Prefix.js +1 -1
  265. package/dist/components/layout/ResizablePanel.js +1 -1
  266. package/dist/components/layout/Space.js +1 -1
  267. package/dist/components/layout/Suffix.js +1 -1
  268. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  269. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  270. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  271. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  272. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  273. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  274. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  275. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  276. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  277. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  278. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  279. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  280. package/dist/components/navigation/Tabs/styled.js +1 -1
  281. package/dist/components/navigation/Tabs/types.js +1 -1
  282. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  283. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  284. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  285. package/dist/components/other/Calendar/Calendar.js +1 -1
  286. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  287. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  288. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  289. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  290. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  291. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  292. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  293. package/dist/components/other/Calendar/styled.js +1 -1
  294. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  295. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  296. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  297. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  298. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  299. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  300. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  301. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  302. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  303. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  304. package/dist/components/overlays/Dialog/context.js +1 -1
  305. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  306. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  307. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  308. package/dist/components/overlays/Modal/Modal.js +1 -1
  309. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  310. package/dist/components/overlays/Modal/Overlay.js +7 -2
  311. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  312. package/dist/components/overlays/Modal/Popover.js +31 -29
  313. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  314. package/dist/components/overlays/Modal/Tray.js +2 -1
  315. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  316. package/dist/components/overlays/Modal/Underlay.js +1 -1
  317. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  318. package/dist/components/overlays/Notifications/Notification.js +1 -1
  319. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  320. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  321. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  322. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  323. package/dist/components/overlays/Notifications/OverlayContainer.js +18 -32
  324. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  325. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  326. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  327. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  328. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  329. package/dist/components/overlays/Notifications/index.js +1 -1
  330. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  331. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  332. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  333. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  334. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  335. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  336. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  337. package/dist/components/overlays/Toast/index.js +1 -1
  338. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  339. package/dist/components/overlays/Toast/useToast.js +1 -1
  340. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  341. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  342. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  343. package/dist/components/overlays/Tooltip/context.js +1 -1
  344. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  345. package/dist/components/portal/Portal.js +1 -1
  346. package/dist/components/portal/PortalProvider.js +1 -1
  347. package/dist/components/portal/usePortal.js +1 -1
  348. package/dist/components/shared/DraggableCollection.js +1 -1
  349. package/dist/components/shared/InvalidIcon.js +1 -1
  350. package/dist/components/shared/ValidIcon.js +1 -1
  351. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  352. package/dist/components/status/Spin/Cube.js +1 -1
  353. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  354. package/dist/components/status/Spin/Spin.js +1 -1
  355. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  356. package/dist/data/item-themes.js +1 -1
  357. package/dist/data/themes.js +1 -1
  358. package/dist/eslint-plugin/defaults.generated.js +1 -1
  359. package/dist/eslint-plugin/index.js +1 -1
  360. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  361. package/dist/i18n/I18nProvider.js +1 -1
  362. package/dist/i18n/createFormatter.js +1 -1
  363. package/dist/i18n/index.js +1 -1
  364. package/dist/i18n/instance.js +1 -1
  365. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  366. package/dist/i18n/locales/en-US/uikit.js +1 -1
  367. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  368. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  369. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  370. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  371. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  372. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  373. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  374. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  375. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  376. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  377. package/dist/i18n/locales.js +1 -1
  378. package/dist/i18n/namespace.js +1 -1
  379. package/dist/i18n/useFormatter.js +1 -1
  380. package/dist/i18n/useI18n.js +1 -1
  381. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  382. package/dist/icons/AdjustmentsIcon.js +1 -1
  383. package/dist/icons/AiIcon.js +1 -1
  384. package/dist/icons/AreaChartIcon.js +1 -1
  385. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  386. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  387. package/dist/icons/BackwardIcon.js +1 -1
  388. package/dist/icons/BarChartIcon.js +1 -1
  389. package/dist/icons/BellFilledIcon.js +1 -1
  390. package/dist/icons/BellIcon.js +1 -1
  391. package/dist/icons/BooleanIcon.js +1 -1
  392. package/dist/icons/CalendarEditIcon.js +1 -1
  393. package/dist/icons/CalendarIcon.js +1 -1
  394. package/dist/icons/CaretDownIcon.js +1 -1
  395. package/dist/icons/CaretUpIcon.js +1 -1
  396. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  397. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  398. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  399. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  400. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  401. package/dist/icons/ChartBarLineIcon.js +1 -1
  402. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  403. package/dist/icons/ChartBarStackedIcon.js +1 -1
  404. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  405. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  406. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  407. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  408. package/dist/icons/ChartBubbleIcon.js +1 -1
  409. package/dist/icons/ChartDonut2Icon.js +1 -1
  410. package/dist/icons/ChartFunnelIcon.js +1 -1
  411. package/dist/icons/ChartHeatmapIcon.js +1 -1
  412. package/dist/icons/ChartKPIIcon.js +1 -1
  413. package/dist/icons/ChartPie2Icon.js +1 -1
  414. package/dist/icons/ChartScatterIcon.js +1 -1
  415. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  416. package/dist/icons/CheckCircleIcon.js +1 -1
  417. package/dist/icons/CheckIcon.js +1 -1
  418. package/dist/icons/CircleFilledIcon.js +1 -1
  419. package/dist/icons/ClearIcon.js +1 -1
  420. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  421. package/dist/icons/CloseCircleIcon.js +1 -1
  422. package/dist/icons/CloseIcon.js +1 -1
  423. package/dist/icons/CodeIcon.js +1 -1
  424. package/dist/icons/ColumnTotalIcon.js +1 -1
  425. package/dist/icons/CopyIcon.js +1 -1
  426. package/dist/icons/CountIcon.js +1 -1
  427. package/dist/icons/CubeIcon.js +1 -1
  428. package/dist/icons/CubePauseIcon.js +1 -1
  429. package/dist/icons/CubePlayIcon.js +1 -1
  430. package/dist/icons/CurrencyDollarIcon.js +1 -1
  431. package/dist/icons/DangerIcon.js +1 -1
  432. package/dist/icons/DashboardIcon.js +1 -1
  433. package/dist/icons/DatabaseIcon.js +1 -1
  434. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  435. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  436. package/dist/icons/DirectionIcon.js +1 -1
  437. package/dist/icons/DonutIcon.js +1 -1
  438. package/dist/icons/DownIcon.js +1 -1
  439. package/dist/icons/EditIcon.js +1 -1
  440. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  441. package/dist/icons/ExclamationCircleIcon.js +1 -1
  442. package/dist/icons/ExclamationIcon.js +1 -1
  443. package/dist/icons/EyeIcon.js +1 -1
  444. package/dist/icons/EyeInvisibleIcon.js +1 -1
  445. package/dist/icons/FilterIcon.js +1 -1
  446. package/dist/icons/FolderFilledIcon.js +1 -1
  447. package/dist/icons/FolderIcon.js +1 -1
  448. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  449. package/dist/icons/FolderOpenIcon.js +1 -1
  450. package/dist/icons/ForwardIcon.js +1 -1
  451. package/dist/icons/GripVerticalIcon.js +1 -1
  452. package/dist/icons/HierarchyIcon.js +1 -1
  453. package/dist/icons/HierarchyOpenIcon.js +1 -1
  454. package/dist/icons/Icon.js +1 -1
  455. package/dist/icons/InfoCircleIcon.js +1 -1
  456. package/dist/icons/InfoIcon.js +1 -1
  457. package/dist/icons/KeyIcon.js +1 -1
  458. package/dist/icons/LeftIcon.js +1 -1
  459. package/dist/icons/LineChartIcon.js +1 -1
  460. package/dist/icons/LoadingIcon.js +1 -1
  461. package/dist/icons/LockFilledIcon.js +1 -1
  462. package/dist/icons/LockIcon.js +1 -1
  463. package/dist/icons/MoreIcon.js +1 -1
  464. package/dist/icons/NotAllowedIcon.js +1 -1
  465. package/dist/icons/Number123Icon.js +1 -1
  466. package/dist/icons/NumberIcon.js +1 -1
  467. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  468. package/dist/icons/PauseCircleIcon.js +1 -1
  469. package/dist/icons/PauseIcon.js +1 -1
  470. package/dist/icons/PercentageIcon.js +1 -1
  471. package/dist/icons/PieChartIcon.js +1 -1
  472. package/dist/icons/PipetteIcon.js +1 -1
  473. package/dist/icons/PlayCircleIcon.js +1 -1
  474. package/dist/icons/PlayIcon.js +1 -1
  475. package/dist/icons/PlusIcon.js +1 -1
  476. package/dist/icons/ProgressBarIcon.js +1 -1
  477. package/dist/icons/ReloadIcon.js +1 -1
  478. package/dist/icons/ReportIcon.js +1 -1
  479. package/dist/icons/ReturnIcon.js +1 -1
  480. package/dist/icons/RightIcon.js +1 -1
  481. package/dist/icons/RowTotalsIcon.js +1 -1
  482. package/dist/icons/SchemeIcon.js +1 -1
  483. package/dist/icons/SearchIcon.js +1 -1
  484. package/dist/icons/SemanticQueryIcon.js +1 -1
  485. package/dist/icons/SettingsIcon.js +1 -1
  486. package/dist/icons/ShieldFilledIcon.js +1 -1
  487. package/dist/icons/ShieldIcon.js +1 -1
  488. package/dist/icons/SlashIcon.js +1 -1
  489. package/dist/icons/SparklesIcon.js +1 -1
  490. package/dist/icons/SqlIcon.js +1 -1
  491. package/dist/icons/StatsIcon.js +1 -1
  492. package/dist/icons/StopIcon.js +1 -1
  493. package/dist/icons/StringIcon.js +1 -1
  494. package/dist/icons/SubtotalsIcon.js +1 -1
  495. package/dist/icons/SwitchIcon.js +1 -1
  496. package/dist/icons/TableIcon.js +1 -1
  497. package/dist/icons/ThumbsDownIcon.js +1 -1
  498. package/dist/icons/ThumbsUpIcon.js +1 -1
  499. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  500. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  501. package/dist/icons/ThunderboltIcon.js +1 -1
  502. package/dist/icons/TimeIcon.js +1 -1
  503. package/dist/icons/TrashIcon.js +1 -1
  504. package/dist/icons/UnlockIcon.js +1 -1
  505. package/dist/icons/UpIcon.js +1 -1
  506. package/dist/icons/UserGroupIcon.js +1 -1
  507. package/dist/icons/UserIcon.js +1 -1
  508. package/dist/icons/UserLockIcon.js +1 -1
  509. package/dist/icons/ViewIcon.js +1 -1
  510. package/dist/icons/WarningFilledIcon.js +1 -1
  511. package/dist/icons/WarningIcon.js +1 -1
  512. package/dist/icons/wrap-icon.js +1 -1
  513. package/dist/index.js +1 -1
  514. package/dist/probe/canonicalize.js +1 -1
  515. package/dist/probe/css.js +1 -1
  516. package/dist/probe/index.js +1 -1
  517. package/dist/provider.js +1 -1
  518. package/dist/providers/TrackingProvider.js +1 -1
  519. package/dist/providers/navigation-url.js +1 -1
  520. package/dist/providers/navigationAdapter.default.js +1 -1
  521. package/dist/providers/use-navigation.js +1 -1
  522. package/dist/tokens/all-tokens.js +1 -1
  523. package/dist/tokens/base.js +1 -1
  524. package/dist/tokens/color-seed.js +1 -1
  525. package/dist/tokens/color-theme.js +1 -1
  526. package/dist/tokens/colors.js +1 -1
  527. package/dist/tokens/layout.js +1 -1
  528. package/dist/tokens/lazy-styles.js +1 -1
  529. package/dist/tokens/legacy-color.js +1 -1
  530. package/dist/tokens/palette-config.js +1 -1
  531. package/dist/tokens/palette.js +1 -1
  532. package/dist/tokens/resolve.js +1 -1
  533. package/dist/tokens/shadows.js +1 -1
  534. package/dist/tokens/sizes.js +1 -1
  535. package/dist/tokens/spacing.js +1 -1
  536. package/dist/tokens/typography.js +1 -1
  537. package/dist/utils/ResizeSensor.js +1 -1
  538. package/dist/utils/colors.js +1 -1
  539. package/dist/utils/dotize.js +1 -1
  540. package/dist/utils/is-dev-env.js +1 -1
  541. package/dist/utils/modules.js +1 -1
  542. package/dist/utils/promise.js +1 -1
  543. package/dist/utils/raf.js +1 -1
  544. package/dist/utils/random.js +1 -1
  545. package/dist/utils/range.js +1 -1
  546. package/dist/utils/react/RenderCache.js +1 -1
  547. package/dist/utils/react/Slots.js +1 -1
  548. package/dist/utils/react/chain.js +1 -1
  549. package/dist/utils/react/disabledProps.js +1 -1
  550. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  551. package/dist/utils/react/index.js +1 -1
  552. package/dist/utils/react/interactions.js +1 -1
  553. package/dist/utils/react/isTextOnly.js +1 -1
  554. package/dist/utils/react/mapProps.js +1 -1
  555. package/dist/utils/react/mergeProps.js +1 -1
  556. package/dist/utils/react/nullableValue.js +1 -1
  557. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  558. package/dist/utils/react/programmaticFocus.js +1 -1
  559. package/dist/utils/react/resolveIcon.js +1 -1
  560. package/dist/utils/react/sharedStore.js +1 -1
  561. package/dist/utils/react/useBufferedValue.js +1 -1
  562. package/dist/utils/react/useCombinedRefs.js +1 -1
  563. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  564. package/dist/utils/react/useEventBus.js +1 -1
  565. package/dist/utils/react/useId.js +1 -1
  566. package/dist/utils/react/useIsDarwin.js +1 -1
  567. package/dist/utils/react/useKeySymbols.js +1 -1
  568. package/dist/utils/react/useLayoutEffect.js +1 -1
  569. package/dist/utils/react/useLocalStorage.js +1 -1
  570. package/dist/utils/react/useMergeStyles.js +1 -1
  571. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  572. package/dist/utils/react/usePopoverSync.js +1 -1
  573. package/dist/utils/react/useQaProps.js +1 -1
  574. package/dist/utils/react/useScheme.js +1 -1
  575. package/dist/utils/react/useViewportSize.js +1 -1
  576. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  577. package/dist/utils/selection.js +1 -1
  578. package/dist/utils/styles.js +1 -1
  579. package/dist/utils/tree.js +1 -1
  580. package/dist/utils/warnings.js +1 -1
  581. package/dist/version.js +2 -2
  582. package/docs/ComplexLayout.md +1 -1
  583. package/docs/components/actions/ButtonSplit.md +27 -1
  584. package/docs/components/content/Layout.md +8 -4
  585. package/docs/components/fields/ComboBox.md +6 -2
  586. package/docs/components/fields/TagInput.md +1 -1
  587. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TagInput.js","names":["useControlledState","Node","CollectionNode","Key","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","Styles","tasty","ClipboardEvent","cloneElement","FocusEvent","ForwardedRef","forwardRef","isValidElement","KeyboardEvent","ReactElement","ReactNode","RefObject","useEffect","useMemo","useRef","useState","useFilter","useId","useTextField","VisuallyHidden","Section","BaseSection","useListState","useEvent","useFormatter","useI18n","CloseIcon","DirectionIcon","generateRandomId","mergeProps","useCombinedRefs","castNullableArrayValue","WithNullableValue","extractStyles","ItemAction","CollectionItem","Item","useFieldProps","rendersFieldChrome","wrapWithField","getListBoxOptionId","collectVisibleKeys","filterCollectionNodes","getEdgeVisibleKey","getNextVisibleKey","ListBoxPopover","ListStateLike","useCompositeFocus","TextInputBase","TagList","TagListEntry","useActiveOption","useTagError","FieldBaseProps","CubeTagProps","CompositeBlurInfo","FilterFn","textValue","inputValue","showEveryOption","TagInputPopoverTrigger","TagValidationResult","CubeTagInputProps","value","defaultValue","onChange","defaultInputValue","onInputChange","placeholder","autoComplete","inputMode","enterKeyHint","onFocus","onBlur","onKeyDown","e","HTMLInputElement","delimiters","validateTag","normalizeTag","maxTags","shouldCommitOnBlur","isClearable","onClear","items","Iterable","T","children","item","allowsCustomValue","filter","disabledKeys","popoverTrigger","onOpenChange","isOpen","hideTrigger","direction","shouldFlip","overlayOffset","containerPadding","tagProps","Partial","icon","prefix","suffix","suffixPosition","size","inputRef","wrapperRef","HTMLDivElement","popoverRef","listBoxRef","wrapperStyles","inputStyles","tagListStyles","tagStyles","triggerStyles","overlayStyles","listBoxStyles","optionStyles","sectionStyles","headingStyles","listGap","TagInputElement","qa","styles","display","flow","gap","TAG_SIZES","Record","small","medium","large","DEFAULT_DELIMITERS","LINE_BREAK","escapeRegExp","text","replace","delimiterPattern","RegExp","separators","Boolean","map","length","join","splitTagText","pattern","source","split","part","trim","textLabel","node","undefined","textCollator","Intl","Collator","sensitivity","textSorter","numeric","isSameText","a","b","compare","compareText","OptionMatch","exact","loose","matchOptionText","collection","byKey","nodes","type","childNodes","child","key","String","label","withCustomOptions","customKeys","customTerm","hasOptionRows","hasSections","optionsLabel","customValuesLabel","customOptions","push","customSection","Array","isArray","CustomRows","keys","visibleKeys","typedKey","NO_CUSTOM_ROWS","getCustomRows","values","unpicked","isOption","term","isFiltering","matches","termOptionKey","Set","sort","includes","getExactRowKey","customValueKeys","some","getPreferredRowKey","rows","exactKey","firstNew","find","isComposingKey","nativeEvent","isComposing","keyCode","RejectionReason","Rejection","reason","message","CommitSource","TagRules","ReadonlySet","isOptionOnly","getRejection","optionKey","present","Omit","has","result","getComboboxProps","listBoxId","activeKey","role","FieldButtonProps","id","ariaLabel","fieldLabelledby","onPress","TagInputTrigger","t0","$","_c","isDisabled","t","t1","t2","t3","pressed","t4","t5","t6","TagInputClearButton","Symbol","for","TagInput","props","ref","defaultValidationTrigger","valuePropsMapper","_temp","formatList","autoFocus","className","errorMessage","inputRefProp","inputValueProp","isInvalid","isLoading","isReadOnly","isRequired","isValid","listBoxRefProp","mods","onChange_0","otherProps","popoverRefProp","qaVal","renderChildren","style","userLabelProps","valueProp","wrapperRefProp","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","t59","t60","t61","t62","t63","t64","t65","labelProps","t66","t67","t68","t69","t70","name","form","t71","rootRef","tagListRef","listStateRef","tagInputId","tagListId","summaryId","hintId","triggerId","clearId","setValues","uniqueValues","draft","setDraftState","tagError","setTagError","clearTagErrorAfterPress","cancelPendingClear","announcement","setAnnouncement","from","index","rendered","hasOptions","localCollectionState","selectionMode","getItem","getOption","contains","textFilterFn","isFilterActive","setIsFilterActive","knownLabels","setKnownLabels","_temp2","key_0","get","getOptionLabel","key_1","getTagLabel","key_2","isTagLocked","disabledKeySet","next","key_3","label_0","Map","set","rememberLabels","match","findOptionKey","text_0","typed","resolveTypedText","resolvePart","optionFilterFn","keep","node_0","visibleOptionKeys","unpickedCustomValues","setUnpickedCustomValues","visibleCustomKeys","value_0","popoverChildren","_temp3","hasResults","visibleOptionsSignature","isPopoverOpen","setIsPopoverOpen","isInteractive","shouldShowPopover","notifiedOpenRef","current","visibleTargetKeys","preferredOptionKey","activeOption","setActiveOption","moveVirtualFocus","popoverMinWidth","activeOptionKey","next_0","setDraft","text_1","prev","announce","rejection","count","rejectionMessage","_temp4","joinDelimiter","joiner","hasFieldMessage","commitParts","parts","source_0","rules","accepted","rejected","part_0","optionKey_0","typed_0","nextValue","rejection_0","add","returned","_temp5","kept","slice","shown","error","messages","_temp6","rest","commitDraft","querySelectorAll","focus","focusLastTag","removeValues","requested","keys_0","key_4","removed","next_1","value_1","value_2","toggleOption","key_5","source_1","prev_0","handlePopoverSelection","selection","next_2","changed","key_6","value_3","forEach","clicked","selectionManager","setFocusedKey","setTimeout","isTabbingRef","preventDefault","listState","handleArrowKey","e_0","listState_0","handleEdgeKey","e_1","repeat","handleBackspaceKey","handleEnterKey","e_2","isCurrent","targetKey","key_7","e_3","el","currentTarget","start","selectionStart","end","selectionEnd","rejected_0","trimStart","handleDelimiterKey","e_4","stopPropagation","handleEscapeKey","handleKeyDown","e_5","defaultPrevented","value_4","handleInputChange","next_3","parts_0","nextDraft","rest_0","pop","rejected_1","_temp7","e_6","pasted","clipboardData","getData","el_0","start_0","end_0","handlePaste","settleDraft","handleCompositeFocus","isPressing","wasShowingMessage","handleCompositeBlur","HTMLElement","compositeFocusProps","e_7","isTabbing","next_4","relatedTarget","handleInputBlur","handleInputFocus","tags","value_5","ownProps","label_1","invalidMessage","effectiveIsInvalid","hasRemovableTags","_temp8","hasBackspaceHint","lockedKeys","_temp9","_temp0","optionDisabledKeys","inputProps","ariaLabelledby","labelId","describedBy","tagInputProps","onPaste","willOpen","handleTriggerPress","trigger","clearText","canClear","clearButton","hasActions","T0","_temp1","tagInputField","_children","fieldProps","fieldRef","tag_2","tag","tag_1","tag_0","part_1","rejection_2","rejection_1","delimiter","test","node_1","_TagInput","Object","assign","displayName","defineProperty","enumerable","configurable"],"sources":["../../../../src/components/fields/TagInput/TagInput.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { Node as CollectionNode, Key } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ClipboardEvent,\n cloneElement,\n FocusEvent,\n ForwardedRef,\n forwardRef,\n isValidElement,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useId, useTextField, VisuallyHidden } from 'react-aria';\nimport { Section as BaseSection, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useFormatter, useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { DirectionIcon } from '../../../icons/DirectionIcon';\nimport { generateRandomId } from '../../../utils/random';\nimport { mergeProps, useCombinedRefs } from '../../../utils/react';\nimport {\n castNullableArrayValue,\n WithNullableValue,\n} from '../../../utils/react/nullableValue';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport { useFieldProps } from '../../form/Form/use-field/use-field-props';\nimport { rendersFieldChrome, wrapWithField } from '../../form/wrapper';\nimport { getListBoxOptionId } from '../ListBox/optionId';\nimport {\n collectVisibleKeys,\n filterCollectionNodes,\n getEdgeVisibleKey,\n getNextVisibleKey,\n ListBoxPopover,\n ListStateLike,\n useCompositeFocus,\n} from '../ListBoxPopover';\nimport { TextInputBase } from '../TextInput/TextInputBase';\n\nimport { TagList, TagListEntry } from './TagList';\nimport { useActiveOption } from './useActiveOption';\nimport { useTagError } from './useTagError';\n\nimport type { FieldBaseProps } from '../../../shared';\nimport type { CubeTagProps } from '../../content/Tag/Tag';\nimport type { CompositeBlurInfo } from '../ListBoxPopover';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\n/**\n * `filter={false}`: the options come filtered already, as from a server.\n * Named rather than inline in the ternary that picks it: SonarJS charges a\n * function in a ternary branch to every later line of the component.\n */\nconst showEveryOption: FilterFn = () => true;\n\nexport type TagInputPopoverTrigger = 'focus' | 'input' | 'manual';\n\n/**\n * What `validateTag` returns: `true` (or nothing) accepts the value, `false`\n * rejects it with the default message, and a string rejects it with that\n * message.\n */\nexport type TagValidationResult = boolean | string | null | undefined;\n\nexport interface CubeTagInputProps<T = object>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n FieldBaseProps<readonly string[] | null | undefined> {\n /** The values in controlled mode. */\n value?: readonly string[];\n /** The initial values in uncontrolled mode. */\n defaultValue?: readonly string[];\n /** Called with the whole new list whenever a value is added or removed. */\n onChange?: (value: string[]) => void;\n\n /** The text being typed, in controlled mode. */\n inputValue?: string;\n /** The initial text in uncontrolled mode. */\n defaultInputValue?: string;\n /** Called when the text being typed changes. */\n onInputChange?: (value: string) => void;\n /** Placeholder text for the input. */\n placeholder?: string;\n /** HTML `autocomplete` attribute for the input. */\n autoComplete?: string;\n /**\n * Which virtual keyboard the input asks for: `'email'` for addresses,\n * `'decimal'` for numbers. The input stays a text input, so the browser does\n * not validate what is typed.\n */\n inputMode?:\n | 'none'\n | 'text'\n | 'tel'\n | 'url'\n | 'email'\n | 'numeric'\n | 'decimal'\n | 'search';\n /** The label of the virtual keyboard's Enter key. */\n enterKeyHint?:\n | 'enter'\n | 'done'\n | 'go'\n | 'next'\n | 'previous'\n | 'search'\n | 'send';\n /** Called when focus enters the component (input, chips or popover). Receives no event. */\n onFocus?: () => void;\n /**\n * Called when focus leaves the component entirely, after the typed text is\n * committed and before the press that moved focus is handled. Receives no\n * event.\n */\n onBlur?: () => void;\n /**\n * Called when a key is pressed in the input, before the component handles it.\n * Call `e.preventDefault()` to stop the component from handling the key.\n */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n\n /**\n * Characters that commit the typed text, and that pasted text is split on.\n * Pasted text is also always split on line breaks. Pass `[]` for values that\n * may contain the default separator; only the first of several refused\n * values then stays in the input.\n * @default [',']\n */\n delimiters?: string[];\n /**\n * Checks one value before it becomes a chip. Return `true` or nothing to\n * accept it, `false` to reject it with the default message, or a string to\n * reject it with that message. Also paints existing chips that fail it in the\n * danger theme. Values picked from the options are not checked.\n */\n validateTag?: (value: string) => TagValidationResult;\n /**\n * Rewrites a typed value before it is checked and added: lowercase an\n * address, write a number one way. Duplicates are found after it runs.\n * Return an empty string to drop the value. Values picked from the options\n * are not rewritten.\n */\n normalizeTag?: (value: string) => string;\n /**\n * The most values the field holds. Values past it are refused with a\n * message and stay in the input.\n */\n maxTags?: number;\n /** Whether leaving the field commits the typed text. @default true */\n shouldCommitOnBlur?: boolean;\n /**\n * Whether a button in the input clears the typed text. It shows while there\n * is text; the chips have their own remove buttons.\n */\n isClearable?: boolean;\n /** Called when the clear button is pressed. */\n onClear?: () => void;\n\n /** Options to suggest, as data. Pair with a render function in `children`. */\n items?: Iterable<T>;\n /**\n * Options to suggest: `TagInput.Item` elements or a render function for\n * `items`. Without options the field accepts any typed value.\n */\n children?: ReactNode | ((item: T) => ReactElement);\n /**\n * Whether typed values that are not among the options are accepted. Only\n * applies when options are given; without options every value is custom.\n * Text that matches an option only in case or accents is then added as\n * typed; without it, that text picks the option.\n * @default false\n */\n allowsCustomValue?: boolean;\n /**\n * Custom filter for the options, or `false` to show every option (for\n * server-side filtering).\n */\n filter?: FilterFn | false;\n /** Keys of options that cannot be picked. */\n disabledKeys?: Iterable<Key>;\n /** When the suggestions popover opens. @default 'input' */\n popoverTrigger?: TagInputPopoverTrigger;\n /** Called when the suggestions popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether to hide the button that toggles the suggestions popover. */\n hideTrigger?: boolean;\n /** Where the suggestions popover opens. @default 'bottom' */\n direction?: 'bottom' | 'top';\n /** Whether the popover flips when there is no room. @default true */\n shouldFlip?: boolean;\n /** Distance between the input and the popover, in pixels. @default 8 */\n overlayOffset?: number;\n /** Minimum space between the popover and the viewport edge, in pixels. @default 8 */\n containerPadding?: number;\n\n /**\n * Props for each chip's `Tag` (theme, icon, label, …), by value. A string\n * `children` also names the value to screen readers. `isDisabled` locks the\n * chip: it cannot be removed.\n */\n tagProps?: (value: string) => Partial<CubeTagProps> | undefined;\n\n /** Left input icon. */\n icon?: ReactElement;\n /** Input decoration before the main input. */\n prefix?: ReactNode;\n /** Input decoration after the main input. */\n suffix?: ReactNode;\n /** Whether the suffix goes before or after the validation and loading icons. */\n suffixPosition?: 'before' | 'after';\n /** Size of the input. The chips follow it. @default 'medium' */\n size?: 'small' | 'medium' | 'large' | (string & {});\n\n /** Ref to the input element. */\n inputRef?: RefObject<HTMLInputElement>;\n /** Ref to the bordered input box. */\n wrapperRef?: RefObject<HTMLDivElement>;\n /** Ref to the popover element. */\n popoverRef?: RefObject<HTMLDivElement>;\n /** Ref to the listbox in the popover. */\n listBoxRef?: RefObject<HTMLDivElement>;\n\n /** Styles for the bordered input box. */\n wrapperStyles?: Styles;\n /** Styles for the input element. */\n inputStyles?: Styles;\n /** Styles for the list of chips. */\n tagListStyles?: Styles;\n /** Styles for every chip. */\n tagStyles?: Styles;\n /** Styles for the button that toggles the popover. */\n triggerStyles?: Styles;\n /** Styles for the popover. */\n overlayStyles?: Styles;\n /** Styles for the listbox in the popover. */\n listBoxStyles?: Styles;\n /** Styles for each option. */\n optionStyles?: Styles;\n /** Styles for option sections. */\n sectionStyles?: Styles;\n /** Styles for option section headings. */\n headingStyles?: Styles;\n /** Space between options, in pixels. Defaults to a hairline (`1bw`). */\n listGap?: number;\n}\n\nconst TagInputElement = tasty({\n qa: 'TagInputContainer',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: '1x',\n },\n});\n\n// The chips sit a step below the input, so a row of them reads as the field's\n// value rather than as a second row of controls. Never below `xsmall`: the\n// `inline` tag is set in the bold badge type, which reads as a label.\nconst TAG_SIZES: Record<string, CubeTagProps['size']> = {\n small: 'xsmall',\n medium: 'xsmall',\n large: 'small',\n};\n\nconst DEFAULT_DELIMITERS = [','];\nconst LINE_BREAK = /\\r\\n|\\r|\\n/;\n\nfunction escapeRegExp(text: string) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction delimiterPattern(delimiters: string[]): RegExp | null {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n\n return separators.length ? new RegExp(separators.join('|')) : null;\n}\n\n/** Splits `text` on the delimiters and line breaks into trimmed, non-empty parts. */\nexport function splitTagText(text: string, delimiters: string[]): string[] {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n const pattern = new RegExp([LINE_BREAK.source, ...separators].join('|'), 'g');\n\n return text\n .split(pattern)\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\n/** A chip's own label, when `tagProps` gives it one as plain text. */\nfunction textLabel(node: ReactNode): string | undefined {\n return typeof node === 'string' && node !== '' ? node : undefined;\n}\n\n// Safari reports the Enter that confirms an IME composition with\n// `isComposing: false`, but still with the composition key code.\nconst textCollator = new Intl.Collator(undefined, { sensitivity: 'base' });\n// Numbers in order: 2 before 10.\nconst textSorter = new Intl.Collator(undefined, { numeric: true });\n\nfunction isSameText(a: string, b: string) {\n return textCollator.compare(a, b) === 0;\n}\n\nfunction compareText(a: string, b: string) {\n return textSorter.compare(a, b);\n}\n\ninterface OptionMatch {\n /** The first option whose label is the text, or else the one whose key is. */\n exact: string | null;\n /** The first option whose label is the text ignoring case and accents. */\n loose: string | null;\n}\n\n/**\n * The options typed text names. The label comes first, since it is what the\n * user sees, then the key. An exact match is looked for in the whole list\n * before a loose one counts, so `active` finds `active` even after `Active`.\n */\nfunction matchOptionText(\n collection: Iterable<CollectionNode<unknown>>,\n text: string,\n): OptionMatch {\n let byKey: string | null = null;\n let loose: string | null = null;\n\n for (const node of collection) {\n const nodes = node.type === 'section' ? [...node.childNodes] : [node];\n\n for (const child of nodes) {\n if (child.type !== 'item') continue;\n\n const key = String(child.key);\n const label = child.textValue || '';\n\n if (label === text) return { exact: key, loose };\n\n if (byKey == null && key === text) byKey = key;\n if (loose == null && isSameText(label, text)) loose = key;\n }\n }\n\n return { exact: byKey, loose };\n}\n\n/**\n * The popover's rows: the options, then the user's own values and the typed\n * text. Those go in a section of their own when there are options to set them\n * apart from.\n */\nfunction withCustomOptions(\n children: ReactNode,\n {\n customKeys,\n customTerm,\n hasOptionRows,\n hasSections,\n optionsLabel,\n customValuesLabel,\n }: {\n customKeys: readonly string[];\n customTerm: string | null;\n hasOptionRows: boolean;\n hasSections: boolean;\n optionsLabel: string;\n customValuesLabel: string;\n },\n) {\n if (!customTerm && !customKeys.length) return children;\n\n const customOptions = customKeys.map((key) => (\n <Item key={key} textValue={key}>\n {key}\n </Item>\n ));\n\n if (customTerm) {\n customOptions.push(\n <Item key={customTerm} textValue={customTerm}>\n {customTerm}\n </Item>,\n );\n }\n\n if (!hasOptionRows) {\n return customOptions;\n }\n\n const customSection = (\n <BaseSection key=\"__custom_values__\" aria-label={customValuesLabel}>\n {customOptions}\n </BaseSection>\n );\n\n // A section cannot nest in another one, so options that already come in\n // sections only get the custom section appended.\n if (hasSections) {\n return [\n ...(Array.isArray(children) ? children : [children]),\n customSection,\n ];\n }\n\n return [\n <BaseSection key=\"__options__\" aria-label={optionsLabel}>\n {children as never}\n </BaseSection>,\n customSection,\n ];\n}\n\ninterface CustomRows {\n /** The user's own values, as rows. */\n keys: readonly string[];\n /** The ones the typed text leaves listed. */\n visibleKeys: readonly string[];\n /** The typed text as a pickable row, when it would add something new. */\n typedKey: string | null;\n}\n\nconst NO_CUSTOM_ROWS: CustomRows = {\n keys: [],\n visibleKeys: [],\n typedKey: null,\n};\n\n/**\n * The rows listed after the options: the user's own values, so they can be\n * unpicked where they were picked, and the typed text. `unpicked` holds the\n * custom values unpicked during this visit, which stay listed.\n */\nfunction getCustomRows({\n values,\n unpicked,\n isOption,\n term,\n isFiltering,\n matches,\n termOptionKey,\n}: {\n values: readonly string[];\n unpicked: readonly string[];\n /** Whether a value is an option, or was one when it was picked. */\n isOption: (value: string) => boolean;\n term: string;\n /** Whether the typed text narrows the rows. */\n isFiltering: boolean;\n matches: FilterFn;\n /** The option the typed text names, if any. */\n termOptionKey: string | null;\n}): CustomRows {\n // Sorted, so toggling one does not move it.\n const keys = [\n ...new Set([...values, ...unpicked].filter((value) => !isOption(value))),\n ].sort(compareText);\n\n return {\n keys,\n visibleKeys:\n isFiltering && term ? keys.filter((key) => matches(key, term)) : keys,\n typedKey:\n term &&\n termOptionKey == null &&\n !values.includes(term) &&\n !keys.includes(term)\n ? term\n : null,\n };\n}\n\n/**\n * The row the typed text names: the option it stands for, or else a custom\n * value it spells. Text that names a row only in another case is a value of\n * its own, so its own row wins over that one: Enter adds `paris` as typed, not\n * `Paris`.\n */\nfunction getExactRowKey(\n collection: Iterable<CollectionNode<unknown>>,\n {\n term,\n termOptionKey,\n customTerm,\n customValueKeys,\n }: {\n term: string;\n termOptionKey: string | null;\n customTerm: string | null;\n customValueKeys: readonly string[];\n },\n): string | null {\n if (termOptionKey != null) return termOptionKey;\n if (term && customValueKeys.includes(term)) return term;\n\n if (\n customTerm &&\n (matchOptionText(collection, customTerm).loose != null ||\n customValueKeys.some((key) => isSameText(key, customTerm)))\n ) {\n return customTerm;\n }\n\n return null;\n}\n\n/**\n * The row the focus pass lands on, and Enter with it. The row the typed text\n * names wins over the first match, so typing \"build\" and pressing Enter picks\n * \"build\", not \"rebuild\". Typed text means \"add\", so past an exact match the\n * first row that is not added yet wins: typing \"def\" next to a picked\n * \"undefined\" lands on \"def\".\n */\nfunction getPreferredRowKey(\n rows: readonly Key[],\n exactKey: Key | null,\n term: string,\n values: readonly string[],\n): Key | null {\n if (exactKey != null && rows.includes(exactKey)) return exactKey;\n\n const firstNew = term\n ? rows.find((key) => !values.includes(String(key)))\n : undefined;\n\n return firstNew ?? rows[0] ?? null;\n}\n\nfunction isComposingKey(e: KeyboardEvent<HTMLInputElement>) {\n return e.nativeEvent.isComposing || e.keyCode === 229;\n}\n\ntype RejectionReason =\n | 'invalid'\n | 'duplicate'\n | 'unknown'\n | 'unavailable'\n | 'limit';\n\ninterface Rejection {\n text: string;\n reason: RejectionReason;\n message?: string;\n}\n\n/**\n * Where a committed part comes from: typed text, which may name an option, an\n * option row's key, or a custom value's row, which is only ever itself.\n */\ntype CommitSource = 'text' | 'option' | 'custom';\n\n/** What a value must pass to become a chip. */\ninterface TagRules {\n /** Keys of options that cannot be picked. */\n disabledKeys: ReadonlySet<string>;\n /** Only options are accepted: there are options, and no custom values. */\n isOptionOnly: boolean;\n maxTags?: number;\n validateTag?: (value: string) => TagValidationResult;\n}\n\n/**\n * Why a value is refused, or `null` when it may be added. `optionKey` is the\n * option the part resolved to, if any: an option is not validated. `present`\n * holds the values already there, the ones this commit accepted so far among\n * them.\n */\nfunction getRejection(\n value: string,\n optionKey: string | null,\n present: ReadonlySet<string>,\n { disabledKeys, isOptionOnly, maxTags, validateTag }: TagRules,\n): Omit<Rejection, 'text'> | null {\n if (optionKey != null && disabledKeys.has(optionKey)) {\n return { reason: 'unavailable' };\n }\n\n if (optionKey == null && isOptionOnly) return { reason: 'unknown' };\n if (present.has(value)) return { reason: 'duplicate' };\n if (maxTags != null && present.size >= maxTags) return { reason: 'limit' };\n\n if (optionKey == null && validateTag) {\n const result = validateTag(value);\n\n if (result === false || typeof result === 'string') {\n return {\n reason: 'invalid',\n message: typeof result === 'string' ? result : undefined,\n };\n }\n }\n\n return null;\n}\n\n/** The input's combobox wiring, for a field with options to suggest. */\nfunction getComboboxProps(\n listBoxId: string,\n isOpen: boolean,\n activeKey: Key | null,\n) {\n return {\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': isOpen,\n 'aria-controls': isOpen ? listBoxId : undefined,\n 'aria-activedescendant':\n isOpen && activeKey != null\n ? getListBoxOptionId(listBoxId, activeKey)\n : undefined,\n };\n}\n\ninterface FieldButtonProps {\n id: string;\n size: CubeTagInputProps['size'];\n /** The field's `aria-label`, joined into the button's own name. */\n ariaLabel?: string;\n /** The ids that label the field, read after the button's own name. */\n fieldLabelledby?: string;\n onPress: () => void;\n}\n\n/** The button in the input that toggles the suggestions popover. */\nfunction TagInputTrigger({\n id,\n size,\n ariaLabel,\n fieldLabelledby,\n onPress,\n isOpen,\n isDisabled,\n styles,\n}: FieldButtonProps & {\n isOpen: boolean;\n isDisabled: boolean;\n styles?: Styles;\n}) {\n const { t } = useI18n();\n\n return (\n <ItemAction\n data-popover-trigger\n id={id}\n qa=\"TagInputTrigger\"\n icon={<DirectionIcon to={isOpen ? 'up' : 'down'} />}\n size={size}\n isDisabled={isDisabled}\n styles={styles}\n mods={{ pressed: isOpen }}\n // Arrow keys open the list from the input, so the button stays out of\n // the Tab order and Tab goes from the input straight to the chips.\n tabIndex={-1}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-label={\n ariaLabel\n ? t('tagInput.showOptionsFor', 'Show options, {{label}}', {\n label: ariaLabel,\n })\n : t('tagInput.showOptions', 'Show options')\n }\n aria-labelledby={fieldLabelledby ? `${id} ${fieldLabelledby}` : undefined}\n onPress={onPress}\n />\n );\n}\n\n/** The button in the input that clears the typed text. */\nfunction TagInputClearButton({\n id,\n size,\n ariaLabel,\n fieldLabelledby,\n onPress,\n}: FieldButtonProps) {\n const { t } = useI18n();\n\n return (\n <ItemAction\n id={id}\n qa=\"TagInputClearButton\"\n icon={<CloseIcon />}\n size={size}\n // Escape does the same from the keyboard. As a Tab stop it would take\n // focus just as tabbing away commits the text and removes it.\n tabIndex={-1}\n aria-label={\n ariaLabel\n ? t('tagInput.clearTextFor', 'Clear text, {{label}}', {\n label: ariaLabel,\n })\n : t('tagInput.clearText', 'Clear text')\n }\n aria-labelledby={fieldLabelledby ? `${id} ${fieldLabelledby}` : undefined}\n onPress={onPress}\n />\n );\n}\n\nfunction TagInput<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n props = castNullableArrayValue(props);\n props = useFieldProps(props, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value ?? [],\n onChange,\n }),\n });\n\n const { t } = useI18n();\n const { formatList } = useFormatter();\n\n let {\n qa,\n id,\n label,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange,\n placeholder,\n autoFocus,\n autoComplete = 'off',\n onFocus,\n onBlur,\n onKeyDown,\n delimiters = DEFAULT_DELIMITERS,\n validateTag,\n normalizeTag,\n maxTags,\n shouldCommitOnBlur = true,\n isClearable,\n onClear,\n items,\n children: renderChildren,\n allowsCustomValue,\n filter,\n disabledKeys,\n popoverTrigger = 'input',\n onOpenChange,\n hideTrigger,\n direction = 'bottom',\n shouldFlip = true,\n overlayOffset = 8,\n containerPadding = 8,\n tagProps,\n icon,\n prefix,\n suffix,\n suffixPosition,\n size = 'medium',\n isDisabled,\n isReadOnly,\n isRequired,\n isLoading,\n isInvalid,\n isValid,\n message,\n errorMessage,\n inputRef: inputRefProp,\n wrapperRef: wrapperRefProp,\n popoverRef: popoverRefProp,\n listBoxRef: listBoxRefProp,\n wrapperStyles,\n inputStyles,\n tagListStyles,\n tagStyles,\n triggerStyles,\n overlayStyles,\n listBoxStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n listGap,\n labelProps: userLabelProps,\n mods,\n className,\n style,\n qaVal,\n // The input holds the text being typed, not the field's value: a native\n // form must not submit it under the field's name.\n name,\n form,\n ...otherProps\n } = props;\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n const rootRef = useCombinedRefs(ref);\n const inputRef = useCombinedRefs(inputRefProp);\n const wrapperRef = useCombinedRefs(wrapperRefProp);\n const popoverRef = useCombinedRefs(popoverRefProp);\n const listBoxRef = useCombinedRefs(listBoxRefProp);\n const tagListRef = useRef<HTMLDivElement>(null);\n const listStateRef = useRef<ListStateLike | null>(null);\n\n const tagInputId = useMemo(() => generateRandomId(), []);\n const listBoxId = `TagInputListBox-${tagInputId}`;\n const tagListId = useId();\n const summaryId = useId();\n const hintId = useId();\n const triggerId = useId();\n const clearId = useId();\n\n // ---- values -------------------------------------------------------------\n const [values, setValues] = useControlledState<readonly string[]>(\n valueProp as readonly string[] | undefined,\n (defaultValue as readonly string[] | undefined) ?? [],\n onChange as ((value: readonly string[]) => void) | undefined,\n );\n // A controlled value may repeat an entry; the chips are keyed by value, so\n // render each one once.\n const uniqueValues = [...new Set((values ?? []).map(String))];\n\n // ---- typed text ---------------------------------------------------------\n const [draft, setDraftState] = useControlledState<string>(\n inputValueProp as string | undefined,\n defaultInputValue ?? '',\n onInputChange,\n );\n const { tagError, setTagError, clearTagErrorAfterPress, cancelPendingClear } =\n useTagError();\n const [announcement, setAnnouncement] = useState({ id: 0, text: '' });\n\n // ---- options ------------------------------------------------------------\n let children: ReactNode = renderChildren as ReactNode;\n\n if (items && typeof renderChildren === 'function') {\n children = Array.from(items).map((item, index) => {\n const rendered = (renderChildren as (item: T) => ReactNode)(item);\n\n if (isValidElement(rendered) && rendered.key == null) {\n return cloneElement(rendered, {\n key:\n (item as { key?: Key })?.key ?? (item as { id?: Key })?.id ?? index,\n });\n }\n\n return rendered;\n });\n }\n\n const hasOptions = children != null && children !== false;\n\n // Reads option labels, and matches typed text to an option, whether or not\n // the popover is open.\n const localCollectionState = useListState({\n children: children as never,\n selectionMode: 'none',\n });\n const collection = localCollectionState.collection;\n\n // An option's node. Sections are in the collection too, under keys of their\n // own, but a value that shares one is still the user's own text.\n const getOption = (key: string) => {\n const node = collection.getItem(key);\n\n return node?.type === 'item' ? node : null;\n };\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n const textFilterFn: FilterFn =\n filter === false ? showEveryOption : filter || contains;\n\n const [isFilterActive, setIsFilterActive] = useState(false);\n const term = draft.trim();\n\n // Labels of picked options, kept after the option leaves the collection, as\n // it does with server-side filtering (`items` + `filter={false}`).\n const [knownLabels, setKnownLabels] = useState<ReadonlyMap<string, string>>(\n () => new Map(),\n );\n\n const getOptionLabel = (key: string) =>\n getOption(key)?.textValue || knownLabels.get(key) || key;\n\n // What a chip reads as, and what announcements name it by: a string label\n // the chip is given, then the option's own.\n const getTagLabel = (key: string) =>\n textLabel(tagProps?.(key)?.children) ?? getOptionLabel(key);\n\n // A locked chip stays put: no remove button, Delete or unpick.\n const isTagLocked = (key: string) => !!tagProps?.(key)?.isDisabled;\n\n const disabledKeySet = new Set([...(disabledKeys ?? [])].map(String));\n\n // Called before the text changes (and the options with it) and when values\n // are added, while the options still hold the labels.\n const rememberLabels = useEvent((keys: readonly string[]) => {\n let next: Map<string, string> | null = null;\n\n for (const key of keys) {\n const label = getOption(key)?.textValue;\n\n if (label && knownLabels.get(key) !== label) {\n if (!next) next = new Map(knownLabels);\n next.set(key, label);\n }\n }\n\n if (next) setKnownLabels(next);\n });\n\n /**\n * The option typed text stands for, if any. Without `allowsCustomValue` a\n * label in another case or without its accents counts, so `production`\n * finds `Production`. With it, such text is a value of its own and is added\n * as typed: `paris` is not `Paris` to a case-sensitive filter.\n */\n const findOptionKey = (text: string): string | null => {\n if (!hasOptions) return null;\n\n const match = matchOptionText(collection, text);\n\n return match.exact ?? (allowsCustomValue ? null : match.loose);\n };\n\n /**\n * What typed text commits as: the option it names, or else the text itself,\n * rewritten by `normalizeTag`, and the option that names if any. Enter, a\n * delimiter, a paste and blur all go through this, so they agree.\n */\n const resolveTypedText = (text: string) => {\n const optionKey = findOptionKey(text);\n\n if (optionKey != null || !normalizeTag) return { optionKey, typed: text };\n\n const typed = normalizeTag(text).trim();\n\n return { optionKey: typed ? findOptionKey(typed) : null, typed };\n };\n\n /**\n * What a part commits as. Only typed text is matched to an option. An option\n * row commits its own key; a custom value's row is the user's own text, so\n * `normalizeTag` still rewrites it, but it never turns into an option.\n */\n const resolvePart = (part: string, source: CommitSource = 'text') => {\n if (source === 'text') return resolveTypedText(part);\n if (source === 'option') return { optionKey: part, typed: part };\n\n return {\n optionKey: null,\n typed: normalizeTag ? normalizeTag(part).trim() : part,\n };\n };\n\n const termOptionKey = term ? resolveTypedText(term).optionKey : null;\n\n // The option the text names stays listed even when the filter would hide\n // it (a key typed, a custom filter), so Enter can land on it.\n const optionFilterFn = (nodes: Iterable<any>) => {\n if (!isFilterActive || !term) return nodes;\n\n return filterCollectionNodes(nodes, term, textFilterFn, {\n keep:\n termOptionKey == null\n ? undefined\n : (node) => String(node.key) === termOptionKey,\n });\n };\n\n const visibleOptionKeys: Key[] = [];\n\n if (hasOptions) {\n collectVisibleKeys(\n optionFilterFn(collection),\n visibleOptionKeys,\n disabledKeys ? new Set(disabledKeys) : undefined,\n );\n }\n\n // Custom values unpicked in the list during this visit. They stay listed,\n // unchecked, until focus leaves the field: the row does not vanish under the\n // pointer, and it can be picked back.\n const [unpickedCustomValues, setUnpickedCustomValues] = useState<\n readonly string[]\n >([]);\n\n // The user's own values and the typed text, listed after the options. Only\n // with `allowsCustomValue`: without it an unpicked value could not be added\n // back.\n const {\n keys: customValueKeys,\n visibleKeys: visibleCustomKeys,\n typedKey: customTerm,\n } = hasOptions && allowsCustomValue\n ? getCustomRows({\n values: uniqueValues,\n unpicked: unpickedCustomValues,\n isOption: (value) => getOption(value) != null || knownLabels.has(value),\n term,\n isFiltering: isFilterActive,\n // The typed text narrows them as it narrows the options, even when\n // the options are filtered on the server (`filter={false}`): these\n // rows are this component's own.\n matches: typeof filter === 'function' ? filter : contains,\n termOptionKey,\n })\n : NO_CUSTOM_ROWS;\n\n const popoverChildren = withCustomOptions(children, {\n customKeys: visibleCustomKeys,\n customTerm,\n hasOptionRows: visibleOptionKeys.length > 0,\n hasSections: [...collection].some((node) => node.type === 'section'),\n optionsLabel: t('tagInput.options', 'Options'),\n customValuesLabel: t('tagInput.customValues', 'Custom values'),\n });\n\n const hasResults =\n visibleOptionKeys.length > 0 ||\n visibleCustomKeys.length > 0 ||\n customTerm != null;\n // Options rebuild on every render when they come from `items`, so effects\n // follow what is visible rather than the collection's identity.\n const visibleOptionsSignature = [\n ...visibleOptionKeys,\n ...visibleCustomKeys,\n ].join('\\u0000');\n\n // ---- popover ------------------------------------------------------------\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const isInteractive = !isDisabled && !isReadOnly;\n const shouldShowPopover =\n hasOptions && isInteractive && isPopoverOpen && hasResults;\n\n // With no matching option the popover hides but stays open, so it comes back\n // as soon as the text matches again.\n const notifiedOpenRef = useRef(false);\n\n useEffect(() => {\n if (notifiedOpenRef.current === shouldShowPopover) return;\n\n notifiedOpenRef.current = shouldShowPopover;\n onOpenChange?.(shouldShowPopover);\n }, [shouldShowPopover, onOpenChange]);\n\n const visibleTargetKeys: Key[] = [...visibleOptionKeys, ...visibleCustomKeys];\n\n if (customTerm) visibleTargetKeys.push(customTerm);\n\n const preferredOptionKey = getPreferredRowKey(\n visibleTargetKeys,\n getExactRowKey(collection, {\n term,\n termOptionKey,\n customTerm,\n customValueKeys,\n }),\n term,\n uniqueValues,\n );\n\n const { activeOption, setActiveOption, moveVirtualFocus, popoverMinWidth } =\n useActiveOption({\n listStateRef,\n wrapperRef,\n isOpen: shouldShowPopover,\n visibleOptionsSignature,\n customTerm,\n term,\n preferredOptionKey,\n });\n const activeOptionKey = activeOption?.key ?? null;\n\n const setDraft = useEvent((next: string) => {\n setDraftState(next);\n setIsFilterActive(!!next.trim());\n });\n\n // A fresh node per message, so a repeated one (\"Added a\", remove, \"Added a\")\n // is announced again.\n const announce = useEvent((text: string) => {\n setAnnouncement((prev) => ({ id: prev.id + 1, text }));\n });\n\n // ---- commit -------------------------------------------------------------\n const rejectionMessage = useEvent((rejection: Rejection) => {\n if (rejection.message) return rejection.message;\n\n switch (rejection.reason) {\n case 'duplicate':\n return t('tagInput.duplicateValue', '\"{{value}}\" is already added', {\n value: rejection.text,\n });\n case 'unknown':\n return t('tagInput.unknownValue', '\"{{value}}\" is not in the list', {\n value: rejection.text,\n });\n case 'unavailable':\n return t('tagInput.unavailableValue', '\"{{value}}\" is not available', {\n value: rejection.text,\n });\n case 'limit':\n return t('tagInput.limitReached', 'You can add up to {{count}}', {\n count: maxTags,\n });\n default:\n return t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: rejection.text,\n });\n }\n });\n\n // Refused parts go back to the input joined by a delimiter, so they split\n // back into the same values. A line break cannot join them: the input drops\n // it. Typing a delimiter always leaves one to join with.\n const joinDelimiter = delimiters.find(\n (delimiter) => delimiter && !LINE_BREAK.test(delimiter),\n );\n const joiner = joinDelimiter ? `${joinDelimiter} ` : ' ';\n\n // Without the field chrome there is no field wrapper to show the message, so\n // a rejection is announced instead.\n const hasFieldMessage = rendersFieldChrome(props);\n\n /**\n * Turns typed parts into values. Accepted parts become chips. Refused ones\n * come back as text for the input, with a message, except a duplicate: it is\n * a chip already, and the message says so. With no delimiter to join them,\n * only the first refused part comes back, since glued together they would\n * commit as one value nobody typed. A row picked from the list says where it\n * comes from (`source`), so it is never matched to another option.\n */\n const commitParts = useEvent((parts: string[], source?: CommitSource) => {\n if (!parts.length) return '';\n\n const rules: TagRules = {\n disabledKeys: disabledKeySet,\n isOptionOnly: hasOptions && !allowsCustomValue,\n maxTags,\n validateTag,\n };\n const present = new Set(uniqueValues);\n const accepted: string[] = [];\n const rejected: Rejection[] = [];\n\n for (const part of parts) {\n // Only text of its own is rewritten; an option keeps its key.\n const { optionKey, typed } = resolvePart(part, source);\n\n if (!typed) continue;\n\n const nextValue = optionKey ?? typed;\n const rejection = getRejection(nextValue, optionKey, present, rules);\n\n if (rejection) {\n rejected.push({ text: part, ...rejection });\n continue;\n }\n\n present.add(nextValue);\n accepted.push(nextValue);\n }\n\n const returned = rejected.filter(\n (rejection) => rejection.reason !== 'duplicate',\n );\n const kept = joinDelimiter ? returned : returned.slice(0, 1);\n // The message is about the text left in the input, if there is any.\n const shown = kept[0] ?? rejected[0];\n const error = shown ? rejectionMessage(shown) : null;\n const messages: string[] = [];\n\n if (accepted.length) {\n rememberLabels(accepted);\n setValues([...uniqueValues, ...accepted]);\n messages.push(\n t('tagInput.added', 'Added {{value}}', {\n value: formatList(accepted.map(getTagLabel)),\n }),\n );\n }\n\n if (error && !hasFieldMessage) messages.push(error);\n if (messages.length) announce(messages.join(' '));\n\n setTagError(error);\n\n return kept.map((rejection) => rejection.text).join(joiner);\n });\n\n /** Commits the typed text and returns what is left in the input. */\n const commitDraft = useEvent(() => {\n const rest = commitParts(splitTagText(draft, delimiters));\n\n setDraft(rest);\n\n return rest;\n });\n\n // Focusing the row itself tells the tag group which chip is focused, as a\n // click would.\n const focusLastTag = useEvent(() => {\n const rows = tagListRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"row\"]:not([aria-disabled=\"true\"])',\n );\n\n rows?.[rows.length - 1]?.focus();\n });\n\n const removeValues = useEvent((requested: string[]) => {\n const keys = requested.filter((key) => !isTagLocked(key));\n\n if (!keys.length) return;\n\n const removed = new Set(keys);\n const next = uniqueValues.filter((value) => !removed.has(value));\n\n // Focus leaves the list before the last chip it can land on unmounts under\n // it; locked chips take no focus.\n if (!next.some((value) => !isTagLocked(value))) {\n inputRef.current?.focus();\n }\n\n setValues(next);\n setTagError(null);\n announce(\n t('tagInput.removed', 'Removed {{value}}', {\n value: formatList(keys.map(getTagLabel)),\n }),\n );\n });\n\n /**\n * Picks an option in the popover, or unpicks one that already is a chip. The\n * popover stays open for the next pick, and the query is cleared so the full\n * list is back. A picked row is never swapped for an option with a similar\n * or the same text. A custom value's row is still the user's own text, so\n * `normalizeTag` and `validateTag` apply to it. The typed text's row is the\n * typed text, so it commits as a delimiter would.\n */\n const toggleOption = useEvent((key: string) => {\n if (isTagLocked(key)) return;\n\n const source: CommitSource =\n getOption(key) != null\n ? 'option'\n : customValueKeys.includes(key)\n ? 'custom'\n : 'text';\n\n setTagError(null);\n\n if (uniqueValues.includes(key)) {\n removeValues([key]);\n setDraft('');\n\n if (customValueKeys.includes(key)) {\n setUnpickedCustomValues((prev) =>\n prev.includes(key) ? prev : [...prev, key],\n );\n }\n } else if (!commitParts([key], source)) {\n // An accepted pick clears the query. A refused one (past `maxTags`)\n // keeps it, next to the message saying why.\n setDraft('');\n }\n });\n\n // A click in the popover list. The list reports its whole new selection, so\n // compare it with the chips to find the option that changed.\n const handlePopoverSelection = useEvent(\n (selection: Key | Key[] | null | 'all') => {\n if (!Array.isArray(selection)) return;\n\n const next = new Set(selection.map(String));\n const changed = [\n ...[...next].filter((key) => !uniqueValues.includes(key)),\n ...uniqueValues.filter(\n (value) =>\n !next.has(value) &&\n (getOption(value) != null || visibleCustomKeys.includes(value)),\n ),\n ];\n\n changed.forEach(toggleOption);\n\n // The click moved the list's focus to the option; the input's\n // `aria-activedescendant` follows it.\n const clicked = changed[changed.length - 1];\n\n if (clicked != null) {\n listStateRef.current?.selectionManager.setFocusedKey(clicked);\n // The pick clears the text.\n setActiveOption({ key: clicked, term: '', source: 'user' });\n }\n\n // A click can take DOM focus off the input; keep typing where it was.\n setTimeout(() => inputRef.current?.focus(), 0);\n },\n );\n\n // ---- keyboard -----------------------------------------------------------\n // Set while Tab moves focus out of the input, so the blur can tell a Tab to\n // the chips (commit the text) from a click on a remove button (keep it).\n const isTabbingRef = useRef(false);\n\n const handleArrowKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (!hasOptions) return;\n\n e.preventDefault();\n\n if (!shouldShowPopover) {\n if (!hasResults) setIsFilterActive(false);\n setIsPopoverOpen(true);\n\n return;\n }\n\n const listState = listStateRef.current;\n\n if (listState) {\n moveVirtualFocus(\n getNextVisibleKey(listState, e.key === 'ArrowDown' ? 1 : -1),\n 'user',\n term,\n );\n }\n });\n\n const handleEdgeKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n\n const listState = listStateRef.current;\n\n if (listState) {\n moveVirtualFocus(\n getEdgeVisibleKey(listState, e.key === 'Home' ? 'first' : 'last'),\n 'user',\n term,\n );\n }\n });\n\n // The chips sit below the input, not beside the caret, so Backspace in an\n // empty input moves to the last chip instead of removing it out of view.\n // The chip comes into view with focus and says it is removable; the next\n // Backspace removes it and moves to the one before.\n const handleBackspaceKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // A held Backspace that just emptied the input stops there, so it does\n // not run on into the chips.\n if (e.repeat) return;\n\n setIsPopoverOpen(false);\n focusLastTag();\n });\n\n const handleEnterKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (isComposingKey(e)) return;\n\n // The announced option, unless the text changed since it was chosen and\n // its focus pass has not run yet: then the best match for this text.\n const isCurrent = activeOption != null && activeOption.term === term;\n const targetKey = shouldShowPopover\n ? isCurrent\n ? activeOption.key\n : preferredOptionKey\n : null;\n\n if (targetKey != null) {\n e.preventDefault();\n\n const key = String(targetKey);\n\n // Typed text means \"add\". An option that is already a chip is refused\n // as a duplicate and the text cleared, as a comma or blur would;\n // unpicking one takes the arrows, a click, or an empty input.\n if (\n term &&\n uniqueValues.includes(key) &&\n !(isCurrent && activeOption.source === 'user')\n ) {\n setDraft('');\n setTagError(\n rejectionMessage({\n text: getTagLabel(key),\n reason: 'duplicate',\n }),\n );\n\n return;\n }\n\n toggleOption(key);\n\n return;\n }\n\n // Enter is for adding values and never submits a form, even with nothing\n // typed: pressing it once more after the last value must not send a\n // half-filled dialog.\n e.preventDefault();\n\n if (term) commitDraft();\n });\n\n const handleDelimiterKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // The separator splits the text where it is typed: what comes before the\n // caret is committed, what comes after stays in the input.\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? start;\n const rejected = commitParts(\n splitTagText(draft.slice(0, start), delimiters),\n );\n\n setDraft(\n [rejected, draft.slice(end).trimStart()].filter(Boolean).join(joiner),\n );\n });\n\n // Escape takes back one thing at a time: the list, then the text. A message\n // goes with either, or on its own when the input is already empty, as after\n // a refused duplicate.\n const handleEscapeKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (shouldShowPopover) {\n e.preventDefault();\n e.stopPropagation();\n setIsPopoverOpen(false);\n setTagError(null);\n } else if (draft || tagError) {\n e.preventDefault();\n e.stopPropagation();\n setDraft('');\n setTagError(null);\n // It may be open but hidden for want of a match; the full list must\n // not appear when the text goes.\n setIsPopoverOpen(false);\n }\n });\n\n const handleKeyDown = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n\n // A Tab the consumer prevented moves no focus.\n isTabbingRef.current = e.key === 'Tab' && !e.defaultPrevented;\n\n if (e.defaultPrevented || !isInteractive) return;\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n handleArrowKey(e);\n } else if ((e.key === 'Home' || e.key === 'End') && shouldShowPopover) {\n handleEdgeKey(e);\n } else if (\n e.key === 'Backspace' &&\n !draft &&\n uniqueValues.some((value) => !isTagLocked(value))\n ) {\n handleBackspaceKey(e);\n } else if (e.key === 'Enter') {\n handleEnterKey(e);\n } else if (delimiters.includes(e.key)) {\n handleDelimiterKey(e);\n } else if (e.key === 'Escape') {\n handleEscapeKey(e);\n }\n });\n\n // A separator can also arrive without a key press: autocorrect, IME, drag and\n // drop. Commit everything before the last separator and keep the rest typed.\n const handleInputChange = useEvent((next: string) => {\n setTagError(null);\n rememberLabels(uniqueValues);\n\n const pattern = delimiterPattern(delimiters);\n const parts = pattern ? next.split(pattern) : [next];\n\n let nextDraft = next;\n\n if (parts.length > 1) {\n const rest = (parts.pop() ?? '').trimStart();\n const rejected = commitParts(\n parts.map((part) => part.trim()).filter(Boolean),\n );\n\n nextDraft = [rejected, rest].filter(Boolean).join(joiner);\n }\n\n setDraft(nextDraft);\n\n if (hasOptions && popoverTrigger !== 'manual' && nextDraft.trim()) {\n setIsPopoverOpen(true);\n }\n });\n\n // An `<input>` drops line breaks from pasted text, so split a pasted list\n // here, where they are still visible.\n const handlePaste = useEvent((e: ClipboardEvent<HTMLInputElement>) => {\n if (!isInteractive) return;\n\n const pasted = e.clipboardData.getData('text');\n\n if (!pasted || splitTagText(pasted, delimiters).length < 2) return;\n\n e.preventDefault();\n\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? draft.length;\n\n setTagError(null);\n setDraft(\n commitParts(\n splitTagText(\n `${draft.slice(0, start)}\\n${pasted}\\n${draft.slice(end)}`,\n delimiters,\n ),\n ),\n );\n });\n\n // ---- focus --------------------------------------------------------------\n // What leaving the input does to the typed text. Returns the text left.\n const settleDraft = useEvent((): string => {\n if (!term) return '';\n if (!shouldCommitOnBlur || !isInteractive) return draft;\n\n if (hasOptions && !allowsCustomValue && termOptionKey == null) {\n // Leaving a filter query behind is not an entry: drop it, as ComboBox\n // does with text that matches no option.\n setDraft('');\n setTagError(null);\n\n return '';\n }\n\n return commitDraft();\n });\n\n const handleCompositeFocus = useEvent(() => {\n cancelPendingClear();\n onFocus?.();\n });\n\n const handleCompositeBlur = useEvent(({ isPressing }: CompositeBlurInfo) => {\n setIsPopoverOpen(false);\n setUnpickedCustomValues([]);\n\n const wasShowingMessage = tagError != null;\n\n // A message can only be about text in the input. Once none is left, as\n // after a refused duplicate, the field does not stay marked invalid.\n if (!settleDraft()) {\n // One set while settling is cleared in the same render, and never shows.\n if (isPressing && wasShowingMessage) clearTagErrorAfterPress();\n else setTagError(null);\n }\n\n onBlur?.();\n });\n\n const { compositeFocusProps } = useCompositeFocus({\n wrapperRef: rootRef as RefObject<HTMLElement>,\n popoverRef: popoverRef as RefObject<HTMLElement>,\n onFocus: handleCompositeFocus,\n onBlur: handleCompositeBlur,\n isDisabled,\n });\n\n // Tabbing from the input to the chips stays inside the component, so the\n // composite blur never fires: close the popover and settle the text on the\n // way. A click on a chip's remove button also moves focus there, and leaves\n // both alone.\n const handleInputBlur = useEvent((e: FocusEvent<HTMLInputElement>) => {\n const isTabbing = isTabbingRef.current;\n const next = e.relatedTarget as Node | null;\n\n isTabbingRef.current = false;\n\n if (!isTabbing || !next || !rootRef.current?.contains(next)) return;\n\n setIsPopoverOpen(false);\n settleDraft();\n });\n\n const handleInputFocus = useEvent(() => {\n if (hasOptions && popoverTrigger === 'focus' && isInteractive) {\n setIsPopoverOpen(true);\n }\n });\n\n // ---- chips --------------------------------------------------------------\n const tags: TagListEntry[] = uniqueValues.map((value) => {\n const ownProps = tagProps?.(value);\n const isOption = getOption(value) != null || knownLabels.has(value);\n const result = !isOption && validateTag ? validateTag(value) : true;\n const label = textLabel(ownProps?.children) ?? getOptionLabel(value);\n\n return {\n key: value,\n label,\n // Put in words as well as in color, for the chip's description.\n invalidMessage:\n typeof result === 'string'\n ? result\n : result === false\n ? t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: label,\n })\n : undefined,\n tagProps: ownProps,\n isDisabled: !!ownProps?.isDisabled,\n };\n });\n\n const effectiveIsInvalid = tagError ? true : isInvalid;\n const hasRemovableTags = tags.some((tag) => !tag.isDisabled);\n // Backspace in an empty input is how the keyboard gets to the chips without\n // Tab; nothing on screen says so.\n const hasBackspaceHint = isInteractive && hasRemovableTags;\n\n // A locked value's option stays checked but cannot be unpicked.\n const lockedKeys = tags.filter((tag) => tag.isDisabled).map((tag) => tag.key);\n const optionDisabledKeys = lockedKeys.length\n ? [...disabledKeySet, ...lockedKeys]\n : disabledKeys;\n\n // ---- input --------------------------------------------------------------\n const { labelProps, inputProps } = useTextField(\n {\n ...otherProps,\n id,\n label,\n value: draft,\n placeholder,\n isDisabled,\n isReadOnly,\n isRequired,\n isInvalid: effectiveIsInvalid,\n autoFocus,\n onChange: handleInputChange,\n } as never,\n inputRef,\n );\n // Names the chips, the buttons and the options after the field: \"Selected\n // values Also send to\", rather than the same words for every field on the\n // page. The ids go in the order the input reads them: the visible label,\n // then `aria-labelledby`.\n const ariaLabel = (props as { 'aria-label'?: string })['aria-label'];\n const ariaLabelledby = (props as { 'aria-labelledby'?: string })[\n 'aria-labelledby'\n ];\n const labelId = label ? (labelProps.id as string | undefined) : undefined;\n const fieldLabelledby =\n [labelId, ariaLabelledby].filter(Boolean).join(' ') || undefined;\n // An `aria-label` has no element to point at, so its words are joined into\n // each part's own name instead, ahead of the ids. That is the input's order\n // too: given `aria-label` with a `label` or `aria-labelledby`, React Aria\n // puts the input's own id first in its `aria-labelledby`, so it reads\n // \"Values Primary key\" and the chips \"Selected values, Values Primary key\".\n\n // Joined, not replaced: the input keeps any description it already has.\n const describedBy: string[] = [];\n\n if (inputProps['aria-describedby']) {\n describedBy.push(inputProps['aria-describedby']);\n }\n if (tags.length) describedBy.push(summaryId);\n if (hasBackspaceHint) describedBy.push(hintId);\n\n const tagInputProps = mergeProps(\n inputProps,\n {\n onKeyDown: handleKeyDown,\n onPaste: handlePaste,\n onBlur: handleInputBlur,\n onFocus: handleInputFocus,\n autoComplete,\n 'data-input-type': 'taginput',\n 'aria-describedby': describedBy.join(' ') || undefined,\n },\n hasOptions\n ? getComboboxProps(listBoxId, shouldShowPopover, activeOptionKey)\n : undefined,\n );\n\n const handleTriggerPress = useEvent(() => {\n const willOpen = !shouldShowPopover;\n\n if (willOpen && !hasResults) setIsFilterActive(false);\n\n setIsPopoverOpen(willOpen);\n inputRef.current?.focus();\n });\n\n const trigger =\n hasOptions && !hideTrigger ? (\n <TagInputTrigger\n id={triggerId}\n size={size}\n ariaLabel={ariaLabel}\n fieldLabelledby={fieldLabelledby}\n isOpen={shouldShowPopover}\n isDisabled={!isInteractive}\n styles={triggerStyles}\n onPress={handleTriggerPress}\n />\n ) : null;\n\n // Clears what is typed, as Escape does. The chips below have their own\n // remove buttons, so a button inside the input is about the text only.\n const clearText = useEvent(() => {\n // The button goes away with the text; keep focus in the field.\n inputRef.current?.focus();\n setDraft('');\n setTagError(null);\n setIsPopoverOpen(false);\n onClear?.();\n });\n\n const canClear = !!isClearable && isInteractive && draft !== '';\n const clearButton = canClear ? (\n <TagInputClearButton\n id={clearId}\n size={size}\n ariaLabel={ariaLabel}\n fieldLabelledby={fieldLabelledby}\n onPress={clearText}\n />\n ) : null;\n\n // Not a bare fragment: an empty one would still mark the input as having a\n // suffix.\n const hasActions = clearButton != null || trigger != null;\n\n const tagInputField = (\n <TagInputElement\n ref={rootRef}\n className={className}\n style={style}\n qaVal={qaVal}\n styles={styles}\n {...compositeFocusProps}\n >\n <TextInputBase\n isBare\n qa={qa || 'TagInput'}\n inputRef={inputRef}\n wrapperRef={wrapperRef}\n inputProps={tagInputProps}\n mods={mods}\n icon={icon}\n prefix={prefix}\n suffix={suffix}\n suffixPosition={suffixPosition}\n actions={\n hasActions ? (\n <>\n {clearButton}\n {trigger}\n </>\n ) : null\n }\n size={size}\n autoFocus={autoFocus}\n isDisabled={isDisabled}\n isLoading={isLoading}\n isInvalid={effectiveIsInvalid}\n isValid={isValid}\n styles={wrapperStyles}\n inputStyles={inputStyles}\n />\n {tags.length ? (\n <TagList\n id={tagListId}\n listRef={tagListRef}\n inputRef={inputRef}\n aria-label={\n ariaLabel\n ? t('tagInput.selectedValuesFor', 'Selected values, {{label}}', {\n label: ariaLabel,\n })\n : t('tagInput.selectedValues', 'Selected values')\n }\n aria-labelledby={fieldLabelledby}\n tags={tags}\n size={TAG_SIZES[size] ?? 'xsmall'}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n styles={tagListStyles}\n tagStyles={tagStyles}\n onRemove={removeValues}\n />\n ) : null}\n {/* Read only as the input's description, never on its own in browse mode. */}\n <span hidden id={summaryId}>\n {tags.length\n ? t('tagInput.summary', 'Selected: {{values}}.', {\n values: formatList(tags.map((tag) => tag.label)),\n })\n : null}\n </span>\n <span hidden id={hintId}>\n {hasBackspaceHint\n ? t(\n 'tagInput.backspaceHint',\n 'Press Backspace to go to the selected values.',\n )\n : null}\n </span>\n <VisuallyHidden role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <span key={announcement.id}>{announcement.text}</span>\n </VisuallyHidden>\n {hasOptions ? (\n <ListBoxPopover\n isOpen={shouldShowPopover}\n triggerRef={wrapperRef as RefObject<HTMLElement>}\n popoverRef={popoverRef}\n listBoxRef={listBoxRef}\n direction={direction}\n shouldFlip={shouldFlip}\n overlayOffset={overlayOffset}\n containerPadding={containerPadding}\n comboBoxWidth={popoverMinWidth}\n listBoxId={listBoxId}\n overlayStyles={overlayStyles}\n listBoxStyles={listBoxStyles}\n optionStyles={optionStyles}\n optionHighlight={isFilterActive ? term : undefined}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listGap={listGap}\n selectionMode=\"multiple\"\n selectedKeys={uniqueValues}\n isCheckable\n // Clicking back into the input keeps the list open for the next pick.\n shouldCloseOnTriggerInteraction={false}\n // A press on an outside control reaches it, so a Save button saves\n // on the first click: focus moves there, and the blur commits the\n // text. A press elsewhere, as on a dialog's backdrop, only closes it.\n shouldPassControlPresses\n isDisabled={isDisabled}\n disabledKeys={optionDisabledKeys}\n listStateRef={listStateRef}\n // The ids the input reads, the visible label's among them, so the\n // list reads as the input does, a label that is not a string too.\n ariaLabel={ariaLabel}\n ariaLabelledby={fieldLabelledby}\n compositeFocusProps={compositeFocusProps}\n filter={optionFilterFn}\n size={size}\n onSelectionChange={handlePopoverSelection}\n onClose={() => setIsPopoverOpen(false)}\n >\n {popoverChildren}\n </ListBoxPopover>\n ) : null}\n </TagInputElement>\n );\n\n const { children: _children, ...fieldProps } = props;\n\n // The forwarded ref sits on the component's root, labelled or not, so the\n // field wrapper gets a ref of its own that nothing reads.\n const fieldRef = useCombinedRefs<HTMLDivElement>();\n\n return wrapWithField(tagInputField, fieldRef, {\n ...(fieldProps as Omit<CubeTagInputProps<T>, 'children'>),\n labelProps: mergeProps(labelProps, userLabelProps),\n isInvalid: effectiveIsInvalid,\n // A rejected entry speaks for itself until the text is edited. Keyed, so\n // the same rejection twice in a row is announced twice.\n message: tagError ? (\n <span key={tagError.id}>{tagError.text}</span>\n ) : (\n message\n ),\n errorMessage: tagError ? undefined : errorMessage,\n });\n}\n\n/**\n * A field for a list of values, shown as removable chips below a single-line\n * input. Values are typed (Enter or a separator commits them) or picked from\n * suggested options.\n */\nconst _TagInput = forwardRef(TagInput) as unknown as (<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>> & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement) & {\n Item: typeof Item;\n Section: typeof BaseSection;\n};\n\nObject.assign(_TagInput, {\n Item,\n Section: BaseSection,\n displayName: 'TagInput',\n});\n\n// The legacy `<Field>` picks its value mapper from this. The `CheckboxGroup`\n// mapper is the one for an array value: `[]` when empty, validated on change.\nObject.defineProperty(_TagInput, 'cubeInputType', {\n value: 'CheckboxGroup',\n enumerable: false,\n configurable: false,\n});\n\nexport { _TagInput as TagInput };\n"],"mappings":"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"}
1
+ {"version":3,"file":"TagInput.js","names":["useControlledState","Node","CollectionNode","Key","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","Styles","tasty","ClipboardEvent","cloneElement","FocusEvent","ForwardedRef","forwardRef","isValidElement","KeyboardEvent","ReactElement","ReactNode","RefObject","useEffect","useMemo","useRef","useState","useFilter","useId","useTextField","VisuallyHidden","Section","BaseSection","useListState","useEvent","useFormatter","useI18n","CloseIcon","DirectionIcon","generateRandomId","mergeProps","useCombinedRefs","castNullableArrayValue","WithNullableValue","extractStyles","ItemAction","CollectionItem","Item","useFieldProps","rendersFieldChrome","wrapWithField","getListBoxOptionId","collectVisibleKeys","filterCollectionNodes","getEdgeVisibleKey","getNextVisibleKey","ListBoxPopover","ListStateLike","useCompositeFocus","TextInputBase","TagList","TagListEntry","useActiveOption","useTagError","FieldBaseProps","CubeTagProps","CompositeBlurInfo","FilterFn","textValue","inputValue","showEveryOption","TagInputPopoverTrigger","TagValidationResult","CubeTagInputProps","value","defaultValue","onChange","defaultInputValue","onInputChange","placeholder","autoComplete","inputMode","enterKeyHint","onFocus","onBlur","onKeyDown","e","HTMLInputElement","delimiters","validateTag","normalizeTag","maxTags","shouldCommitOnBlur","isClearable","onClear","items","Iterable","T","children","item","allowsCustomValue","filter","disabledKeys","popoverTrigger","onOpenChange","isOpen","hideTrigger","direction","shouldFlip","overlayOffset","containerPadding","tagProps","Partial","icon","prefix","suffix","suffixPosition","size","inputRef","wrapperRef","HTMLDivElement","popoverRef","listBoxRef","wrapperStyles","inputStyles","tagListStyles","tagStyles","triggerStyles","overlayStyles","listBoxStyles","optionStyles","sectionStyles","headingStyles","listGap","TagInputElement","qa","styles","display","flow","gap","TAG_SIZES","Record","small","medium","large","DEFAULT_DELIMITERS","LINE_BREAK","escapeRegExp","text","replace","delimiterPattern","RegExp","separators","Boolean","map","length","join","splitTagText","pattern","source","split","part","trim","textLabel","node","undefined","textCollator","Intl","Collator","sensitivity","textSorter","numeric","isSameText","a","b","compare","compareText","OptionMatch","exact","loose","matchOptionText","collection","byKey","nodes","type","childNodes","child","key","String","label","withCustomOptions","customKeys","customTerm","hasOptionRows","hasSections","optionsLabel","customValuesLabel","customOptions","push","customSection","Array","isArray","CustomRows","keys","visibleKeys","typedKey","NO_CUSTOM_ROWS","getCustomRows","values","unpicked","isOption","term","isFiltering","matches","termOptionKey","Set","sort","includes","getExactRowKey","customValueKeys","some","getPreferredRowKey","rows","exactKey","firstNew","find","isComposingKey","nativeEvent","isComposing","keyCode","RejectionReason","Rejection","reason","message","CommitSource","TagRules","ReadonlySet","isOptionOnly","getRejection","optionKey","present","Omit","has","result","getComboboxProps","listBoxId","activeKey","role","FieldButtonProps","id","ariaLabel","fieldLabelledby","onPress","TagInputTrigger","t0","$","_c","isDisabled","t","t1","t2","t3","pressed","t4","t5","t6","TagInputClearButton","Symbol","for","TagInput","props","ref","defaultValidationTrigger","valuePropsMapper","_temp","formatList","autoFocus","className","errorMessage","inputRefProp","inputValueProp","isInvalid","isLoading","isReadOnly","isRequired","isValid","listBoxRefProp","mods","onChange_0","otherProps","popoverRefProp","qaVal","renderChildren","style","userLabelProps","valueProp","wrapperRefProp","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","t59","t60","t61","t62","t63","t64","t65","labelProps","t66","t67","t68","t69","t70","name","form","t71","rootRef","tagListRef","listStateRef","tagInputId","tagListId","summaryId","hintId","triggerId","clearId","setValues","uniqueValues","draft","setDraftState","tagError","setTagError","clearTagErrorAfterPress","cancelPendingClear","announcement","setAnnouncement","from","index","rendered","hasOptions","localCollectionState","selectionMode","getItem","getOption","contains","textFilterFn","isFilterActive","setIsFilterActive","knownLabels","setKnownLabels","_temp2","key_0","get","getOptionLabel","key_1","getTagLabel","key_2","isTagLocked","disabledKeySet","next","key_3","label_0","Map","set","rememberLabels","match","findOptionKey","text_0","typed","resolveTypedText","resolvePart","optionFilterFn","keep","node_0","visibleOptionKeys","unpickedCustomValues","setUnpickedCustomValues","visibleCustomKeys","value_0","popoverChildren","_temp3","hasResults","visibleOptionsSignature","isPopoverOpen","setIsPopoverOpen","isInteractive","shouldShowPopover","notifiedOpenRef","current","visibleTargetKeys","preferredOptionKey","activeOption","setActiveOption","moveVirtualFocus","popoverMinWidth","activeOptionKey","next_0","setDraft","text_1","prev","announce","rejection","count","rejectionMessage","_temp4","joinDelimiter","joiner","hasFieldMessage","commitParts","parts","source_0","rules","accepted","rejected","part_0","optionKey_0","typed_0","nextValue","rejection_0","add","returned","_temp5","kept","slice","shown","error","messages","_temp6","rest","commitDraft","querySelectorAll","focus","focusLastTag","removeValues","requested","keys_0","key_4","removed","next_1","value_1","value_2","toggleOption","key_5","source_1","prev_0","handlePopoverSelection","selection","next_2","changed","key_6","value_3","forEach","clicked","selectionManager","setFocusedKey","setTimeout","isTabbingRef","preventDefault","listState","handleArrowKey","e_0","listState_0","handleEdgeKey","e_1","repeat","handleBackspaceKey","handleEnterKey","e_2","isCurrent","targetKey","key_7","e_3","el","currentTarget","start","selectionStart","end","selectionEnd","rejected_0","trimStart","handleDelimiterKey","e_4","stopPropagation","handleEscapeKey","handleKeyDown","e_5","defaultPrevented","value_4","handleInputChange","next_3","parts_0","nextDraft","rest_0","pop","rejected_1","_temp7","e_6","pasted","clipboardData","getData","el_0","start_0","end_0","handlePaste","settleDraft","handleCompositeFocus","isPressing","wasShowingMessage","handleCompositeBlur","HTMLElement","compositeFocusProps","e_7","isTabbing","next_4","relatedTarget","handleInputBlur","handleInputFocus","tags","value_5","ownProps","label_1","invalidMessage","effectiveIsInvalid","hasRemovableTags","_temp8","hasBackspaceHint","lockedKeys","_temp9","_temp0","optionDisabledKeys","inputProps","ariaLabelledby","labelId","describedBy","tagInputProps","onPaste","willOpen","handleTriggerPress","trigger","clearText","canClear","clearButton","hasActions","T0","_temp1","tagInputField","_children","fieldProps","fieldRef","tag_2","tag","tag_1","tag_0","part_1","rejection_2","rejection_1","delimiter","test","node_1","_TagInput","Object","assign","displayName","defineProperty","enumerable","configurable"],"sources":["../../../../src/components/fields/TagInput/TagInput.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { Node as CollectionNode, Key } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ClipboardEvent,\n cloneElement,\n FocusEvent,\n ForwardedRef,\n forwardRef,\n isValidElement,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useId, useTextField, VisuallyHidden } from 'react-aria';\nimport { Section as BaseSection, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useFormatter, useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { DirectionIcon } from '../../../icons/DirectionIcon';\nimport { generateRandomId } from '../../../utils/random';\nimport { mergeProps, useCombinedRefs } from '../../../utils/react';\nimport {\n castNullableArrayValue,\n WithNullableValue,\n} from '../../../utils/react/nullableValue';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport { useFieldProps } from '../../form/Form/use-field/use-field-props';\nimport { rendersFieldChrome, wrapWithField } from '../../form/wrapper';\nimport { getListBoxOptionId } from '../ListBox/optionId';\nimport {\n collectVisibleKeys,\n filterCollectionNodes,\n getEdgeVisibleKey,\n getNextVisibleKey,\n ListBoxPopover,\n ListStateLike,\n useCompositeFocus,\n} from '../ListBoxPopover';\nimport { TextInputBase } from '../TextInput/TextInputBase';\n\nimport { TagList, TagListEntry } from './TagList';\nimport { useActiveOption } from './useActiveOption';\nimport { useTagError } from './useTagError';\n\nimport type { FieldBaseProps } from '../../../shared';\nimport type { CubeTagProps } from '../../content/Tag/Tag';\nimport type { CompositeBlurInfo } from '../ListBoxPopover';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\n/**\n * `filter={false}`: the options come filtered already, as from a server.\n * Named rather than inline in the ternary that picks it: SonarJS charges a\n * function in a ternary branch to every later line of the component.\n */\nconst showEveryOption: FilterFn = () => true;\n\nexport type TagInputPopoverTrigger = 'focus' | 'input' | 'manual';\n\n/**\n * What `validateTag` returns: `true` (or nothing) accepts the value, `false`\n * rejects it with the default message, and a string rejects it with that\n * message.\n */\nexport type TagValidationResult = boolean | string | null | undefined;\n\nexport interface CubeTagInputProps<T = object>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n FieldBaseProps<readonly string[] | null | undefined> {\n /** The values in controlled mode. */\n value?: readonly string[];\n /** The initial values in uncontrolled mode. */\n defaultValue?: readonly string[];\n /** Called with the whole new list whenever a value is added or removed. */\n onChange?: (value: string[]) => void;\n\n /** The text being typed, in controlled mode. */\n inputValue?: string;\n /** The initial text in uncontrolled mode. */\n defaultInputValue?: string;\n /** Called when the text being typed changes. */\n onInputChange?: (value: string) => void;\n /** Placeholder text for the input. */\n placeholder?: string;\n /** HTML `autocomplete` attribute for the input. */\n autoComplete?: string;\n /**\n * Which virtual keyboard the input asks for: `'email'` for addresses,\n * `'decimal'` for numbers. The input stays a text input, so the browser does\n * not validate what is typed.\n */\n inputMode?:\n | 'none'\n | 'text'\n | 'tel'\n | 'url'\n | 'email'\n | 'numeric'\n | 'decimal'\n | 'search';\n /** The label of the virtual keyboard's Enter key. */\n enterKeyHint?:\n | 'enter'\n | 'done'\n | 'go'\n | 'next'\n | 'previous'\n | 'search'\n | 'send';\n /** Called when focus enters the component (input, chips or popover). Receives no event. */\n onFocus?: () => void;\n /**\n * Called when focus leaves the component entirely, after the typed text is\n * committed and before the press that moved focus is handled. Receives no\n * event.\n */\n onBlur?: () => void;\n /**\n * Called when a key is pressed in the input, before the component handles it.\n * Call `e.preventDefault()` to stop the component from handling the key.\n */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n\n /**\n * Characters that commit the typed text, and that pasted text is split on.\n * Pasted text is also always split on line breaks. Pass `[]` for values that\n * may contain the default separator; only the first of several refused\n * values then stays in the input.\n * @default [',']\n */\n delimiters?: string[];\n /**\n * Checks one value before it becomes a chip. Return `true` or nothing to\n * accept it, `false` to reject it with the default message, or a string to\n * reject it with that message. Also paints existing chips that fail it in the\n * danger theme. Values picked from the options are not checked.\n */\n validateTag?: (value: string) => TagValidationResult;\n /**\n * Rewrites a typed value before it is checked and added: lowercase an\n * address, write a number one way. Duplicates are found after it runs.\n * Return an empty string to drop the value. Values picked from the options\n * are not rewritten.\n */\n normalizeTag?: (value: string) => string;\n /**\n * The most values the field holds. Values past it are refused with a\n * message and stay in the input.\n */\n maxTags?: number;\n /** Whether leaving the field commits the typed text. @default true */\n shouldCommitOnBlur?: boolean;\n /**\n * Whether a button in the input clears the typed text. It shows while there\n * is text; the chips have their own remove buttons.\n */\n isClearable?: boolean;\n /** Called when the clear button is pressed. */\n onClear?: () => void;\n\n /** Options to suggest, as data. Pair with a render function in `children`. */\n items?: Iterable<T>;\n /**\n * Options to suggest: `TagInput.Item` elements or a render function for\n * `items`. Without options the field accepts any typed value.\n */\n children?: ReactNode | ((item: T) => ReactElement);\n /**\n * Whether typed values that are not among the options are accepted. Only\n * applies when options are given; without options every value is custom.\n * Text that matches an option only in case or accents is then added as\n * typed; without it, that text picks the option.\n * @default false\n */\n allowsCustomValue?: boolean;\n /**\n * Custom filter for the options, or `false` to show every option (for\n * server-side filtering).\n */\n filter?: FilterFn | false;\n /** Keys of options that cannot be picked. */\n disabledKeys?: Iterable<Key>;\n /** When the suggestions popover opens. @default 'input' */\n popoverTrigger?: TagInputPopoverTrigger;\n /** Called when the suggestions popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether to hide the button that toggles the suggestions popover. */\n hideTrigger?: boolean;\n /** Where the suggestions popover opens. @default 'bottom' */\n direction?: 'bottom' | 'top';\n /** Whether the popover flips when there is no room. @default true */\n shouldFlip?: boolean;\n /** Distance between the input and the popover, in pixels. @default 8 */\n overlayOffset?: number;\n /** Minimum space between the popover and the viewport edge, in pixels. @default 8 */\n containerPadding?: number;\n\n /**\n * Props for each chip's `Tag` (theme, icon, label, …), by value. A string\n * `children` also names the value to screen readers. `isDisabled` locks the\n * chip: it cannot be removed.\n */\n tagProps?: (value: string) => Partial<CubeTagProps> | undefined;\n\n /** Left input icon. */\n icon?: ReactElement;\n /** Input decoration before the main input. */\n prefix?: ReactNode;\n /** Input decoration after the main input. */\n suffix?: ReactNode;\n /** Whether the suffix goes before or after the validation and loading icons. */\n suffixPosition?: 'before' | 'after';\n /** Size of the input. The chips follow it. @default 'medium' */\n size?: 'small' | 'medium' | 'large' | (string & {});\n\n /** Ref to the input element. */\n inputRef?: RefObject<HTMLInputElement>;\n /** Ref to the bordered input box. */\n wrapperRef?: RefObject<HTMLDivElement>;\n /** Ref to the popover element. */\n popoverRef?: RefObject<HTMLDivElement>;\n /** Ref to the listbox in the popover. */\n listBoxRef?: RefObject<HTMLDivElement>;\n\n /** Styles for the bordered input box. */\n wrapperStyles?: Styles;\n /** Styles for the input element. */\n inputStyles?: Styles;\n /** Styles for the list of chips. */\n tagListStyles?: Styles;\n /** Styles for every chip. */\n tagStyles?: Styles;\n /** Styles for the button that toggles the popover. */\n triggerStyles?: Styles;\n /** Styles for the popover. */\n overlayStyles?: Styles;\n /** Styles for the listbox in the popover. */\n listBoxStyles?: Styles;\n /** Styles for each option. */\n optionStyles?: Styles;\n /** Styles for option sections. */\n sectionStyles?: Styles;\n /** Styles for option section headings. */\n headingStyles?: Styles;\n /** Space between options, in pixels. Defaults to a hairline (`1bw`). */\n listGap?: number;\n}\n\nconst TagInputElement = tasty({\n qa: 'TagInputContainer',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: '1x',\n },\n});\n\n// The chips sit a step below the input, so a row of them reads as the field's\n// value rather than as a second row of controls. Never below `xsmall`: the\n// `inline` tag is set in the bold badge type, which reads as a label.\nconst TAG_SIZES: Record<string, CubeTagProps['size']> = {\n small: 'xsmall',\n medium: 'xsmall',\n large: 'small',\n};\n\nconst DEFAULT_DELIMITERS = [','];\nconst LINE_BREAK = /\\r\\n|\\r|\\n/;\n\nfunction escapeRegExp(text: string) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction delimiterPattern(delimiters: string[]): RegExp | null {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n\n return separators.length ? new RegExp(separators.join('|')) : null;\n}\n\n/** Splits `text` on the delimiters and line breaks into trimmed, non-empty parts. */\nexport function splitTagText(text: string, delimiters: string[]): string[] {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n const pattern = new RegExp([LINE_BREAK.source, ...separators].join('|'), 'g');\n\n return text\n .split(pattern)\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\n/** A chip's own label, when `tagProps` gives it one as plain text. */\nfunction textLabel(node: ReactNode): string | undefined {\n return typeof node === 'string' && node !== '' ? node : undefined;\n}\n\n// Safari reports the Enter that confirms an IME composition with\n// `isComposing: false`, but still with the composition key code.\nconst textCollator = new Intl.Collator(undefined, { sensitivity: 'base' });\n// Numbers in order: 2 before 10.\nconst textSorter = new Intl.Collator(undefined, { numeric: true });\n\nfunction isSameText(a: string, b: string) {\n return textCollator.compare(a, b) === 0;\n}\n\nfunction compareText(a: string, b: string) {\n return textSorter.compare(a, b);\n}\n\ninterface OptionMatch {\n /** The first option whose label is the text, or else the one whose key is. */\n exact: string | null;\n /** The first option whose label is the text ignoring case and accents. */\n loose: string | null;\n}\n\n/**\n * The options typed text names. The label comes first, since it is what the\n * user sees, then the key. An exact match is looked for in the whole list\n * before a loose one counts, so `active` finds `active` even after `Active`.\n */\nfunction matchOptionText(\n collection: Iterable<CollectionNode<unknown>>,\n text: string,\n): OptionMatch {\n let byKey: string | null = null;\n let loose: string | null = null;\n\n for (const node of collection) {\n const nodes = node.type === 'section' ? [...node.childNodes] : [node];\n\n for (const child of nodes) {\n if (child.type !== 'item') continue;\n\n const key = String(child.key);\n const label = child.textValue || '';\n\n if (label === text) return { exact: key, loose };\n\n if (byKey == null && key === text) byKey = key;\n if (loose == null && isSameText(label, text)) loose = key;\n }\n }\n\n return { exact: byKey, loose };\n}\n\n/**\n * The popover's rows: the options, then the user's own values and the typed\n * text. Those go in a section of their own when there are options to set them\n * apart from.\n */\nfunction withCustomOptions(\n children: ReactNode,\n {\n customKeys,\n customTerm,\n hasOptionRows,\n hasSections,\n optionsLabel,\n customValuesLabel,\n }: {\n customKeys: readonly string[];\n customTerm: string | null;\n hasOptionRows: boolean;\n hasSections: boolean;\n optionsLabel: string;\n customValuesLabel: string;\n },\n) {\n if (!customTerm && !customKeys.length) return children;\n\n const customOptions = customKeys.map((key) => (\n <Item key={key} textValue={key}>\n {key}\n </Item>\n ));\n\n if (customTerm) {\n customOptions.push(\n <Item key={customTerm} textValue={customTerm}>\n {customTerm}\n </Item>,\n );\n }\n\n if (!hasOptionRows) {\n return customOptions;\n }\n\n const customSection = (\n <BaseSection key=\"__custom_values__\" aria-label={customValuesLabel}>\n {customOptions}\n </BaseSection>\n );\n\n // A section cannot nest in another one, so options that already come in\n // sections only get the custom section appended.\n if (hasSections) {\n return [\n ...(Array.isArray(children) ? children : [children]),\n customSection,\n ];\n }\n\n return [\n <BaseSection key=\"__options__\" aria-label={optionsLabel}>\n {children as never}\n </BaseSection>,\n customSection,\n ];\n}\n\ninterface CustomRows {\n /** The user's own values, as rows. */\n keys: readonly string[];\n /** The ones the typed text leaves listed. */\n visibleKeys: readonly string[];\n /** The typed text as a pickable row, when it would add something new. */\n typedKey: string | null;\n}\n\nconst NO_CUSTOM_ROWS: CustomRows = {\n keys: [],\n visibleKeys: [],\n typedKey: null,\n};\n\n/**\n * The rows listed after the options: the user's own values, so they can be\n * unpicked where they were picked, and the typed text. `unpicked` holds the\n * custom values unpicked during this visit, which stay listed.\n */\nfunction getCustomRows({\n values,\n unpicked,\n isOption,\n term,\n isFiltering,\n matches,\n termOptionKey,\n}: {\n values: readonly string[];\n unpicked: readonly string[];\n /** Whether a value is an option, or was one when it was picked. */\n isOption: (value: string) => boolean;\n term: string;\n /** Whether the typed text narrows the rows. */\n isFiltering: boolean;\n matches: FilterFn;\n /** The option the typed text names, if any. */\n termOptionKey: string | null;\n}): CustomRows {\n // Sorted, so toggling one does not move it.\n const keys = [\n ...new Set([...values, ...unpicked].filter((value) => !isOption(value))),\n ].sort(compareText);\n\n return {\n keys,\n visibleKeys:\n isFiltering && term ? keys.filter((key) => matches(key, term)) : keys,\n typedKey:\n term &&\n termOptionKey == null &&\n !values.includes(term) &&\n !keys.includes(term)\n ? term\n : null,\n };\n}\n\n/**\n * The row the typed text names: the option it stands for, or else a custom\n * value it spells. Text that names a row only in another case is a value of\n * its own, so its own row wins over that one: Enter adds `paris` as typed, not\n * `Paris`.\n */\nfunction getExactRowKey(\n collection: Iterable<CollectionNode<unknown>>,\n {\n term,\n termOptionKey,\n customTerm,\n customValueKeys,\n }: {\n term: string;\n termOptionKey: string | null;\n customTerm: string | null;\n customValueKeys: readonly string[];\n },\n): string | null {\n if (termOptionKey != null) return termOptionKey;\n if (term && customValueKeys.includes(term)) return term;\n\n if (\n customTerm &&\n (matchOptionText(collection, customTerm).loose != null ||\n customValueKeys.some((key) => isSameText(key, customTerm)))\n ) {\n return customTerm;\n }\n\n return null;\n}\n\n/**\n * The row the focus pass lands on, and Enter with it. The row the typed text\n * names wins over the first match, so typing \"build\" and pressing Enter picks\n * \"build\", not \"rebuild\". Typed text means \"add\", so past an exact match the\n * first row that is not added yet wins: typing \"def\" next to a picked\n * \"undefined\" lands on \"def\".\n */\nfunction getPreferredRowKey(\n rows: readonly Key[],\n exactKey: Key | null,\n term: string,\n values: readonly string[],\n): Key | null {\n if (exactKey != null && rows.includes(exactKey)) return exactKey;\n\n const firstNew = term\n ? rows.find((key) => !values.includes(String(key)))\n : undefined;\n\n return firstNew ?? rows[0] ?? null;\n}\n\nfunction isComposingKey(e: KeyboardEvent<HTMLInputElement>) {\n return e.nativeEvent.isComposing || e.keyCode === 229;\n}\n\ntype RejectionReason =\n | 'invalid'\n | 'duplicate'\n | 'unknown'\n | 'unavailable'\n | 'limit';\n\ninterface Rejection {\n text: string;\n reason: RejectionReason;\n message?: string;\n}\n\n/**\n * Where a committed part comes from: typed text, which may name an option, an\n * option row's key, or a custom value's row, which is only ever itself.\n */\ntype CommitSource = 'text' | 'option' | 'custom';\n\n/** What a value must pass to become a chip. */\ninterface TagRules {\n /** Keys of options that cannot be picked. */\n disabledKeys: ReadonlySet<string>;\n /** Only options are accepted: there are options, and no custom values. */\n isOptionOnly: boolean;\n maxTags?: number;\n validateTag?: (value: string) => TagValidationResult;\n}\n\n/**\n * Why a value is refused, or `null` when it may be added. `optionKey` is the\n * option the part resolved to, if any: an option is not validated. `present`\n * holds the values already there, the ones this commit accepted so far among\n * them.\n */\nfunction getRejection(\n value: string,\n optionKey: string | null,\n present: ReadonlySet<string>,\n { disabledKeys, isOptionOnly, maxTags, validateTag }: TagRules,\n): Omit<Rejection, 'text'> | null {\n if (optionKey != null && disabledKeys.has(optionKey)) {\n return { reason: 'unavailable' };\n }\n\n if (optionKey == null && isOptionOnly) return { reason: 'unknown' };\n if (present.has(value)) return { reason: 'duplicate' };\n if (maxTags != null && present.size >= maxTags) return { reason: 'limit' };\n\n if (optionKey == null && validateTag) {\n const result = validateTag(value);\n\n if (result === false || typeof result === 'string') {\n return {\n reason: 'invalid',\n message: typeof result === 'string' ? result : undefined,\n };\n }\n }\n\n return null;\n}\n\n/** The input's combobox wiring, for a field with options to suggest. */\nfunction getComboboxProps(\n listBoxId: string,\n isOpen: boolean,\n activeKey: Key | null,\n) {\n return {\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': isOpen,\n 'aria-controls': isOpen ? listBoxId : undefined,\n 'aria-activedescendant':\n isOpen && activeKey != null\n ? getListBoxOptionId(listBoxId, activeKey)\n : undefined,\n };\n}\n\ninterface FieldButtonProps {\n id: string;\n size: CubeTagInputProps['size'];\n /** The field's `aria-label`, joined into the button's own name. */\n ariaLabel?: string;\n /** The ids that label the field, read after the button's own name. */\n fieldLabelledby?: string;\n onPress: () => void;\n}\n\n/** The button in the input that toggles the suggestions popover. */\nfunction TagInputTrigger({\n id,\n size,\n ariaLabel,\n fieldLabelledby,\n onPress,\n isOpen,\n isDisabled,\n styles,\n}: FieldButtonProps & {\n isOpen: boolean;\n isDisabled: boolean;\n styles?: Styles;\n}) {\n const { t } = useI18n();\n\n return (\n <ItemAction\n data-popover-trigger\n id={id}\n qa=\"TagInputTrigger\"\n icon={<DirectionIcon to={isOpen ? 'up' : 'down'} />}\n size={size}\n isDisabled={isDisabled}\n styles={styles}\n mods={{ pressed: isOpen }}\n // Arrow keys open the list from the input, so the button stays out of\n // the Tab order and Tab goes from the input straight to the chips.\n tabIndex={-1}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-label={\n ariaLabel\n ? t('tagInput.showOptionsFor', 'Show options, {{label}}', {\n label: ariaLabel,\n })\n : t('tagInput.showOptions', 'Show options')\n }\n aria-labelledby={fieldLabelledby ? `${id} ${fieldLabelledby}` : undefined}\n onPress={onPress}\n />\n );\n}\n\n/** The button in the input that clears the typed text. */\nfunction TagInputClearButton({\n id,\n size,\n ariaLabel,\n fieldLabelledby,\n onPress,\n}: FieldButtonProps) {\n const { t } = useI18n();\n\n return (\n <ItemAction\n id={id}\n qa=\"TagInputClearButton\"\n icon={<CloseIcon />}\n size={size}\n // Escape does the same from the keyboard. As a Tab stop it would take\n // focus just as tabbing away commits the text and removes it.\n tabIndex={-1}\n aria-label={\n ariaLabel\n ? t('tagInput.clearTextFor', 'Clear text, {{label}}', {\n label: ariaLabel,\n })\n : t('tagInput.clearText', 'Clear text')\n }\n aria-labelledby={fieldLabelledby ? `${id} ${fieldLabelledby}` : undefined}\n onPress={onPress}\n />\n );\n}\n\nfunction TagInput<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n props = castNullableArrayValue(props);\n props = useFieldProps(props, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value ?? [],\n onChange,\n }),\n });\n\n const { t } = useI18n();\n const { formatList } = useFormatter();\n\n let {\n qa,\n id,\n label,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange,\n placeholder,\n autoFocus,\n autoComplete = 'off',\n onFocus,\n onBlur,\n onKeyDown,\n delimiters = DEFAULT_DELIMITERS,\n validateTag,\n normalizeTag,\n maxTags,\n shouldCommitOnBlur = true,\n isClearable,\n onClear,\n items,\n children: renderChildren,\n allowsCustomValue,\n filter,\n disabledKeys,\n popoverTrigger = 'input',\n onOpenChange,\n hideTrigger,\n direction = 'bottom',\n shouldFlip = true,\n overlayOffset = 8,\n containerPadding = 8,\n tagProps,\n icon,\n prefix,\n suffix,\n suffixPosition,\n size = 'medium',\n isDisabled,\n isReadOnly,\n isRequired,\n isLoading,\n isInvalid,\n isValid,\n message,\n errorMessage,\n inputRef: inputRefProp,\n wrapperRef: wrapperRefProp,\n popoverRef: popoverRefProp,\n listBoxRef: listBoxRefProp,\n wrapperStyles,\n inputStyles,\n tagListStyles,\n tagStyles,\n triggerStyles,\n overlayStyles,\n listBoxStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n listGap,\n labelProps: userLabelProps,\n mods,\n className,\n style,\n qaVal,\n // The input holds the text being typed, not the field's value: a native\n // form must not submit it under the field's name.\n name,\n form,\n ...otherProps\n } = props;\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n const rootRef = useCombinedRefs(ref);\n const inputRef = useCombinedRefs(inputRefProp);\n const wrapperRef = useCombinedRefs(wrapperRefProp);\n const popoverRef = useCombinedRefs(popoverRefProp);\n const listBoxRef = useCombinedRefs(listBoxRefProp);\n const tagListRef = useRef<HTMLDivElement>(null);\n const listStateRef = useRef<ListStateLike | null>(null);\n\n const tagInputId = useMemo(() => generateRandomId(), []);\n const listBoxId = `TagInputListBox-${tagInputId}`;\n const tagListId = useId();\n const summaryId = useId();\n const hintId = useId();\n const triggerId = useId();\n const clearId = useId();\n\n // ---- values -------------------------------------------------------------\n const [values, setValues] = useControlledState<readonly string[]>(\n valueProp as readonly string[] | undefined,\n (defaultValue as readonly string[] | undefined) ?? [],\n onChange as ((value: readonly string[]) => void) | undefined,\n );\n // A controlled value may repeat an entry; the chips are keyed by value, so\n // render each one once.\n const uniqueValues = [...new Set((values ?? []).map(String))];\n\n // ---- typed text ---------------------------------------------------------\n const [draft, setDraftState] = useControlledState<string>(\n inputValueProp as string | undefined,\n defaultInputValue ?? '',\n onInputChange,\n );\n const { tagError, setTagError, clearTagErrorAfterPress, cancelPendingClear } =\n useTagError();\n const [announcement, setAnnouncement] = useState({ id: 0, text: '' });\n\n // ---- options ------------------------------------------------------------\n let children: ReactNode = renderChildren as ReactNode;\n\n if (items && typeof renderChildren === 'function') {\n children = Array.from(items).map((item, index) => {\n const rendered = (renderChildren as (item: T) => ReactNode)(item);\n\n if (isValidElement(rendered) && rendered.key == null) {\n return cloneElement(rendered, {\n key:\n (item as { key?: Key })?.key ?? (item as { id?: Key })?.id ?? index,\n });\n }\n\n return rendered;\n });\n }\n\n const hasOptions = children != null && children !== false;\n\n // Reads option labels, and matches typed text to an option, whether or not\n // the popover is open.\n const localCollectionState = useListState({\n children: children as never,\n selectionMode: 'none',\n });\n const collection = localCollectionState.collection;\n\n // An option's node. Sections are in the collection too, under keys of their\n // own, but a value that shares one is still the user's own text.\n const getOption = (key: string) => {\n const node = collection.getItem(key);\n\n return node?.type === 'item' ? node : null;\n };\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n const textFilterFn: FilterFn =\n filter === false ? showEveryOption : filter || contains;\n\n const [isFilterActive, setIsFilterActive] = useState(false);\n const term = draft.trim();\n\n // Labels of picked options, kept after the option leaves the collection, as\n // it does with server-side filtering (`items` + `filter={false}`).\n const [knownLabels, setKnownLabels] = useState<ReadonlyMap<string, string>>(\n () => new Map(),\n );\n\n const getOptionLabel = (key: string) =>\n getOption(key)?.textValue || knownLabels.get(key) || key;\n\n // What a chip reads as, and what announcements name it by: a string label\n // the chip is given, then the option's own.\n const getTagLabel = (key: string) =>\n textLabel(tagProps?.(key)?.children) ?? getOptionLabel(key);\n\n // A locked chip stays put: no remove button, Delete or unpick.\n const isTagLocked = (key: string) => !!tagProps?.(key)?.isDisabled;\n\n const disabledKeySet = new Set([...(disabledKeys ?? [])].map(String));\n\n // Called before the text changes (and the options with it) and when values\n // are added, while the options still hold the labels.\n const rememberLabels = useEvent((keys: readonly string[]) => {\n let next: Map<string, string> | null = null;\n\n for (const key of keys) {\n const label = getOption(key)?.textValue;\n\n if (label && knownLabels.get(key) !== label) {\n if (!next) next = new Map(knownLabels);\n next.set(key, label);\n }\n }\n\n if (next) setKnownLabels(next);\n });\n\n /**\n * The option typed text stands for, if any. Without `allowsCustomValue` a\n * label in another case or without its accents counts, so `production`\n * finds `Production`. With it, such text is a value of its own and is added\n * as typed: `paris` is not `Paris` to a case-sensitive filter.\n */\n const findOptionKey = (text: string): string | null => {\n if (!hasOptions) return null;\n\n const match = matchOptionText(collection, text);\n\n return match.exact ?? (allowsCustomValue ? null : match.loose);\n };\n\n /**\n * What typed text commits as: the option it names, or else the text itself,\n * rewritten by `normalizeTag`, and the option that names if any. Enter, a\n * delimiter, a paste and blur all go through this, so they agree.\n */\n const resolveTypedText = (text: string) => {\n const optionKey = findOptionKey(text);\n\n if (optionKey != null || !normalizeTag) return { optionKey, typed: text };\n\n const typed = normalizeTag(text).trim();\n\n return { optionKey: typed ? findOptionKey(typed) : null, typed };\n };\n\n /**\n * What a part commits as. Only typed text is matched to an option. An option\n * row commits its own key; a custom value's row is the user's own text, so\n * `normalizeTag` still rewrites it, but it never turns into an option.\n */\n const resolvePart = (part: string, source: CommitSource = 'text') => {\n if (source === 'text') return resolveTypedText(part);\n if (source === 'option') return { optionKey: part, typed: part };\n\n return {\n optionKey: null,\n typed: normalizeTag ? normalizeTag(part).trim() : part,\n };\n };\n\n const termOptionKey = term ? resolveTypedText(term).optionKey : null;\n\n // The option the text names stays listed even when the filter would hide\n // it (a key typed, a custom filter), so Enter can land on it.\n const optionFilterFn = (nodes: Iterable<any>) => {\n if (!isFilterActive || !term) return nodes;\n\n return filterCollectionNodes(nodes, term, textFilterFn, {\n keep:\n termOptionKey == null\n ? undefined\n : (node) => String(node.key) === termOptionKey,\n });\n };\n\n const visibleOptionKeys: Key[] = [];\n\n if (hasOptions) {\n collectVisibleKeys(\n optionFilterFn(collection),\n visibleOptionKeys,\n disabledKeys ? new Set(disabledKeys) : undefined,\n );\n }\n\n // Custom values unpicked in the list during this visit. They stay listed,\n // unchecked, until focus leaves the field: the row does not vanish under the\n // pointer, and it can be picked back.\n const [unpickedCustomValues, setUnpickedCustomValues] = useState<\n readonly string[]\n >([]);\n\n // The user's own values and the typed text, listed after the options. Only\n // with `allowsCustomValue`: without it an unpicked value could not be added\n // back.\n const {\n keys: customValueKeys,\n visibleKeys: visibleCustomKeys,\n typedKey: customTerm,\n } = hasOptions && allowsCustomValue\n ? getCustomRows({\n values: uniqueValues,\n unpicked: unpickedCustomValues,\n isOption: (value) => getOption(value) != null || knownLabels.has(value),\n term,\n isFiltering: isFilterActive,\n // The typed text narrows them as it narrows the options, even when\n // the options are filtered on the server (`filter={false}`): these\n // rows are this component's own.\n matches: typeof filter === 'function' ? filter : contains,\n termOptionKey,\n })\n : NO_CUSTOM_ROWS;\n\n const popoverChildren = withCustomOptions(children, {\n customKeys: visibleCustomKeys,\n customTerm,\n hasOptionRows: visibleOptionKeys.length > 0,\n hasSections: [...collection].some((node) => node.type === 'section'),\n optionsLabel: t('tagInput.options', 'Options'),\n customValuesLabel: t('tagInput.customValues', 'Custom values'),\n });\n\n const hasResults =\n visibleOptionKeys.length > 0 ||\n visibleCustomKeys.length > 0 ||\n customTerm != null;\n // Options rebuild on every render when they come from `items`, so effects\n // follow what is visible rather than the collection's identity.\n const visibleOptionsSignature = [\n ...visibleOptionKeys,\n ...visibleCustomKeys,\n ].join('\\u0000');\n\n // ---- popover ------------------------------------------------------------\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const isInteractive = !isDisabled && !isReadOnly;\n const shouldShowPopover =\n hasOptions && isInteractive && isPopoverOpen && hasResults;\n\n // With no matching option the popover hides but stays open, so it comes back\n // as soon as the text matches again.\n const notifiedOpenRef = useRef(false);\n\n useEffect(() => {\n if (notifiedOpenRef.current === shouldShowPopover) return;\n\n notifiedOpenRef.current = shouldShowPopover;\n onOpenChange?.(shouldShowPopover);\n }, [shouldShowPopover, onOpenChange]);\n\n const visibleTargetKeys: Key[] = [...visibleOptionKeys, ...visibleCustomKeys];\n\n if (customTerm) visibleTargetKeys.push(customTerm);\n\n const preferredOptionKey = getPreferredRowKey(\n visibleTargetKeys,\n getExactRowKey(collection, {\n term,\n termOptionKey,\n customTerm,\n customValueKeys,\n }),\n term,\n uniqueValues,\n );\n\n const { activeOption, setActiveOption, moveVirtualFocus, popoverMinWidth } =\n useActiveOption({\n listStateRef,\n wrapperRef,\n isOpen: shouldShowPopover,\n visibleOptionsSignature,\n customTerm,\n term,\n preferredOptionKey,\n });\n const activeOptionKey = activeOption?.key ?? null;\n\n const setDraft = useEvent((next: string) => {\n setDraftState(next);\n setIsFilterActive(!!next.trim());\n });\n\n // A fresh node per message, so a repeated one (\"Added a\", remove, \"Added a\")\n // is announced again.\n const announce = useEvent((text: string) => {\n setAnnouncement((prev) => ({ id: prev.id + 1, text }));\n });\n\n // ---- commit -------------------------------------------------------------\n const rejectionMessage = useEvent((rejection: Rejection) => {\n if (rejection.message) return rejection.message;\n\n switch (rejection.reason) {\n case 'duplicate':\n return t('tagInput.duplicateValue', '\"{{value}}\" is already added', {\n value: rejection.text,\n });\n case 'unknown':\n return t('tagInput.unknownValue', '\"{{value}}\" is not in the list', {\n value: rejection.text,\n });\n case 'unavailable':\n return t('tagInput.unavailableValue', '\"{{value}}\" is not available', {\n value: rejection.text,\n });\n case 'limit':\n return t('tagInput.limitReached', 'You can add up to {{count}}', {\n count: maxTags,\n });\n default:\n return t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: rejection.text,\n });\n }\n });\n\n // Refused parts go back to the input joined by a delimiter, so they split\n // back into the same values. A line break cannot join them: the input drops\n // it. Typing a delimiter always leaves one to join with.\n const joinDelimiter = delimiters.find(\n (delimiter) => delimiter && !LINE_BREAK.test(delimiter),\n );\n const joiner = joinDelimiter ? `${joinDelimiter} ` : ' ';\n\n // Without the field chrome there is no field wrapper to show the message, so\n // a rejection is announced instead.\n const hasFieldMessage = rendersFieldChrome(props);\n\n /**\n * Turns typed parts into values. Accepted parts become chips. Refused ones\n * come back as text for the input, with a message, except a duplicate: it is\n * a chip already, and the message says so. With no delimiter to join them,\n * only the first refused part comes back, since glued together they would\n * commit as one value nobody typed. A row picked from the list says where it\n * comes from (`source`), so it is never matched to another option.\n */\n const commitParts = useEvent((parts: string[], source?: CommitSource) => {\n if (!parts.length) return '';\n\n const rules: TagRules = {\n disabledKeys: disabledKeySet,\n isOptionOnly: hasOptions && !allowsCustomValue,\n maxTags,\n validateTag,\n };\n const present = new Set(uniqueValues);\n const accepted: string[] = [];\n const rejected: Rejection[] = [];\n\n for (const part of parts) {\n // Only text of its own is rewritten; an option keeps its key.\n const { optionKey, typed } = resolvePart(part, source);\n\n if (!typed) continue;\n\n const nextValue = optionKey ?? typed;\n const rejection = getRejection(nextValue, optionKey, present, rules);\n\n if (rejection) {\n rejected.push({ text: part, ...rejection });\n continue;\n }\n\n present.add(nextValue);\n accepted.push(nextValue);\n }\n\n const returned = rejected.filter(\n (rejection) => rejection.reason !== 'duplicate',\n );\n const kept = joinDelimiter ? returned : returned.slice(0, 1);\n // The message is about the text left in the input, if there is any.\n const shown = kept[0] ?? rejected[0];\n const error = shown ? rejectionMessage(shown) : null;\n const messages: string[] = [];\n\n if (accepted.length) {\n rememberLabels(accepted);\n setValues([...uniqueValues, ...accepted]);\n messages.push(\n t('tagInput.added', 'Added {{value}}', {\n value: formatList(accepted.map(getTagLabel)),\n }),\n );\n }\n\n if (error && !hasFieldMessage) messages.push(error);\n if (messages.length) announce(messages.join(' '));\n\n setTagError(error);\n\n return kept.map((rejection) => rejection.text).join(joiner);\n });\n\n /** Commits the typed text and returns what is left in the input. */\n const commitDraft = useEvent(() => {\n const rest = commitParts(splitTagText(draft, delimiters));\n\n setDraft(rest);\n\n return rest;\n });\n\n // Focusing the row itself tells the tag group which chip is focused, as a\n // click would.\n const focusLastTag = useEvent(() => {\n const rows = tagListRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"row\"]:not([aria-disabled=\"true\"])',\n );\n\n rows?.[rows.length - 1]?.focus();\n });\n\n const removeValues = useEvent((requested: string[]) => {\n const keys = requested.filter((key) => !isTagLocked(key));\n\n if (!keys.length) return;\n\n const removed = new Set(keys);\n const next = uniqueValues.filter((value) => !removed.has(value));\n\n // Focus leaves the list before the last chip it can land on unmounts under\n // it; locked chips take no focus.\n if (!next.some((value) => !isTagLocked(value))) {\n inputRef.current?.focus();\n }\n\n setValues(next);\n setTagError(null);\n announce(\n t('tagInput.removed', 'Removed {{value}}', {\n value: formatList(keys.map(getTagLabel)),\n }),\n );\n });\n\n /**\n * Picks an option in the popover, or unpicks one that already is a chip. The\n * popover stays open for the next pick, and the query is cleared so the full\n * list is back. A picked row is never swapped for an option with a similar\n * or the same text. A custom value's row is still the user's own text, so\n * `normalizeTag` and `validateTag` apply to it. The typed text's row is the\n * typed text, so it commits as a delimiter would.\n */\n const toggleOption = useEvent((key: string) => {\n if (isTagLocked(key)) return;\n\n const source: CommitSource =\n getOption(key) != null\n ? 'option'\n : customValueKeys.includes(key)\n ? 'custom'\n : 'text';\n\n setTagError(null);\n\n if (uniqueValues.includes(key)) {\n removeValues([key]);\n setDraft('');\n\n if (customValueKeys.includes(key)) {\n setUnpickedCustomValues((prev) =>\n prev.includes(key) ? prev : [...prev, key],\n );\n }\n } else if (!commitParts([key], source)) {\n // An accepted pick clears the query. A refused one (past `maxTags`)\n // keeps it, next to the message saying why.\n setDraft('');\n }\n });\n\n // A click in the popover list. The list reports its whole new selection, so\n // compare it with the chips to find the option that changed.\n const handlePopoverSelection = useEvent(\n (selection: Key | Key[] | null | 'all') => {\n if (!Array.isArray(selection)) return;\n\n const next = new Set(selection.map(String));\n const changed = [\n ...[...next].filter((key) => !uniqueValues.includes(key)),\n ...uniqueValues.filter(\n (value) =>\n !next.has(value) &&\n (getOption(value) != null || visibleCustomKeys.includes(value)),\n ),\n ];\n\n changed.forEach(toggleOption);\n\n // The click moved the list's focus to the option; the input's\n // `aria-activedescendant` follows it.\n const clicked = changed[changed.length - 1];\n\n if (clicked != null) {\n listStateRef.current?.selectionManager.setFocusedKey(clicked);\n // The pick clears the text.\n setActiveOption({ key: clicked, term: '', source: 'user' });\n }\n\n // A click can take DOM focus off the input; keep typing where it was.\n setTimeout(() => inputRef.current?.focus(), 0);\n },\n );\n\n // ---- keyboard -----------------------------------------------------------\n // Set while Tab moves focus out of the input, so the blur can tell a Tab to\n // the chips (commit the text) from a click on a remove button (keep it).\n const isTabbingRef = useRef(false);\n\n const handleArrowKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (!hasOptions) return;\n\n e.preventDefault();\n\n if (!shouldShowPopover) {\n if (!hasResults) setIsFilterActive(false);\n setIsPopoverOpen(true);\n\n return;\n }\n\n const listState = listStateRef.current;\n\n if (listState) {\n moveVirtualFocus(\n getNextVisibleKey(listState, e.key === 'ArrowDown' ? 1 : -1),\n 'user',\n term,\n );\n }\n });\n\n const handleEdgeKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n\n const listState = listStateRef.current;\n\n if (listState) {\n moveVirtualFocus(\n getEdgeVisibleKey(listState, e.key === 'Home' ? 'first' : 'last'),\n 'user',\n term,\n );\n }\n });\n\n // The chips sit below the input, not beside the caret, so Backspace in an\n // empty input moves to the last chip instead of removing it out of view.\n // The chip comes into view with focus and says it is removable; the next\n // Backspace removes it and moves to the one before.\n const handleBackspaceKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // A held Backspace that just emptied the input stops there, so it does\n // not run on into the chips.\n if (e.repeat) return;\n\n setIsPopoverOpen(false);\n focusLastTag();\n });\n\n const handleEnterKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (isComposingKey(e)) return;\n\n // The announced option, unless the text changed since it was chosen and\n // its focus pass has not run yet: then the best match for this text.\n const isCurrent = activeOption != null && activeOption.term === term;\n const targetKey = shouldShowPopover\n ? isCurrent\n ? activeOption.key\n : preferredOptionKey\n : null;\n\n if (targetKey != null) {\n e.preventDefault();\n\n const key = String(targetKey);\n\n // Typed text means \"add\". An option that is already a chip is refused\n // as a duplicate and the text cleared, as a comma or blur would;\n // unpicking one takes the arrows, a click, or an empty input.\n if (\n term &&\n uniqueValues.includes(key) &&\n !(isCurrent && activeOption.source === 'user')\n ) {\n setDraft('');\n setTagError(\n rejectionMessage({\n text: getTagLabel(key),\n reason: 'duplicate',\n }),\n );\n\n return;\n }\n\n toggleOption(key);\n\n return;\n }\n\n // Enter is for adding values and never submits a form, even with nothing\n // typed: pressing it once more after the last value must not send a\n // half-filled dialog.\n e.preventDefault();\n\n if (term) commitDraft();\n });\n\n const handleDelimiterKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // The separator splits the text where it is typed: what comes before the\n // caret is committed, what comes after stays in the input.\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? start;\n const rejected = commitParts(\n splitTagText(draft.slice(0, start), delimiters),\n );\n\n setDraft(\n [rejected, draft.slice(end).trimStart()].filter(Boolean).join(joiner),\n );\n });\n\n // Escape takes back one thing at a time: the list, then the text. A message\n // goes with either, or on its own when the input is already empty, as after\n // a refused duplicate.\n const handleEscapeKey = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (shouldShowPopover) {\n e.preventDefault();\n e.stopPropagation();\n setIsPopoverOpen(false);\n setTagError(null);\n } else if (draft || tagError) {\n e.preventDefault();\n e.stopPropagation();\n setDraft('');\n setTagError(null);\n // It may be open but hidden for want of a match; the full list must\n // not appear when the text goes.\n setIsPopoverOpen(false);\n }\n });\n\n const handleKeyDown = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n\n // A Tab the consumer prevented moves no focus.\n isTabbingRef.current = e.key === 'Tab' && !e.defaultPrevented;\n\n if (e.defaultPrevented || !isInteractive) return;\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n handleArrowKey(e);\n } else if ((e.key === 'Home' || e.key === 'End') && shouldShowPopover) {\n handleEdgeKey(e);\n } else if (\n e.key === 'Backspace' &&\n !draft &&\n uniqueValues.some((value) => !isTagLocked(value))\n ) {\n handleBackspaceKey(e);\n } else if (e.key === 'Enter') {\n handleEnterKey(e);\n } else if (delimiters.includes(e.key)) {\n handleDelimiterKey(e);\n } else if (e.key === 'Escape') {\n handleEscapeKey(e);\n }\n });\n\n // A separator can also arrive without a key press: autocorrect, IME, drag and\n // drop. Commit everything before the last separator and keep the rest typed.\n const handleInputChange = useEvent((next: string) => {\n setTagError(null);\n rememberLabels(uniqueValues);\n\n const pattern = delimiterPattern(delimiters);\n const parts = pattern ? next.split(pattern) : [next];\n\n let nextDraft = next;\n\n if (parts.length > 1) {\n const rest = (parts.pop() ?? '').trimStart();\n const rejected = commitParts(\n parts.map((part) => part.trim()).filter(Boolean),\n );\n\n nextDraft = [rejected, rest].filter(Boolean).join(joiner);\n }\n\n setDraft(nextDraft);\n\n if (hasOptions && popoverTrigger !== 'manual' && nextDraft.trim()) {\n setIsPopoverOpen(true);\n }\n });\n\n // An `<input>` drops line breaks from pasted text, so split a pasted list\n // here, where they are still visible.\n const handlePaste = useEvent((e: ClipboardEvent<HTMLInputElement>) => {\n if (!isInteractive) return;\n\n const pasted = e.clipboardData.getData('text');\n\n if (!pasted || splitTagText(pasted, delimiters).length < 2) return;\n\n e.preventDefault();\n\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? draft.length;\n\n setTagError(null);\n setDraft(\n commitParts(\n splitTagText(\n `${draft.slice(0, start)}\\n${pasted}\\n${draft.slice(end)}`,\n delimiters,\n ),\n ),\n );\n });\n\n // ---- focus --------------------------------------------------------------\n // What leaving the input does to the typed text. Returns the text left.\n const settleDraft = useEvent((): string => {\n if (!term) return '';\n if (!shouldCommitOnBlur || !isInteractive) return draft;\n\n if (hasOptions && !allowsCustomValue && termOptionKey == null) {\n // Leaving a filter query behind is not an entry: drop it, as ComboBox\n // does with text that matches no option.\n setDraft('');\n setTagError(null);\n\n return '';\n }\n\n return commitDraft();\n });\n\n const handleCompositeFocus = useEvent(() => {\n cancelPendingClear();\n onFocus?.();\n });\n\n const handleCompositeBlur = useEvent(({ isPressing }: CompositeBlurInfo) => {\n setIsPopoverOpen(false);\n setUnpickedCustomValues([]);\n\n const wasShowingMessage = tagError != null;\n\n // A message can only be about text in the input. Once none is left, as\n // after a refused duplicate, the field does not stay marked invalid.\n if (!settleDraft()) {\n // One set while settling is cleared in the same render, and never shows.\n if (isPressing && wasShowingMessage) clearTagErrorAfterPress();\n else setTagError(null);\n }\n\n onBlur?.();\n });\n\n const { compositeFocusProps } = useCompositeFocus({\n wrapperRef: rootRef as RefObject<HTMLElement>,\n popoverRef: popoverRef as RefObject<HTMLElement>,\n onFocus: handleCompositeFocus,\n onBlur: handleCompositeBlur,\n isDisabled,\n });\n\n // Tabbing from the input to the chips stays inside the component, so the\n // composite blur never fires: close the popover and settle the text on the\n // way. A click on a chip's remove button also moves focus there, and leaves\n // both alone.\n const handleInputBlur = useEvent((e: FocusEvent<HTMLInputElement>) => {\n const isTabbing = isTabbingRef.current;\n const next = e.relatedTarget as Node | null;\n\n isTabbingRef.current = false;\n\n if (!isTabbing || !next || !rootRef.current?.contains(next)) return;\n\n setIsPopoverOpen(false);\n settleDraft();\n });\n\n const handleInputFocus = useEvent(() => {\n if (hasOptions && popoverTrigger === 'focus' && isInteractive) {\n setIsPopoverOpen(true);\n }\n });\n\n // ---- chips --------------------------------------------------------------\n const tags: TagListEntry[] = uniqueValues.map((value) => {\n const ownProps = tagProps?.(value);\n const isOption = getOption(value) != null || knownLabels.has(value);\n const result = !isOption && validateTag ? validateTag(value) : true;\n const label = textLabel(ownProps?.children) ?? getOptionLabel(value);\n\n return {\n key: value,\n label,\n // Put in words as well as in color, for the chip's description.\n invalidMessage:\n typeof result === 'string'\n ? result\n : result === false\n ? t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: label,\n })\n : undefined,\n tagProps: ownProps,\n isDisabled: !!ownProps?.isDisabled,\n };\n });\n\n const effectiveIsInvalid = tagError ? true : isInvalid;\n const hasRemovableTags = tags.some((tag) => !tag.isDisabled);\n // Backspace in an empty input is how the keyboard gets to the chips without\n // Tab; nothing on screen says so.\n const hasBackspaceHint = isInteractive && hasRemovableTags;\n\n // A locked value's option stays checked but cannot be unpicked.\n const lockedKeys = tags.filter((tag) => tag.isDisabled).map((tag) => tag.key);\n const optionDisabledKeys = lockedKeys.length\n ? [...disabledKeySet, ...lockedKeys]\n : disabledKeys;\n\n // ---- input --------------------------------------------------------------\n const { labelProps, inputProps } = useTextField(\n {\n ...otherProps,\n id,\n label,\n value: draft,\n placeholder,\n isDisabled,\n isReadOnly,\n isRequired,\n isInvalid: effectiveIsInvalid,\n autoFocus,\n onChange: handleInputChange,\n } as never,\n inputRef,\n );\n // Names the chips, the buttons and the options after the field: \"Selected\n // values Also send to\", rather than the same words for every field on the\n // page. The ids go in the order the input reads them: the visible label,\n // then `aria-labelledby`.\n const ariaLabel = (props as { 'aria-label'?: string })['aria-label'];\n const ariaLabelledby = (props as { 'aria-labelledby'?: string })[\n 'aria-labelledby'\n ];\n const labelId = label ? (labelProps.id as string | undefined) : undefined;\n const fieldLabelledby =\n [labelId, ariaLabelledby].filter(Boolean).join(' ') || undefined;\n // An `aria-label` has no element to point at, so its words are joined into\n // each part's own name instead, ahead of the ids. That is the input's order\n // too: given `aria-label` with a `label` or `aria-labelledby`, React Aria\n // puts the input's own id first in its `aria-labelledby`, so it reads\n // \"Values Primary key\" and the chips \"Selected values, Values Primary key\".\n\n // Joined, not replaced: the input keeps any description it already has.\n const describedBy: string[] = [];\n\n if (inputProps['aria-describedby']) {\n describedBy.push(inputProps['aria-describedby']);\n }\n if (tags.length) describedBy.push(summaryId);\n if (hasBackspaceHint) describedBy.push(hintId);\n\n const tagInputProps = mergeProps(\n inputProps,\n {\n onKeyDown: handleKeyDown,\n onPaste: handlePaste,\n onBlur: handleInputBlur,\n onFocus: handleInputFocus,\n autoComplete,\n 'data-input-type': 'taginput',\n 'aria-describedby': describedBy.join(' ') || undefined,\n },\n hasOptions\n ? getComboboxProps(listBoxId, shouldShowPopover, activeOptionKey)\n : undefined,\n );\n\n const handleTriggerPress = useEvent(() => {\n const willOpen = !shouldShowPopover;\n\n if (willOpen && !hasResults) setIsFilterActive(false);\n\n setIsPopoverOpen(willOpen);\n inputRef.current?.focus();\n });\n\n const trigger =\n hasOptions && !hideTrigger ? (\n <TagInputTrigger\n id={triggerId}\n size={size}\n ariaLabel={ariaLabel}\n fieldLabelledby={fieldLabelledby}\n isOpen={shouldShowPopover}\n isDisabled={!isInteractive}\n styles={triggerStyles}\n onPress={handleTriggerPress}\n />\n ) : null;\n\n // Clears what is typed, as Escape does. The chips below have their own\n // remove buttons, so a button inside the input is about the text only.\n const clearText = useEvent(() => {\n // The button goes away with the text; keep focus in the field.\n inputRef.current?.focus();\n setDraft('');\n setTagError(null);\n setIsPopoverOpen(false);\n onClear?.();\n });\n\n const canClear = !!isClearable && isInteractive && draft !== '';\n const clearButton = canClear ? (\n <TagInputClearButton\n id={clearId}\n size={size}\n ariaLabel={ariaLabel}\n fieldLabelledby={fieldLabelledby}\n onPress={clearText}\n />\n ) : null;\n\n // Not a bare fragment: an empty one would still mark the input as having a\n // suffix.\n const hasActions = clearButton != null || trigger != null;\n\n const tagInputField = (\n <TagInputElement\n ref={rootRef}\n className={className}\n style={style}\n qaVal={qaVal}\n styles={styles}\n {...compositeFocusProps}\n >\n <TextInputBase\n isBare\n qa={qa || 'TagInput'}\n inputRef={inputRef}\n wrapperRef={wrapperRef}\n inputProps={tagInputProps}\n mods={mods}\n icon={icon}\n prefix={prefix}\n suffix={suffix}\n suffixPosition={suffixPosition}\n actions={\n hasActions ? (\n <>\n {clearButton}\n {trigger}\n </>\n ) : null\n }\n size={size}\n autoFocus={autoFocus}\n isDisabled={isDisabled}\n isLoading={isLoading}\n isInvalid={effectiveIsInvalid}\n isValid={isValid}\n styles={wrapperStyles}\n inputStyles={inputStyles}\n />\n {tags.length ? (\n <TagList\n id={tagListId}\n listRef={tagListRef}\n inputRef={inputRef}\n aria-label={\n ariaLabel\n ? t('tagInput.selectedValuesFor', 'Selected values, {{label}}', {\n label: ariaLabel,\n })\n : t('tagInput.selectedValues', 'Selected values')\n }\n aria-labelledby={fieldLabelledby}\n tags={tags}\n size={TAG_SIZES[size] ?? 'xsmall'}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n styles={tagListStyles}\n tagStyles={tagStyles}\n onRemove={removeValues}\n />\n ) : null}\n {/* Read only as the input's description, never on its own in browse mode. */}\n <span hidden id={summaryId}>\n {tags.length\n ? t('tagInput.summary', 'Selected: {{values}}.', {\n values: formatList(tags.map((tag) => tag.label)),\n })\n : null}\n </span>\n <span hidden id={hintId}>\n {hasBackspaceHint\n ? t(\n 'tagInput.backspaceHint',\n 'Press Backspace to go to the selected values.',\n )\n : null}\n </span>\n <VisuallyHidden role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <span key={announcement.id}>{announcement.text}</span>\n </VisuallyHidden>\n {hasOptions ? (\n <ListBoxPopover\n isOpen={shouldShowPopover}\n triggerRef={wrapperRef as RefObject<HTMLElement>}\n popoverRef={popoverRef}\n listBoxRef={listBoxRef}\n direction={direction}\n shouldFlip={shouldFlip}\n overlayOffset={overlayOffset}\n containerPadding={containerPadding}\n comboBoxWidth={popoverMinWidth}\n listBoxId={listBoxId}\n overlayStyles={overlayStyles}\n listBoxStyles={listBoxStyles}\n optionStyles={optionStyles}\n optionHighlight={isFilterActive ? term : undefined}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listGap={listGap}\n selectionMode=\"multiple\"\n selectedKeys={uniqueValues}\n isCheckable\n // Clicking back into the input keeps the list open for the next pick.\n shouldCloseOnTriggerInteraction={false}\n isDisabled={isDisabled}\n disabledKeys={optionDisabledKeys}\n listStateRef={listStateRef}\n // The ids the input reads, the visible label's among them, so the\n // list reads as the input does, a label that is not a string too.\n ariaLabel={ariaLabel}\n ariaLabelledby={fieldLabelledby}\n compositeFocusProps={compositeFocusProps}\n filter={optionFilterFn}\n size={size}\n onSelectionChange={handlePopoverSelection}\n onClose={() => setIsPopoverOpen(false)}\n >\n {popoverChildren}\n </ListBoxPopover>\n ) : null}\n </TagInputElement>\n );\n\n const { children: _children, ...fieldProps } = props;\n\n // The forwarded ref sits on the component's root, labelled or not, so the\n // field wrapper gets a ref of its own that nothing reads.\n const fieldRef = useCombinedRefs<HTMLDivElement>();\n\n return wrapWithField(tagInputField, fieldRef, {\n ...(fieldProps as Omit<CubeTagInputProps<T>, 'children'>),\n labelProps: mergeProps(labelProps, userLabelProps),\n isInvalid: effectiveIsInvalid,\n // A rejected entry speaks for itself until the text is edited. Keyed, so\n // the same rejection twice in a row is announced twice.\n message: tagError ? (\n <span key={tagError.id}>{tagError.text}</span>\n ) : (\n message\n ),\n errorMessage: tagError ? undefined : errorMessage,\n });\n}\n\n/**\n * A field for a list of values, shown as removable chips below a single-line\n * input. Values are typed (Enter or a separator commits them) or picked from\n * suggested options.\n */\nconst _TagInput = forwardRef(TagInput) as unknown as (<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>> & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement) & {\n Item: typeof Item;\n Section: typeof BaseSection;\n};\n\nObject.assign(_TagInput, {\n Item,\n Section: BaseSection,\n displayName: 'TagInput',\n});\n\n// The legacy `<Field>` picks its value mapper from this. The `CheckboxGroup`\n// mapper is the one for an array value: `[]` when empty, validated on change.\nObject.defineProperty(_TagInput, 'cubeInputType', {\n value: 'CheckboxGroup',\n enumerable: false,\n configurable: false,\n});\n\nexport { _TagInput as TagInput };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b3fed8f | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-77836fa | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b3fed8f | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-77836fa | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { markKeyboardFocus } from "../ListBoxPopover/listNavigation.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b3fed8f | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-77836fa | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b3fed8f | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-77836fa | Cube Dev Team */
2
2
  import { chain } from "../../../utils/react/chain.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useBufferedValue } from "../../../utils/react/useBufferedValue.js";