@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,51 @@
1
+ import { useListControl } from '../list-control/ListControlState.js';
2
+
3
+ function useComboBoxNext(props) {
4
+ const {
5
+ open,
6
+ defaultOpen,
7
+ onOpenChange,
8
+ multiselect,
9
+ defaultSelected,
10
+ selected,
11
+ onSelectionChange,
12
+ defaultValue,
13
+ value
14
+ } = props;
15
+ const listControl = useListControl({
16
+ open,
17
+ defaultOpen,
18
+ onOpenChange,
19
+ multiselect,
20
+ defaultSelected,
21
+ selected,
22
+ onSelectionChange,
23
+ defaultValue,
24
+ value
25
+ });
26
+ const { selectedState, getOptionsMatching, setValueState, setSelectedState } = listControl;
27
+ const select = (event, option) => {
28
+ const { disabled, value: value2 } = option;
29
+ if (disabled) {
30
+ return;
31
+ }
32
+ let newSelected = [value2];
33
+ if (multiselect) {
34
+ if (selectedState.includes(value2)) {
35
+ newSelected = selectedState.filter((item) => item !== value2);
36
+ } else {
37
+ newSelected = selectedState.concat([value2]);
38
+ }
39
+ }
40
+ setSelectedState(newSelected);
41
+ const newValue = getOptionsMatching(
42
+ (option2) => newSelected.includes(option2.value)
43
+ ).map((option2) => option2.text);
44
+ setValueState(multiselect ? "" : newValue[0]);
45
+ onSelectionChange == null ? void 0 : onSelectionChange(event, newSelected);
46
+ };
47
+ return { ...listControl, select };
48
+ }
49
+
50
+ export { useComboBoxNext };
51
+ //# sourceMappingURL=useComboBoxNext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComboBoxNext.js","sources":["../src/combo-box-next/useComboBoxNext.tsx"],"sourcesContent":["import {\n useListControl,\n ListControlProps,\n} from \"../list-control/ListControlState\";\n\nimport { SyntheticEvent } from \"react\";\nimport { OptionValue } from \"../list-control/ListControlContext\";\n\nexport function useComboBoxNext(props: ListControlProps) {\n const {\n open,\n defaultOpen,\n onOpenChange,\n multiselect,\n defaultSelected,\n selected,\n onSelectionChange,\n defaultValue,\n value,\n } = props;\n\n const listControl = useListControl({\n open,\n defaultOpen,\n onOpenChange,\n multiselect,\n defaultSelected,\n selected,\n onSelectionChange,\n defaultValue,\n value,\n });\n\n const { selectedState, getOptionsMatching, setValueState, setSelectedState } =\n listControl;\n\n const select = (event: SyntheticEvent, option: OptionValue) => {\n const { disabled, value } = option;\n\n if (disabled) {\n return;\n }\n\n let newSelected = [value];\n\n if (multiselect) {\n if (selectedState.includes(value)) {\n newSelected = selectedState.filter((item) => item !== value);\n } else {\n newSelected = selectedState.concat([value]);\n }\n }\n\n setSelectedState(newSelected);\n const newValue = getOptionsMatching((option) =>\n newSelected.includes(option.value)\n ).map((option) => option.text);\n setValueState(multiselect ? \"\" : newValue[0]);\n onSelectionChange?.(event, newSelected);\n };\n\n return { ...listControl, select };\n}\n"],"names":["value","option"],"mappings":";;AAQO,SAAS,gBAAgB,KAAyB,EAAA;AACvD,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,cAAc,cAAe,CAAA;AAAA,IACjC,IAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,aAAA,EAAe,kBAAoB,EAAA,aAAA,EAAe,kBACxD,GAAA,WAAA,CAAA;AAEF,EAAM,MAAA,MAAA,GAAS,CAAC,KAAA,EAAuB,MAAwB,KAAA;AAC7D,IAAA,MAAM,EAAE,QAAA,EAAU,KAAAA,EAAAA,MAAAA,EAAU,GAAA,MAAA,CAAA;AAE5B,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAI,IAAA,WAAA,GAAc,CAACA,MAAK,CAAA,CAAA;AAExB,IAAA,IAAI,WAAa,EAAA;AACf,MAAI,IAAA,aAAA,CAAc,QAASA,CAAAA,MAAK,CAAG,EAAA;AACjC,QAAA,WAAA,GAAc,aAAc,CAAA,MAAA,CAAO,CAAC,IAAA,KAAS,SAASA,MAAK,CAAA,CAAA;AAAA,OACtD,MAAA;AACL,QAAA,WAAA,GAAc,aAAc,CAAA,MAAA,CAAO,CAACA,MAAK,CAAC,CAAA,CAAA;AAAA,OAC5C;AAAA,KACF;AAEA,IAAA,gBAAA,CAAiB,WAAW,CAAA,CAAA;AAC5B,IAAA,MAAM,QAAW,GAAA,kBAAA;AAAA,MAAmB,CAACC,OAAAA,KACnC,WAAY,CAAA,QAAA,CAASA,QAAO,KAAK,CAAA;AAAA,KACjC,CAAA,GAAA,CAAI,CAACA,OAAAA,KAAWA,QAAO,IAAI,CAAA,CAAA;AAC7B,IAAc,aAAA,CAAA,WAAA,GAAc,EAAK,GAAA,QAAA,CAAS,CAAE,CAAA,CAAA,CAAA;AAC5C,IAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,KAAO,EAAA,WAAA,CAAA,CAAA;AAAA,GAC7B,CAAA;AAEA,EAAO,OAAA,EAAE,GAAG,WAAA,EAAa,MAAO,EAAA,CAAA;AAClC;;;;"}
@@ -144,7 +144,7 @@ const DropdownBase = forwardRef(
144
144
  top: y != null ? y : 0,
145
145
  left: x != null ? x : 0,
146
146
  position: strategy,
147
- maxHeight: maxPopupHeight != null ? maxPopupHeight : void 0
147
+ maxHeight: maxPopupHeight
148
148
  },
149
149
  ref: handleFloatingRef,
150
150
  children: getPopupComponent()
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownBase.js","sources":["../src/dropdown/DropdownBase.tsx"],"sourcesContent":["import { flip, limitShift, shift, size } from \"@floating-ui/react\";\nimport {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { Children, cloneElement, forwardRef, useRef, useState } from \"react\";\nimport { forwardCallbackProps } from \"../utils\";\nimport { DropdownBaseProps } from \"./dropdownTypes\";\nimport { useDropdownBase } from \"./useDropdownBase\";\nimport { Portal } from \"../portal\";\nimport { isDesktop, useWindow as usePortalWindow } from \"../window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dropdownCss from \"./Dropdown.css\";\n// Any component may be passed as our trigger or popup component.\n// Define the common props that we will act on, if present,\n// so we can type them.\nexport type MaybeChildProps = {\n className?: string;\n id?: string;\n role?: string;\n width: number | string;\n};\n\nconst withBaseName = makePrefixer(\"saltDropdown\");\n\nexport const DropdownBase = forwardRef<HTMLDivElement, DropdownBaseProps>(\n function Dropdown(\n {\n \"aria-labelledby\": ariaLabelledByProp,\n children,\n className: classNameProp,\n container,\n defaultIsOpen,\n disabled,\n disablePortal,\n fullWidth,\n id: idProp,\n isOpen: isOpenProp,\n onKeyDown,\n onOpenChange,\n openOnFocus,\n placement = \"bottom-start\",\n popupWidth,\n width,\n ...htmlAttributes\n },\n forwardedRef\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown\",\n css: dropdownCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const className = clsx(withBaseName(), classNameProp, {\n [withBaseName(\"fullWidth\")]: fullWidth,\n [withBaseName(\"disabled\")]: disabled,\n });\n const [trigger, popupComponent] = Children.toArray(\n children\n ) as JSX.Element[];\n const id = useId(idProp);\n const Window = usePortalWindow();\n\n const { componentProps, popperRef, isOpen, triggerProps } = useDropdownBase(\n {\n ariaLabelledBy: ariaLabelledByProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown,\n openOnFocus,\n popupComponent,\n popupWidth,\n rootRef,\n width,\n }\n );\n const [maxPopupHeight, setMaxPopupHeight] = useState<number | undefined>(\n undefined\n );\n\n const middleware = isDesktop\n ? []\n : [\n flip({\n fallbackPlacements: [\"bottom-start\", \"top-start\"],\n }),\n shift({ limiter: limitShift() }),\n size({\n apply({ availableHeight }) {\n setMaxPopupHeight(availableHeight);\n },\n }),\n ];\n\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement,\n middleware,\n });\n\n const handlePopperListAdapterRef = useForkRef<HTMLDivElement>(\n reference,\n forwardedRef\n );\n const handleRootRef = useForkRef(rootRef, handlePopperListAdapterRef);\n const handleFloatingRef = useForkRef<HTMLDivElement>(floating, popperRef);\n // TODO maybe we should pass style, with maxHeight, to the popupComponent\n\n const getTriggerComponent = () => {\n const {\n id: defaultId,\n role: defaultRole,\n ...restTriggerProps\n } = triggerProps;\n\n const {\n id = defaultId,\n role = defaultRole,\n ...ownProps\n } = trigger.props as MaybeChildProps;\n\n return cloneElement(\n trigger,\n forwardCallbackProps(ownProps, {\n ...restTriggerProps,\n id,\n role,\n })\n );\n };\n\n const getPopupComponent = () => {\n const { id: defaultId, width, ...restComponentProps } = componentProps;\n const {\n className,\n id = defaultId,\n width: ownWidth,\n ...ownProps\n } = popupComponent.props as MaybeChildProps;\n return cloneElement(popupComponent, {\n ...ownProps,\n ...restComponentProps,\n className: clsx(className, withBaseName(\"popup-component\")),\n id,\n width: ownWidth ?? width,\n });\n };\n\n return (\n <div\n {...htmlAttributes}\n className={className}\n data-testid=\"dropdown\"\n id={idProp}\n ref={handleRootRef}\n >\n {getTriggerComponent()}\n {isOpen && (\n <Portal disablePortal={disablePortal} container={container}>\n <Window\n className={clsx(withBaseName(\"popup\"), classNameProp)}\n id={`${id}-popup`}\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n maxHeight: maxPopupHeight ?? undefined,\n }}\n ref={handleFloatingRef}\n >\n {getPopupComponent()}\n </Window>\n </Portal>\n )}\n </div>\n );\n }\n);\n"],"names":["dropdownCss","useId","usePortalWindow","id","width","className"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownBase.js","sources":["../src/dropdown/DropdownBase.tsx"],"sourcesContent":["import { flip, limitShift, shift, size } from \"@floating-ui/react\";\nimport {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { Children, cloneElement, forwardRef, useRef, useState } from \"react\";\nimport { forwardCallbackProps } from \"../utils\";\nimport { DropdownBaseProps } from \"./dropdownTypes\";\nimport { useDropdownBase } from \"./useDropdownBase\";\nimport { Portal } from \"../portal\";\nimport { isDesktop, useWindow as usePortalWindow } from \"../window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dropdownCss from \"./Dropdown.css\";\n// Any component may be passed as our trigger or popup component.\n// Define the common props that we will act on, if present,\n// so we can type them.\nexport type MaybeChildProps = {\n className?: string;\n id?: string;\n role?: string;\n width: number | string;\n};\n\nconst withBaseName = makePrefixer(\"saltDropdown\");\n\nexport const DropdownBase = forwardRef<HTMLDivElement, DropdownBaseProps>(\n function Dropdown(\n {\n \"aria-labelledby\": ariaLabelledByProp,\n children,\n className: classNameProp,\n container,\n defaultIsOpen,\n disabled,\n disablePortal,\n fullWidth,\n id: idProp,\n isOpen: isOpenProp,\n onKeyDown,\n onOpenChange,\n openOnFocus,\n placement = \"bottom-start\",\n popupWidth,\n width,\n ...htmlAttributes\n },\n forwardedRef\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown\",\n css: dropdownCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const className = clsx(withBaseName(), classNameProp, {\n [withBaseName(\"fullWidth\")]: fullWidth,\n [withBaseName(\"disabled\")]: disabled,\n });\n const [trigger, popupComponent] = Children.toArray(\n children\n ) as JSX.Element[];\n const id = useId(idProp);\n const Window = usePortalWindow();\n\n const { componentProps, popperRef, isOpen, triggerProps } = useDropdownBase(\n {\n ariaLabelledBy: ariaLabelledByProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown,\n openOnFocus,\n popupComponent,\n popupWidth,\n rootRef,\n width,\n }\n );\n const [maxPopupHeight, setMaxPopupHeight] = useState<number | undefined>(\n undefined\n );\n\n const middleware = isDesktop\n ? []\n : [\n flip({\n fallbackPlacements: [\"bottom-start\", \"top-start\"],\n }),\n shift({ limiter: limitShift() }),\n size({\n apply({ availableHeight }) {\n setMaxPopupHeight(availableHeight);\n },\n }),\n ];\n\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement,\n middleware,\n });\n\n const handlePopperListAdapterRef = useForkRef<HTMLDivElement>(\n reference,\n forwardedRef\n );\n const handleRootRef = useForkRef(rootRef, handlePopperListAdapterRef);\n const handleFloatingRef = useForkRef<HTMLDivElement>(floating, popperRef);\n // TODO maybe we should pass style, with maxHeight, to the popupComponent\n\n const getTriggerComponent = () => {\n const {\n id: defaultId,\n role: defaultRole,\n ...restTriggerProps\n } = triggerProps;\n\n const {\n id = defaultId,\n role = defaultRole,\n ...ownProps\n } = trigger.props as MaybeChildProps;\n\n return cloneElement(\n trigger,\n forwardCallbackProps(ownProps, {\n ...restTriggerProps,\n id,\n role,\n })\n );\n };\n\n const getPopupComponent = () => {\n const { id: defaultId, width, ...restComponentProps } = componentProps;\n const {\n className,\n id = defaultId,\n width: ownWidth,\n ...ownProps\n } = popupComponent.props as MaybeChildProps;\n return cloneElement(popupComponent, {\n ...ownProps,\n ...restComponentProps,\n className: clsx(className, withBaseName(\"popup-component\")),\n id,\n width: ownWidth ?? width,\n });\n };\n\n return (\n <div\n {...htmlAttributes}\n className={className}\n data-testid=\"dropdown\"\n id={idProp}\n ref={handleRootRef}\n >\n {getTriggerComponent()}\n {isOpen && (\n <Portal disablePortal={disablePortal} container={container}>\n <Window\n className={clsx(withBaseName(\"popup\"), classNameProp)}\n id={`${id}-popup`}\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n maxHeight: maxPopupHeight,\n }}\n ref={handleFloatingRef}\n >\n {getPopupComponent()}\n </Window>\n </Portal>\n )}\n </div>\n );\n }\n);\n"],"names":["dropdownCss","useId","usePortalWindow","id","width","className"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltDropdownNext-button {\n --dropdownNext-borderColor: var(--salt-editable-borderColor);\n --dropdownNext-borderStyle: var(--salt-editable-borderStyle);\n --dropdownNext-borderWidth: var(--salt-size-border);\n\n align-items: center;\n background: var(--saltDropdownNext-background, var(--dropdownNext-background));\n color: var(--saltDropdownNext-color, var(--salt-content-primary-foreground));\n display: flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--saltDropdownNext-fontSize, var(--salt-text-fontSize));\n height: var(--saltDropdownNext-height, var(--salt-size-base));\n line-height: var(--saltDropdownNext-lineHeight, var(--salt-text-lineHeight));\n min-height: var(--saltDropdownNext-minHeight, var(--salt-size-base));\n min-width: var(--saltDropdownNext-minWidth, 160px);\n padding-left: var(--saltDropdownNext-paddingLeft, var(--salt-spacing-100));\n padding-right: var(--saltDropdownNext-paddingRight, var(--salt-spacing-100));\n position: relative;\n border: none;\n border-bottom: var(--dropdownNext-borderWidth) var(--dropdownNext-borderStyle) var(--dropdownNext-borderColor);\n justify-content: space-between;\n}\n\n.saltDropdownNext-button:hover {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-hover);\n\n cursor: var(--salt-selectable-cursor-hover);\n}\n\n.saltDropdownNext-button:focus,\n.saltDropdownNext-button:active {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-active);\n --dropdownNext-borderWidth: var(--salt-editable-borderWidth-active);\n\n outline: var(--saltDropdownNext-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--salt-focused-outlineColor));\n}\n\n.saltDropdownNext-buttonText {\n text-align: left;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-right: var(--salt-spacing-100);\n user-select: text;\n}\n\n.saltDropdownNext-list.saltListNext {\n border-color: var(--salt-selectable-borderColor-selected);\n box-shadow: var(--salt-overlayable-shadow-popout);\n max-height: calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5);\n z-index: calc(var(--salt-zIndex-modal) + 1);\n}\n\n/* Styling applied to dropdown button if `disabled={true}` */\n.saltDropdownNext-disabled,\n.saltDropdownNext-disabled:hover,\n.saltDropdownNext-disabled:active {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-disabled);\n --dropdownNext-borderStyle: var(--salt-editable-borderStyle-disabled);\n --dropdownNext-borderWidth: var(--salt-size-border);\n\n cursor: var(--salt-selectable-cursor-disabled);\n background: var(--dropdownNext-background-disabled);\n color: var(--saltDropdownNext-color-disabled, var(--salt-content-primary-foreground-disabled));\n outline: 0;\n}\n\n/* Style applied to dropdown button if `readOnly={true}` */\n.saltDropdownNext-button.saltDropdownNext-readOnly,\n.saltDropdownNext-button.saltDropdownNext-readOnly:hover,\n.saltDropdownNext-button.saltDropdownNext-readOnly:active {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-readonly);\n --dropdownNext-borderStyle: var(--salt-editable-borderStyle-readonly);\n --dropdownNext-borderWidth: var(--salt-size-border);\n\n cursor: var(--salt-editable-cursor-readonly);\n background: var(--dropdownNext-background-readonly);\n /* no padding-right when there's no dropdown button icon */\n padding-right: 0;\n}\n\n/* Styling applied to dropdown button icon if `disabled={true}` or `readOnly={true}` */\n.saltDropdownNext-icon.saltDropdownNext-disabled,\n.saltDropdownNext-icon.saltDropdownNext-disabled:hover,\n.saltDropdownNext-icon.saltDropdownNext-disabled:active,\n.saltDropdownNext-icon.saltDropdownNext-readOnly,\n.saltDropdownNext-icon.saltDropdownNext-readOnly:hover,\n.saltDropdownNext-icon.saltDropdownNext-readOnly:active {\n color: var(--salt-content-primary-foreground-disabled);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltDropdownNext-primary {\n --dropdownNext-background: var(--salt-editable-primary-background);\n --dropdownNext-background-active: var(--salt-editable-primary-background-active);\n --dropdownNext-background-hover: var(--salt-editable-primary-background-hover);\n --dropdownNext-background-disabled: var(--salt-editable-primary-background-disabled);\n --dropdownNext-background-readonly: var(--salt-editable-primary-background-readonly);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltDropdownNext-secondary {\n --dropdownNext-background: var(--salt-editable-secondary-background);\n --dropdownNext-background-active: var(--salt-editable-secondary-background-active);\n --dropdownNext-background-hover: var(--salt-editable-secondary-background-active);\n --dropdownNext-background-disabled: var(--salt-editable-secondary-background-disabled);\n --dropdownNext-background-readonly: var(--salt-editable-secondary-background-readonly);\n}\n";
1
+ var css_248z = ".saltDropdownNext {\n --dropdownNext-borderColor: var(--salt-editable-borderColor);\n --dropdownNext-color: var(--salt-content-primary-foreground);\n --dropdownNext-cursor: var(--salt-selectable-cursor-hover);\n}\n\n.saltDropdownNext {\n all: unset;\n box-sizing: border-box;\n min-width: 4em;\n width: 100%;\n background: var(--dropdownNext-background);\n cursor: var(--dropdownNext-cursor);\n min-height: var(--salt-size-base);\n border-bottom: var(--salt-size-border) var(--salt-editable-borderStyle) var(--dropdownNext-borderColor);\n display: flex;\n align-items: center;\n padding: 0 var(--salt-spacing-100);\n gap: var(--salt-spacing-100);\n color: var(--dropdownNext-color);\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n}\n\n.saltDropdownNext:hover {\n --dropdownNext-borderColor: var(--salt-editable-borderColor-hover);\n}\n\n.saltDropdownNext:focus-visible {\n outline: var(--salt-focused-outline);\n --dropdownNext-borderColor: var(--salt-editable-borderColor-hover);\n}\n\n.saltDropdownNext-content {\n flex: 1;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n text-wrap: nowrap;\n}\n\n.saltDropdownNext-placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n.saltDropdownNext-primary {\n --dropdownNext-background: var(--salt-editable-primary-background);\n}\n\n.saltDropdownNext-secondary {\n --dropdownNext-background: var(--salt-editable-secondary-background);\n}\n\n.saltDropdownNext:disabled {\n --dropdownNext-background: var(--salt-editable-primary-background-disabled);\n --dropdownNext-borderColor: var(--salt-editable-borderColor-disabled);\n --dropdownNext-color: var(--salt-content-primary-foreground-disabled);\n --dropdownNext-cursor: var(--salt-selectable-cursor-disabled);\n}\n\n.saltDropdownNext[aria-readonly=\"true\"] {\n --dropdownNext-background: var(--salt-editable-primary-background-readonly);\n --dropdownNext-borderColor: var(--salt-editable-borderColor-readonly);\n --dropdownNext-color: var(--salt-content-primary-foreground);\n --dropdownNext-cursor: var(--salt-selectable-cursor-readonly);\n}\n\n.saltDropdownNext-error {\n --dropdownNext-background: var(--salt-status-error-background);\n --dropdownNext-borderColor: var(--salt-status-error-borderColor);\n}\n\n.saltDropdownNext-error .saltDropdownNext:focus-visible {\n outline-color: var(--salt-status-error-borderColor);\n --dropdownNext-borderColor: var(--salt-status-error-borderColor);\n}\n\n.saltDropdownNext-warning {\n --dropdownNext-background: var(--salt-status-warning-background);\n --dropdownNext-borderColor: var(--salt-status-warning-borderColor);\n}\n\n.saltDropdownNext-warning .saltDropdownNext:focus-visible {\n outline-color: var(--salt-status-warning-borderColor);\n --dropdownNext-borderColor: var(--salt-status-warning-borderColor);\n}\n\n.saltDropdownNext-success {\n --dropdownNext-background: var(--salt-status-success-background);\n --dropdownNext-borderColor: var(--salt-status-success-borderColor);\n}\n\n.saltDropdownNext-success .saltDropdownNext:focus-visible {\n outline-color: var(--salt-status-success-borderColor);\n --dropdownNext-borderColor: var(--salt-status-success-borderColor);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=DropdownNext.css.js.map
@@ -1,183 +1,346 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { clsx } from 'clsx';
3
- import { ListNext } from '../list-next/ListNext.js';
4
- import '../list-next/ListItemNext.js';
5
- import { makePrefixer, useId, useForkRef, useFloatingComponent } from '@salt-ds/core';
2
+ import { forwardRef, useRef, useEffect } from 'react';
3
+ import { useListControl } from '../list-control/ListControlState.js';
6
4
  import { ChevronUpIcon, ChevronDownIcon } from '@salt-ds/icons';
7
- import { forwardRef, useRef } from 'react';
5
+ import { makePrefixer, useFormFieldProps, useFloatingComponent, useFloatingUI, useForkRef, useId, StatusAdornment } from '@salt-ds/core';
6
+ import { size, flip } from '@floating-ui/react';
7
+ import { clsx } from 'clsx';
8
8
  import { useWindow } from '@salt-ds/window';
9
- import css_248z from './DropdownNext.css.js';
10
9
  import { useComponentCssInjection } from '@salt-ds/styles';
11
- import { useDropdownNext } from './useDropdownNext.js';
10
+ import css_248z from './DropdownNext.css.js';
11
+ import { ListControlContext } from '../list-control/ListControlContext.js';
12
+ import { OptionList } from '../option/OptionList.js';
12
13
 
13
- const withBaseName = makePrefixer("saltDropdownNext");
14
- const DropdownNext = forwardRef(function DropdownNext2(props, ref) {
15
- const {
16
- className,
17
- disabled,
18
- variant = "primary",
19
- id: dropdownIdProp,
20
- defaultSelected,
21
- readOnly,
22
- source,
23
- placement = "bottom",
24
- open: openControlProp,
25
- selected: selectedControlProp,
26
- highlightedItem: highlightedItemControlProp,
27
- onFocus,
28
- onKeyDown,
29
- onMouseOver,
30
- onMouseDown,
31
- onSelect,
32
- listRef: listRefProp,
33
- ListProps,
34
- ...restProps
35
- } = props;
36
- const targetWindow = useWindow();
37
- useComponentCssInjection({
38
- testId: "salt-dropdown-next",
39
- css: css_248z,
40
- window: targetWindow
41
- });
42
- const listId = useId(ListProps == null ? void 0 : ListProps.id);
43
- const dropdownId = useId(dropdownIdProp);
44
- const listRef = useRef(null);
45
- const setListRef = useForkRef(listRefProp, listRef);
46
- const listProps = {
47
- defaultSelected,
48
- disabled,
49
- ref: listRef,
50
- id: listId,
51
- onSelect,
52
- selected: selectedControlProp,
53
- highlightedItem: highlightedItemControlProp
54
- };
55
- const {
56
- handlers,
57
- activeDescendant,
58
- selectedItem,
59
- highlightedItem,
60
- getListItems,
61
- portalProps,
62
- getReferenceProps,
63
- refs
64
- } = useDropdownNext({
65
- listProps,
66
- placement,
67
- openControlProp
14
+ function ExpandIcon({ open }) {
15
+ return open ? /* @__PURE__ */ jsx(ChevronUpIcon, {
16
+ "aria-hidden": true
17
+ }) : /* @__PURE__ */ jsx(ChevronDownIcon, {
18
+ "aria-hidden": true
68
19
  });
69
- const { Component: FloatingComponent } = useFloatingComponent();
70
- const { open, floating, reference, getDropdownNextProps, getPosition } = portalProps;
71
- const {
72
- focusHandler,
73
- keyDownHandler,
74
- mouseOverHandler,
75
- mouseDownHandler,
76
- listSelectHandler
77
- } = handlers;
78
- const triggerRef = useForkRef(ref, reference);
79
- const portalRef = useForkRef(ref, floating);
80
- const getIcon = () => {
81
- if (readOnly)
82
- return;
83
- const iconClassName = clsx(withBaseName("icon"), {
84
- [withBaseName("disabled")]: disabled
20
+ }
21
+ const withBaseName = makePrefixer("saltDropdownNext");
22
+ const DropdownNext = forwardRef(
23
+ function DropdownNext2(props, ref) {
24
+ var _a, _b;
25
+ const {
26
+ "aria-labelledby": ariaLabelledBy,
27
+ "aria-describedby": ariaDescribedBy,
28
+ children,
29
+ className,
30
+ disabled: disabledProp,
31
+ emptyReadOnlyMarker = "\u2014",
32
+ readOnly: readOnlyProp,
33
+ multiselect,
34
+ onSelectionChange,
35
+ selected,
36
+ defaultSelected,
37
+ defaultOpen,
38
+ defaultValue: defaultValueProp,
39
+ value,
40
+ onOpenChange,
41
+ open,
42
+ placeholder,
43
+ startAdornment,
44
+ required: requiredProp,
45
+ variant = "primary",
46
+ validationStatus: validationStatusProp,
47
+ onClick,
48
+ onKeyDown,
49
+ onFocus,
50
+ onBlur,
51
+ ...rest
52
+ } = props;
53
+ const targetWindow = useWindow();
54
+ useComponentCssInjection({
55
+ testId: "salt-DropdownNext",
56
+ css: css_248z,
57
+ window: targetWindow
58
+ });
59
+ const {
60
+ a11yProps: {
61
+ "aria-describedby": formFieldDescribedBy,
62
+ "aria-labelledby": formFieldLabelledBy
63
+ } = {},
64
+ disabled: formFieldDisabled,
65
+ readOnly: formFieldReadOnly,
66
+ necessity: formFieldRequired,
67
+ validationStatus: formFieldValidationStatus
68
+ } = useFormFieldProps();
69
+ const disabled = Boolean(disabledProp) || formFieldDisabled;
70
+ const readOnly = Boolean(readOnlyProp) || formFieldReadOnly;
71
+ const validationStatus = validationStatusProp != null ? validationStatusProp : formFieldValidationStatus;
72
+ const required = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : requiredProp;
73
+ const isEmptyReadOnly = readOnly && !defaultValueProp && !value;
74
+ const defaultValue = isEmptyReadOnly ? emptyReadOnlyMarker : defaultValueProp;
75
+ const listControl = useListControl({
76
+ open,
77
+ defaultOpen,
78
+ onOpenChange,
79
+ multiselect,
80
+ defaultSelected,
81
+ selected,
82
+ onSelectionChange,
83
+ defaultValue,
84
+ value
85
85
  });
86
- return open ? /* @__PURE__ */ jsx(ChevronUpIcon, {
87
- className: iconClassName
88
- }) : /* @__PURE__ */ jsx(ChevronDownIcon, {
89
- className: iconClassName
86
+ const {
87
+ activeState,
88
+ setActive,
89
+ openState,
90
+ setOpen,
91
+ openKey,
92
+ getOptionAtIndex,
93
+ getIndexOfOption,
94
+ getOptionsMatching,
95
+ getOptionFromSearch,
96
+ options,
97
+ selectedState,
98
+ select,
99
+ valueState,
100
+ setFocusVisibleState,
101
+ focusedState,
102
+ setFocusedState,
103
+ listRef
104
+ } = listControl;
105
+ const { Component: FloatingComponent } = useFloatingComponent();
106
+ const { x, y, strategy, elements, floating, reference } = useFloatingUI({
107
+ open,
108
+ placement: "bottom-start",
109
+ middleware: [
110
+ size({
111
+ apply({ rects, elements: elements2, availableHeight }) {
112
+ Object.assign(elements2.floating.style, {
113
+ minWidth: `${rects.reference.width}px`,
114
+ maxHeight: `max(calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5), calc(${availableHeight}px - var(--salt-spacing-100)))`
115
+ });
116
+ }
117
+ }),
118
+ flip({ fallbackStrategy: "initialPlacement" })
119
+ ]
90
120
  });
91
- };
92
- const handleFocus = (event) => {
93
- if (disabled)
94
- return;
95
- focusHandler(event);
96
- onFocus == null ? void 0 : onFocus(event);
97
- };
98
- const handleKeyDown = (event) => {
99
- if (disabled || readOnly)
100
- return;
101
- keyDownHandler(event);
102
- onKeyDown == null ? void 0 : onKeyDown(event);
103
- };
104
- const handleMouseOver = (event) => {
105
- mouseOverHandler();
106
- onMouseOver == null ? void 0 : onMouseOver(event);
107
- };
108
- const handleMouseDown = (event) => {
109
- if (disabled || readOnly)
110
- return;
111
- mouseDownHandler();
112
- onMouseDown == null ? void 0 : onMouseDown(event);
113
- };
114
- const handleListSelect = () => {
115
- var _a;
116
- listSelectHandler();
117
- (_a = refs.domReference.current) == null ? void 0 : _a.focus();
118
- };
119
- return /* @__PURE__ */ jsxs("div", {
120
- className: clsx(withBaseName()),
121
- children: [
122
- /* @__PURE__ */ jsxs("button", {
123
- id: dropdownId,
124
- disabled,
125
- ...getReferenceProps({
121
+ const buttonRef = useRef(null);
122
+ const handleTriggerRef = useForkRef(
123
+ reference,
124
+ buttonRef
125
+ );
126
+ const handleButtonRef = useForkRef(handleTriggerRef, ref);
127
+ const handleClick = (event) => {
128
+ if (!readOnly) {
129
+ setFocusVisibleState(false);
130
+ setOpen(event, !openState);
131
+ }
132
+ onClick == null ? void 0 : onClick(event);
133
+ };
134
+ const typeaheadString = useRef("");
135
+ const typeaheadTimeout = useRef();
136
+ const handleTypeahead = (event) => {
137
+ if (typeaheadTimeout.current) {
138
+ clearTimeout(typeaheadTimeout.current);
139
+ }
140
+ typeaheadString.current += event.key;
141
+ typeaheadTimeout.current = window.setTimeout(() => {
142
+ typeaheadString.current = "";
143
+ }, 500);
144
+ if (!openState) {
145
+ setOpen(event, true);
146
+ }
147
+ let newOption = getOptionFromSearch(typeaheadString.current, activeState);
148
+ if (!newOption) {
149
+ newOption = getOptionFromSearch(typeaheadString.current);
150
+ }
151
+ if (newOption) {
152
+ setActive(newOption);
153
+ setFocusVisibleState(true);
154
+ }
155
+ };
156
+ const handleKeyDown = (event) => {
157
+ const currentIndex = activeState ? getIndexOfOption(activeState) : -1;
158
+ const count = options.length - 1;
159
+ if (readOnly) {
160
+ return;
161
+ }
162
+ if (!openState) {
163
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
164
+ setOpen(event, true);
165
+ return;
166
+ }
167
+ }
168
+ if (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey) {
169
+ event.preventDefault();
170
+ event.stopPropagation();
171
+ handleTypeahead(event);
172
+ }
173
+ let newActive;
174
+ switch (event.key) {
175
+ case "ArrowDown":
176
+ newActive = getOptionAtIndex(Math.min(count, currentIndex + 1));
177
+ break;
178
+ case "ArrowUp":
179
+ newActive = getOptionAtIndex(Math.max(0, currentIndex - 1));
180
+ break;
181
+ case "Home":
182
+ newActive = getOptionAtIndex(0);
183
+ break;
184
+ case "End":
185
+ newActive = getOptionAtIndex(count);
186
+ break;
187
+ case "PageUp":
188
+ newActive = getOptionAtIndex(Math.max(0, currentIndex - 10));
189
+ break;
190
+ case "PageDown":
191
+ newActive = getOptionAtIndex(Math.min(count, currentIndex + 10));
192
+ break;
193
+ case "Enter":
194
+ case " ":
195
+ if (openState && Boolean(activeState == null ? void 0 : activeState.disabled) || typeaheadString.current.trim().length > 0 && event.key === " ") {
196
+ event.preventDefault();
197
+ return;
198
+ }
199
+ if (!openState || !activeState) {
200
+ return;
201
+ }
202
+ event.preventDefault();
203
+ select(event, activeState);
204
+ if (!multiselect) {
205
+ setOpen(event, false);
206
+ }
207
+ break;
208
+ case "Escape":
209
+ setOpen(event, false);
210
+ break;
211
+ case "Tab":
212
+ if (!multiselect && activeState) {
213
+ select(event, activeState);
214
+ }
215
+ break;
216
+ }
217
+ if (newActive && (newActive == null ? void 0 : newActive.id) != (activeState == null ? void 0 : activeState.id)) {
218
+ event.preventDefault();
219
+ setActive(newActive);
220
+ setFocusVisibleState(true);
221
+ }
222
+ onKeyDown == null ? void 0 : onKeyDown(event);
223
+ };
224
+ const handleFocus = (event) => {
225
+ setFocusedState(true);
226
+ onFocus == null ? void 0 : onFocus(event);
227
+ };
228
+ const ignoreBlur = useRef(false);
229
+ const handleBlur = (event) => {
230
+ if (!ignoreBlur.current) {
231
+ setOpen(event, false);
232
+ }
233
+ ignoreBlur.current = false;
234
+ setFocusedState(false);
235
+ onBlur == null ? void 0 : onBlur(event);
236
+ };
237
+ const handleListMouseOver = () => {
238
+ setFocusVisibleState(false);
239
+ };
240
+ const handleListMouseDown = () => {
241
+ ignoreBlur.current = true;
242
+ };
243
+ const handleListFocus = () => {
244
+ var _a2;
245
+ (_a2 = buttonRef.current) == null ? void 0 : _a2.focus();
246
+ };
247
+ const handleListClick = () => {
248
+ var _a2;
249
+ (_a2 = buttonRef.current) == null ? void 0 : _a2.focus();
250
+ };
251
+ useEffect(() => {
252
+ const activeIndex = activeState ? getIndexOfOption(activeState) : -1;
253
+ if (openState && activeIndex < 0) {
254
+ if (openKey.current.key === "ArrowDown") {
255
+ setActive(getOptionAtIndex(0));
256
+ } else if (openKey.current.key === "ArrowUp") {
257
+ setActive(getOptionAtIndex(options.length - 1));
258
+ } else {
259
+ if (selectedState.length > 0) {
260
+ const selected2 = getOptionsMatching(
261
+ (option) => option.value === selectedState[0]
262
+ ).pop();
263
+ if (selected2) {
264
+ setActive(selected2);
265
+ }
266
+ } else {
267
+ setActive(getOptionAtIndex(0));
268
+ }
269
+ }
270
+ } else if (!openState) {
271
+ setActive(void 0);
272
+ }
273
+ }, [openState, children]);
274
+ const listId = useId();
275
+ return /* @__PURE__ */ jsxs(ListControlContext.Provider, {
276
+ value: listControl,
277
+ children: [
278
+ /* @__PURE__ */ jsxs("button", {
279
+ className: clsx(
280
+ withBaseName(),
281
+ withBaseName(variant),
282
+ {
283
+ [withBaseName("disabled")]: disabled,
284
+ [withBaseName(validationStatus != null ? validationStatus : "")]: validationStatus
285
+ },
286
+ className
287
+ ),
288
+ ref: handleButtonRef,
289
+ onClick: handleClick,
290
+ onKeyDown: handleKeyDown,
126
291
  onFocus: handleFocus,
127
- onMouseOver: handleMouseOver,
128
- onMouseDown: handleMouseDown,
129
- onKeyDown: handleKeyDown
292
+ onBlur: handleBlur,
293
+ role: "combobox",
294
+ type: "button",
295
+ disabled,
296
+ "aria-readonly": readOnly ? "true" : void 0,
297
+ "aria-required": required ? "true" : void 0,
298
+ "aria-expanded": openState,
299
+ "aria-activedescendant": activeState == null ? void 0 : activeState.id,
300
+ "aria-labelledby": clsx(formFieldLabelledBy, ariaLabelledBy) || void 0,
301
+ "aria-describedby": clsx(formFieldDescribedBy, ariaDescribedBy) || void 0,
302
+ "aria-multiselectable": multiselect,
303
+ "aria-controls": openState ? listId : void 0,
304
+ ...rest,
305
+ children: [
306
+ startAdornment,
307
+ /* @__PURE__ */ jsx("span", {
308
+ className: clsx(withBaseName("content"), {
309
+ [withBaseName("placeholder")]: !valueState
310
+ }),
311
+ children: valueState != null ? valueState : placeholder
312
+ }),
313
+ validationStatus && /* @__PURE__ */ jsx(StatusAdornment, {
314
+ status: validationStatus
315
+ }),
316
+ !readOnly && /* @__PURE__ */ jsx(ExpandIcon, {
317
+ open: openState
318
+ })
319
+ ]
130
320
  }),
131
- value: selectedItem,
132
- className: clsx(
133
- withBaseName("button"),
134
- withBaseName(variant),
135
- {
136
- [withBaseName("disabled")]: disabled,
137
- [withBaseName("readOnly")]: readOnly
138
- },
139
- className
140
- ),
141
- role: "combobox",
142
- "aria-haspopup": "listbox",
143
- "aria-expanded": open,
144
- "aria-activedescendant": activeDescendant,
145
- tabIndex: disabled ? -1 : 0,
146
- "aria-owns": listId,
147
- "aria-controls": listId,
148
- "aria-disabled": disabled,
149
- ...restProps,
150
- ref: triggerRef,
151
- children: [
152
- /* @__PURE__ */ jsx("span", {
153
- className: clsx(withBaseName("buttonText")),
154
- children: selectedItem
155
- }),
156
- getIcon()
157
- ]
158
- }),
159
- /* @__PURE__ */ jsx(FloatingComponent, {
160
- open: open && !disabled,
161
- ref: portalRef,
162
- ...getDropdownNextProps(),
163
- ...getPosition(),
164
- children: /* @__PURE__ */ jsx(ListNext, {
165
- "data-test-id": "list-container",
166
- id: listId,
167
- className: clsx(withBaseName("list"), ListProps == null ? void 0 : ListProps.className),
168
- disableFocus: true,
169
- disabled: disabled || (ListProps == null ? void 0 : ListProps.disabled),
170
- selected: selectedItem,
171
- highlightedItem,
172
- ...ListProps,
173
- ref: setListRef,
174
- onSelect: handleListSelect,
175
- children: getListItems(source)
321
+ /* @__PURE__ */ jsx(FloatingComponent, {
322
+ open: (openState || focusedState) && !readOnly,
323
+ left: x != null ? x : 0,
324
+ top: y != null ? y : 0,
325
+ position: strategy,
326
+ width: (_a = elements.floating) == null ? void 0 : _a.offsetWidth,
327
+ height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight,
328
+ ref: floating,
329
+ children: /* @__PURE__ */ jsx(OptionList, {
330
+ id: listId,
331
+ collapsed: !openState,
332
+ onMouseOver: handleListMouseOver,
333
+ onMouseDown: handleListMouseDown,
334
+ onFocus: handleListFocus,
335
+ onClick: handleListClick,
336
+ ref: listRef,
337
+ children
338
+ })
176
339
  })
177
- })
178
- ]
179
- });
180
- });
340
+ ]
341
+ });
342
+ }
343
+ );
181
344
 
182
345
  export { DropdownNext };
183
346
  //# sourceMappingURL=DropdownNext.js.map