@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"useComboBox.js","sources":["../src/combo-box-next/useComboBox.tsx"],"sourcesContent":["import { FocusEvent, KeyboardEvent, SyntheticEvent, useEffect } from \"react\";\nimport { useList, UseListProps } from \"../list-next/useList\";\nimport { useComboboxPortal, UseComboBoxPortalProps } from \"./useComboboxPortal\";\nimport { useControlled } from \"@salt-ds/core\";\n\ninterface UseComboBoxProps {\n inputValue?: string;\n defaultInputValue?: string;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n onMouseOver?: (event: SyntheticEvent) => void;\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n PortalProps?: UseComboBoxPortalProps;\n listProps: UseListProps;\n}\n\nexport const useComboBox = ({\n defaultInputValue,\n onFocus,\n onMouseOver,\n onKeyDown,\n inputValue: inputValueProp,\n PortalProps,\n listProps,\n}: UseComboBoxProps) => {\n const [inputValue, setInputValue] = useControlled({\n controlled: inputValueProp,\n default: defaultInputValue,\n name: \"Combo Box\",\n state: \"inputValue\",\n });\n\n const {\n open,\n setOpen,\n floating,\n reference,\n getPortalProps,\n getTriggerProps,\n getPosition,\n } = useComboboxPortal(PortalProps);\n\n const {\n keyDownHandler: listKeyDownHandler,\n focusHandler: listFocusHandler,\n activeDescendant,\n focusVisibleRef,\n selectedItem,\n setSelectedItem,\n setHighlightedItem,\n highlightedItem,\n } = useList({\n ...listProps,\n });\n\n const setSelected = (value: string | undefined) => {\n setSelectedItem(value);\n setInputValue(value);\n };\n\n useEffect(() => {\n setInputValue(selectedItem);\n }, [selectedItem]);\n\n const focusHandler = (event: FocusEvent<HTMLInputElement>) => {\n listFocusHandler(event);\n onFocus?.(event);\n };\n\n const mouseDownHandler = () => {\n setOpen(!open);\n };\n\n const mouseOverHandler = (event: SyntheticEvent<HTMLElement>) => {\n setHighlightedItem(event.currentTarget.dataset.value);\n onMouseOver?.(event);\n };\n\n const listSelectHandler = () => {\n setOpen(false);\n };\n\n const keyDownHandler = (event: KeyboardEvent<HTMLInputElement>) => {\n const { key, altKey } = event;\n switch (key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n if (altKey) {\n event.preventDefault();\n if (open && !selectedItem) {\n setSelected(undefined);\n }\n setOpen(!open);\n break;\n }\n if (!open) {\n setOpen(true);\n }\n listKeyDownHandler(event);\n break;\n case \"PageDown\":\n case \"PageUp\":\n case \"Home\":\n case \"End\":\n if (open) {\n listKeyDownHandler(event);\n }\n break;\n case \"Enter\":\n if (!open) {\n setOpen(true);\n } else {\n setSelected(highlightedItem);\n setOpen(false);\n }\n break;\n case \"Escape\":\n if (open) {\n setOpen(false);\n if (!selectedItem) {\n setSelected(undefined);\n }\n }\n break;\n case \"Tab\":\n setOpen(false);\n break;\n case \"Backspace\":\n if (!open) {\n setOpen(true);\n }\n break;\n default:\n break;\n }\n onKeyDown?.(event);\n };\n\n return {\n inputValue,\n setInputValue,\n // portal\n portalProps: {\n open,\n setOpen,\n floating,\n reference,\n getTriggerProps,\n getPortalProps,\n getPosition,\n },\n // list\n selectedItem,\n setSelectedItem,\n highlightedItem,\n setHighlightedItem,\n activeDescendant,\n focusVisibleRef,\n keyDownHandler,\n focusHandler,\n mouseOverHandler,\n mouseDownHandler,\n listSelectHandler,\n };\n};\n"],"names":["useControlled","useComboboxPortal","useList","useEffect"],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var react = require('@floating-ui/react');
6
- var core = require('@salt-ds/core');
7
-
8
- function useComboboxPortal(props) {
9
- const {
10
- open: openProp,
11
- onOpenChange: onOpenChangeProp,
12
- placement: placementProp = "bottom"
13
- } = props != null ? props : {};
14
- const [open, setOpen] = core.useControlled({
15
- controlled: openProp,
16
- default: false,
17
- name: "Combo Box",
18
- state: "open"
19
- });
20
- const onOpenChange = (open2) => {
21
- setOpen(open2);
22
- onOpenChangeProp == null ? void 0 : onOpenChangeProp(open2);
23
- };
24
- const { floating, reference, x, y, strategy, context, elements } = core.useFloatingUI({
25
- open,
26
- onOpenChange,
27
- placement: placementProp,
28
- middleware: [
29
- react.offset(0),
30
- react.size({
31
- apply({ rects, elements: elements2 }) {
32
- Object.assign(elements2.floating.style, {
33
- width: `${rects.reference.width}px`
34
- });
35
- }
36
- }),
37
- react.flip(),
38
- react.shift({ limiter: react.limitShift() })
39
- ]
40
- });
41
- const { getReferenceProps, getFloatingProps } = react.useInteractions([
42
- react.useRole(context, { role: "listbox" }),
43
- react.useDismiss(context)
44
- ]);
45
- const getPortalProps = () => {
46
- return getFloatingProps({
47
- ref: floating
48
- });
49
- };
50
- const getTriggerProps = () => getReferenceProps({
51
- ref: reference
52
- });
53
- const getPosition = () => {
54
- var _a, _b;
55
- return {
56
- top: y != null ? y : 0,
57
- left: x != null ? x : 0,
58
- position: strategy,
59
- width: (_a = elements.floating) == null ? void 0 : _a.clientWidth,
60
- height: (_b = elements.floating) == null ? void 0 : _b.clientHeight
61
- };
62
- };
63
- return {
64
- open,
65
- setOpen,
66
- floating,
67
- reference,
68
- getPortalProps,
69
- getTriggerProps,
70
- getPosition
71
- };
72
- }
73
-
74
- exports.useComboboxPortal = useComboboxPortal;
75
- //# sourceMappingURL=useComboboxPortal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useComboboxPortal.js","sources":["../src/combo-box-next/useComboboxPortal.ts"],"sourcesContent":["import {\n flip,\n limitShift,\n offset,\n Placement,\n shift,\n size,\n useDismiss,\n useInteractions,\n useRole,\n} from \"@floating-ui/react\";\nimport { HTMLProps } from \"react\";\nimport { useControlled, useFloatingUI } from \"@salt-ds/core\";\n\nexport interface UseComboBoxPortalProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: Placement;\n}\n\nexport function useComboboxPortal(props?: UseComboBoxPortalProps) {\n const {\n open: openProp,\n onOpenChange: onOpenChangeProp,\n placement: placementProp = \"bottom\",\n } = props ?? {};\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: false,\n name: \"Combo Box\",\n state: \"open\",\n });\n\n const onOpenChange = (open: boolean) => {\n setOpen(open);\n onOpenChangeProp?.(open);\n };\n\n const { floating, reference, x, y, strategy, context, elements } =\n useFloatingUI({\n open,\n onOpenChange: onOpenChange,\n placement: placementProp,\n middleware: [\n offset(0),\n size({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n });\n },\n }),\n flip(),\n shift({ limiter: limitShift() }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useRole(context, { role: \"listbox\" }),\n useDismiss(context),\n ]);\n\n const getPortalProps = (): HTMLProps<HTMLDivElement> => {\n return getFloatingProps({\n ref: floating,\n });\n };\n\n const getTriggerProps = () =>\n getReferenceProps({\n ref: reference,\n });\n\n const getPosition = () => ({\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.clientWidth,\n height: elements.floating?.clientHeight,\n });\n\n return {\n open,\n setOpen,\n floating,\n reference,\n getPortalProps,\n getTriggerProps,\n getPosition,\n };\n}\n"],"names":["useControlled","open","useFloatingUI","offset","size","elements","flip","shift","limitShift","useInteractions","useRole","useDismiss"],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var jsxRuntime = require('react/jsx-runtime');
6
- var React = require('react');
7
- var Highlighter = require('../list/Highlighter.js');
8
- require('../list/ListItem.js');
9
- require('../list/List.js');
10
- require('@salt-ds/core');
11
- require('../common-hooks/collectionProvider.js');
12
- require('../common-hooks/keyUtils.js');
13
- require('../responsive/useResizeObserver.js');
14
- require('../list/VirtualizedList.js');
15
- require('../list-next/ListNext.js');
16
- var ListItemNext = require('../list-next/ListItemNext.js');
17
-
18
- const defaultFilter = (source, filterValue) => source.filter(
19
- (item) => !filterValue ? item : item.toLowerCase().includes(filterValue.toLowerCase())
20
- );
21
- const DefaultListItem = React.forwardRef(function DefaultListItem2({ value, matchPattern, onMouseDown, ...rest }, ref) {
22
- return /* @__PURE__ */ jsxRuntime.jsx(ListItemNext.ListItemNext, {
23
- value,
24
- onMouseDown,
25
- ...rest,
26
- ref,
27
- children: /* @__PURE__ */ jsxRuntime.jsx(Highlighter.Highlighter, {
28
- matchPattern,
29
- text: value
30
- })
31
- });
32
- });
33
-
34
- exports.DefaultListItem = DefaultListItem;
35
- exports.defaultFilter = defaultFilter;
36
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sources":["../src/combo-box-next/utils.tsx"],"sourcesContent":["import { ForwardedRef, forwardRef } from \"react\";\nimport { Highlighter } from \"../list\";\nimport { ListItemNext, ListItemNextProps } from \"../list-next\";\n\nexport const defaultFilter = (source: string[], filterValue?: string) =>\n source.filter((item: string) =>\n !filterValue ? item : item.toLowerCase().includes(filterValue.toLowerCase())\n );\n\nexport interface ComboBoxItemProps<T> extends Omit<ListItemNextProps, \"value\"> {\n value: T;\n matchPattern?: RegExp | string;\n}\n\nexport const DefaultListItem = forwardRef(function DefaultListItem(\n { value, matchPattern, onMouseDown, ...rest }: ComboBoxItemProps<string>,\n ref: ForwardedRef<HTMLLIElement>\n) {\n return (\n <ListItemNext value={value} onMouseDown={onMouseDown} {...rest} ref={ref}>\n <Highlighter matchPattern={matchPattern} text={value} />\n </ListItemNext>\n );\n});\n"],"names":["forwardRef","DefaultListItem","jsx","ListItemNext","Highlighter"],"mappings":";;;;;;;;;;;;;;;;;AAIO,MAAM,aAAgB,GAAA,CAAC,MAAkB,EAAA,WAAA,KAC9C,MAAO,CAAA,MAAA;AAAA,EAAO,CAAC,IACb,KAAA,CAAC,WAAc,GAAA,IAAA,GAAO,IAAK,CAAA,WAAA,EAAc,CAAA,QAAA,CAAS,WAAY,CAAA,WAAA,EAAa,CAAA;AAC7E,EAAA;AAOW,MAAA,eAAA,GAAkBA,gBAAW,CAAA,SAASC,gBACjD,CAAA,EAAE,OAAO,YAAc,EAAA,WAAA,EAAA,GAAgB,IAAK,EAAA,EAC5C,GACA,EAAA;AACA,EAAA,uBACGC,cAAA,CAAAC,yBAAA,EAAA;AAAA,IAAa,KAAA;AAAA,IAAc,WAAA;AAAA,IAA2B,GAAG,IAAA;AAAA,IAAM,GAAA;AAAA,IAC9D,QAAC,kBAAAD,cAAA,CAAAE,uBAAA,EAAA;AAAA,MAAY,YAAA;AAAA,MAA4B,IAAM,EAAA,KAAA;AAAA,KAAO,CAAA;AAAA,GACxD,CAAA,CAAA;AAEJ,CAAC;;;;;"}
@@ -1,188 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var jsxRuntime = require('react/jsx-runtime');
6
- var react = require('@floating-ui/react');
7
- var core = require('@salt-ds/core');
8
- require('../list-next/ListNext.js');
9
- var ListItemNext = require('../list-next/ListItemNext.js');
10
- var useList = require('../list-next/useList.js');
11
-
12
- const useDropdownNext = ({
13
- listProps,
14
- openControlProp,
15
- onOpenChange: onOpenChangeProp,
16
- placement: placementProp
17
- }) => {
18
- const [open, setOpen] = core.useControlled({
19
- controlled: openControlProp,
20
- default: false,
21
- name: "DropdownNext",
22
- state: "open"
23
- });
24
- const {
25
- focusHandler: listFocusHandler,
26
- keyDownHandler: listKeyDownHandler,
27
- mouseOverHandler: listMouseOverHandler,
28
- activeDescendant,
29
- selectedItem,
30
- setSelectedItem,
31
- highlightedItem,
32
- setHighlightedItem,
33
- contextValue: listContextValue
34
- } = useList.useList({
35
- ...listProps
36
- });
37
- const { select, highlight } = listContextValue;
38
- const getListItems = (source) => {
39
- if (!source)
40
- return;
41
- return source.map((item, index) => {
42
- return /* @__PURE__ */ jsxRuntime.jsx(ListItemNext.ListItemNext, {
43
- value: item,
44
- onMouseDown: (event) => {
45
- select(event);
46
- },
47
- onMouseMove: (event) => {
48
- highlight(event);
49
- },
50
- children: item
51
- }, index);
52
- });
53
- };
54
- const onOpenChange = (open2) => {
55
- setOpen(open2);
56
- onOpenChangeProp == null ? void 0 : onOpenChangeProp(open2);
57
- };
58
- const {
59
- floating,
60
- reference,
61
- x,
62
- y,
63
- strategy,
64
- placement,
65
- context,
66
- elements,
67
- refs
68
- } = core.useFloatingUI({
69
- open,
70
- onOpenChange,
71
- placement: placementProp,
72
- middleware: [
73
- react.offset(0),
74
- react.size({
75
- apply({ rects, elements: elements2 }) {
76
- Object.assign(elements2.floating.style, {
77
- width: `${rects.reference.width}px`
78
- });
79
- }
80
- }),
81
- react.flip(),
82
- react.shift({ limiter: react.limitShift() })
83
- ]
84
- });
85
- const { getReferenceProps, getFloatingProps, getItemProps } = react.useInteractions(
86
- [react.useDismiss(context), react.useRole(context, { role: "listbox" })]
87
- );
88
- const getDropdownNextProps = () => {
89
- return getFloatingProps({
90
- "data-placement": placement,
91
- ref: floating
92
- });
93
- };
94
- const getPosition = () => {
95
- var _a, _b;
96
- return {
97
- top: y != null ? y : 0,
98
- left: x != null ? x : 0,
99
- position: strategy,
100
- width: (_a = elements.floating) == null ? void 0 : _a.clientWidth,
101
- height: (_b = elements.floating) == null ? void 0 : _b.clientHeight
102
- };
103
- };
104
- const focusHandler = (event) => {
105
- if (selectedItem) {
106
- listFocusHandler(event);
107
- }
108
- };
109
- const mouseDownHandler = () => {
110
- setOpen(!open);
111
- };
112
- const mouseOverHandler = () => {
113
- listMouseOverHandler();
114
- };
115
- const listSelectHandler = () => {
116
- setOpen(false);
117
- };
118
- const keyDownHandler = (event) => {
119
- const { key } = event;
120
- switch (key) {
121
- case "ArrowUp":
122
- listKeyDownHandler(event);
123
- break;
124
- case "ArrowDown":
125
- setOpen(true);
126
- listKeyDownHandler(event);
127
- break;
128
- case " ":
129
- case "Enter":
130
- if (!open) {
131
- setOpen(true);
132
- break;
133
- }
134
- if (open) {
135
- listKeyDownHandler(event);
136
- setOpen(false);
137
- break;
138
- }
139
- break;
140
- case "Escape":
141
- setOpen(false);
142
- break;
143
- case "Tab":
144
- setOpen(false);
145
- break;
146
- case "PageUp":
147
- case "PageDown":
148
- case "Home":
149
- case "End":
150
- if (open) {
151
- listKeyDownHandler(event);
152
- break;
153
- }
154
- break;
155
- }
156
- };
157
- return {
158
- handlers: {
159
- keyDownHandler,
160
- focusHandler,
161
- mouseOverHandler,
162
- mouseDownHandler,
163
- listSelectHandler
164
- },
165
- refs,
166
- open,
167
- getReferenceProps,
168
- getItemProps,
169
- activeDescendant,
170
- selectedItem,
171
- setSelectedItem,
172
- highlightedItem,
173
- setHighlightedItem,
174
- getListItems,
175
- portalProps: {
176
- open,
177
- setOpen,
178
- floating,
179
- reference,
180
- getFloatingProps,
181
- getDropdownNextProps,
182
- getPosition
183
- }
184
- };
185
- };
186
-
187
- exports.useDropdownNext = useDropdownNext;
188
- //# sourceMappingURL=useDropdownNext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDropdownNext.js","sources":["../src/dropdown-next/useDropdownNext.tsx"],"sourcesContent":["import {\n useInteractions,\n useDismiss,\n useRole,\n flip,\n shift,\n limitShift,\n offset,\n size,\n} from \"@floating-ui/react\";\nimport {\n useControlled,\n useFloatingUI,\n UseFloatingUIProps,\n} from \"@salt-ds/core\";\nimport { ListItemNext } from \"../list-next\";\nimport { HTMLProps, KeyboardEvent, FocusEvent } from \"react\";\nimport { useList, UseListProps } from \"../list-next/useList\";\n\ninterface UseDropdownNextProps\n extends Partial<\n Pick<UseFloatingUIProps, \"onOpenChange\" | \"open\" | \"placement\">\n > {\n listProps: UseListProps;\n // props for controlled dropdown\n openControlProp?: boolean;\n}\n\nexport const useDropdownNext = ({\n listProps,\n openControlProp,\n onOpenChange: onOpenChangeProp,\n placement: placementProp,\n}: UseDropdownNextProps) => {\n const [open, setOpen] = useControlled({\n controlled: openControlProp,\n default: false,\n name: \"DropdownNext\",\n state: \"open\",\n });\n\n // USELIST HOOK\n const {\n focusHandler: listFocusHandler,\n keyDownHandler: listKeyDownHandler,\n mouseOverHandler: listMouseOverHandler,\n activeDescendant,\n selectedItem,\n setSelectedItem,\n highlightedItem,\n setHighlightedItem,\n contextValue: listContextValue,\n } = useList({\n ...listProps,\n });\n\n const { select, highlight } = listContextValue;\n\n // LIST SOURCE\n const getListItems = (source: string[]) => {\n if (!source) return;\n\n return source.map((item, index) => {\n return (\n <ListItemNext\n key={index}\n value={item}\n onMouseDown={(event) => {\n select(event);\n }}\n onMouseMove={(event) => {\n highlight(event);\n }}\n >\n {item}\n </ListItemNext>\n );\n });\n };\n\n // FLOATING PORTAL\n const onOpenChange = (open: boolean) => {\n setOpen(open);\n onOpenChangeProp?.(open);\n };\n\n const {\n floating,\n reference,\n x,\n y,\n strategy,\n placement,\n context,\n elements,\n refs,\n } = useFloatingUI({\n open,\n onOpenChange,\n placement: placementProp,\n middleware: [\n offset(0),\n size({\n apply({ rects, elements }) {\n Object.assign(elements.floating.style, {\n width: `${rects.reference.width}px`,\n });\n },\n }),\n flip(),\n shift({ limiter: limitShift() }),\n ],\n });\n\n const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions(\n [useDismiss(context), useRole(context, { role: \"listbox\" })]\n );\n\n const getDropdownNextProps = (): HTMLProps<HTMLDivElement> => {\n return getFloatingProps({\n // @ts-ignore\n \"data-placement\": placement,\n ref: floating,\n });\n };\n\n const getPosition = () => ({\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.clientWidth,\n height: elements.floating?.clientHeight,\n });\n\n // handles focus on mouse and keyboard\n const focusHandler = (event: FocusEvent<HTMLElement>) => {\n if (selectedItem) {\n listFocusHandler(event as FocusEvent<HTMLUListElement>);\n }\n };\n\n // handles mouse click on dropdown button\n const mouseDownHandler = () => {\n setOpen(!open);\n };\n\n // handles mouse hover on dropdown button\n const mouseOverHandler = () => {\n listMouseOverHandler();\n };\n\n const listSelectHandler = () => {\n setOpen(false);\n };\n\n const keyDownHandler = (event: KeyboardEvent<HTMLElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowUp\":\n listKeyDownHandler(event);\n break;\n case \"ArrowDown\":\n setOpen(true);\n listKeyDownHandler(event);\n break;\n case \" \":\n case \"Enter\":\n if (!open) {\n setOpen(true);\n break;\n }\n if (open) {\n listKeyDownHandler(event);\n setOpen(false);\n break;\n }\n break;\n case \"Escape\":\n setOpen(false);\n break;\n case \"Tab\":\n setOpen(false);\n break;\n case \"PageUp\":\n case \"PageDown\":\n case \"Home\":\n case \"End\":\n if (open) {\n listKeyDownHandler(event);\n break;\n }\n break;\n default:\n break;\n }\n };\n\n return {\n handlers: {\n keyDownHandler,\n focusHandler,\n mouseOverHandler,\n mouseDownHandler,\n listSelectHandler,\n },\n refs,\n open,\n getReferenceProps,\n getItemProps,\n activeDescendant,\n selectedItem,\n setSelectedItem,\n highlightedItem,\n setHighlightedItem,\n getListItems,\n portalProps: {\n open,\n setOpen,\n floating,\n reference,\n getFloatingProps,\n getDropdownNextProps,\n getPosition,\n },\n };\n};\n"],"names":["useControlled","useList","jsx","ListItemNext","open","useFloatingUI","offset","size","elements","flip","shift","limitShift","useInteractions","useDismiss","useRole"],"mappings":"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"}
@@ -1,158 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var jsxRuntime = require('react/jsx-runtime');
6
- var React = require('react');
7
- var core = require('@salt-ds/core');
8
- var findAllTabbableElements = require('./internal/findAllTabbableElements.js');
9
- var useReturnFocus = require('./internal/useReturnFocus.js');
10
-
11
- const defaultSelector = `
12
- [tabindex="0"],
13
- a:not([tabindex="-1"]),
14
- area:not([tabindex="-1"]),
15
- details:not([tabindex="-1"]),
16
- iframe:not([tabindex="-1"]),
17
- select:not([tabindex="-1"]),
18
- textarea:not([tabindex="-1"]),
19
- button:not([tabindex="-1"]),
20
- input:not([tabindex="-1"])
21
- `;
22
- function tryFocus(node) {
23
- if (!node)
24
- return;
25
- const initialTabIndex = node.getAttribute("tabindex");
26
- node.setAttribute("tabindex", "-1");
27
- const removeTabIndex = () => {
28
- if (initialTabIndex === null) {
29
- node.removeAttribute("tabindex");
30
- } else {
31
- node.setAttribute("tabindex", initialTabIndex);
32
- }
33
- node.removeEventListener("blur", removeTabIndex);
34
- };
35
- node.addEventListener("blur", removeTabIndex);
36
- node.focus();
37
- }
38
- function FocusManager(props) {
39
- const {
40
- active,
41
- autoFocusRef,
42
- children,
43
- className,
44
- disableAutoFocus,
45
- disableFocusTrap,
46
- disableReturnFocus,
47
- fallbackFocusRef,
48
- tabEnabledSelectors = defaultSelector,
49
- returnFocusOptions
50
- } = props;
51
- const containerRef = React.useRef(null);
52
- const trapStartRef = React.useRef(null);
53
- const trapEndRef = React.useRef(null);
54
- const staticElementRef = React.useRef(null);
55
- const [hasFocus, setHasFocus] = React.useState(false);
56
- useReturnFocus.useReturnFocus({
57
- focusOptions: returnFocusOptions,
58
- disabled: disableReturnFocus || disableAutoFocus,
59
- active,
60
- document: core.ownerDocument(containerRef.current)
61
- });
62
- const resolveElementAtIndex = React.useCallback(
63
- (tabbableElements, index) => {
64
- if (tabbableElements.length >= 1) {
65
- const element = tabbableElements[index];
66
- if (element == null ? void 0 : element.shadowRoot) {
67
- return element.shadowRoot.querySelector(
68
- tabEnabledSelectors
69
- );
70
- }
71
- return element;
72
- }
73
- },
74
- [tabEnabledSelectors]
75
- );
76
- const getFirstElement = React.useCallback(() => {
77
- const tabbableElements = findAllTabbableElements.findAllTabbableElements(
78
- containerRef.current,
79
- tabEnabledSelectors,
80
- [trapEndRef.current, trapStartRef.current]
81
- );
82
- return resolveElementAtIndex(tabbableElements, 0);
83
- }, [resolveElementAtIndex, tabEnabledSelectors]);
84
- const getLastElement = () => {
85
- const tabbableElements = findAllTabbableElements.findAllTabbableElements(
86
- containerRef.current,
87
- tabEnabledSelectors,
88
- [trapEndRef.current, trapStartRef.current]
89
- );
90
- return resolveElementAtIndex(tabbableElements, tabbableElements.length - 1);
91
- };
92
- const handleTrapStartFocus = (event) => {
93
- const isEnteringFocusTrap = !hasFocus && core.ownerDocument(containerRef.current).activeElement === trapStartRef.current;
94
- const nextElement = isEnteringFocusTrap ? getFirstElement() : getLastElement();
95
- if (nextElement) {
96
- nextElement.focus();
97
- }
98
- event.preventDefault();
99
- };
100
- const handleTrapEndFocus = (event) => {
101
- const nextElement = getFirstElement();
102
- if (nextElement) {
103
- nextElement.focus();
104
- }
105
- event.preventDefault();
106
- };
107
- core.useIsomorphicLayoutEffect(() => {
108
- if (active && !disableAutoFocus) {
109
- let nodeToFocus;
110
- if (autoFocusRef == null ? void 0 : autoFocusRef.current) {
111
- nodeToFocus = autoFocusRef.current;
112
- } else {
113
- nodeToFocus = getFirstElement() || (fallbackFocusRef == null ? void 0 : fallbackFocusRef.current);
114
- }
115
- if (!nodeToFocus) {
116
- console.error(
117
- "Your focus trap needs to contain at least once focused node."
118
- );
119
- } else if (nodeToFocus !== core.ownerDocument(nodeToFocus).activeElement) {
120
- tryFocus(nodeToFocus);
121
- }
122
- }
123
- }, [
124
- active,
125
- disableAutoFocus,
126
- getFirstElement,
127
- autoFocusRef,
128
- fallbackFocusRef
129
- ]);
130
- const enforceFocus = active && !disableFocusTrap;
131
- return /* @__PURE__ */ jsxRuntime.jsxs("div", {
132
- className,
133
- onFocus: () => setHasFocus(true),
134
- ref: containerRef,
135
- children: [
136
- /* @__PURE__ */ jsxRuntime.jsx("div", {
137
- "aria-hidden": "true",
138
- onFocus: handleTrapStartFocus,
139
- ref: trapStartRef,
140
- tabIndex: enforceFocus ? 0 : -1
141
- }),
142
- /* @__PURE__ */ jsxRuntime.jsx("div", {
143
- ref: staticElementRef,
144
- tabIndex: -1
145
- }),
146
- children,
147
- /* @__PURE__ */ jsxRuntime.jsx("div", {
148
- "aria-hidden": "true",
149
- onFocus: handleTrapEndFocus,
150
- ref: trapEndRef,
151
- tabIndex: enforceFocus ? 0 : -1
152
- })
153
- ]
154
- });
155
- }
156
-
157
- exports.FocusManager = FocusManager;
158
- //# sourceMappingURL=FocusManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FocusManager.js","sources":["../src/focus-manager/FocusManager.tsx"],"sourcesContent":["import {\n FocusEvent,\n ReactNode,\n RefObject,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport { ownerDocument, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { findAllTabbableElements } from \"./internal/findAllTabbableElements\";\nimport { useReturnFocus, UseReturnFocusProps } from \"./internal/useReturnFocus\";\n\nconst defaultSelector = `\n[tabindex=\"0\"],\na:not([tabindex=\"-1\"]),\narea:not([tabindex=\"-1\"]),\ndetails:not([tabindex=\"-1\"]),\niframe:not([tabindex=\"-1\"]),\nselect:not([tabindex=\"-1\"]),\ntextarea:not([tabindex=\"-1\"]),\nbutton:not([tabindex=\"-1\"]),\ninput:not([tabindex=\"-1\"])\n`;\n\nexport interface FocusManagerProps {\n active?: boolean;\n autoFocusRef?: RefObject<HTMLElement>;\n children?: ReactNode;\n className?: string;\n disableAutoFocus?: boolean;\n disableFocusTrap?: boolean;\n disableReturnFocus?: boolean;\n fallbackFocusRef?: RefObject<HTMLElement>;\n tabEnabledSelectors?: string;\n returnFocusOptions?: UseReturnFocusProps[\"focusOptions\"];\n}\n\nfunction tryFocus(node?: HTMLElement) {\n if (!node) return;\n\n const initialTabIndex = node.getAttribute(\"tabindex\");\n node.setAttribute(\"tabindex\", \"-1\");\n\n const removeTabIndex = () => {\n if (initialTabIndex === null) {\n node.removeAttribute(\"tabindex\");\n } else {\n node.setAttribute(\"tabindex\", initialTabIndex);\n }\n\n node.removeEventListener(\"blur\", removeTabIndex);\n };\n\n node.addEventListener(\"blur\", removeTabIndex);\n\n node.focus();\n}\n\nexport function FocusManager(props: FocusManagerProps): JSX.Element {\n const {\n active,\n autoFocusRef,\n children,\n className,\n disableAutoFocus,\n disableFocusTrap,\n disableReturnFocus,\n fallbackFocusRef,\n tabEnabledSelectors = defaultSelector,\n returnFocusOptions,\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const trapStartRef = useRef<HTMLDivElement>(null);\n const trapEndRef = useRef<HTMLDivElement>(null);\n const staticElementRef = useRef<HTMLDivElement>(null);\n const [hasFocus, setHasFocus] = useState(false);\n\n useReturnFocus({\n focusOptions: returnFocusOptions,\n disabled: disableReturnFocus || disableAutoFocus,\n active,\n document: ownerDocument(containerRef.current),\n });\n\n /**\n * Given a list of elements and an index, the corresponding element is returned, if exists.\n * Alternatively, for a shadow root, the first tabbable element is returned.\n * @param {Node[]} tabbableElements A list of elements from which to select.\n * @param {number} index The list index.\n */\n const resolveElementAtIndex = useCallback(\n (tabbableElements: HTMLElement[], index: number) => {\n if (tabbableElements.length >= 1) {\n const element = tabbableElements[index];\n\n if (element?.shadowRoot) {\n return element.shadowRoot.querySelector<HTMLElement>(\n tabEnabledSelectors\n );\n }\n\n return element;\n }\n },\n [tabEnabledSelectors]\n );\n\n /**\n * Return the first tabbable element within the content area.\n */\n const getFirstElement = useCallback(() => {\n const tabbableElements = findAllTabbableElements(\n containerRef.current,\n tabEnabledSelectors,\n [trapEndRef.current, trapStartRef.current]\n );\n return resolveElementAtIndex(tabbableElements, 0);\n }, [resolveElementAtIndex, tabEnabledSelectors]);\n\n /**\n * Return the last tabbable element within the content area.\n */\n const getLastElement = () => {\n const tabbableElements = findAllTabbableElements(\n containerRef.current,\n tabEnabledSelectors,\n [trapEndRef.current, trapStartRef.current]\n );\n return resolveElementAtIndex(tabbableElements, tabbableElements.length - 1);\n };\n\n /**\n * When the trap-start sentinel node gains focus, pass focus to either\n * the first or last tabbable element, depending on the direction of travel\n * (i.e. Tab or Shift+Tab)\n * @param {React.FocusEvent} event The synthetic focus event.\n */\n const handleTrapStartFocus = (event: FocusEvent<HTMLDivElement>) => {\n const isEnteringFocusTrap =\n !hasFocus &&\n ownerDocument(containerRef.current).activeElement ===\n trapStartRef.current;\n\n const nextElement = isEnteringFocusTrap\n ? getFirstElement()\n : getLastElement();\n\n if (nextElement) {\n nextElement.focus();\n }\n\n event.preventDefault();\n };\n\n /**\n * When the trap-end sentinel node gains focus, pass focus to either\n * the first tabbable element.\n * @param {React.FocusEvent} event The synthetic focus event.\n */\n const handleTrapEndFocus = (event: FocusEvent<HTMLDivElement>) => {\n const nextElement = getFirstElement();\n\n if (nextElement) {\n nextElement.focus();\n }\n\n event.preventDefault();\n };\n\n useIsomorphicLayoutEffect(() => {\n if (active && !disableAutoFocus) {\n let nodeToFocus;\n\n if (autoFocusRef?.current) {\n nodeToFocus = autoFocusRef.current;\n } else {\n nodeToFocus = getFirstElement() || fallbackFocusRef?.current;\n }\n\n if (!nodeToFocus) {\n // This will always be the case when we're applying the shim in a desktop window. Need to consider how to fix.\n console.error(\n \"Your focus trap needs to contain at least once focused node.\"\n );\n } else if (nodeToFocus !== ownerDocument(nodeToFocus).activeElement) {\n tryFocus(nodeToFocus);\n }\n }\n }, [\n active,\n disableAutoFocus,\n getFirstElement,\n autoFocusRef,\n fallbackFocusRef,\n ]);\n\n const enforceFocus = active && !disableFocusTrap;\n\n return (\n <div\n className={className}\n onFocus={() => setHasFocus(true)}\n ref={containerRef}\n >\n <div\n aria-hidden=\"true\"\n onFocus={handleTrapStartFocus}\n ref={trapStartRef}\n tabIndex={enforceFocus ? 0 : -1}\n />\n <div ref={staticElementRef} tabIndex={-1} />\n {children}\n <div\n aria-hidden=\"true\"\n onFocus={handleTrapEndFocus}\n ref={trapEndRef}\n tabIndex={enforceFocus ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":["useRef","useState","useReturnFocus","ownerDocument","useCallback","findAllTabbableElements","useIsomorphicLayoutEffect","jsxs","jsx"],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var core = require('@salt-ds/core');
6
-
7
- const anyKeyboardFocusedElementSelector = '*:not(style):not(script):not(noscript):not(link):not([tabindex="-1"])';
8
- function findAllTabbableElements(rootNode, selector, elementsToIgnore = []) {
9
- if (!rootNode) {
10
- return [];
11
- }
12
- const nodes = Array.from(
13
- rootNode.querySelectorAll(anyKeyboardFocusedElementSelector)
14
- ).slice();
15
- return nodes.reduce((foundNodes, node) => {
16
- var _a;
17
- if (elementsToIgnore.indexOf(node) !== -1) {
18
- return foundNodes;
19
- }
20
- const win = core.ownerWindow(node);
21
- if ((node.getBoundingClientRect().width === 0 || win.getComputedStyle(node).visibility !== "visible") && node instanceof HTMLSlotElement && typeof node.assignedElements !== "function") {
22
- return foundNodes;
23
- }
24
- if (node instanceof HTMLSlotElement && typeof node.assignedElements === "function") {
25
- return foundNodes.concat(
26
- node.assignedElements().filter((n) => !n.shadowRoot)
27
- );
28
- }
29
- if (!node.shadowRoot && node.matches(selector)) {
30
- const rootNode2 = (_a = node.parentNode) == null ? void 0 : _a.getRootNode();
31
- return foundNodes.concat(
32
- rootNode2 instanceof ShadowRoot ? rootNode2.host : node
33
- );
34
- }
35
- if (node.shadowRoot) {
36
- return foundNodes.concat(
37
- findAllTabbableElements(node.shadowRoot, selector, elementsToIgnore)
38
- );
39
- }
40
- return foundNodes;
41
- }, []);
42
- }
43
-
44
- exports.findAllTabbableElements = findAllTabbableElements;
45
- //# sourceMappingURL=findAllTabbableElements.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"findAllTabbableElements.js","sources":["../src/focus-manager/internal/findAllTabbableElements.ts"],"sourcesContent":["import { ownerWindow } from \"@salt-ds/core\";\n\n/**\n * Used to reduce the number of initial nodes that are checked to see if tabbable.\n *\n * Not possible to immediately check if a node is tabbable because the node may be a custom element\n * and therefore could potentially have a tabbable node within its shadow root.\n */\nconst anyKeyboardFocusedElementSelector =\n '*:not(style):not(script):not(noscript):not(link):not([tabindex=\"-1\"])';\n\ntype HTMLElementOrNull = HTMLElement | null;\n\n/**\n * Finds all the elements in the given root node that can be focused by a 'tab' keypress.\n * In addition, the trap-start and trap-end sentinel nodes are excluded, and all contained shadow roots are walked recursively\n * @param {Node} rootNode The containing node from which traversal begins.\n * @param {string} selector The CSS selector used to query for matching, tabbable elements.\n * @param {Node[]} elementsToIgnore Elements to ignore\n */\nexport function findAllTabbableElements(\n rootNode: HTMLElementOrNull | ShadowRoot,\n selector: string,\n elementsToIgnore: HTMLElementOrNull[] = []\n): HTMLElement[] {\n if (!rootNode) {\n return [];\n }\n\n const nodes = Array.from<HTMLElement | HTMLSlotElement>(\n rootNode.querySelectorAll(anyKeyboardFocusedElementSelector)\n ).slice();\n\n return nodes.reduce((foundNodes, node) => {\n if (elementsToIgnore.indexOf(node) !== -1) {\n return foundNodes;\n }\n\n const win = ownerWindow(node);\n // Skip hidden nodes. assignedElements needs to be checked here to make sure we don't ignore slots\n if (\n (node.getBoundingClientRect().width === 0 ||\n win.getComputedStyle(node).visibility !== \"visible\") &&\n node instanceof HTMLSlotElement &&\n typeof node.assignedElements !== \"function\"\n ) {\n return foundNodes;\n }\n\n // If node is a slot return assigned elements.\n if (\n node instanceof HTMLSlotElement &&\n typeof node.assignedElements === \"function\"\n ) {\n return foundNodes.concat(\n node.assignedElements().filter((n) => !n.shadowRoot) as HTMLElement[]\n );\n }\n\n if (!node.shadowRoot && node.matches(selector)) {\n // If this element is inside a shadowRoot then the host not the element itself is needed.\n const rootNode = node.parentNode?.getRootNode();\n return foundNodes.concat(\n rootNode instanceof ShadowRoot ? (rootNode.host as HTMLElement) : node\n );\n }\n if (node.shadowRoot) {\n return foundNodes.concat(\n findAllTabbableElements(node.shadowRoot, selector, elementsToIgnore)\n );\n }\n\n return foundNodes;\n }, [] as HTMLElement[]);\n}\n"],"names":["ownerWindow","rootNode"],"mappings":";;;;;;AAQA,MAAM,iCACJ,GAAA,uEAAA,CAAA;AAWK,SAAS,uBACd,CAAA,QAAA,EACA,QACA,EAAA,gBAAA,GAAwC,EACzB,EAAA;AACf,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAEA,EAAA,MAAM,QAAQ,KAAM,CAAA,IAAA;AAAA,IAClB,QAAA,CAAS,iBAAiB,iCAAiC,CAAA;AAAA,IAC3D,KAAM,EAAA,CAAA;AAER,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAC,UAAA,EAAY,IAAS,KAAA;AAjC5C,IAAA,IAAA,EAAA,CAAA;AAkCI,IAAA,IAAI,gBAAiB,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CAAI,CAAA,EAAA;AACzC,MAAO,OAAA,UAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,GAAA,GAAMA,iBAAY,IAAI,CAAA,CAAA;AAE5B,IAAA,IAAA,CACG,KAAK,qBAAsB,EAAA,CAAE,KAAU,KAAA,CAAA,IACtC,IAAI,gBAAiB,CAAA,IAAI,CAAE,CAAA,UAAA,KAAe,cAC5C,IAAgB,YAAA,eAAA,IAChB,OAAO,IAAA,CAAK,qBAAqB,UACjC,EAAA;AACA,MAAO,OAAA,UAAA,CAAA;AAAA,KACT;AAGA,IAAA,IACE,IAAgB,YAAA,eAAA,IAChB,OAAO,IAAA,CAAK,qBAAqB,UACjC,EAAA;AACA,MAAA,OAAO,UAAW,CAAA,MAAA;AAAA,QAChB,IAAA,CAAK,kBAAmB,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAC,EAAE,UAAU,CAAA;AAAA,OACrD,CAAA;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,IAAK,CAAA,UAAA,IAAc,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAG,EAAA;AAE9C,MAAMC,MAAAA,SAAAA,GAAAA,CAAW,EAAK,GAAA,IAAA,CAAA,UAAA,KAAL,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAA,EAAA,CAAA;AAClC,MAAA,OAAO,UAAW,CAAA,MAAA;AAAA,QAChBA,SAAAA,YAAoB,UAAcA,GAAAA,SAAAA,CAAS,IAAuB,GAAA,IAAA;AAAA,OACpE,CAAA;AAAA,KACF;AACA,IAAA,IAAI,KAAK,UAAY,EAAA;AACnB,MAAA,OAAO,UAAW,CAAA,MAAA;AAAA,QAChB,uBAAwB,CAAA,IAAA,CAAK,UAAY,EAAA,QAAA,EAAU,gBAAgB,CAAA;AAAA,OACrE,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,UAAA,CAAA;AAAA,GACT,EAAG,EAAmB,CAAA,CAAA;AACxB;;;;"}
@@ -1,59 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var React = require('react');
6
- var core = require('@salt-ds/core');
7
-
8
- function getActiveElement(doc) {
9
- if (!doc) {
10
- return null;
11
- }
12
- const activeElement = doc.activeElement;
13
- if (activeElement == null ? void 0 : activeElement.shadowRoot) {
14
- return getActiveElement(activeElement.shadowRoot);
15
- }
16
- return activeElement;
17
- }
18
- function useReturnFocus({
19
- focusOptions: focusOptionsProp,
20
- disabled,
21
- active,
22
- document
23
- }) {
24
- const previousFocusedElement = React.useRef();
25
- core.useIsomorphicLayoutEffect(() => {
26
- if (active) {
27
- previousFocusedElement.current = getActiveElement(document);
28
- }
29
- }, [document, active]);
30
- const focusOptionsRef = React.useRef(focusOptionsProp);
31
- React.useEffect(() => {
32
- focusOptionsRef.current = focusOptionsProp;
33
- }, [focusOptionsProp]);
34
- core.useIsomorphicLayoutEffect(() => {
35
- const returnFocus = () => {
36
- const focusOptions = typeof focusOptionsRef.current === "object" ? focusOptionsRef.current : void 0;
37
- setTimeout(() => {
38
- var _a;
39
- if (previousFocusedElement.current) {
40
- (_a = previousFocusedElement.current) == null ? void 0 : _a.focus(focusOptions);
41
- }
42
- }, 0);
43
- };
44
- if (!disabled) {
45
- if (!active) {
46
- returnFocus();
47
- }
48
- return () => {
49
- if (active) {
50
- returnFocus();
51
- }
52
- };
53
- }
54
- return void 0;
55
- }, [disabled, active]);
56
- }
57
-
58
- exports.useReturnFocus = useReturnFocus;
59
- //# sourceMappingURL=useReturnFocus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useReturnFocus.js","sources":["../src/focus-manager/internal/useReturnFocus.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\n\nfunction getActiveElement(doc: DocumentOrShadowRoot): HTMLElement | null {\n if (!doc) {\n return null;\n }\n\n const activeElement = doc.activeElement;\n\n if (activeElement?.shadowRoot) {\n return getActiveElement(activeElement.shadowRoot);\n }\n\n return activeElement as HTMLElement;\n}\n\nexport interface UseReturnFocusProps {\n active?: boolean;\n disabled?: boolean;\n document: DocumentOrShadowRoot;\n focusOptions?: FocusOptions;\n}\n\nexport function useReturnFocus({\n focusOptions: focusOptionsProp,\n disabled,\n active,\n document,\n}: UseReturnFocusProps): void {\n const previousFocusedElement = useRef<HTMLElement | null>();\n\n useIsomorphicLayoutEffect(() => {\n if (active) {\n previousFocusedElement.current = getActiveElement(document);\n }\n }, [document, active]);\n\n const focusOptionsRef = useRef(focusOptionsProp);\n\n useEffect(() => {\n focusOptionsRef.current = focusOptionsProp;\n }, [focusOptionsProp]);\n\n useIsomorphicLayoutEffect(() => {\n const returnFocus = () => {\n const focusOptions =\n typeof focusOptionsRef.current === \"object\"\n ? focusOptionsRef.current\n : undefined;\n\n setTimeout(() => {\n if (previousFocusedElement.current) {\n previousFocusedElement.current?.focus(focusOptions);\n }\n }, 0);\n };\n\n if (!disabled) {\n if (!active) {\n returnFocus();\n }\n\n return () => {\n if (active) {\n returnFocus();\n }\n };\n }\n\n return undefined;\n }, [disabled, active]);\n}\n"],"names":["useRef","useIsomorphicLayoutEffect","useEffect"],"mappings":";;;;;;;AAGA,SAAS,iBAAiB,GAA+C,EAAA;AACvE,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,gBAAgB,GAAI,CAAA,aAAA,CAAA;AAE1B,EAAA,IAAI,+CAAe,UAAY,EAAA;AAC7B,IAAO,OAAA,gBAAA,CAAiB,cAAc,UAAU,CAAA,CAAA;AAAA,GAClD;AAEA,EAAO,OAAA,aAAA,CAAA;AACT,CAAA;AASO,SAAS,cAAe,CAAA;AAAA,EAC7B,YAAc,EAAA,gBAAA;AAAA,EACd,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AACF,CAA8B,EAAA;AAC5B,EAAA,MAAM,yBAAyBA,YAA2B,EAAA,CAAA;AAE1D,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,MAAQ,EAAA;AACV,MAAuB,sBAAA,CAAA,OAAA,GAAU,iBAAiB,QAAQ,CAAA,CAAA;AAAA,KAC5D;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,MAAM,CAAC,CAAA,CAAA;AAErB,EAAM,MAAA,eAAA,GAAkBD,aAAO,gBAAgB,CAAA,CAAA;AAE/C,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,eAAA,CAAgB,OAAU,GAAA,gBAAA,CAAA;AAAA,GAC5B,EAAG,CAAC,gBAAgB,CAAC,CAAA,CAAA;AAErB,EAAAD,8BAAA,CAA0B,MAAM;AAC9B,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAM,eACJ,OAAO,eAAA,CAAgB,OAAY,KAAA,QAAA,GAC/B,gBAAgB,OAChB,GAAA,KAAA,CAAA,CAAA;AAEN,MAAA,UAAA,CAAW,MAAM;AAnDvB,QAAA,IAAA,EAAA,CAAA;AAoDQ,QAAA,IAAI,uBAAuB,OAAS,EAAA;AAClC,UAAuB,CAAA,EAAA,GAAA,sBAAA,CAAA,OAAA,KAAvB,mBAAgC,KAAM,CAAA,YAAA,CAAA,CAAA;AAAA,SACxC;AAAA,SACC,CAAC,CAAA,CAAA;AAAA,KACN,CAAA;AAEA,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAY,WAAA,EAAA,CAAA;AAAA,OACd;AAEA,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,MAAQ,EAAA;AACV,UAAY,WAAA,EAAA,CAAA;AAAA,SACd;AAAA,OACF,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,MAAM,CAAC,CAAA,CAAA;AACvB;;;;"}