@salt-ds/lab 1.0.0-alpha.25 → 1.0.0-alpha.27

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 (348) hide show
  1. package/css/salt-lab.css +452 -522
  2. package/dist-cjs/combo-box-next/ComboBoxNext.js +303 -166
  3. package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
  4. package/dist-cjs/combo-box-next/useComboBoxNext.js +55 -0
  5. package/dist-cjs/combo-box-next/useComboBoxNext.js.map +1 -0
  6. package/dist-cjs/dropdown/DropdownBase.js +1 -1
  7. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  8. package/dist-cjs/dropdown-next/DropdownNext.css.js +1 -1
  9. package/dist-cjs/dropdown-next/DropdownNext.js +333 -170
  10. package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
  11. package/dist-cjs/editable-label/EditableLabel.js +1 -1
  12. package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
  13. package/dist-cjs/index.js +12 -10
  14. package/dist-cjs/index.js.map +1 -1
  15. package/dist-cjs/layer-layout/LayerLayout.js +0 -1
  16. package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
  17. package/dist-cjs/list-control/ListControlContext.js +36 -0
  18. package/dist-cjs/list-control/ListControlContext.js.map +1 -0
  19. package/dist-cjs/list-control/ListControlState.js +193 -0
  20. package/dist-cjs/list-control/ListControlState.js.map +1 -0
  21. package/dist-cjs/navigation-item/ConditionalWrapper.js +2 -4
  22. package/dist-cjs/navigation-item/ConditionalWrapper.js.map +1 -1
  23. package/dist-cjs/navigation-item/ExpansionIcon.js +2 -4
  24. package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -1
  25. package/dist-cjs/navigation-item/NavigationItem.css.js +1 -1
  26. package/dist-cjs/navigation-item/NavigationItem.js +4 -7
  27. package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
  28. package/dist-cjs/option/Option.css.js +6 -0
  29. package/dist-cjs/option/Option.css.js.map +1 -0
  30. package/dist-cjs/option/Option.js +113 -0
  31. package/dist-cjs/option/Option.js.map +1 -0
  32. package/dist-cjs/option/OptionGroup.css.js +6 -0
  33. package/dist-cjs/option/OptionGroup.css.js.map +1 -0
  34. package/dist-cjs/option/OptionGroup.js +44 -0
  35. package/dist-cjs/option/OptionGroup.js.map +1 -0
  36. package/dist-cjs/option/OptionList.css.js +6 -0
  37. package/dist-cjs/option/OptionList.css.js.map +1 -0
  38. package/dist-cjs/option/OptionList.js +40 -0
  39. package/dist-cjs/option/OptionList.js.map +1 -0
  40. package/dist-cjs/pagination/CompactInput.css.js +6 -0
  41. package/dist-cjs/pagination/CompactInput.css.js.map +1 -0
  42. package/dist-cjs/pagination/CompactInput.js +31 -35
  43. package/dist-cjs/pagination/CompactInput.js.map +1 -1
  44. package/dist-cjs/pagination/CompactPaginator.css.js +6 -0
  45. package/dist-cjs/pagination/CompactPaginator.css.js.map +1 -0
  46. package/dist-cjs/pagination/CompactPaginator.js +76 -0
  47. package/dist-cjs/pagination/CompactPaginator.js.map +1 -0
  48. package/dist-cjs/pagination/GoToInput.css.js +6 -0
  49. package/dist-cjs/pagination/GoToInput.css.js.map +1 -0
  50. package/dist-cjs/pagination/GoToInput.js +37 -59
  51. package/dist-cjs/pagination/GoToInput.js.map +1 -1
  52. package/dist-cjs/pagination/PageButton.css.js +6 -0
  53. package/dist-cjs/pagination/PageButton.css.js.map +1 -0
  54. package/dist-cjs/pagination/PageButton.js +34 -33
  55. package/dist-cjs/pagination/PageButton.js.map +1 -1
  56. package/dist-cjs/pagination/PageRanges.css.js +6 -0
  57. package/dist-cjs/pagination/PageRanges.css.js.map +1 -0
  58. package/dist-cjs/pagination/PageRanges.js +73 -0
  59. package/dist-cjs/pagination/PageRanges.js.map +1 -0
  60. package/dist-cjs/pagination/Pagination.css.js +1 -1
  61. package/dist-cjs/pagination/Pagination.js +21 -38
  62. package/dist-cjs/pagination/Pagination.js.map +1 -1
  63. package/dist-cjs/pagination/PaginationContext.js +1 -6
  64. package/dist-cjs/pagination/PaginationContext.js.map +1 -1
  65. package/dist-cjs/pagination/Paginator.css.js +6 -0
  66. package/dist-cjs/pagination/Paginator.css.js.map +1 -0
  67. package/dist-cjs/pagination/Paginator.js +33 -43
  68. package/dist-cjs/pagination/Paginator.js.map +1 -1
  69. package/dist-cjs/pagination/usePaginationContext.js +1 -1
  70. package/dist-cjs/pagination/usePaginationContext.js.map +1 -1
  71. package/dist-cjs/scrim/Scrim.css.js +1 -1
  72. package/dist-cjs/scrim/Scrim.js +10 -140
  73. package/dist-cjs/scrim/Scrim.js.map +1 -1
  74. package/dist-cjs/tokenized-input/internal/InputPill.js +13 -9
  75. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  76. package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +6 -0
  77. package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
  78. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +244 -0
  79. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -0
  80. package/dist-cjs/tokenized-input-next/internal/InputPill.css.js +6 -0
  81. package/dist-cjs/tokenized-input-next/internal/InputPill.css.js.map +1 -0
  82. package/dist-cjs/tokenized-input-next/internal/InputPill.js +83 -0
  83. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -0
  84. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js +22 -0
  85. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
  86. package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js +37 -0
  87. package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
  88. package/dist-cjs/tokenized-input-next/internal/useWidth.js +48 -0
  89. package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -0
  90. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js +479 -0
  91. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
  92. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +1 -1
  93. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  94. package/dist-cjs/tree/Tree.js +1 -2
  95. package/dist-cjs/tree/Tree.js.map +1 -1
  96. package/dist-es/combo-box-next/ComboBoxNext.js +306 -169
  97. package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
  98. package/dist-es/combo-box-next/useComboBoxNext.js +51 -0
  99. package/dist-es/combo-box-next/useComboBoxNext.js.map +1 -0
  100. package/dist-es/dropdown/DropdownBase.js +1 -1
  101. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  102. package/dist-es/dropdown-next/DropdownNext.css.js +1 -1
  103. package/dist-es/dropdown-next/DropdownNext.js +332 -169
  104. package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
  105. package/dist-es/editable-label/EditableLabel.js +1 -1
  106. package/dist-es/editable-label/EditableLabel.js.map +1 -1
  107. package/dist-es/index.js +6 -5
  108. package/dist-es/index.js.map +1 -1
  109. package/dist-es/layer-layout/LayerLayout.js +0 -1
  110. package/dist-es/layer-layout/LayerLayout.js.map +1 -1
  111. package/dist-es/list-control/ListControlContext.js +31 -0
  112. package/dist-es/list-control/ListControlContext.js.map +1 -0
  113. package/dist-es/list-control/ListControlState.js +189 -0
  114. package/dist-es/list-control/ListControlState.js.map +1 -0
  115. package/dist-es/navigation-item/ConditionalWrapper.js +2 -4
  116. package/dist-es/navigation-item/ConditionalWrapper.js.map +1 -1
  117. package/dist-es/navigation-item/ExpansionIcon.js +2 -4
  118. package/dist-es/navigation-item/ExpansionIcon.js.map +1 -1
  119. package/dist-es/navigation-item/NavigationItem.css.js +1 -1
  120. package/dist-es/navigation-item/NavigationItem.js +4 -7
  121. package/dist-es/navigation-item/NavigationItem.js.map +1 -1
  122. package/dist-es/option/Option.css.js +4 -0
  123. package/dist-es/option/Option.css.js.map +1 -0
  124. package/dist-es/option/Option.js +109 -0
  125. package/dist-es/option/Option.js.map +1 -0
  126. package/dist-es/option/OptionGroup.css.js +4 -0
  127. package/dist-es/option/OptionGroup.css.js.map +1 -0
  128. package/dist-es/option/OptionGroup.js +40 -0
  129. package/dist-es/option/OptionGroup.js.map +1 -0
  130. package/dist-es/option/OptionList.css.js +4 -0
  131. package/dist-es/option/OptionList.css.js.map +1 -0
  132. package/dist-es/option/OptionList.js +36 -0
  133. package/dist-es/option/OptionList.js.map +1 -0
  134. package/dist-es/pagination/CompactInput.css.js +4 -0
  135. package/dist-es/pagination/CompactInput.css.js.map +1 -0
  136. package/dist-es/pagination/CompactInput.js +32 -36
  137. package/dist-es/pagination/CompactInput.js.map +1 -1
  138. package/dist-es/pagination/CompactPaginator.css.js +4 -0
  139. package/dist-es/pagination/CompactPaginator.css.js.map +1 -0
  140. package/dist-es/pagination/CompactPaginator.js +72 -0
  141. package/dist-es/pagination/CompactPaginator.js.map +1 -0
  142. package/dist-es/pagination/GoToInput.css.js +4 -0
  143. package/dist-es/pagination/GoToInput.css.js.map +1 -0
  144. package/dist-es/pagination/GoToInput.js +40 -62
  145. package/dist-es/pagination/GoToInput.js.map +1 -1
  146. package/dist-es/pagination/PageButton.css.js +4 -0
  147. package/dist-es/pagination/PageButton.css.js.map +1 -0
  148. package/dist-es/pagination/PageButton.js +34 -33
  149. package/dist-es/pagination/PageButton.js.map +1 -1
  150. package/dist-es/pagination/PageRanges.css.js +4 -0
  151. package/dist-es/pagination/PageRanges.css.js.map +1 -0
  152. package/dist-es/pagination/PageRanges.js +69 -0
  153. package/dist-es/pagination/PageRanges.js.map +1 -0
  154. package/dist-es/pagination/Pagination.css.js +1 -1
  155. package/dist-es/pagination/Pagination.js +20 -37
  156. package/dist-es/pagination/Pagination.js.map +1 -1
  157. package/dist-es/pagination/PaginationContext.js +1 -6
  158. package/dist-es/pagination/PaginationContext.js.map +1 -1
  159. package/dist-es/pagination/Paginator.css.js +4 -0
  160. package/dist-es/pagination/Paginator.css.js.map +1 -0
  161. package/dist-es/pagination/Paginator.js +32 -42
  162. package/dist-es/pagination/Paginator.js.map +1 -1
  163. package/dist-es/pagination/usePaginationContext.js +1 -1
  164. package/dist-es/pagination/usePaginationContext.js.map +1 -1
  165. package/dist-es/scrim/Scrim.css.js +1 -1
  166. package/dist-es/scrim/Scrim.js +12 -138
  167. package/dist-es/scrim/Scrim.js.map +1 -1
  168. package/dist-es/tokenized-input/internal/InputPill.js +15 -11
  169. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  170. package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +4 -0
  171. package/dist-es/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
  172. package/dist-es/tokenized-input-next/TokenizedInputNext.js +240 -0
  173. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -0
  174. package/dist-es/tokenized-input-next/internal/InputPill.css.js +4 -0
  175. package/dist-es/tokenized-input-next/internal/InputPill.css.js.map +1 -0
  176. package/dist-es/tokenized-input-next/internal/InputPill.js +79 -0
  177. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -0
  178. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js +18 -0
  179. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
  180. package/dist-es/tokenized-input-next/internal/useResizeObserver.js +33 -0
  181. package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
  182. package/dist-es/tokenized-input-next/internal/useWidth.js +42 -0
  183. package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -0
  184. package/dist-es/tokenized-input-next/useTokenizedInputNext.js +471 -0
  185. package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
  186. package/dist-es/toolbar/overflow-panel/OverflowPanel.js +1 -1
  187. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  188. package/dist-es/tree/Tree.js +1 -2
  189. package/dist-es/tree/Tree.js.map +1 -1
  190. package/dist-types/combo-box-next/ComboBoxNext.d.ts +7 -80
  191. package/dist-types/combo-box-next/useComboBoxNext.d.ts +31 -0
  192. package/dist-types/dialog/useDialog.d.ts +6 -7
  193. package/dist-types/drawer/useDrawer.d.ts +6 -7
  194. package/dist-types/dropdown-next/DropdownNext.d.ts +25 -27
  195. package/dist-types/index.d.ts +2 -2
  196. package/dist-types/list-control/ListControlContext.d.ts +20 -0
  197. package/dist-types/list-control/ListControlState.d.ts +68 -0
  198. package/dist-types/navigation-item/ConditionalWrapper.d.ts +1 -1
  199. package/dist-types/navigation-item/ExpansionIcon.d.ts +1 -1
  200. package/dist-types/option/Option.d.ts +20 -0
  201. package/dist-types/option/OptionGroup.d.ts +12 -0
  202. package/dist-types/option/OptionList.d.ts +5 -0
  203. package/dist-types/option/index.d.ts +2 -0
  204. package/dist-types/pagination/CompactInput.d.ts +2 -8
  205. package/dist-types/pagination/CompactPaginator.d.ts +1 -0
  206. package/dist-types/pagination/GoToInput.d.ts +13 -4
  207. package/dist-types/pagination/PageButton.d.ts +2 -3
  208. package/dist-types/pagination/PageRanges.d.ts +5 -0
  209. package/dist-types/pagination/Pagination.d.ts +15 -4
  210. package/dist-types/pagination/PaginationContext.d.ts +2 -4
  211. package/dist-types/pagination/Paginator.d.ts +6 -3
  212. package/dist-types/pagination/index.d.ts +2 -0
  213. package/dist-types/scrim/Scrim.d.ts +6 -61
  214. package/dist-types/scrim/index.d.ts +0 -1
  215. package/dist-types/tabs/drag-drop/drag-utils.d.ts +6 -6
  216. package/dist-types/tokenized-input/internal/InputPill.d.ts +7 -5
  217. package/dist-types/tokenized-input-next/TokenizedInputNext.d.ts +51 -0
  218. package/dist-types/tokenized-input-next/index.d.ts +2 -0
  219. package/dist-types/tokenized-input-next/internal/InputPill.d.ts +29 -0
  220. package/dist-types/tokenized-input-next/internal/calcFirstHiddenIndex.d.ts +4 -0
  221. package/dist-types/tokenized-input-next/internal/useResizeObserver.d.ts +6 -0
  222. package/dist-types/tokenized-input-next/internal/useWidth.d.ts +7 -0
  223. package/dist-types/tokenized-input-next/useTokenizedInputNext.d.ts +47 -0
  224. package/package.json +3 -3
  225. package/dist-cjs/combo-box-next/ComboBoxNext.css.js +0 -6
  226. package/dist-cjs/combo-box-next/ComboBoxNext.css.js.map +0 -1
  227. package/dist-cjs/combo-box-next/useComboBox.js +0 -147
  228. package/dist-cjs/combo-box-next/useComboBox.js.map +0 -1
  229. package/dist-cjs/combo-box-next/useComboboxPortal.js +0 -75
  230. package/dist-cjs/combo-box-next/useComboboxPortal.js.map +0 -1
  231. package/dist-cjs/combo-box-next/utils.js +0 -36
  232. package/dist-cjs/combo-box-next/utils.js.map +0 -1
  233. package/dist-cjs/dropdown-next/useDropdownNext.js +0 -188
  234. package/dist-cjs/dropdown-next/useDropdownNext.js.map +0 -1
  235. package/dist-cjs/focus-manager/FocusManager.js +0 -158
  236. package/dist-cjs/focus-manager/FocusManager.js.map +0 -1
  237. package/dist-cjs/focus-manager/internal/findAllTabbableElements.js +0 -45
  238. package/dist-cjs/focus-manager/internal/findAllTabbableElements.js.map +0 -1
  239. package/dist-cjs/focus-manager/internal/useReturnFocus.js +0 -59
  240. package/dist-cjs/focus-manager/internal/useReturnFocus.js.map +0 -1
  241. package/dist-cjs/pagination/ArrowButton.js +0 -64
  242. package/dist-cjs/pagination/ArrowButton.js.map +0 -1
  243. package/dist-cjs/pagination/CompactControls.js +0 -38
  244. package/dist-cjs/pagination/CompactControls.js.map +0 -1
  245. package/dist-cjs/pagination/RegularControls.js +0 -58
  246. package/dist-cjs/pagination/RegularControls.js.map +0 -1
  247. package/dist-cjs/pagination/utils.js +0 -10
  248. package/dist-cjs/pagination/utils.js.map +0 -1
  249. package/dist-cjs/pill/ClosablePill.js +0 -61
  250. package/dist-cjs/pill/ClosablePill.js.map +0 -1
  251. package/dist-cjs/pill/Pill.css.js +0 -6
  252. package/dist-cjs/pill/Pill.css.js.map +0 -1
  253. package/dist-cjs/pill/Pill.js +0 -49
  254. package/dist-cjs/pill/Pill.js.map +0 -1
  255. package/dist-cjs/pill/PillBase.js +0 -133
  256. package/dist-cjs/pill/PillBase.js.map +0 -1
  257. package/dist-cjs/pill/SelectablePill.js +0 -55
  258. package/dist-cjs/pill/SelectablePill.js.map +0 -1
  259. package/dist-cjs/pill/constants.js +0 -8
  260. package/dist-cjs/pill/constants.js.map +0 -1
  261. package/dist-cjs/pill/internal/DeleteButton.js +0 -37
  262. package/dist-cjs/pill/internal/DeleteButton.js.map +0 -1
  263. package/dist-cjs/pill/internal/DivButton.js +0 -68
  264. package/dist-cjs/pill/internal/DivButton.js.map +0 -1
  265. package/dist-cjs/pill/internal/PillCheckbox.css.js +0 -6
  266. package/dist-cjs/pill/internal/PillCheckbox.css.js.map +0 -1
  267. package/dist-cjs/pill/internal/PillCheckbox.js +0 -27
  268. package/dist-cjs/pill/internal/PillCheckbox.js.map +0 -1
  269. package/dist-cjs/pill-next/PillNext.css.js +0 -6
  270. package/dist-cjs/pill-next/PillNext.css.js.map +0 -1
  271. package/dist-cjs/pill-next/PillNext.js +0 -65
  272. package/dist-cjs/pill-next/PillNext.js.map +0 -1
  273. package/dist-cjs/scrim/ScrimContext.js +0 -13
  274. package/dist-cjs/scrim/ScrimContext.js.map +0 -1
  275. package/dist-cjs/scrim/internal/PreventFocus.js +0 -39
  276. package/dist-cjs/scrim/internal/PreventFocus.js.map +0 -1
  277. package/dist-es/combo-box-next/ComboBoxNext.css.js +0 -4
  278. package/dist-es/combo-box-next/ComboBoxNext.css.js.map +0 -1
  279. package/dist-es/combo-box-next/useComboBox.js +0 -143
  280. package/dist-es/combo-box-next/useComboBox.js.map +0 -1
  281. package/dist-es/combo-box-next/useComboboxPortal.js +0 -71
  282. package/dist-es/combo-box-next/useComboboxPortal.js.map +0 -1
  283. package/dist-es/combo-box-next/utils.js +0 -31
  284. package/dist-es/combo-box-next/utils.js.map +0 -1
  285. package/dist-es/dropdown-next/useDropdownNext.js +0 -184
  286. package/dist-es/dropdown-next/useDropdownNext.js.map +0 -1
  287. package/dist-es/focus-manager/FocusManager.js +0 -154
  288. package/dist-es/focus-manager/FocusManager.js.map +0 -1
  289. package/dist-es/focus-manager/internal/findAllTabbableElements.js +0 -41
  290. package/dist-es/focus-manager/internal/findAllTabbableElements.js.map +0 -1
  291. package/dist-es/focus-manager/internal/useReturnFocus.js +0 -55
  292. package/dist-es/focus-manager/internal/useReturnFocus.js.map +0 -1
  293. package/dist-es/pagination/ArrowButton.js +0 -60
  294. package/dist-es/pagination/ArrowButton.js.map +0 -1
  295. package/dist-es/pagination/CompactControls.js +0 -34
  296. package/dist-es/pagination/CompactControls.js.map +0 -1
  297. package/dist-es/pagination/RegularControls.js +0 -54
  298. package/dist-es/pagination/RegularControls.js.map +0 -1
  299. package/dist-es/pagination/utils.js +0 -6
  300. package/dist-es/pagination/utils.js.map +0 -1
  301. package/dist-es/pill/ClosablePill.js +0 -57
  302. package/dist-es/pill/ClosablePill.js.map +0 -1
  303. package/dist-es/pill/Pill.css.js +0 -4
  304. package/dist-es/pill/Pill.css.js.map +0 -1
  305. package/dist-es/pill/Pill.js +0 -45
  306. package/dist-es/pill/Pill.js.map +0 -1
  307. package/dist-es/pill/PillBase.js +0 -129
  308. package/dist-es/pill/PillBase.js.map +0 -1
  309. package/dist-es/pill/SelectablePill.js +0 -51
  310. package/dist-es/pill/SelectablePill.js.map +0 -1
  311. package/dist-es/pill/constants.js +0 -4
  312. package/dist-es/pill/constants.js.map +0 -1
  313. package/dist-es/pill/internal/DeleteButton.js +0 -33
  314. package/dist-es/pill/internal/DeleteButton.js.map +0 -1
  315. package/dist-es/pill/internal/DivButton.js +0 -64
  316. package/dist-es/pill/internal/DivButton.js.map +0 -1
  317. package/dist-es/pill/internal/PillCheckbox.css.js +0 -4
  318. package/dist-es/pill/internal/PillCheckbox.css.js.map +0 -1
  319. package/dist-es/pill/internal/PillCheckbox.js +0 -23
  320. package/dist-es/pill/internal/PillCheckbox.js.map +0 -1
  321. package/dist-es/pill-next/PillNext.css.js +0 -4
  322. package/dist-es/pill-next/PillNext.css.js.map +0 -1
  323. package/dist-es/pill-next/PillNext.js +0 -57
  324. package/dist-es/pill-next/PillNext.js.map +0 -1
  325. package/dist-es/scrim/ScrimContext.js +0 -9
  326. package/dist-es/scrim/ScrimContext.js.map +0 -1
  327. package/dist-es/scrim/internal/PreventFocus.js +0 -35
  328. package/dist-es/scrim/internal/PreventFocus.js.map +0 -1
  329. package/dist-types/combo-box-next/useComboBox.d.ts +0 -44
  330. package/dist-types/combo-box-next/useComboboxPortal.d.ts +0 -22
  331. package/dist-types/combo-box-next/utils.d.ts +0 -7
  332. package/dist-types/dropdown-next/useDropdownNext.d.ts +0 -42
  333. package/dist-types/pagination/ArrowButton.d.ts +0 -7
  334. package/dist-types/pagination/CompactControls.d.ts +0 -8
  335. package/dist-types/pagination/RegularControls.d.ts +0 -8
  336. package/dist-types/pagination/utils.d.ts +0 -1
  337. package/dist-types/pill/ClosablePill.d.ts +0 -8
  338. package/dist-types/pill/Pill.d.ts +0 -15
  339. package/dist-types/pill/PillBase.d.ts +0 -52
  340. package/dist-types/pill/SelectablePill.d.ts +0 -17
  341. package/dist-types/pill/constants.d.ts +0 -1
  342. package/dist-types/pill/index.d.ts +0 -3
  343. package/dist-types/pill/internal/DeleteButton.d.ts +0 -8
  344. package/dist-types/pill/internal/DivButton.d.ts +0 -12
  345. package/dist-types/pill/internal/PillCheckbox.d.ts +0 -3
  346. package/dist-types/pill-next/PillNext.d.ts +0 -7
  347. package/dist-types/pill-next/index.d.ts +0 -1
  348. package/dist-types/scrim/ScrimContext.d.ts +0 -1
@@ -0,0 +1,79 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { clsx } from 'clsx';
3
+ import { memo, useRef, useState } from 'react';
4
+ import { makePrefixer, useIsomorphicLayoutEffect, Tooltip, Pill } from '@salt-ds/core';
5
+ import { getWidth } from './useWidth.js';
6
+ import { useWindow } from '@salt-ds/window';
7
+ import { useComponentCssInjection } from '@salt-ds/styles';
8
+ import css_248z from './InputPill.css.js';
9
+ import { CloseIcon } from '@salt-ds/icons';
10
+
11
+ const withBaseName = makePrefixer("saltInputPill");
12
+ const InputPill = memo(function InputPill2(props) {
13
+ const {
14
+ className,
15
+ hidden,
16
+ highlighted,
17
+ index,
18
+ label,
19
+ onClose,
20
+ pillsRef,
21
+ ...rest
22
+ } = props;
23
+ const targetWindow = useWindow();
24
+ useComponentCssInjection({
25
+ testId: "salt-input-pill",
26
+ css: css_248z,
27
+ window: targetWindow
28
+ });
29
+ const ref = useRef(null);
30
+ const [isEllipsisActive, setEllipsisActive] = useState(false);
31
+ const isRemovable = Boolean(onClose);
32
+ useIsomorphicLayoutEffect(() => {
33
+ var _a;
34
+ const text = (_a = ref == null ? void 0 : ref.current) == null ? void 0 : _a.firstElementChild;
35
+ if (!isRemovable && pillsRef.current) {
36
+ pillsRef.current[index] = getWidth(ref.current);
37
+ }
38
+ setEllipsisActive((text == null ? void 0 : text.offsetWidth) < (text == null ? void 0 : text.scrollWidth));
39
+ }, [pillsRef, index, isRemovable]);
40
+ useIsomorphicLayoutEffect(
41
+ () => () => {
42
+ pillsRef.current[index] = void 0;
43
+ },
44
+ [pillsRef, index]
45
+ );
46
+ const handleClose = (event) => {
47
+ onClose == null ? void 0 : onClose(event, index);
48
+ };
49
+ return /* @__PURE__ */ jsx(Tooltip, {
50
+ content: label,
51
+ disabled: !isEllipsisActive,
52
+ children: /* @__PURE__ */ jsxs(Pill, {
53
+ className: clsx(
54
+ withBaseName(),
55
+ {
56
+ [withBaseName("pillHighlighted")]: highlighted,
57
+ [withBaseName("expanded")]: isRemovable,
58
+ [withBaseName("hidden")]: hidden
59
+ },
60
+ className
61
+ ),
62
+ tabIndex: -1,
63
+ onClick: isRemovable ? handleClose : void 0,
64
+ ref,
65
+ role: "option",
66
+ ...rest,
67
+ children: [
68
+ /* @__PURE__ */ jsx("span", {
69
+ className: withBaseName("label"),
70
+ children: label
71
+ }),
72
+ isRemovable && /* @__PURE__ */ jsx(CloseIcon, {})
73
+ ]
74
+ })
75
+ });
76
+ });
77
+
78
+ export { InputPill };
79
+ //# sourceMappingURL=InputPill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputPill.js","sources":["../src/tokenized-input-next/internal/InputPill.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n memo,\n MutableRefObject,\n SyntheticEvent,\n useRef,\n useState,\n} from \"react\";\nimport {\n makePrefixer,\n Tooltip,\n useIsomorphicLayoutEffect,\n Pill,\n PillProps,\n} from \"@salt-ds/core\";\nimport { getWidth } from \"./useWidth\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport inputPillCss from \"./InputPill.css\";\nimport { CloseIcon } from \"@salt-ds/icons\";\n\nconst withBaseName = makePrefixer(\"saltInputPill\");\n\nexport type InputPillProps = PillProps & {\n /**\n * A ref object holds pills index map to width.\n */\n pillsRef: MutableRefObject<Record<number, number | undefined>>;\n /**\n * Index of the pill within Input.\n */\n index: number;\n /**\n * Whether the pill is the last visible one within Input.\n */\n lastVisible?: boolean;\n /**\n * Pill label.\n */\n label?: string;\n /**\n * Whether the pill is highlighted.\n */\n highlighted?: boolean;\n\n /**\n * Callback when pill is deleted.\n */\n onClose?: (event: SyntheticEvent, index: number) => void;\n};\n\nexport const InputPill = memo(function InputPill(props: InputPillProps) {\n const {\n className,\n hidden,\n highlighted,\n index,\n label,\n onClose,\n pillsRef,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-input-pill\",\n css: inputPillCss,\n window: targetWindow,\n });\n\n const ref = useRef<HTMLButtonElement | null>(null);\n const [isEllipsisActive, setEllipsisActive] = useState(false);\n const isRemovable = Boolean(onClose);\n\n // useIsomorphicLayoutEffect to match the calcFirstHiddenIndex\n // We need to collect widths before the calculation\n useIsomorphicLayoutEffect(() => {\n const text = ref?.current?.firstElementChild as HTMLElement;\n if (!isRemovable && pillsRef.current) {\n pillsRef.current[index] = getWidth(ref.current);\n }\n setEllipsisActive(text?.offsetWidth < text?.scrollWidth);\n }, [pillsRef, index, isRemovable]);\n\n useIsomorphicLayoutEffect(\n () => () => {\n pillsRef.current[index] = undefined;\n },\n [pillsRef, index]\n );\n\n const handleClose = (event: SyntheticEvent) => {\n onClose?.(event, index);\n };\n return (\n <Tooltip content={label} disabled={!isEllipsisActive}>\n <Pill\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"pillHighlighted\")]: highlighted,\n [withBaseName(\"expanded\")]: isRemovable,\n [withBaseName(\"hidden\")]: hidden,\n },\n className\n )}\n tabIndex={-1}\n onClick={isRemovable ? handleClose : undefined}\n ref={ref}\n role=\"option\"\n {...rest}\n >\n <span className={withBaseName(\"label\")}>{label}</span>\n {isRemovable && <CloseIcon />}\n </Pill>\n </Tooltip>\n );\n});\n"],"names":["InputPill","inputPillCss"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ function calcFirstHiddenIndex({
2
+ containerWidth = 0,
3
+ pillWidths = []
4
+ } = {}) {
5
+ let totalWidth = 0;
6
+ let firstHiddenIndex = null;
7
+ for (let i = 0; i < pillWidths.length; i++) {
8
+ totalWidth += pillWidths[i];
9
+ if (totalWidth > containerWidth) {
10
+ firstHiddenIndex = i;
11
+ break;
12
+ }
13
+ }
14
+ return firstHiddenIndex;
15
+ }
16
+
17
+ export { calcFirstHiddenIndex };
18
+ //# sourceMappingURL=calcFirstHiddenIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calcFirstHiddenIndex.js","sources":["../src/tokenized-input-next/internal/calcFirstHiddenIndex.ts"],"sourcesContent":["export function calcFirstHiddenIndex({\n containerWidth = 0,\n pillWidths = [],\n}: { containerWidth?: number; pillWidths?: number[] } = {}) {\n let totalWidth = 0;\n let firstHiddenIndex: null | number = null;\n\n for (let i = 0; i < pillWidths.length; i++) {\n totalWidth += pillWidths[i];\n\n if (totalWidth > containerWidth) {\n firstHiddenIndex = i;\n break;\n }\n }\n\n return firstHiddenIndex;\n}\n"],"names":[],"mappings":"AAAO,SAAS,oBAAqB,CAAA;AAAA,EACnC,cAAiB,GAAA,CAAA;AAAA,EACjB,aAAa,EAAC;AAChB,CAAA,GAAwD,EAAI,EAAA;AAC1D,EAAA,IAAI,UAAa,GAAA,CAAA,CAAA;AACjB,EAAA,IAAI,gBAAkC,GAAA,IAAA,CAAA;AAEtC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC1C,IAAA,UAAA,IAAc,UAAW,CAAA,CAAA,CAAA,CAAA;AAEzB,IAAA,IAAI,aAAa,cAAgB,EAAA;AAC/B,MAAmB,gBAAA,GAAA,CAAA,CAAA;AACnB,MAAA,MAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,gBAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,33 @@
1
+ import { useIsomorphicLayoutEffect } from '@salt-ds/core';
2
+ import { useRef, useEffect } from 'react';
3
+
4
+ function useResizeObserver(onSizeChange) {
5
+ const ref = useRef(null);
6
+ useEffect(() => {
7
+ if (!ref.current) {
8
+ return void 0;
9
+ }
10
+ const observer = new ResizeObserver(onSizeChange);
11
+ observer.observe(ref.current);
12
+ return () => {
13
+ observer.disconnect();
14
+ };
15
+ }, [onSizeChange]);
16
+ useIsomorphicLayoutEffect(() => {
17
+ if (ref.current) {
18
+ onSizeChange([
19
+ {
20
+ target: ref.current,
21
+ contentRect: ref.current.getBoundingClientRect(),
22
+ borderBoxSize: [],
23
+ contentBoxSize: [],
24
+ devicePixelContentBoxSize: []
25
+ }
26
+ ]);
27
+ }
28
+ }, [onSizeChange]);
29
+ return ref;
30
+ }
31
+
32
+ export { useResizeObserver };
33
+ //# sourceMappingURL=useResizeObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResizeObserver.js","sources":["../src/tokenized-input-next/internal/useResizeObserver.ts"],"sourcesContent":["// TODO: Use resize observer from Tabstrip / Toolbar\n\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useRef, useEffect, Ref } from \"react\";\n\n/**\n * This monitors the size of a component and calls `onSizeChange` callback\n * every time when size changes.\n */\nexport function useResizeObserver<Element extends HTMLElement>(\n onSizeChange: (\n entries: ResizeObserverEntry[],\n observer?: ResizeObserver\n ) => void\n): Ref<Element> {\n const ref = useRef<Element>(null);\n\n useEffect(() => {\n if (!ref.current) {\n return undefined;\n }\n\n const observer = new ResizeObserver(onSizeChange);\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, [onSizeChange]);\n\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n onSizeChange([\n {\n target: ref.current,\n contentRect: ref.current.getBoundingClientRect(),\n borderBoxSize: [],\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n },\n ]);\n }\n }, [onSizeChange]);\n\n return ref;\n}\n"],"names":[],"mappings":";;;AASO,SAAS,kBACd,YAIc,EAAA;AACd,EAAM,MAAA,GAAA,GAAM,OAAgB,IAAI,CAAA,CAAA;AAEhC,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,IAAI,OAAS,EAAA;AAChB,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,QAAA,GAAW,IAAI,cAAA,CAAe,YAAY,CAAA,CAAA;AAChD,IAAS,QAAA,CAAA,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAA;AAE5B,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,UAAW,EAAA,CAAA;AAAA,KACtB,CAAA;AAAA,GACF,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAEjB,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,IAAI,OAAS,EAAA;AACf,MAAa,YAAA,CAAA;AAAA,QACX;AAAA,UACE,QAAQ,GAAI,CAAA,OAAA;AAAA,UACZ,WAAA,EAAa,GAAI,CAAA,OAAA,CAAQ,qBAAsB,EAAA;AAAA,UAC/C,eAAe,EAAC;AAAA,UAChB,gBAAgB,EAAC;AAAA,UACjB,2BAA2B,EAAC;AAAA,SAC9B;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAEjB,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,42 @@
1
+ import { useState } from 'react';
2
+ import { useIsomorphicLayoutEffect } from '@salt-ds/core';
3
+
4
+ const safeParseFloat = (target) => parseFloat(target != null ? target : "0");
5
+ const getPadding = (node) => {
6
+ if (node == null) {
7
+ return 0;
8
+ }
9
+ const style = window.getComputedStyle(node);
10
+ const padding = safeParseFloat(style.paddingLeft) + safeParseFloat(style.paddingRight);
11
+ return padding;
12
+ };
13
+ const getWidth = (node) => {
14
+ if (node == null) {
15
+ return 0;
16
+ }
17
+ const style = window.getComputedStyle(node);
18
+ const margin = safeParseFloat(style.marginLeft) + safeParseFloat(style.marginRight);
19
+ let dimension;
20
+ if (style.display === "none") {
21
+ const nodeDisplay = node.style.display;
22
+ node.style.display = "inline-block";
23
+ dimension = node.getBoundingClientRect();
24
+ node.style.display = nodeDisplay;
25
+ } else {
26
+ dimension = node.getBoundingClientRect();
27
+ }
28
+ return dimension.width + margin;
29
+ };
30
+ const useWidth = (density) => {
31
+ const [node, setNode] = useState(null);
32
+ const [width, setWidth] = useState(0);
33
+ useIsomorphicLayoutEffect(() => {
34
+ if (node !== null) {
35
+ setWidth(getWidth(node));
36
+ }
37
+ }, [node, density]);
38
+ return [setNode, width];
39
+ };
40
+
41
+ export { getPadding, getWidth, useWidth };
42
+ //# sourceMappingURL=useWidth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWidth.js","sources":["../src/tokenized-input-next/internal/useWidth.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { Density, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\n\nconst safeParseFloat = (target?: string) => parseFloat(target ?? \"0\");\n\nexport const getPadding = (node: HTMLElement | null) => {\n if (node == null) {\n return 0;\n }\n const style = window.getComputedStyle(node);\n const padding =\n safeParseFloat(style.paddingLeft) + safeParseFloat(style.paddingRight);\n return padding;\n};\n\nexport const getWidth = (node: HTMLElement | null) => {\n if (node == null) {\n return 0;\n }\n\n const style = window.getComputedStyle(node);\n const margin =\n safeParseFloat(style.marginLeft) + safeParseFloat(style.marginRight);\n\n let dimension;\n\n if (style.display === \"none\") {\n const nodeDisplay = node.style.display;\n\n node.style.display = \"inline-block\";\n dimension = node.getBoundingClientRect();\n node.style.display = nodeDisplay;\n } else {\n dimension = node.getBoundingClientRect();\n }\n\n return dimension.width + margin;\n};\n\n/**\n * This records the width of a component when it's rendered\n */\nexport const useWidth = (\n density: Density\n): [(newNode: any) => void, number] => {\n const [node, setNode] = useState<HTMLElement | null>(null);\n const [width, setWidth] = useState<number>(0);\n\n useIsomorphicLayoutEffect(() => {\n if (node !== null) {\n setWidth(getWidth(node));\n }\n }, [node, density]);\n\n return [setNode, width];\n};\n"],"names":[],"mappings":";;;AAGA,MAAM,cAAiB,GAAA,CAAC,MAAoB,KAAA,UAAA,CAAW,0BAAU,GAAG,CAAA,CAAA;AAEvD,MAAA,UAAA,GAAa,CAAC,IAA6B,KAAA;AACtD,EAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAC1C,EAAA,MAAM,UACJ,cAAe,CAAA,KAAA,CAAM,WAAW,CAAI,GAAA,cAAA,CAAe,MAAM,YAAY,CAAA,CAAA;AACvE,EAAO,OAAA,OAAA,CAAA;AACT,EAAA;AAEa,MAAA,QAAA,GAAW,CAAC,IAA6B,KAAA;AACpD,EAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAC1C,EAAA,MAAM,SACJ,cAAe,CAAA,KAAA,CAAM,UAAU,CAAI,GAAA,cAAA,CAAe,MAAM,WAAW,CAAA,CAAA;AAErE,EAAI,IAAA,SAAA,CAAA;AAEJ,EAAI,IAAA,KAAA,CAAM,YAAY,MAAQ,EAAA;AAC5B,IAAM,MAAA,WAAA,GAAc,KAAK,KAAM,CAAA,OAAA,CAAA;AAE/B,IAAA,IAAA,CAAK,MAAM,OAAU,GAAA,cAAA,CAAA;AACrB,IAAA,SAAA,GAAY,KAAK,qBAAsB,EAAA,CAAA;AACvC,IAAA,IAAA,CAAK,MAAM,OAAU,GAAA,WAAA,CAAA;AAAA,GAChB,MAAA;AACL,IAAA,SAAA,GAAY,KAAK,qBAAsB,EAAA,CAAA;AAAA,GACzC;AAEA,EAAA,OAAO,UAAU,KAAQ,GAAA,MAAA,CAAA;AAC3B,EAAA;AAKa,MAAA,QAAA,GAAW,CACtB,OACqC,KAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAA6B,IAAI,CAAA,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAiB,CAAC,CAAA,CAAA;AAE5C,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAS,QAAA,CAAA,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA;AAAA,KACzB;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,OAAO,CAAC,CAAA,CAAA;AAElB,EAAO,OAAA,CAAC,SAAS,KAAK,CAAA,CAAA;AACxB;;;;"}
@@ -0,0 +1,471 @@
1
+ import { useFormFieldProps, useDensity, useId, useForkRef, useControlled, useIsomorphicLayoutEffect, ownerWindow } from '@salt-ds/core';
2
+ import copy from 'clipboard-copy';
3
+ import { useState, useRef, useMemo, useCallback } from 'react';
4
+ import { escapeRegExp } from '../utils/escapeRegExp.js';
5
+ import { useWidth, getPadding } from './internal/useWidth.js';
6
+ import { useResizeObserver } from './internal/useResizeObserver.js';
7
+ import { calcFirstHiddenIndex } from './internal/calcFirstHiddenIndex.js';
8
+
9
+ const getCursorPosition = (inputRef) => {
10
+ if (inputRef.current) {
11
+ const { selectionStart, selectionEnd } = inputRef.current;
12
+ if (selectionStart != null && selectionStart === selectionEnd) {
13
+ return selectionStart;
14
+ }
15
+ }
16
+ return -1;
17
+ };
18
+ const isCtrlModifier = (event) => {
19
+ return event.ctrlKey || event.metaKey || ["CONTROL", "META"].indexOf(event.key.toUpperCase()) !== -1;
20
+ };
21
+ function isValidItem(data) {
22
+ return typeof data === "string" && Boolean(data.length) || typeof data !== "string" && data != null;
23
+ }
24
+ function useTokenizedInputNext(props) {
25
+ const {
26
+ disabled: formFieldDisabled,
27
+ readOnly,
28
+ necessity,
29
+ validationStatus,
30
+ a11yProps: {
31
+ "aria-describedby": ariaDescribedBy,
32
+ "aria-labelledby": ariaLabelledBy
33
+ } = {}
34
+ } = useFormFieldProps();
35
+ const {
36
+ delimiters = [","],
37
+ defaultSelected = [],
38
+ disabled = formFieldDisabled,
39
+ readOnly: readOnlyProp,
40
+ validationStatus: validationStatusProp,
41
+ disableAddOnBlur,
42
+ onBlur,
43
+ onClick,
44
+ onExpand,
45
+ onCollapse,
46
+ onKeyDown,
47
+ onInputChange,
48
+ onInputFocus,
49
+ onInputBlur,
50
+ onClear,
51
+ onChange,
52
+ id: idProp,
53
+ value: valueProp,
54
+ expanded: expandedProp,
55
+ selectedItems: selectedItemsProp,
56
+ "aria-label": ariaLabel,
57
+ "aria-describedby": ariaDescribedByProp,
58
+ expandButtonRef: expandButtonRefProp,
59
+ ...restProps
60
+ } = props;
61
+ const density = useDensity();
62
+ const id = useId(idProp);
63
+ const [focused, setFocused] = useState(false);
64
+ const [pillGroupWidth, setPillGroupWidth] = useState(null);
65
+ const [firstHiddenIndex, setFirstHiddenIndex] = useState(null);
66
+ const [activeIndices, setActiveIndices] = useState([]);
67
+ const [highlightedIndex, setHighlightedIndex] = useState(
68
+ void 0
69
+ );
70
+ const [expandButtonHookRef, expandButtonWidth] = useWidth(density);
71
+ const [clearButtonRef, clearButtonWidth] = useWidth(density);
72
+ const [statusAdornmentRef, statusAdornmentWidth] = useWidth(density);
73
+ const [inputRef, inputWidth] = useWidth(density);
74
+ const containerRef = useRef(null);
75
+ const pillsRef = useRef({});
76
+ const textAreaRef = useRef(null);
77
+ const preventBlurOnCopy = useRef(false);
78
+ const expandButtonRef = useForkRef(expandButtonHookRef, expandButtonRefProp);
79
+ const hasActiveItems = Boolean(activeIndices.length);
80
+ const primaryDelimiter = delimiters[0];
81
+ const delimiterRegex = useMemo(
82
+ () => new RegExp(delimiters.map(escapeRegExp).join("|"), "gi"),
83
+ [delimiters]
84
+ );
85
+ const [value, setValue, isInputControlled] = useControlled({
86
+ controlled: valueProp,
87
+ default: "",
88
+ name: "TokenizedInputNext",
89
+ state: "value"
90
+ });
91
+ const [selectedItems = [], setSelectedItems, isSelectionControlled] = useControlled({
92
+ controlled: selectedItemsProp,
93
+ default: defaultSelected,
94
+ name: "TokenizedInputNext",
95
+ state: "selectedItems"
96
+ });
97
+ const [expanded, setExpanded, isExpandedControlled] = useControlled({
98
+ controlled: expandedProp,
99
+ default: false,
100
+ name: "TokenizedInputNext",
101
+ state: "expanded"
102
+ });
103
+ const widthOffset = inputWidth + statusAdornmentWidth + (expanded ? clearButtonWidth : expandButtonWidth);
104
+ const containerObserverRef = useResizeObserver(
105
+ useCallback(
106
+ ([{ contentRect }]) => {
107
+ const padding = getPadding(containerRef.current);
108
+ setPillGroupWidth(contentRect.width - padding - widthOffset);
109
+ },
110
+ [widthOffset]
111
+ )
112
+ );
113
+ useIsomorphicLayoutEffect(
114
+ () => () => {
115
+ setFirstHiddenIndex(null);
116
+ },
117
+ [density]
118
+ );
119
+ useIsomorphicLayoutEffect(
120
+ () => {
121
+ if (expanded) {
122
+ setFirstHiddenIndex(null);
123
+ } else if (pillGroupWidth != null) {
124
+ setFirstHiddenIndex(
125
+ calcFirstHiddenIndex({
126
+ containerWidth: pillGroupWidth,
127
+ pillWidths: Object.values(pillsRef.current).filter(
128
+ Boolean
129
+ )
130
+ })
131
+ );
132
+ }
133
+ },
134
+ [expanded, pillGroupWidth, selectedItems]
135
+ );
136
+ const focusInput = useCallback(() => {
137
+ if (textAreaRef.current) {
138
+ textAreaRef.current.focus();
139
+ }
140
+ }, []);
141
+ const updateInputValue = (newValue) => {
142
+ if (!isInputControlled) {
143
+ setValue(newValue);
144
+ }
145
+ };
146
+ const updateSelectedItems = useCallback(
147
+ (event, action) => {
148
+ if (!isSelectionControlled) {
149
+ setSelectedItems((prevSelectedItems) => {
150
+ const newItems = typeof action === "function" ? action(prevSelectedItems) : action;
151
+ if (newItems !== prevSelectedItems) {
152
+ onChange == null ? void 0 : onChange(event, newItems);
153
+ }
154
+ return newItems;
155
+ });
156
+ } else {
157
+ onChange == null ? void 0 : onChange(
158
+ event,
159
+ typeof action === "function" ? action(selectedItems) : action
160
+ );
161
+ }
162
+ },
163
+ [isSelectionControlled, setSelectedItems, onChange, selectedItems]
164
+ );
165
+ const updateExpanded = (event, newExpanded) => {
166
+ if (!isExpandedControlled) {
167
+ setExpanded(newExpanded);
168
+ }
169
+ if (newExpanded) {
170
+ focusInput();
171
+ onExpand == null ? void 0 : onExpand(event);
172
+ } else {
173
+ onCollapse == null ? void 0 : onCollapse(event);
174
+ }
175
+ };
176
+ const resetInput = () => {
177
+ updateInputValue("");
178
+ setHighlightedIndex(void 0);
179
+ setActiveIndices([]);
180
+ };
181
+ const removeItems = useCallback(
182
+ (event, itemIndices) => {
183
+ updateSelectedItems(
184
+ event,
185
+ (prevSelectedItems) => prevSelectedItems && (prevSelectedItems.length === 0 ? prevSelectedItems : prevSelectedItems.filter(
186
+ (_, index) => itemIndices.indexOf(index) === -1
187
+ ))
188
+ );
189
+ },
190
+ [updateSelectedItems]
191
+ );
192
+ const handleInputFocus = (event) => {
193
+ event.stopPropagation();
194
+ if (preventBlurOnCopy.current) {
195
+ preventBlurOnCopy.current = false;
196
+ setActiveIndices(
197
+ Array.from(
198
+ { length: selectedItems ? selectedItems.length : 0 },
199
+ (_, index) => index
200
+ )
201
+ );
202
+ return;
203
+ }
204
+ onInputFocus == null ? void 0 : onInputFocus(event);
205
+ updateExpanded(event, true);
206
+ setFocused(true);
207
+ };
208
+ const handleBlur = (event) => {
209
+ onBlur == null ? void 0 : onBlur(event);
210
+ setFocused(false);
211
+ updateExpanded(event, false);
212
+ };
213
+ const handleInputBlur = (event) => {
214
+ const container = containerRef == null ? void 0 : containerRef.current;
215
+ const eventTarget = event.relatedTarget;
216
+ event.preventDefault();
217
+ event.stopPropagation();
218
+ setHighlightedIndex(void 0);
219
+ setActiveIndices([]);
220
+ if (!disableAddOnBlur) {
221
+ handleAddItems(event, value);
222
+ }
223
+ onInputBlur == null ? void 0 : onInputBlur(event);
224
+ if (eventTarget !== container && !(container == null ? void 0 : container.contains(eventTarget))) {
225
+ handleBlur(event);
226
+ }
227
+ };
228
+ const handleClick = (event) => {
229
+ updateExpanded(event, true);
230
+ setActiveIndices([]);
231
+ onClick == null ? void 0 : onClick(event);
232
+ };
233
+ const handleInputChange = (event) => {
234
+ setHighlightedIndex(void 0);
235
+ onInputChange == null ? void 0 : onInputChange(event);
236
+ const newValue = event.target.value;
237
+ if (delimiterRegex.test(newValue)) {
238
+ handleAddItems(event, newValue);
239
+ } else {
240
+ updateInputValue(newValue);
241
+ }
242
+ };
243
+ const handleAddItems = (event, newValue, appendOnly) => {
244
+ if (!newValue || newValue.length === 0) {
245
+ return;
246
+ }
247
+ resetInput();
248
+ const newItems = newValue.split(delimiterRegex).reduce((values, item) => {
249
+ const newItem = item.trim();
250
+ return isValidItem(newItem) ? values.concat(newItem) : values;
251
+ }, []);
252
+ if (newItems.length) {
253
+ updateSelectedItems(
254
+ event,
255
+ (prevSelectedItems = []) => hasActiveItems && !appendOnly ? newItems : prevSelectedItems.concat(newItems)
256
+ );
257
+ }
258
+ };
259
+ const handleRemoveItem = useCallback(
260
+ (event, itemIndex) => {
261
+ focusInput();
262
+ if (itemIndex != void 0 && !readOnly && !readOnlyProp) {
263
+ removeItems(event, [itemIndex]);
264
+ }
265
+ },
266
+ [focusInput, removeItems]
267
+ );
268
+ const handleClear = (event) => {
269
+ updateSelectedItems(event, []);
270
+ resetInput();
271
+ focusInput();
272
+ onClear == null ? void 0 : onClear(event);
273
+ };
274
+ const cursorAtInputStart = () => getCursorPosition(textAreaRef) === 0 && Boolean(selectedItems.length);
275
+ const highlightAtPillGroupEnd = () => highlightedIndex === selectedItems.length - 1;
276
+ const pillGroupKeyDownHandlers = {
277
+ ArrowLeft: (event) => {
278
+ event.preventDefault();
279
+ setHighlightedIndex(
280
+ (prevHighlightedIndex) => prevHighlightedIndex == null ? selectedItems.length - 1 : Math.max(0, prevHighlightedIndex - 1)
281
+ );
282
+ },
283
+ ArrowRight: (event) => {
284
+ if (highlightAtPillGroupEnd()) {
285
+ return setHighlightedIndex(void 0);
286
+ }
287
+ event.preventDefault();
288
+ setHighlightedIndex(
289
+ (prevHighlightedIndex) => prevHighlightedIndex == null ? prevHighlightedIndex : Math.min(selectedItems.length - 1, prevHighlightedIndex + 1)
290
+ );
291
+ },
292
+ Backspace: (event) => {
293
+ event.preventDefault();
294
+ handleRemoveItem(event, highlightedIndex);
295
+ setHighlightedIndex(
296
+ (prevHighlightedIndex) => prevHighlightedIndex == null ? prevHighlightedIndex : Math.max(0, prevHighlightedIndex - 1)
297
+ );
298
+ },
299
+ Home: (event) => {
300
+ event.preventDefault();
301
+ setHighlightedIndex(0);
302
+ },
303
+ End: (event) => {
304
+ event.preventDefault();
305
+ setHighlightedIndex(selectedItems.length - 1);
306
+ },
307
+ Enter: (event) => {
308
+ event.preventDefault();
309
+ handleRemoveItem(event, highlightedIndex);
310
+ },
311
+ Delete: (event) => {
312
+ event.preventDefault();
313
+ handleRemoveItem(event, highlightedIndex);
314
+ },
315
+ " ": (event) => {
316
+ event.preventDefault();
317
+ handleRemoveItem(event, highlightedIndex);
318
+ }
319
+ };
320
+ const inputKeyDownHandlers = {
321
+ ArrowLeft: (event) => {
322
+ if (cursorAtInputStart()) {
323
+ event.preventDefault();
324
+ setHighlightedIndex(selectedItems.length - 1);
325
+ }
326
+ },
327
+ Backspace: (event) => {
328
+ if (hasActiveItems) {
329
+ removeItems(event, activeIndices);
330
+ } else if (cursorAtInputStart()) {
331
+ setHighlightedIndex(selectedItems.length - 1);
332
+ }
333
+ },
334
+ Delete: (event) => {
335
+ if (hasActiveItems) {
336
+ removeItems(event, activeIndices);
337
+ }
338
+ },
339
+ Enter: (event) => {
340
+ event.preventDefault();
341
+ if (hasActiveItems) {
342
+ removeItems(event, activeIndices);
343
+ } else {
344
+ handleAddItems(event, value);
345
+ }
346
+ }
347
+ };
348
+ const handleCtrlModifierKeyDown = (event) => {
349
+ var _a;
350
+ const win = ownerWindow(event.target);
351
+ const supportClipboard = (_a = win.navigator) == null ? void 0 : _a.clipboard;
352
+ switch (event.key.toUpperCase()) {
353
+ case "A":
354
+ setHighlightedIndex(void 0);
355
+ setActiveIndices(
356
+ Array.from({ length: selectedItems.length }, (_, index) => index)
357
+ );
358
+ break;
359
+ case "C":
360
+ const textToCopy = activeIndices.length > 0 ? activeIndices.map((index) => String(selectedItems[index])).concat(value != null ? String(value).trim() : "").filter(Boolean).join(primaryDelimiter) : highlightedIndex !== void 0 ? String(selectedItems[highlightedIndex] + ",") : "";
361
+ copy(textToCopy).then((result) => {
362
+ preventBlurOnCopy.current = !supportClipboard;
363
+ return result;
364
+ }).catch((error) => {
365
+ console.error(error);
366
+ });
367
+ break;
368
+ case "V":
369
+ break;
370
+ case "ARROWLEFT":
371
+ pillGroupKeyDownHandlers.ArrowLeft(event);
372
+ break;
373
+ case "ARROWRIGHT":
374
+ pillGroupKeyDownHandlers.ArrowRight(event);
375
+ break;
376
+ case "BACKSPACE":
377
+ if (cursorAtInputStart()) {
378
+ handleRemoveItem(event, selectedItems.length - 1);
379
+ }
380
+ break;
381
+ case "CONTROL":
382
+ case "META":
383
+ break;
384
+ default:
385
+ setActiveIndices([]);
386
+ }
387
+ };
388
+ const handleCommonKeyDown = (event) => {
389
+ const eventKey = event.key.toUpperCase();
390
+ if (eventKey === "ESCAPE") {
391
+ event.preventDefault();
392
+ resetInput();
393
+ } else if (eventKey === "TAB" && !disableAddOnBlur) {
394
+ handleAddItems(event, value);
395
+ }
396
+ };
397
+ const handleKeyDown = (event) => {
398
+ onKeyDown == null ? void 0 : onKeyDown(event);
399
+ if (event.defaultPrevented) {
400
+ return;
401
+ }
402
+ if (isCtrlModifier(event)) {
403
+ handleCtrlModifierKeyDown(event);
404
+ } else {
405
+ let handler;
406
+ if (highlightedIndex == null) {
407
+ handler = inputKeyDownHandlers[event.key];
408
+ setActiveIndices([]);
409
+ } else {
410
+ handler = pillGroupKeyDownHandlers[event.key];
411
+ }
412
+ if (handler != null) {
413
+ handler(event);
414
+ } else {
415
+ handleCommonKeyDown(event);
416
+ }
417
+ }
418
+ };
419
+ const state = {
420
+ value,
421
+ selectedItems,
422
+ activeIndices,
423
+ highlightedIndex,
424
+ expanded
425
+ };
426
+ const eventHandlers = {
427
+ onBlur: expanded ? handleBlur : onBlur,
428
+ onClick: handleClick,
429
+ onInputChange: handleInputChange,
430
+ onInputFocus: handleInputFocus,
431
+ onInputBlur: handleInputBlur,
432
+ onKeyDown: handleKeyDown,
433
+ onRemoveItem: handleRemoveItem,
434
+ onClear: handleClear
435
+ };
436
+ return {
437
+ state,
438
+ firstHiddenIndex,
439
+ refs: {
440
+ textAreaRef: useForkRef(textAreaRef, inputRef),
441
+ pillsRef,
442
+ clearButtonRef,
443
+ expandButtonRef,
444
+ statusAdornmentRef,
445
+ containerRef: useForkRef(containerRef, containerObserverRef)
446
+ },
447
+ helpers: {
448
+ setValue,
449
+ setSelectedItems,
450
+ setHighlightedIndex,
451
+ updateExpanded
452
+ },
453
+ inputProps: {
454
+ id,
455
+ disabled,
456
+ validationStatus: validationStatus != null ? validationStatus : validationStatusProp,
457
+ readOnly: readOnly != null ? readOnly : readOnlyProp,
458
+ necessity,
459
+ focused,
460
+ "aria-labelledby": ariaLabelledBy,
461
+ "aria-label": ariaLabel,
462
+ "aria-describedby": ariaDescribedBy != null ? ariaDescribedBy : ariaDescribedByProp,
463
+ ...state,
464
+ ...restProps,
465
+ ...disabled ? {} : eventHandlers
466
+ }
467
+ };
468
+ }
469
+
470
+ export { useTokenizedInputNext };
471
+ //# sourceMappingURL=useTokenizedInputNext.js.map