@servicetitan/design-system 13.4.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/dist/components/ActionMenu/ActionMenu.css +29 -21
  2. package/dist/components/ActionMenu/ActionMenu.css.map +1 -1
  3. package/dist/components/ActionMenu/ActionMenu.d.ts +8 -2
  4. package/dist/components/ActionMenu/ActionMenu.js +46 -3
  5. package/dist/components/ActionMenu/ActionMenu.js.map +1 -1
  6. package/dist/components/ActionMenu/ActionMenu.stories.d.ts +39 -0
  7. package/dist/components/ActionMenu/ActionMenu.stories.js +249 -0
  8. package/dist/components/ActionMenu/ActionMenu.stories.js.map +1 -0
  9. package/dist/components/ActionMenu/ActionMenu.test.js.map +1 -1
  10. package/dist/components/ActionMenu/ActionMenuGroup.js.map +1 -1
  11. package/dist/components/ActionMenu/ActionMenuItem.js +2 -5
  12. package/dist/components/ActionMenu/ActionMenuItem.js.map +1 -1
  13. package/dist/components/ActionMenu/index.css +29 -21
  14. package/dist/components/ActionMenu/index.css.map +1 -1
  15. package/dist/components/ActionMenu/index.js.map +1 -1
  16. package/dist/components/ActionMenu/useLatestEvent.d.ts +2 -0
  17. package/dist/components/ActionMenu/useLatestEvent.js +20 -0
  18. package/dist/components/ActionMenu/useLatestEvent.js.map +1 -0
  19. package/dist/components/Announcement/Announcement.js.map +1 -1
  20. package/dist/components/Announcement/Announcement.test.js.map +1 -1
  21. package/dist/components/Announcement/index.js.map +1 -1
  22. package/dist/components/AnvilSelect/AnvilSelect.d.ts +2 -1
  23. package/dist/components/AnvilSelect/AnvilSelect.js +17 -41
  24. package/dist/components/AnvilSelect/AnvilSelect.js.map +1 -1
  25. package/dist/components/AnvilSelect/AnvilSelect.test.js.map +1 -1
  26. package/dist/components/AnvilSelect/components/DrillIn.js.map +1 -1
  27. package/dist/components/AnvilSelect/components/FocusProvider.d.ts +2 -1
  28. package/dist/components/AnvilSelect/components/FocusProvider.js.map +1 -1
  29. package/dist/components/AnvilSelect/components/SelectFooter.js +6 -6
  30. package/dist/components/AnvilSelect/components/SelectFooter.js.map +1 -1
  31. package/dist/components/AnvilSelect/components/SelectHeader.js.map +1 -1
  32. package/dist/components/AnvilSelect/components/SelectOptions.js.map +1 -1
  33. package/dist/components/AnvilSelect/components/Tree.js.map +1 -1
  34. package/dist/components/AnvilSelect/components/Trigger.js +2 -0
  35. package/dist/components/AnvilSelect/components/Trigger.js.map +1 -1
  36. package/dist/components/AnvilSelect/components/index.js.map +1 -1
  37. package/dist/components/AnvilSelect/index.js.map +1 -1
  38. package/dist/components/AnvilSelect/utils/FocusActionType.js.map +1 -1
  39. package/dist/components/AnvilSelect/utils/FocusContext.js.map +1 -1
  40. package/dist/components/AnvilSelect/utils/FooterAction.js.map +1 -1
  41. package/dist/components/AnvilSelect/utils/focus-utils.d.ts +0 -3
  42. package/dist/components/AnvilSelect/utils/focus-utils.js +1 -19
  43. package/dist/components/AnvilSelect/utils/focus-utils.js.map +1 -1
  44. package/dist/components/AnvilSelect/utils/index.js.map +1 -1
  45. package/dist/components/Avatar/Avatar.js.map +1 -1
  46. package/dist/components/Avatar/Avatar.test.js.map +1 -1
  47. package/dist/components/Avatar/index.js.map +1 -1
  48. package/dist/components/BackLink/BackLink.js.map +1 -1
  49. package/dist/components/BackLink/BackLink.test.js.map +1 -1
  50. package/dist/components/BackLink/index.js.map +1 -1
  51. package/dist/components/Backdrop/Backdrop.js.map +1 -1
  52. package/dist/components/Backdrop/Backdrop.test.js.map +1 -1
  53. package/dist/components/Backdrop/index.js.map +1 -1
  54. package/dist/components/Banner/Banner.js.map +1 -1
  55. package/dist/components/Banner/Banner.test.js.map +1 -1
  56. package/dist/components/Banner/index.js.map +1 -1
  57. package/dist/components/BodyText/BodyText.js +2 -2
  58. package/dist/components/BodyText/BodyText.js.map +1 -1
  59. package/dist/components/BodyText/BodyText.test.js.map +1 -1
  60. package/dist/components/BodyText/index.js.map +1 -1
  61. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  62. package/dist/components/Breadcrumb/BreadcrumbLink.js.map +1 -1
  63. package/dist/components/Breadcrumb/BreadcrumbLink.test.js.map +1 -1
  64. package/dist/components/Breadcrumb/index.js.map +1 -1
  65. package/dist/components/BreakPoint/BreakPoint.d.ts +2 -1
  66. package/dist/components/BreakPoint/BreakPoint.js.map +1 -1
  67. package/dist/components/BreakPoint/BreakPoint.test.js.map +1 -1
  68. package/dist/components/BreakPoint/index.js.map +1 -1
  69. package/dist/components/Button/Button.js +2 -10
  70. package/dist/components/Button/Button.js.map +1 -1
  71. package/dist/components/Button/Button.test.js.map +1 -1
  72. package/dist/components/Button/index.js.map +1 -1
  73. package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -1
  74. package/dist/components/ButtonGroup/ButtonGroup.test.js.map +1 -1
  75. package/dist/components/ButtonGroup/ButtonGroupItem.js.map +1 -1
  76. package/dist/components/ButtonGroup/index.js.map +1 -1
  77. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  78. package/dist/components/ButtonToggle/ButtonToggle.js +11 -1
  79. package/dist/components/ButtonToggle/ButtonToggle.js.map +1 -1
  80. package/dist/components/ButtonToggle/ButtonToggle.test.js.map +1 -1
  81. package/dist/components/ButtonToggle/ButtonToggleItem.js +1 -1
  82. package/dist/components/ButtonToggle/ButtonToggleItem.js.map +1 -1
  83. package/dist/components/ButtonToggle/index.js.map +1 -1
  84. package/dist/components/Card/Card.js.map +1 -1
  85. package/dist/components/Card/Card.test.js.map +1 -1
  86. package/dist/components/Card/CardSection.js.map +1 -1
  87. package/dist/components/Card/index.js.map +1 -1
  88. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  89. package/dist/components/Checkbox/Checkbox.test.js.map +1 -1
  90. package/dist/components/Checkbox/index.js.map +1 -1
  91. package/dist/components/Collapsible/Collapsible.js +1 -1
  92. package/dist/components/Collapsible/Collapsible.js.map +1 -1
  93. package/dist/components/Collapsible/Collapsible.test.js.map +1 -1
  94. package/dist/components/Collapsible/index.js.map +1 -1
  95. package/dist/components/ColorPicker/ColorPicker.css +6 -4
  96. package/dist/components/ColorPicker/ColorPicker.css.map +1 -1
  97. package/dist/components/ColorPicker/ColorPicker.d.ts +1 -7
  98. package/dist/components/ColorPicker/ColorPicker.js +14 -27
  99. package/dist/components/ColorPicker/ColorPicker.js.map +1 -1
  100. package/dist/components/ColorPicker/ColorPicker.test.js.map +1 -1
  101. package/dist/components/ColorPicker/index.css +6 -4
  102. package/dist/components/ColorPicker/index.css.map +1 -1
  103. package/dist/components/ColorPicker/index.js.map +1 -1
  104. package/dist/components/Container/Container.js.map +1 -1
  105. package/dist/components/Container/index.js.map +1 -1
  106. package/dist/components/DataList/DataList.js +3 -3
  107. package/dist/components/DataList/DataList.js.map +1 -1
  108. package/dist/components/DataList/DataList.test.js.map +1 -1
  109. package/dist/components/DataList/DataListCell.d.ts +6 -4
  110. package/dist/components/DataList/DataListCell.js +2 -3
  111. package/dist/components/DataList/DataListCell.js.map +1 -1
  112. package/dist/components/DataList/DataListHeaderCell.d.ts +4 -2
  113. package/dist/components/DataList/DataListHeaderCell.js +2 -3
  114. package/dist/components/DataList/DataListHeaderCell.js.map +1 -1
  115. package/dist/components/DataList/DataListHeaderRow.js.map +1 -1
  116. package/dist/components/DataList/DataListRow.js.map +1 -1
  117. package/dist/components/DataList/index.js.map +1 -1
  118. package/dist/components/DatePicker/DatePicker.d.ts +1 -1
  119. package/dist/components/DatePicker/DatePicker.js +9 -6
  120. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  121. package/dist/components/DatePicker/DatePicker.test.js.map +1 -1
  122. package/dist/components/DatePicker/InputDateMask.js +2 -2
  123. package/dist/components/DatePicker/InputDateMask.js.map +1 -1
  124. package/dist/components/DatePicker/index.js.map +1 -1
  125. package/dist/components/DatePicker/utils/expandMaskUtils.js.map +1 -1
  126. package/dist/components/DatePicker/utils/expandMaskUtils.test.js.map +1 -1
  127. package/dist/components/DatePicker/utils/maskUtils.js.map +1 -1
  128. package/dist/components/DatePicker/utils/utils.js.map +1 -1
  129. package/dist/components/DateRangePicker/DateRangePicker.js +7 -2
  130. package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
  131. package/dist/components/DateRangePicker/DateRangePicker.test.js.map +1 -1
  132. package/dist/components/DateRangePicker/components/DateRangeInput.js +1 -1
  133. package/dist/components/DateRangePicker/components/DateRangeInput.js.map +1 -1
  134. package/dist/components/DateRangePicker/components/DateRangeOptionList.js.map +1 -1
  135. package/dist/components/DateRangePicker/components/DateRangeTrigger.js.map +1 -1
  136. package/dist/components/DateRangePicker/components/index.js.map +1 -1
  137. package/dist/components/DateRangePicker/index.js.map +1 -1
  138. package/dist/components/DateRangePicker/utils/checkScope.js.map +1 -1
  139. package/dist/components/DateRangePicker/utils/index.js.map +1 -1
  140. package/dist/components/Dialog/Dialog.d.ts +1 -0
  141. package/dist/components/Dialog/Dialog.js.map +1 -1
  142. package/dist/components/Dialog/Dialog.test.js.map +1 -1
  143. package/dist/components/Dialog/index.js.map +1 -1
  144. package/dist/components/Divider/Divider.js.map +1 -1
  145. package/dist/components/Divider/Divider.test.js.map +1 -1
  146. package/dist/components/Divider/index.js.map +1 -1
  147. package/dist/components/Drawer/Drawer.d.ts +1 -0
  148. package/dist/components/Drawer/Drawer.js.map +1 -1
  149. package/dist/components/Drawer/Drawer.test.js.map +1 -1
  150. package/dist/components/Drawer/index.js.map +1 -1
  151. package/dist/components/Dropdown/Dropdown.d.ts +2 -1
  152. package/dist/components/Dropdown/Dropdown.js.map +1 -1
  153. package/dist/components/Dropdown/DropdownIcon.js.map +1 -1
  154. package/dist/components/Dropdown/index.js.map +1 -1
  155. package/dist/components/Eyebrow/Eyebrow.js.map +1 -1
  156. package/dist/components/Eyebrow/Eyebrow.test.js.map +1 -1
  157. package/dist/components/Eyebrow/index.js.map +1 -1
  158. package/dist/components/FilePicker/FilePicker.js.map +1 -1
  159. package/dist/components/FilePicker/FilePicker.test.js.map +1 -1
  160. package/dist/components/FilePicker/index.js.map +1 -1
  161. package/dist/components/FilterButton/FilterButton.js.map +1 -1
  162. package/dist/components/FilterButton/FilterButton.test.js.map +1 -1
  163. package/dist/components/FilterButton/index.js.map +1 -1
  164. package/dist/components/FlowCard/FlowCard.d.ts +2 -1
  165. package/dist/components/FlowCard/FlowCard.js.map +1 -1
  166. package/dist/components/FlowCard/FlowCard.test.js.map +1 -1
  167. package/dist/components/FlowCard/FlowCardStep.js.map +1 -1
  168. package/dist/components/FlowCard/index.js.map +1 -1
  169. package/dist/components/Form/Form.js.map +1 -1
  170. package/dist/components/Form/Form.test.js.map +1 -1
  171. package/dist/components/Form/index.js.map +1 -1
  172. package/dist/components/FormControls/FormAnvilSelect.js.map +1 -1
  173. package/dist/components/FormControls/FormButton.js.map +1 -1
  174. package/dist/components/FormControls/FormButtonToggle.js.map +1 -1
  175. package/dist/components/FormControls/FormCheckbox.js.map +1 -1
  176. package/dist/components/FormControls/FormColorPicker.js.map +1 -1
  177. package/dist/components/FormControls/FormDatePicker.js.map +1 -1
  178. package/dist/components/FormControls/FormDateRangePicker.js.map +1 -1
  179. package/dist/components/FormControls/FormDropdown.js.map +1 -1
  180. package/dist/components/FormControls/FormInput.d.ts +1 -1
  181. package/dist/components/FormControls/FormInput.js.map +1 -1
  182. package/dist/components/FormControls/FormRadio.js.map +1 -1
  183. package/dist/components/FormControls/FormSelect.js.map +1 -1
  184. package/dist/components/FormControls/FormTextArea.js.map +1 -1
  185. package/dist/components/FormControls/FormTimePicker.js.map +1 -1
  186. package/dist/components/FormControls/FormToggleSwitch.js.map +1 -1
  187. package/dist/components/FormControls/FormTogglebox.js.map +1 -1
  188. package/dist/components/FormControls/index.js.map +1 -1
  189. package/dist/components/FormField/FormField.js +8 -6
  190. package/dist/components/FormField/FormField.js.map +1 -1
  191. package/dist/components/FormField/FormField.test.js.map +1 -1
  192. package/dist/components/FormField/FormFieldContext.js.map +1 -1
  193. package/dist/components/FormField/index.js.map +1 -1
  194. package/dist/components/FormGroup/FormGroup.js.map +1 -1
  195. package/dist/components/FormGroup/FormGroup.test.js.map +1 -1
  196. package/dist/components/FormGroup/index.js.map +1 -1
  197. package/dist/components/Frame/Frame.js.map +1 -1
  198. package/dist/components/Frame/Frame.test.js.map +1 -1
  199. package/dist/components/Frame/index.js.map +1 -1
  200. package/dist/components/Grid/Grid.js.map +1 -1
  201. package/dist/components/Grid/Grid.test.js.map +1 -1
  202. package/dist/components/Grid/GridColumn.js.map +1 -1
  203. package/dist/components/Grid/GridRow.js.map +1 -1
  204. package/dist/components/Grid/index.js.map +1 -1
  205. package/dist/components/Headline/Headline.js.map +1 -1
  206. package/dist/components/Headline/Headline.test.js.map +1 -1
  207. package/dist/components/Headline/index.js.map +1 -1
  208. package/dist/components/Icon/Icon.js.map +1 -1
  209. package/dist/components/Icon/Icon.test.js.map +1 -1
  210. package/dist/components/Icon/index.js.map +1 -1
  211. package/dist/components/InlineEdit/InlineEdit.js.map +1 -1
  212. package/dist/components/InlineEdit/InlineEdit.test.js.map +1 -1
  213. package/dist/components/InlineEdit/index.js.map +1 -1
  214. package/dist/components/Input/Input.d.ts +1 -0
  215. package/dist/components/Input/Input.js.map +1 -1
  216. package/dist/components/Input/Input.test.js.map +1 -1
  217. package/dist/components/Input/InputAddon.js.map +1 -1
  218. package/dist/components/Input/index.js.map +1 -1
  219. package/dist/components/Input/inputProps.js.map +1 -1
  220. package/dist/components/KeyPressListener/KeyPressListener.js.map +1 -1
  221. package/dist/components/KeyPressListener/index.js.map +1 -1
  222. package/dist/components/Label/Label.js.map +1 -1
  223. package/dist/components/Label/index.js.map +1 -1
  224. package/dist/components/Layout/Layout.js.map +1 -1
  225. package/dist/components/Layout/Layout.test.js.map +1 -1
  226. package/dist/components/Layout/LayoutSection.js.map +1 -1
  227. package/dist/components/Layout/index.js.map +1 -1
  228. package/dist/components/Link/Link.js.map +1 -1
  229. package/dist/components/Link/Link.test.js.map +1 -1
  230. package/dist/components/Link/index.js.map +1 -1
  231. package/dist/components/Mask/Mask.js.map +1 -1
  232. package/dist/components/Mask/Mask.test.js.map +1 -1
  233. package/dist/components/Mask/index.js.map +1 -1
  234. package/dist/components/Modal/Modal.js +4 -5
  235. package/dist/components/Modal/Modal.js.map +1 -1
  236. package/dist/components/Modal/Modal.test.js.map +1 -1
  237. package/dist/components/Modal/components.d.ts +1 -0
  238. package/dist/components/Modal/components.js.map +1 -1
  239. package/dist/components/Modal/index.js.map +1 -1
  240. package/dist/components/MoreDetails/MoreDetails.js.map +1 -1
  241. package/dist/components/MoreDetails/MoreDetails.test.js.map +1 -1
  242. package/dist/components/MoreDetails/index.js.map +1 -1
  243. package/dist/components/OptionList/Option.js.map +1 -1
  244. package/dist/components/OptionList/OptionList.d.ts +2 -0
  245. package/dist/components/OptionList/OptionList.js +6 -2
  246. package/dist/components/OptionList/OptionList.js.map +1 -1
  247. package/dist/components/OptionList/OptionList.test.js.map +1 -1
  248. package/dist/components/OptionList/index.js.map +1 -1
  249. package/dist/components/OptionList/useOnExpand.js.map +1 -1
  250. package/dist/components/Page/Page.js.map +1 -1
  251. package/dist/components/Page/Page.test.js.map +1 -1
  252. package/dist/components/Page/components/ActionToolbar.js.map +1 -1
  253. package/dist/components/Page/components/Panel.js.map +1 -1
  254. package/dist/components/Page/components/index.js.map +1 -1
  255. package/dist/components/Page/index.js.map +1 -1
  256. package/dist/components/Popover/Popover.d.ts +2 -1
  257. package/dist/components/Popover/Popover.js.map +1 -1
  258. package/dist/components/Popover/Popover.test.js.map +1 -1
  259. package/dist/components/Popover/components.d.ts +2 -0
  260. package/dist/components/Popover/components.js.map +1 -1
  261. package/dist/components/Popover/index.js.map +1 -1
  262. package/dist/components/ProgressBar/ProgressBar.js.map +1 -1
  263. package/dist/components/ProgressBar/ProgressBar.test.js.map +1 -1
  264. package/dist/components/ProgressBar/index.js.map +1 -1
  265. package/dist/components/ProgressCircle/ProgressCircle.js.map +1 -1
  266. package/dist/components/ProgressCircle/ProgressCircle.test.js.map +1 -1
  267. package/dist/components/ProgressCircle/index.js.map +1 -1
  268. package/dist/components/ProgressTracker/ProgressTracker.js.map +1 -1
  269. package/dist/components/ProgressTracker/ProgressTracker.test.js.map +1 -1
  270. package/dist/components/ProgressTracker/ProgressTrackerDivider.js +3 -3
  271. package/dist/components/ProgressTracker/ProgressTrackerDivider.js.map +1 -1
  272. package/dist/components/ProgressTracker/ProgressTrackerStep.js.map +1 -1
  273. package/dist/components/ProgressTracker/index.js.map +1 -1
  274. package/dist/components/Radio/Radio.js.map +1 -1
  275. package/dist/components/Radio/Radio.test.js.map +1 -1
  276. package/dist/components/Radio/index.js.map +1 -1
  277. package/dist/components/Scroll/Scroll.js.map +1 -1
  278. package/dist/components/Scroll/Scroll.test.js.map +1 -1
  279. package/dist/components/Scroll/index.js.map +1 -1
  280. package/dist/components/Select/Select.js.map +1 -1
  281. package/dist/components/Select/Select.test.js.map +1 -1
  282. package/dist/components/Select/index.js.map +1 -1
  283. package/dist/components/SideNav/SideNav.d.ts +1 -0
  284. package/dist/components/SideNav/SideNav.js +20 -5
  285. package/dist/components/SideNav/SideNav.js.map +1 -1
  286. package/dist/components/SideNav/SideNav.test.js.map +1 -1
  287. package/dist/components/SideNav/SideNavGroup.js.map +1 -1
  288. package/dist/components/SideNav/SideNavItem.css +4 -2
  289. package/dist/components/SideNav/SideNavItem.css.map +1 -1
  290. package/dist/components/SideNav/SideNavItem.d.ts +1 -0
  291. package/dist/components/SideNav/SideNavItem.js +13 -51
  292. package/dist/components/SideNav/SideNavItem.js.map +1 -1
  293. package/dist/components/SideNav/index.css +4 -2
  294. package/dist/components/SideNav/index.css.map +1 -1
  295. package/dist/components/SideNav/index.js.map +1 -1
  296. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  297. package/dist/components/Sidebar/Sidebar.test.js.map +1 -1
  298. package/dist/components/Sidebar/SidebarSection.js.map +1 -1
  299. package/dist/components/Sidebar/index.js.map +1 -1
  300. package/dist/components/Snackbar/Snackbar.d.ts +1 -0
  301. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  302. package/dist/components/Snackbar/Snackbar.test.js.map +1 -1
  303. package/dist/components/Snackbar/index.js.map +1 -1
  304. package/dist/components/Spinner/Spinner.js.map +1 -1
  305. package/dist/components/Spinner/Spinner.test.js.map +1 -1
  306. package/dist/components/Spinner/index.js.map +1 -1
  307. package/dist/components/Stack/Stack.js.map +1 -1
  308. package/dist/components/Stack/Stack.test.js.map +1 -1
  309. package/dist/components/Stack/StackItem.js.map +1 -1
  310. package/dist/components/Stack/index.js.map +1 -1
  311. package/dist/components/StatusLight/StatusLight.js.map +1 -1
  312. package/dist/components/StatusLight/StatusLight.test.js.map +1 -1
  313. package/dist/components/StatusLight/index.js.map +1 -1
  314. package/dist/components/Tab/Tab.js +1 -1
  315. package/dist/components/Tab/Tab.js.map +1 -1
  316. package/dist/components/Tab/Tab.test.js.map +1 -1
  317. package/dist/components/Tab/index.js.map +1 -1
  318. package/dist/components/TabGroup/TabGroup.js +8 -1
  319. package/dist/components/TabGroup/TabGroup.js.map +1 -1
  320. package/dist/components/TabGroup/TabGroup.test.js.map +1 -1
  321. package/dist/components/TabGroup/TabGroupItem.js.map +1 -1
  322. package/dist/components/TabGroup/components.d.ts +4 -2
  323. package/dist/components/TabGroup/components.js.map +1 -1
  324. package/dist/components/TabGroup/index.js.map +1 -1
  325. package/dist/components/Table/GridMod.js.map +1 -1
  326. package/dist/components/Table/Table.css +11 -1
  327. package/dist/components/Table/Table.css.map +1 -1
  328. package/dist/components/Table/Table.js.map +1 -1
  329. package/dist/components/Table/Table.test.js.map +1 -1
  330. package/dist/components/Table/TableLoadingPanel.js.map +1 -1
  331. package/dist/components/Table/components.js.map +1 -1
  332. package/dist/components/Table/index.css +11 -1
  333. package/dist/components/Table/index.css.map +1 -1
  334. package/dist/components/Table/index.js.map +1 -1
  335. package/dist/components/Table/useTableMinWidth.js.map +1 -1
  336. package/dist/components/Tag/Tag.js.map +1 -1
  337. package/dist/components/Tag/Tag.test.js.map +1 -1
  338. package/dist/components/Tag/index.js.map +1 -1
  339. package/dist/components/TagGroup/TagGroup.js.map +1 -1
  340. package/dist/components/TagGroup/TagGroup.test.js.map +1 -1
  341. package/dist/components/TagGroup/TagGroupItem.js.map +1 -1
  342. package/dist/components/TagGroup/index.js.map +1 -1
  343. package/dist/components/Takeover/Takeover.js.map +1 -1
  344. package/dist/components/Takeover/Takeover.test.js.map +1 -1
  345. package/dist/components/Takeover/TakeoverFooter.js.map +1 -1
  346. package/dist/components/Takeover/TakeoverHeader.js.map +1 -1
  347. package/dist/components/Takeover/TakeoverSection.js.map +1 -1
  348. package/dist/components/Takeover/index.js.map +1 -1
  349. package/dist/components/Text/Text.js.map +1 -1
  350. package/dist/components/Text/Text.test.js.map +1 -1
  351. package/dist/components/Text/index.js.map +1 -1
  352. package/dist/components/TextArea/TextArea.d.ts +2 -1
  353. package/dist/components/TextArea/TextArea.js +1 -1
  354. package/dist/components/TextArea/TextArea.js.map +1 -1
  355. package/dist/components/TextArea/TextArea.test.js.map +1 -1
  356. package/dist/components/TextArea/index.js.map +1 -1
  357. package/dist/components/Thumbnail/Thumbnail.js.map +1 -1
  358. package/dist/components/Thumbnail/Thumbnail.test.js.map +1 -1
  359. package/dist/components/Thumbnail/index.js.map +1 -1
  360. package/dist/components/TimePicker/TimePicker.js +10 -8
  361. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  362. package/dist/components/TimePicker/TimePicker.test.js +13 -4
  363. package/dist/components/TimePicker/TimePicker.test.js.map +1 -1
  364. package/dist/components/TimePicker/components/TimePickerOptionList.d.ts +1 -1
  365. package/dist/components/TimePicker/components/TimePickerOptionList.js +21 -25
  366. package/dist/components/TimePicker/components/TimePickerOptionList.js.map +1 -1
  367. package/dist/components/TimePicker/components/index.js.map +1 -1
  368. package/dist/components/TimePicker/index.js.map +1 -1
  369. package/dist/components/TimePicker/utils/TimePickerUtils.test.js.map +1 -1
  370. package/dist/components/TimePicker/utils/checkMinMax.js.map +1 -1
  371. package/dist/components/TimePicker/utils/filterOptions.js +7 -5
  372. package/dist/components/TimePicker/utils/filterOptions.js.map +1 -1
  373. package/dist/components/TimePicker/utils/generateOptions.js.map +1 -1
  374. package/dist/components/TimePicker/utils/getClosestOption.js.map +1 -1
  375. package/dist/components/TimePicker/utils/getOptionByText.js.map +1 -1
  376. package/dist/components/TimePicker/utils/highlightOption.js.map +1 -1
  377. package/dist/components/TimePicker/utils/index.js.map +1 -1
  378. package/dist/components/TimePicker/utils/injectOption.js.map +1 -1
  379. package/dist/components/TimePicker/utils/stringToDate.js.map +1 -1
  380. package/dist/components/TimePicker/utils/timezoneUtils.js.map +1 -1
  381. package/dist/components/TimePicker/utils/toTimeFormat.js.map +1 -1
  382. package/dist/components/TimePicker/utils/utils.js +10 -12
  383. package/dist/components/TimePicker/utils/utils.js.map +1 -1
  384. package/dist/components/Toast/Toast.d.ts +2 -1
  385. package/dist/components/Toast/Toast.js.map +1 -1
  386. package/dist/components/Toast/Toast.test.js.map +1 -1
  387. package/dist/components/Toast/ToastGroup.d.ts +1 -1
  388. package/dist/components/Toast/ToastGroup.js.map +1 -1
  389. package/dist/components/Toast/index.js.map +1 -1
  390. package/dist/components/ToggleSwitch/ToggleSwitch.js +8 -7
  391. package/dist/components/ToggleSwitch/ToggleSwitch.js.map +1 -1
  392. package/dist/components/ToggleSwitch/ToggleSwitch.test.js.map +1 -1
  393. package/dist/components/ToggleSwitch/index.js.map +1 -1
  394. package/dist/components/Togglebox/Togglebox.js.map +1 -1
  395. package/dist/components/Togglebox/Togglebox.test.js.map +1 -1
  396. package/dist/components/Togglebox/index.js.map +1 -1
  397. package/dist/components/Tooltip/Tooltip.js +3 -4
  398. package/dist/components/Tooltip/Tooltip.js.map +1 -1
  399. package/dist/components/Tooltip/Tooltip.test.js.map +1 -1
  400. package/dist/components/Tooltip/index.js.map +1 -1
  401. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +2 -1
  402. package/dist/components/VisuallyHidden/VisuallyHidden.js +1 -1
  403. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -1
  404. package/dist/components/VisuallyHidden/index.js.map +1 -1
  405. package/dist/components/index.css +50 -28
  406. package/dist/components/index.css.map +1 -1
  407. package/dist/components/index.js.map +1 -1
  408. package/dist/global/index.css +1 -1
  409. package/dist/global/version.css +1 -1
  410. package/dist/hooks/index.js.map +1 -1
  411. package/dist/hooks/useArrowNav/index.d.ts +1 -0
  412. package/dist/hooks/useArrowNav/index.js +2 -0
  413. package/dist/hooks/useArrowNav/index.js.map +1 -0
  414. package/dist/hooks/useArrowNav/useArrowNav.d.ts +27 -0
  415. package/dist/hooks/useArrowNav/useArrowNav.js +65 -0
  416. package/dist/hooks/useArrowNav/useArrowNav.js.map +1 -0
  417. package/dist/hooks/useArrowNav/utils/index.d.ts +3 -0
  418. package/dist/hooks/useArrowNav/utils/index.js +4 -0
  419. package/dist/hooks/useArrowNav/utils/index.js.map +1 -0
  420. package/dist/hooks/useArrowNav/utils/keys.d.ts +3 -0
  421. package/dist/hooks/useArrowNav/utils/keys.js +12 -0
  422. package/dist/hooks/useArrowNav/utils/keys.js.map +1 -0
  423. package/dist/hooks/useArrowNav/utils/tabIndex.d.ts +2 -0
  424. package/dist/hooks/useArrowNav/utils/tabIndex.js +53 -0
  425. package/dist/hooks/useArrowNav/utils/tabIndex.js.map +1 -0
  426. package/dist/hooks/useArrowNav/utils/utils.d.ts +14 -0
  427. package/dist/hooks/useArrowNav/utils/utils.js +111 -0
  428. package/dist/hooks/useArrowNav/utils/utils.js.map +1 -0
  429. package/dist/hooks/useFocusTrap/index.js.map +1 -1
  430. package/dist/hooks/useFocusTrap/internal/index.js.map +1 -1
  431. package/dist/hooks/useFocusTrap/internal/useAutoFocus.js +12 -13
  432. package/dist/hooks/useFocusTrap/internal/useAutoFocus.js.map +1 -1
  433. package/dist/hooks/useFocusTrap/internal/useAutoFocusContainer.js.map +1 -1
  434. package/dist/hooks/useFocusTrap/internal/useDisableClickOutside.js +5 -5
  435. package/dist/hooks/useFocusTrap/internal/useDisableClickOutside.js.map +1 -1
  436. package/dist/hooks/useFocusTrap/internal/useFocusLock.js +4 -5
  437. package/dist/hooks/useFocusTrap/internal/useFocusLock.js.map +1 -1
  438. package/dist/hooks/useFocusTrap/internal/useRestoreFocus.js +4 -1
  439. package/dist/hooks/useFocusTrap/internal/useRestoreFocus.js.map +1 -1
  440. package/dist/hooks/useFocusTrap/internal/utils.d.ts +6 -2
  441. package/dist/hooks/useFocusTrap/internal/utils.js +27 -12
  442. package/dist/hooks/useFocusTrap/internal/utils.js.map +1 -1
  443. package/dist/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  444. package/dist/hooks/useFocusVisible.js +9 -11
  445. package/dist/hooks/useFocusVisible.js.map +1 -1
  446. package/dist/hooks/useFocusVisible.test.js.map +1 -1
  447. package/dist/hooks/useMergedRef.js.map +1 -1
  448. package/dist/hooks/useScreenSize.js.map +1 -1
  449. package/dist/hooks/useScrollPosition.js.map +1 -1
  450. package/dist/hooks/useVisuallyHidden.js.map +1 -1
  451. package/dist/internal/CollapsibleList/CollapsibleContext.js.map +1 -1
  452. package/dist/internal/CollapsibleList/CollapsibleList.d.ts +2 -1
  453. package/dist/internal/CollapsibleList/CollapsibleList.js.map +1 -1
  454. package/dist/internal/CollapsibleList/CollapsibleListItem.d.ts +2 -1
  455. package/dist/internal/CollapsibleList/CollapsibleListItem.js +20 -2
  456. package/dist/internal/CollapsibleList/CollapsibleListItem.js.map +1 -1
  457. package/dist/internal/CollapsibleList/index.js.map +1 -1
  458. package/dist/internal/Overlay/Overlay.d.ts +2 -1
  459. package/dist/internal/Overlay/Overlay.js.map +1 -1
  460. package/dist/internal/Overlay/index.js.map +1 -1
  461. package/dist/internal/Popper/Popper.css +4 -2
  462. package/dist/internal/Popper/Popper.css.map +1 -1
  463. package/dist/internal/Popper/Popper.d.ts +1 -1
  464. package/dist/internal/Popper/Popper.js +3 -3
  465. package/dist/internal/Popper/Popper.js.map +1 -1
  466. package/dist/internal/Popper/index.css +4 -2
  467. package/dist/internal/Popper/index.css.map +1 -1
  468. package/dist/internal/Popper/index.js.map +1 -1
  469. package/dist/internal/Portal/Portal.d.ts +2 -1
  470. package/dist/internal/Portal/Portal.js.map +1 -1
  471. package/dist/internal/Portal/index.js.map +1 -1
  472. package/dist/internal/index.css +4 -2
  473. package/dist/internal/index.css.map +1 -1
  474. package/dist/internal/index.js.map +1 -1
  475. package/dist/system-light.css +5 -9
  476. package/dist/system-light.css.map +1 -1
  477. package/dist/system-light.min.css +1 -1
  478. package/dist/system.css +86 -97
  479. package/dist/system.css.map +1 -1
  480. package/dist/system.js.map +1 -1
  481. package/dist/system.min.css +2 -2
  482. package/dist/utilities/AnvilProvider.js.map +1 -1
  483. package/dist/utilities/ConditionalWrapper.js.map +1 -1
  484. package/dist/utilities/DefaultPortalContext.js.map +1 -1
  485. package/dist/utilities/KeyboardAccessTests/KeyboardAccess.test.js +143 -32
  486. package/dist/utilities/KeyboardAccessTests/KeyboardAccess.test.js.map +1 -1
  487. package/dist/utilities/KeyboardAccessTests/components/KeyboardTester.js.map +1 -1
  488. package/dist/utilities/KeyboardAccessTests/components/components.d.ts +1 -0
  489. package/dist/utilities/KeyboardAccessTests/components/components.js +78 -39
  490. package/dist/utilities/KeyboardAccessTests/components/components.js.map +1 -1
  491. package/dist/utilities/KeyboardAccessTests/components/index.js.map +1 -1
  492. package/dist/utilities/KeyboardAccessTests/utils/index.js.map +1 -1
  493. package/dist/utilities/KeyboardAccessTests/utils/jestUtils.d.ts +1 -0
  494. package/dist/utilities/KeyboardAccessTests/utils/jestUtils.js +18 -0
  495. package/dist/utilities/KeyboardAccessTests/utils/jestUtils.js.map +1 -1
  496. package/dist/utilities/KeyboardAccessTests/utils/utils.d.ts +0 -1
  497. package/dist/utilities/KeyboardAccessTests/utils/utils.js +0 -16
  498. package/dist/utilities/KeyboardAccessTests/utils/utils.js.map +1 -1
  499. package/dist/utilities/OverlayContext.js.map +1 -1
  500. package/dist/utilities/SemanticUtils/index.js.map +1 -1
  501. package/dist/utilities/SemanticUtils/refUtils.js.map +1 -1
  502. package/dist/utilities/SemanticUtils/widths.js.map +1 -1
  503. package/dist/utilities/ThemeProvider.js.map +1 -1
  504. package/dist/utilities/TimezoneProvider/TimezoneProvider.js.map +1 -1
  505. package/dist/utilities/TimezoneProvider/TimezoneProvider.test.js.map +1 -1
  506. package/dist/utilities/TimezoneProvider/index.js.map +1 -1
  507. package/dist/utilities/color-utils.js.map +1 -1
  508. package/dist/utilities/dateFormat.js.map +1 -1
  509. package/dist/utilities/debounce.js.map +1 -1
  510. package/dist/utilities/getContent.js.map +1 -1
  511. package/dist/utilities/index.js.map +1 -1
  512. package/dist/utilities/isElementOfType.js.map +1 -1
  513. package/dist/utilities/justify-props.js.map +1 -1
  514. package/dist/utilities/keyCodes.js.map +1 -1
  515. package/dist/utilities/usePrefersColorScheme.js.map +1 -1
  516. package/dist/utilities/useStorybookFigmaAddon.js.map +1 -1
  517. package/dist/utilities/wrapChildren.js.map +1 -1
  518. package/dist/utilities/wrapWithComponent.d.ts +1 -1
  519. package/dist/utilities/wrapWithComponent.js.map +1 -1
  520. package/package.json +29 -35
@@ -0,0 +1,111 @@
1
+ import { keys } from '../../../utilities';
2
+ import { queryOnScope, active, toArray, } from '../../useFocusTrap/internal/utils';
3
+ // Excluded: input[type=text], select, textarea, [contenteditable]
4
+ const focusableElements = [
5
+ 'input[type=button]:not([disabled])',
6
+ 'input[type=checkbox]:not([disabled])',
7
+ 'input[type=radio]:not([disabled])',
8
+ 'input[type=file]:not([disabled])',
9
+ 'input[type=reset]:not([disabled])',
10
+ 'input[type=submit]:not([disabled])',
11
+ 'button:not([disabled])',
12
+ 'a[href]',
13
+ 'area[href]',
14
+ 'summary',
15
+ 'object',
16
+ 'embed',
17
+ 'audio[controls]',
18
+ 'video[controls]',
19
+ '[tabindex]:not([disabled]):not([aria-disabled=true]):not(input):not(textarea):not(select)',
20
+ ];
21
+ export const focusableSelector = focusableElements
22
+ .map((s) => s + ':not([hidden]):not([contenteditable])')
23
+ .join(',');
24
+ export { active, queryOnScope };
25
+ export const getScope = (scope) => {
26
+ if (!scope)
27
+ return null;
28
+ return toArray(scope)
29
+ .map((el) => { var _a; return (_a = el.current) !== null && _a !== void 0 ? _a : el; })
30
+ .filter((el) => el instanceof HTMLElement);
31
+ };
32
+ export const isInsideScope = (scope, el, keynavId) => {
33
+ const scopeElement = scope.find((item) => (item === null || item === void 0 ? void 0 : item.contains(el)) &&
34
+ isInsideSameKeynav(el, keynavId));
35
+ return !!scopeElement;
36
+ };
37
+ export const getFocusables = (scope, selectorOptions, tabLoop, key, keynavId) => {
38
+ const selector = getSelector(selectorOptions);
39
+ const focusables = queryOnScope(scope, selector).filter((el) => isInsideSameKeynav(el, keynavId));
40
+ const result = {
41
+ active: null,
42
+ next: null,
43
+ };
44
+ const current = focusables === null || focusables === void 0 ? void 0 : focusables.indexOf(active());
45
+ if (!focusables || current < 0)
46
+ return result;
47
+ result.active = focusables[current];
48
+ result.next = focusables[nextIdx(focusables, tabLoop, key)];
49
+ return result;
50
+ };
51
+ // Trims commas and whitespaces
52
+ const trim = (str) => {
53
+ let result = str, prevResult = '';
54
+ do {
55
+ prevResult = result;
56
+ result = result.trim().replace(/(^,)|(,$)/, '');
57
+ } while (result !== prevResult);
58
+ return result;
59
+ };
60
+ const isSelectorValid = (selector) => {
61
+ const queryCheck = (s) => document.createDocumentFragment().querySelector(s);
62
+ try {
63
+ queryCheck(selector);
64
+ }
65
+ catch (_a) {
66
+ return false;
67
+ }
68
+ return true;
69
+ };
70
+ export const getSelector = (selectorOptions) => {
71
+ const { selector, extendSelector = '' } = selectorOptions;
72
+ let result;
73
+ if (selector) {
74
+ result = trim(selector);
75
+ }
76
+ else {
77
+ result = trim(focusableSelector + ',' + trim(extendSelector));
78
+ }
79
+ if (isSelectorValid(result))
80
+ return result;
81
+ console.warn('@servicetitan/design-system: useKeyNav() provided with invalid `selectorOptions`', result);
82
+ return focusableSelector;
83
+ };
84
+ const nextIdx = (focusables, loop, key) => {
85
+ const current = focusables === null || focusables === void 0 ? void 0 : focusables.indexOf(active());
86
+ const last = (focusables === null || focusables === void 0 ? void 0 : focusables.length) - 1;
87
+ if (key === keys.home)
88
+ return 0;
89
+ if (key === keys.end)
90
+ return last;
91
+ if ([keys.down, keys.right].includes(key)) {
92
+ if (current === last)
93
+ return loop ? 0 : last;
94
+ return current + 1;
95
+ }
96
+ if ([keys.up, keys.left].includes(key)) {
97
+ if (current === 0)
98
+ return loop ? last : 0;
99
+ return current - 1;
100
+ }
101
+ };
102
+ export const createId = () => {
103
+ const res = Math.round(Math.random() * 0xffffff).toString(16);
104
+ return res;
105
+ };
106
+ export const isInsideSameKeynav = (el, keynavId) => {
107
+ var _a;
108
+ const closest = el.closest('[data-keynav]');
109
+ return keynavId === ((_a = closest === null || closest === void 0 ? void 0 : closest.dataset) === null || _a === void 0 ? void 0 : _a.keynav);
110
+ };
111
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/hooks/useArrowNav/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EACN,YAAY,EACZ,MAAM,EACN,OAAO,GACP,MAAM,mCAAmC,CAAC;AAE3C,kEAAkE;AAClE,MAAM,iBAAiB,GAAG;IACzB,oCAAoC;IACpC,sCAAsC;IACtC,mCAAmC;IACnC,kCAAkC;IAClC,mCAAmC;IACnC,oCAAoC;IACpC,wBAAwB;IACxB,SAAS;IACT,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,OAAO;IACP,iBAAiB;IACjB,iBAAiB;IACjB,2FAA2F;CAC3F,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB;KAChD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,uCAAuC,CAAC;KACvD,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAEhC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAgC,EAAiB,EAAE;IAC3E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO,OAAO,CAAC,KAAK,CAAC;SACnB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,WAAC,OAAA,MAAC,EAA2B,CAAC,OAAO,mCAAI,EAAE,CAAA,EAAA,CAAC;SACvD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,WAAW,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,KAAoB,EACpB,EAAyB,EACzB,QAAgB,EACf,EAAE;IACH,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC9B,CAAC,IAAI,EAAE,EAAE,CACR,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,EAAE,CAAC;QAClB,kBAAkB,CAAC,EAAiB,EAAE,QAAQ,CAAC,CAChD,CAAC;IAEF,OAAO,CAAC,CAAC,YAAY,CAAC;AACvB,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,KAAoB,EACpB,eAAgC,EAChC,OAAgB,EAChB,GAAW,EACX,QAAgB,EACF,EAAE;IAChB,MAAM,QAAQ,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAC9D,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAChC,CAAC;IACF,MAAM,MAAM,GAAgB;QAC3B,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;KACV,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC,MAAM,EAAS,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAE9C,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAE5D,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,+BAA+B;AAC/B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;IAC5B,IAAI,MAAM,GAAG,GAAG,EACf,UAAU,GAAG,EAAE,CAAC;IACjB,GAAG;QACF,UAAU,GAAG,MAAM,CAAC;QACpB,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;KAChD,QAAQ,MAAM,KAAK,UAAU,EAAE;IAChC,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAChC,QAAQ,CAAC,sBAAsB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACpD,IAAI;QACH,UAAU,CAAC,QAAQ,CAAC,CAAC;KACrB;IAAC,WAAM;QACP,OAAO,KAAK,CAAC;KACb;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,eAAoB,EAAE,EAAE;IACnD,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,eAAe,CAAC;IAC1D,IAAI,MAAM,CAAC;IAEX,IAAI,QAAQ,EAAE;QACb,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;KACxB;SAAM;QACN,MAAM,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;KAC9D;IACD,IAAI,eAAe,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAE3C,OAAO,CAAC,IAAI,CACX,kFAAkF,EAClF,MAAM,CACN,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,UAAiB,EAAE,IAAa,EAAE,GAAW,EAAE,EAAE;IACjE,MAAM,OAAO,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC,MAAM,EAAS,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,IAAG,CAAC,CAAC;IAEpC,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC1C,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,OAAO,OAAO,GAAG,CAAC,CAAC;KACnB;IACD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACvC,IAAI,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,OAAO,GAAG,CAAC,CAAC;KACnB;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAW,EAAE;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE9D,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAe,EAAE,QAAgB,EAAE,EAAE;;IACvE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,CAAgB,CAAC;IAE3D,OAAO,QAAQ,MAAK,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,0CAAE,MAAM,CAAA,CAAC;AAC9C,CAAC,CAAC","sourcesContent":["import { keys } from '../../../utilities';\nimport { UseArrowNavProps, SelectorOptions } from '../useArrowNav';\nimport {\n\tqueryOnScope,\n\tactive,\n\ttoArray,\n} from '../../useFocusTrap/internal/utils';\n\n// Excluded: input[type=text], select, textarea, [contenteditable]\nconst focusableElements = [\n\t'input[type=button]:not([disabled])',\n\t'input[type=checkbox]:not([disabled])',\n\t'input[type=radio]:not([disabled])',\n\t'input[type=file]:not([disabled])',\n\t'input[type=reset]:not([disabled])',\n\t'input[type=submit]:not([disabled])',\n\t'button:not([disabled])',\n\t'a[href]',\n\t'area[href]',\n\t'summary',\n\t'object',\n\t'embed',\n\t'audio[controls]',\n\t'video[controls]',\n\t'[tabindex]:not([disabled]):not([aria-disabled=true]):not(input):not(textarea):not(select)',\n];\n\nexport const focusableSelector = focusableElements\n\t.map((s) => s + ':not([hidden]):not([contenteditable])')\n\t.join(',');\n\nexport { active, queryOnScope };\n\nexport const getScope = (scope: UseArrowNavProps['scope']): HTMLElement[] => {\n\tif (!scope) return null;\n\n\treturn toArray(scope)\n\t\t.map((el) => (el as React.RefObject<any>).current ?? el)\n\t\t.filter((el) => el instanceof HTMLElement);\n};\n\nexport const isInsideScope = (\n\tscope: HTMLElement[],\n\tel: HTMLElement | Element,\n\tkeynavId: string\n) => {\n\tconst scopeElement = scope.find(\n\t\t(item) =>\n\t\t\titem?.contains(el) &&\n\t\t\tisInsideSameKeynav(el as HTMLElement, keynavId)\n\t);\n\n\treturn !!scopeElement;\n};\n\nexport interface IFocusables {\n\tactive: HTMLElement;\n\tnext: HTMLElement;\n}\n\nexport const getFocusables = (\n\tscope: HTMLElement[],\n\tselectorOptions: SelectorOptions,\n\ttabLoop: boolean,\n\tkey: string,\n\tkeynavId: string\n): IFocusables => {\n\tconst selector = getSelector(selectorOptions);\n\tconst focusables = queryOnScope(scope, selector).filter((el) =>\n\t\tisInsideSameKeynav(el, keynavId)\n\t);\n\tconst result: IFocusables = {\n\t\tactive: null,\n\t\tnext: null,\n\t};\n\n\tconst current = focusables?.indexOf(active() as any);\n\n\tif (!focusables || current < 0) return result;\n\n\tresult.active = focusables[current];\n\tresult.next = focusables[nextIdx(focusables, tabLoop, key)];\n\n\treturn result;\n};\n\n// Trims commas and whitespaces\nconst trim = (str: string) => {\n\tlet result = str,\n\t\tprevResult = '';\n\tdo {\n\t\tprevResult = result;\n\t\tresult = result.trim().replace(/(^,)|(,$)/, '');\n\t} while (result !== prevResult);\n\treturn result;\n};\n\nconst isSelectorValid = (selector: string) => {\n\tconst queryCheck = (s: string) =>\n\t\tdocument.createDocumentFragment().querySelector(s);\n\ttry {\n\t\tqueryCheck(selector);\n\t} catch {\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nexport const getSelector = (selectorOptions: any) => {\n\tconst { selector, extendSelector = '' } = selectorOptions;\n\tlet result;\n\n\tif (selector) {\n\t\tresult = trim(selector);\n\t} else {\n\t\tresult = trim(focusableSelector + ',' + trim(extendSelector));\n\t}\n\tif (isSelectorValid(result)) return result;\n\n\tconsole.warn(\n\t\t'@servicetitan/design-system: useKeyNav() provided with invalid `selectorOptions`',\n\t\tresult\n\t);\n\treturn focusableSelector;\n};\n\nconst nextIdx = (focusables: any[], loop: boolean, key: string) => {\n\tconst current = focusables?.indexOf(active() as any);\n\tconst last = focusables?.length - 1;\n\n\tif (key === keys.home) return 0;\n\tif (key === keys.end) return last;\n\tif ([keys.down, keys.right].includes(key)) {\n\t\tif (current === last) return loop ? 0 : last;\n\t\treturn current + 1;\n\t}\n\tif ([keys.up, keys.left].includes(key)) {\n\t\tif (current === 0) return loop ? last : 0;\n\t\treturn current - 1;\n\t}\n};\n\nexport const createId = (): string => {\n\tconst res = Math.round(Math.random() * 0xffffff).toString(16);\n\n\treturn res;\n};\n\nexport const isInsideSameKeynav = (el: HTMLElement, keynavId: string) => {\n\tconst closest = el.closest('[data-keynav]') as HTMLElement;\n\n\treturn keynavId === closest?.dataset?.keynav;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC","sourcesContent":["export * from './useFocusTrap';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './useAutoFocus';\nexport * from './useDisableClickOutside';\nexport * from './useFocusLock';\nexport * from './useRestoreFocus';\nexport * from './useAutoFocusContainer';\n"]}
@@ -1,23 +1,22 @@
1
1
  import { useEffect, useCallback } from 'react';
2
- import { getScope, getFocusables, priorityFocusableSelector } from './utils';
2
+ import { getScopeElements, getFocusables, priorityFocusableSelector, } from './utils';
3
3
  export const useAutoFocus = (props) => {
4
- const { scope: initialScope, enabled = true } = props;
4
+ const { scope, enabled = true } = props;
5
5
  const autoFocus = useCallback(() => {
6
- var _a, _b, _c;
6
+ var _a, _b;
7
7
  if (!enabled)
8
8
  return;
9
- const scope = getScope(initialScope);
10
- if (scope.length === 0)
9
+ const elements = getScopeElements(scope);
10
+ if (elements.length === 0)
11
11
  return;
12
12
  // Do not auto focus on wrappers, buttons and so on, if input exist
13
- const priorityFocusable = (_a = getFocusables(scope, priorityFocusableSelector)) === null || _a === void 0 ? void 0 : _a.first;
14
- priorityFocusable
15
- ? priorityFocusable.focus(preventScroll)
16
- : (_c = (_b = getFocusables(scope)) === null || _b === void 0 ? void 0 : _b.first) === null || _c === void 0 ? void 0 : _c.focus(preventScroll);
17
- }, [enabled, initialScope]);
18
- useEffect(() => {
19
- autoFocus();
20
- }, [enabled, initialScope]); // eslint-disable-line
13
+ const priorityFocusable = (_a = getFocusables(elements, priorityFocusableSelector)) === null || _a === void 0 ? void 0 : _a.first;
14
+ const focusElement = priorityFocusable
15
+ ? priorityFocusable
16
+ : (_b = getFocusables(elements)) === null || _b === void 0 ? void 0 : _b.first;
17
+ focusElement === null || focusElement === void 0 ? void 0 : focusElement.focus(preventScroll);
18
+ }, [enabled, scope]);
19
+ useEffect(autoFocus, [enabled, scope]); // eslint-disable-line
21
20
  };
22
21
  const preventScroll = { preventScroll: true };
23
22
  //# sourceMappingURL=useAutoFocus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAutoFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAQ7E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE;IACxD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAEtD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/B,mEAAmE;QACnE,MAAM,iBAAiB,GAAG,MAAA,aAAa,CACtC,KAAK,EACL,yBAAyB,CACzB,0CAAE,KAAK,CAAC;QAET,iBAAiB;YAChB,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC;YACxC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,KAAK,CAAC,0CAAE,KAAK,0CAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,EAAE,CAAC;IACb,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,sBAAsB;AACpD,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"useAutoFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EACN,gBAAgB,EAChB,aAAa,EACb,yBAAyB,GACzB,MAAM,SAAS,CAAC;AAQjB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAExC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,mEAAmE;QACnE,MAAM,iBAAiB,GAAG,MAAA,aAAa,CACtC,QAAQ,EACR,yBAAyB,CACzB,0CAAE,KAAK,CAAC;QAET,MAAM,YAAY,GAAG,iBAAiB;YACrC,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,MAAA,aAAa,CAAC,QAAQ,CAAC,0CAAE,KAAK,CAAC;QAElC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB;AAC/D,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC","sourcesContent":["import { useEffect, useCallback } from 'react';\nimport {\n\tgetScopeElements,\n\tgetFocusables,\n\tpriorityFocusableSelector,\n} from './utils';\nimport { FocusTrapShards } from '../';\n\nexport interface useAutoFocusProps {\n\tscope: FocusTrapShards;\n\tenabled?: boolean;\n}\n\nexport const useAutoFocus = (props: useAutoFocusProps) => {\n\tconst { scope, enabled = true } = props;\n\n\tconst autoFocus = useCallback(() => {\n\t\tif (!enabled) return;\n\n\t\tconst elements = getScopeElements(scope);\n\t\tif (elements.length === 0) return;\n\n\t\t// Do not auto focus on wrappers, buttons and so on, if input exist\n\t\tconst priorityFocusable = getFocusables(\n\t\t\telements,\n\t\t\tpriorityFocusableSelector\n\t\t)?.first;\n\n\t\tconst focusElement = priorityFocusable\n\t\t\t? priorityFocusable\n\t\t\t: getFocusables(elements)?.first;\n\n\t\tfocusElement?.focus(preventScroll);\n\t}, [enabled, scope]);\n\n\tuseEffect(autoFocus, [enabled, scope]); // eslint-disable-line\n};\n\nconst preventScroll = { preventScroll: true };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useAutoFocusContainer.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocusContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOlC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAgC,EAAE,EAAE;IACzE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE,OAAO;QACnC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,CAAC;YAAE,OAAO,CAAC,4EAA4E;QAErI,WAAW,CAAC,SAAS,CAAC,CAAC;QACvB,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,sBAAsB;AACtC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAe,EAAE,EAAE;IACvC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACjC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;QACjC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;KACrD;AACF,CAAC,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,EAAe,EAAE,EAAE;IACzC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/B,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC"}
1
+ {"version":3,"file":"useAutoFocusContainer.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useAutoFocusContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOlC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAgC,EAAE,EAAE;IACzE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QAEvC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;YAAE,OAAO;QACnC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAAa,CAAC;YAAE,OAAO,CAAC,4EAA4E;QAErI,WAAW,CAAC,SAAS,CAAC,CAAC;QACvB,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,sBAAsB;AACtC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAe,EAAE,EAAE;IACvC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACjC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;QACjC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;KACrD;AACF,CAAC,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,EAAe,EAAE,EAAE;IACzC,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/B,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\n\ninterface usePrefocusContainerProps {\n\tcontainerRef: React.RefObject<HTMLElement>;\n\tenabled?: boolean;\n}\n\n/**\n * Helper which provides focus handling over modals, dialogs, etc.\n * Sets focus on overlay wrapper if there is no other element already focused inside.\n */\nexport const useAutoFocusContainer = (props: usePrefocusContainerProps) => {\n\tconst { containerRef, enabled = false } = props;\n\n\tuseEffect(() => {\n\t\tconst container = containerRef.current;\n\n\t\tif (!enabled || !container) return;\n\t\tif (container.contains(document?.activeElement)) return; // Already has focus inside, e.g. some internal input was autofocused before\n\n\t\tsetTabindex(container);\n\t\tcontainer.focus({ preventScroll: true });\n\t}, [enabled]); // eslint-disable-line\n};\n\nconst setTabindex = (el: HTMLElement) => {\n\tif (!el.hasAttribute('tabIndex')) {\n\t\tel.tabIndex = 0; // Crucial value\n\t\tel.addEventListener('blur', () => clearTabindex(el));\n\t}\n};\nconst clearTabindex = (el: HTMLElement) => {\n\tel.removeAttribute('tabIndex');\n\tel.removeEventListener('blur', () => clearTabindex(el));\n};\n"]}
@@ -1,16 +1,16 @@
1
1
  import { useEffect } from 'react';
2
- import { getScope, isInside } from './utils';
2
+ import { getScopeElements, isInside } from './utils';
3
3
  export const useDisableClickOutside = (props) => {
4
- const { scope: initialScope, enabled = true, onClickOutside } = props;
4
+ const { scope, enabled = true, onClickOutside } = props;
5
5
  useEffect(() => {
6
6
  function handleClick(event) {
7
7
  var _a, _b;
8
8
  if (!enabled)
9
9
  return;
10
10
  const target = (_b = (_a = event.composedPath) === null || _a === void 0 ? void 0 : _a.call(event)[0]) !== null && _b !== void 0 ? _b : event.target;
11
- const scope = getScope(initialScope);
11
+ const elements = getScopeElements(scope);
12
12
  // Suppress if inside current scope
13
- if (isInside(scope, target))
13
+ if (isInside(elements, target))
14
14
  return; // How to prevent disabling on popovers?
15
15
  event.stopPropagation();
16
16
  event.preventDefault();
@@ -23,6 +23,6 @@ export const useDisableClickOutside = (props) => {
23
23
  document === null || document === void 0 ? void 0 : document.removeEventListener('mousedown', handleClick);
24
24
  document === null || document === void 0 ? void 0 : document.removeEventListener('touchstart', handleClick);
25
25
  };
26
- }, [initialScope, enabled, onClickOutside]);
26
+ }, [enabled, scope, onClickOutside]);
27
27
  };
28
28
  //# sourceMappingURL=useDisableClickOutside.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDisableClickOutside.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useDisableClickOutside.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAS7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAkC,EAAE,EAAE;IAC5E,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEtE,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,WAAW,CAAC,KAAU;;YAC9B,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,MAAM,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,+CAAlB,KAAK,EAAkB,CAAC,CAAC,mCAAI,KAAK,CAAC,MAAM,CAAC;YACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YAErC,mCAAmC;YACnC,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAAE,OAAO,CAAC,wCAAwC;YAE7E,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,cAAc;gBAAE,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACrD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,GAAG,EAAE;YACX,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACxD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC"}
1
+ {"version":3,"file":"useDisableClickOutside.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useDisableClickOutside.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASrD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAkC,EAAE,EAAE;IAC5E,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,WAAW,CAAC,KAAU;;YAC9B,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,MAAM,GAAG,MAAA,MAAA,KAAK,CAAC,YAAY,+CAAlB,KAAK,EAAkB,CAAC,CAAC,mCAAI,KAAK,CAAC,MAAM,CAAC;YACzD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAEzC,mCAAmC;YACnC,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAAE,OAAO,CAAC,wCAAwC;YAEhF,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,cAAc;gBAAE,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACrD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,GAAG,EAAE;YACX,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACxD,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { getScopeElements, isInside } from './utils';\nimport { FocusTrapShards } from '../';\n\ninterface useDisableClickOutsideProps {\n\tscope: FocusTrapShards;\n\tenabled?: boolean;\n\tonClickOutside?: (e: React.SyntheticEvent) => void;\n}\n\nexport const useDisableClickOutside = (props: useDisableClickOutsideProps) => {\n\tconst { scope, enabled = true, onClickOutside } = props;\n\n\tuseEffect(() => {\n\t\tfunction handleClick(event: any) {\n\t\t\tif (!enabled) return;\n\n\t\t\tconst target = event.composedPath?.()[0] ?? event.target;\n\t\t\tconst elements = getScopeElements(scope);\n\n\t\t\t// Suppress if inside current scope\n\t\t\tif (isInside(elements, target)) return; // How to prevent disabling on popovers?\n\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tif (onClickOutside) onClickOutside(event);\n\t\t}\n\n\t\tdocument?.addEventListener('mousedown', handleClick);\n\t\tdocument?.addEventListener('touchstart', handleClick);\n\t\treturn () => {\n\t\t\tdocument?.removeEventListener('mousedown', handleClick);\n\t\t\tdocument?.removeEventListener('touchstart', handleClick);\n\t\t};\n\t}, [enabled, scope, onClickOutside]);\n};\n"]}
@@ -1,14 +1,13 @@
1
1
  import { useEffect } from 'react';
2
- import { getScope, isInside, tabIndexInside, focusNext, focusPrev, handleFocusablesUnmount, cleanFocusLockMarkers, setFocusLockMarkers, } from './utils';
3
- // More proper name to be useTabLoop
2
+ import { getScopeElements, isInside, tabIndexInside, focusNext, focusPrev, handleFocusablesUnmount, cleanFocusLockMarkers, setFocusLockMarkers, } from './utils';
4
3
  export const useFocusLock = (props) => {
5
4
  const { scope: initialScope, enabled = true } = props;
6
5
  useEffect(() => {
7
6
  if (!enabled) {
8
- cleanFocusLockMarkers(getScope(initialScope));
7
+ cleanFocusLockMarkers(getScopeElements(initialScope));
9
8
  return;
10
9
  }
11
- setFocusLockMarkers(getScope(initialScope));
10
+ setFocusLockMarkers(getScopeElements(initialScope));
12
11
  // Warning in case tabIndex was set inside FocusLock
13
12
  if (tabIndexInside(initialScope))
14
13
  console.warn('@servicetitan/design-system: (FocusTrap) Avoid using tabIndex values greater than 0. Instead put elements in a logical sequence.');
@@ -17,7 +16,7 @@ export const useFocusLock = (props) => {
17
16
  const shift = event.shiftKey;
18
17
  if (!tab)
19
18
  return; // Exit fast if no Tab key was pressed
20
- const scope = getScope(initialScope);
19
+ const scope = getScopeElements(initialScope);
21
20
  if (scope.length === 0)
22
21
  return;
23
22
  // Prevent focus management if Tab happens outside or over nested useFocusLock
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusLock.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useFocusLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EACN,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,SAAS,EACT,SAAS,EACT,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,SAAS,CAAC;AAOjB,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,EAAE;IACrD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO,EAAE;YACb,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YAC9C,OAAO;SACP;QAED,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;QAE5C,oDAAoD;QACpD,IAAI,cAAc,CAAC,YAAY,CAAC;YAC/B,OAAO,CAAC,IAAI,CACX,kIAAkI,CAClI,CAAC;QAEH,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE7B,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,sCAAsC;YAExD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YAErC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,8EAA8E;YAC9E,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO;YAE3C,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,6FAA6F;YAE7H,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;gBAClB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxB,OAAO;aACP;YACD,IAAI,GAAG,IAAI,KAAK,EAAE;gBACjB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACxB;QACF,CAAC,CAAC;QAEF,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,OAAO,GAAG,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC"}
1
+ {"version":3,"file":"useFocusLock.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useFocusLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EACN,gBAAgB,EAChB,QAAQ,EACR,cAAc,EACd,SAAS,EACT,SAAS,EACT,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,SAAS,CAAC;AAOjB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,EAAE;IACrD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO,EAAE;YACb,qBAAqB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;YACtD,OAAO;SACP;QAED,mBAAmB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;QAEpD,oDAAoD;QACpD,IAAI,cAAc,CAAC,YAAY,CAAC;YAC/B,OAAO,CAAC,IAAI,CACX,kIAAkI,CAClI,CAAC;QAEH,MAAM,SAAS,GAAG,CAAC,KAAU,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE7B,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,sCAAsC;YAExD,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAE7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/B,8EAA8E;YAC9E,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO;YAE3C,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,6FAA6F;YAE7H,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;gBAClB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACxB,OAAO;aACP;YACD,IAAI,GAAG,IAAI,KAAK,EAAE;gBACjB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACxB;QACF,CAAC,CAAC;QAEF,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,OAAO,GAAG,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\n\nimport { FocusTrapShards } from '../';\nimport {\n\tgetScopeElements,\n\tisInside,\n\ttabIndexInside,\n\tfocusNext,\n\tfocusPrev,\n\thandleFocusablesUnmount,\n\tcleanFocusLockMarkers,\n\tsetFocusLockMarkers,\n} from './utils';\n\nexport interface FocusLockProps {\n\tscope: FocusTrapShards;\n\tenabled?: boolean;\n}\n\nexport const useFocusLock = (props: FocusLockProps) => {\n\tconst { scope: initialScope, enabled = true } = props;\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\tcleanFocusLockMarkers(getScopeElements(initialScope));\n\t\t\treturn;\n\t\t}\n\n\t\tsetFocusLockMarkers(getScopeElements(initialScope));\n\n\t\t// Warning in case tabIndex was set inside FocusLock\n\t\tif (tabIndexInside(initialScope))\n\t\t\tconsole.warn(\n\t\t\t\t'@servicetitan/design-system: (FocusTrap) Avoid using tabIndex values greater than 0. Instead put elements in a logical sequence.'\n\t\t\t);\n\n\t\tconst handleTab = (event: any) => {\n\t\t\tconst tab = event.code === 'Tab';\n\t\t\tconst shift = event.shiftKey;\n\n\t\t\tif (!tab) return; // Exit fast if no Tab key was pressed\n\n\t\t\tconst scope = getScopeElements(initialScope);\n\n\t\t\tif (scope.length === 0) return;\n\n\t\t\t// Prevent focus management if Tab happens outside or over nested useFocusLock\n\t\t\tif (!isInside(scope, event.target)) return;\n\n\t\t\thandleFocusablesUnmount(scope); // Case of removal currently focused focusable element, so that focus wouldn't go to the body\n\n\t\t\tif (tab && !shift) {\n\t\t\t\tfocusNext(scope, event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tab && shift) {\n\t\t\t\tfocusPrev(scope, event);\n\t\t\t}\n\t\t};\n\n\t\tdocument?.addEventListener('keydown', handleTab);\n\t\treturn () => document?.removeEventListener('keydown', handleTab);\n\t}, [initialScope, enabled]);\n};\n"]}
@@ -1,10 +1,13 @@
1
1
  import { useEffect, useRef } from 'react';
2
+ import { active } from './utils';
2
3
  export const useRestoreFocus = ({ enabled = true }) => {
3
4
  const prevActiveRef = useRef(null);
4
5
  useEffect(() => {
5
6
  if (!enabled)
6
7
  return;
7
- prevActiveRef.current = document === null || document === void 0 ? void 0 : document.activeElement;
8
+ if (active() !== (document === null || document === void 0 ? void 0 : document.body))
9
+ prevActiveRef.current = active();
10
+ // Focus previously active element on unmount
8
11
  return () => { var _a; return (_a = prevActiveRef.current) === null || _a === void 0 ? void 0 : _a.focus(preventScroll); };
9
12
  }, [enabled]);
10
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useRestoreFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useRestoreFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,EAAE;IACrD,MAAM,aAAa,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,aAAa,CAAC,OAAO,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAA4B,CAAC;QAE/D,OAAO,GAAG,EAAE,WAAC,OAAA,MAAA,aAAa,CAAC,OAAO,0CAAE,KAAK,CAAC,aAAa,CAAC,CAAA,EAAA,CAAC;IAC1D,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"useRestoreFocus.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/useRestoreFocus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,EAAE,EAAE;IACrD,MAAM,aAAa,GAAG,MAAM,CAAM,IAAI,CAAC,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,MAAM,EAAE,MAAK,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAA;YAAE,aAAa,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;QAElE,6CAA6C;QAC7C,OAAO,GAAG,EAAE,WAAC,OAAA,MAAA,aAAa,CAAC,OAAO,0CAAE,KAAK,CAAC,aAAa,CAAC,CAAA,EAAA,CAAC;IAC1D,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC","sourcesContent":["import { useEffect, useRef } from 'react';\nimport { active } from './utils';\n\nexport const useRestoreFocus = ({ enabled = true }) => {\n\tconst prevActiveRef = useRef<any>(null);\n\n\tuseEffect(() => {\n\t\tif (!enabled) return;\n\t\tif (active() !== document?.body) prevActiveRef.current = active();\n\n\t\t// Focus previously active element on unmount\n\t\treturn () => prevActiveRef.current?.focus(preventScroll);\n\t}, [enabled]);\n};\n\nconst preventScroll = { preventScroll: true };\n"]}
@@ -1,7 +1,8 @@
1
1
  import { FocusTrapShards } from '../';
2
- export declare const focusableSelector = "button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])";
2
+ export declare const focusableSelector: string;
3
3
  export declare const priorityFocusableSelector = "input, textarea";
4
- export declare const getScope: (shards: FocusTrapShards) => any[];
4
+ export declare const active: () => HTMLElement;
5
+ export declare const getScopeElements: (shards: FocusTrapShards) => HTMLElement[];
5
6
  export declare const queryOnScope: (scope: HTMLElement | HTMLElement[], selector: string) => HTMLElement[];
6
7
  export declare const getFocusables: (scope: HTMLElement | HTMLElement[], selector?: string) => {
7
8
  focusables: HTMLElement[];
@@ -18,6 +19,9 @@ export declare const shardsUtils: (initialScope: HTMLElement | HTMLElement[]) =>
18
19
  };
19
20
  export declare const focusNext: (scope: HTMLElement | HTMLElement[], event?: React.KeyboardEvent<HTMLElement>) => void;
20
21
  export declare const focusPrev: (scope: HTMLElement | HTMLElement[], event?: React.KeyboardEvent<HTMLElement>) => void;
22
+ export declare const toArray: (obj: any) => any[];
23
+ export declare const prevIdx: (array: any[], current: number) => number;
24
+ export declare const nextIdx: (array: any[], current: number) => number;
21
25
  export declare const handleFocusablesUnmount: (scope: HTMLElement[]) => void;
22
26
  export declare const setFocusLockMarkers: (scope: HTMLElement[]) => void;
23
27
  export declare const cleanFocusLockMarkers: (scope: HTMLElement[]) => void;
@@ -1,7 +1,23 @@
1
- export const focusableSelector = `button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])`;
1
+ const focusableElements = [
2
+ 'input:not([disabled]):not([type=hidden])',
3
+ 'select:not([disabled])',
4
+ 'textarea:not([disabled])',
5
+ 'button:not([disabled])',
6
+ 'a[href]',
7
+ 'area[href]',
8
+ 'summary',
9
+ 'iframe',
10
+ 'object',
11
+ 'embed',
12
+ 'audio[controls]',
13
+ 'video[controls]',
14
+ '[contenteditable]',
15
+ '[tabindex]:not([disabled]):not([tabindex="-1"])',
16
+ ];
17
+ export const focusableSelector = focusableElements.join(':not([hidden]):not([tabindex="-1"]),');
2
18
  export const priorityFocusableSelector = 'input, textarea';
3
- const active = () => document === null || document === void 0 ? void 0 : document.activeElement;
4
- export const getScope = (shards) => {
19
+ export const active = () => document === null || document === void 0 ? void 0 : document.activeElement;
20
+ export const getScopeElements = (shards) => {
5
21
  if (!shards)
6
22
  return [];
7
23
  return toArray(shards)
@@ -17,17 +33,16 @@ const queryOnElement = (el, selector) => {
17
33
  result = result.concat(Array.from(nodeList));
18
34
  return result.length > 0 ? result : null;
19
35
  };
36
+ // True if `display: none`, etc.
37
+ const isHidden = (el) => !(el === null || el === void 0 ? void 0 : el.offsetWidth) || !(el === null || el === void 0 ? void 0 : el.offsetHeight);
20
38
  export const queryOnScope = (scope, selector) => {
21
- let targetElements = [];
22
- scope instanceof Array
23
- ? (targetElements = scope)
24
- : (targetElements = [scope]);
39
+ let targetElements = toArray(scope);
25
40
  if (targetElements.length === 0)
26
41
  return null;
27
42
  targetElements = targetElements
28
43
  .map((el) => queryOnElement(el, selector))
29
44
  .flat()
30
- .filter((el) => el);
45
+ .filter((el) => !isHidden(el));
31
46
  if (targetElements.length === 0)
32
47
  return null;
33
48
  return targetElements;
@@ -64,7 +79,7 @@ const isInsideNestedTrap = (scopeElement, target) => {
64
79
  return found;
65
80
  };
66
81
  export const tabIndexInside = (scope) => {
67
- return getScope(scope).some((el) => getFocusables(el).focusables.some((e) => getTabIndex(e) > 0));
82
+ return getScopeElements(scope).some((el) => getFocusables(el).focusables.some((e) => getTabIndex(e) > 0));
68
83
  };
69
84
  export const shardsUtils = (initialScope) => {
70
85
  let currentShardIdx = 0;
@@ -111,13 +126,13 @@ export const focusPrev = (scope, event) => {
111
126
  shards.lastPrevShard.focus();
112
127
  }
113
128
  };
114
- const toArray = (obj) => (obj instanceof Array ? obj : [obj]);
115
- const prevIdx = (array, current) => {
129
+ export const toArray = (obj) => (obj instanceof Array ? obj : [obj]);
130
+ export const prevIdx = (array, current) => {
116
131
  if (current < 0)
117
132
  return current;
118
133
  return current === 0 ? array.length - 1 : current - 1;
119
134
  };
120
- const nextIdx = (array, current) => {
135
+ export const nextIdx = (array, current) => {
121
136
  if (current < 0)
122
137
  return current;
123
138
  return current === array.length - 1 ? 0 : current + 1;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/hooks/useFocusTrap/internal/utils.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG;IACzB,0CAA0C;IAC1C,wBAAwB;IACxB,0BAA0B;IAC1B,wBAAwB;IACxB,SAAS;IACT,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,iDAAiD;CACjD,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CACtD,sCAAsC,CACtC,CAAC;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,aAA4B,CAAC;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAuB,EAAiB,EAAE;IAC1E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,OAAO,OAAO,CAAC,MAAM,CAAC;SACpB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,WAAC,OAAA,MAAC,EAA2B,CAAC,OAAO,mCAAI,EAAE,CAAA,EAAA,CAAC;SACvD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,YAAY,WAAW,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,EAAe,EAAE,QAAgB,EAAE,EAAE;IAC5D,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB;IAEpE,MAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAkB,CAAC,CAAC;IAE/D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC,CAAC;AAEF,gCAAgC;AAChC,MAAM,QAAQ,GAAG,CAAC,EAAe,EAAE,EAAE,CAAC,CAAC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,WAAW,CAAA,IAAI,CAAC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,YAAY,CAAA,CAAC;AAE5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,KAAkC,EAClC,QAAgB,EACf,EAAE;IACH,IAAI,cAAc,GAAkB,OAAO,CAAC,KAAK,CAAC,CAAC;IAEnD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,cAAc,GAAG,cAAc;SAC7B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;SACzC,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,OAAO,cAAc,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,KAAkC,EAClC,WAAmB,iBAAiB,CAAC,gBAAgB;EACpD,EAAE;IACH,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QACzC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEpD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/C,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,KAAoB,EACpB,MAA6B,EAC5B,EAAE;IACH,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAElE,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAEhC,4DAA4D;IAC5D,IAAI,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3D,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAC1B,YAAyB,EACzB,MAA6B,EAC5B,EAAE;IACH,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,wEAAwE;IACxE,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,YAAY,KAAK,OAAO,EAAE;QAClE,IAAI,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE;YAC9C,KAAK,GAAG,IAAI,CAAC,CAAC,qBAAqB;YACnC,MAAM;SACN;QACD,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;KAChC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAE,EAAE;IACxD,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1C,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAC5D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAyC,EAAE,EAAE;IACxE,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEpC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACvB,IAAI,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAE,eAAe,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAEhD,OAAO;QACN,iBAAiB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK;QACjC,gBAAgB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI;QAC/B,cAAc,EAAE,IAAI,CAAC,KAAK;QAC1B,aAAa,EAAE,IAAI,CAAC,IAAI;KACxB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,KAAkC,EAClC,KAAwC,EACvC,EAAE;IACH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE;QACtB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC,CAAC,qDAAqD;QAC9E,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO;KACP;IACD,IAAI,MAAM,EAAE,KAAK,MAAM,CAAC,gBAAgB,EAAE;QACzC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC;QACxB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;KAC9B;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,KAAkC,EAClC,KAAwC,EACvC,EAAE;IACH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,MAAM,EAAE,KAAK,KAAK,EAAE;QACvB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC,CAAC,8DAA8D;QACvF,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO;KACP;IACD,IAAI,MAAM,EAAE,KAAK,MAAM,CAAC,iBAAiB,EAAE;QAC1C,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,CAAC;QACxB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC7B;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,OAAe,EAAE,EAAE;IACxD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,OAAe,EAAE,EAAE;IACxD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAe,EAAE,EAAE;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,mDAAmD;AACnD,MAAM,kBAAkB,GAAG,CAAC,EAAe,EAAE,KAAoB,EAAE,EAAE;IACpE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE;QACf,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAEhD,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO;QACxC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC5B,IAAI,OAAO,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAEtC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;AACR,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC/D,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAE5B,aAAa,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACvD,EAAE,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3C,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC3D,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC7D,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC","sourcesContent":["import { FocusTrapShards } from '../';\n\nconst focusableElements = [\n\t'input:not([disabled]):not([type=hidden])',\n\t'select:not([disabled])',\n\t'textarea:not([disabled])',\n\t'button:not([disabled])',\n\t'a[href]',\n\t'area[href]',\n\t'summary',\n\t'iframe',\n\t'object',\n\t'embed',\n\t'audio[controls]',\n\t'video[controls]',\n\t'[contenteditable]',\n\t'[tabindex]:not([disabled]):not([tabindex=\"-1\"])',\n];\n\nexport const focusableSelector = focusableElements.join(\n\t':not([hidden]):not([tabindex=\"-1\"]),'\n);\nexport const priorityFocusableSelector = 'input, textarea';\nexport const active = () => document?.activeElement as HTMLElement;\n\nexport const getScopeElements = (shards: FocusTrapShards): HTMLElement[] => {\n\tif (!shards) return [];\n\n\treturn toArray(shards)\n\t\t.map((el) => (el as React.RefObject<any>).current ?? el)\n\t\t.filter((el) => el instanceof HTMLElement);\n};\n\nconst queryOnElement = (el: HTMLElement, selector: string) => {\n\tlet result = [];\n\n\tif (el.matches(selector)) result.push(el); // Return self if matches\n\n\tconst nodeList = el.querySelectorAll(selector);\n\n\tif (nodeList.length > 0)\n\t\tresult = result.concat(Array.from(nodeList) as HTMLElement[]);\n\n\treturn result.length > 0 ? result : null;\n};\n\n// True if `display: none`, etc.\nconst isHidden = (el: HTMLElement) => !el?.offsetWidth || !el?.offsetHeight;\n\nexport const queryOnScope = (\n\tscope: HTMLElement | HTMLElement[],\n\tselector: string\n) => {\n\tlet targetElements: HTMLElement[] = toArray(scope);\n\n\tif (targetElements.length === 0) return null;\n\n\ttargetElements = targetElements\n\t\t.map((el) => queryOnElement(el, selector))\n\t\t.flat()\n\t\t.filter((el) => !isHidden(el));\n\n\tif (targetElements.length === 0) return null;\n\n\treturn targetElements;\n};\n\nexport const getFocusables = (\n\tscope: HTMLElement | HTMLElement[],\n\tselector: string = focusableSelector // Crucial thing\n) => {\n\tconst focusables = queryOnScope(scope, selector);\n\n\tif (!focusables || focusables.length === 0)\n\t\treturn { focusables: [], first: null, last: null };\n\n\tconst first = focusables[0];\n\tconst last = focusables[focusables.length - 1];\n\n\treturn { focusables, first, last };\n};\n\nexport const isInside = (\n\tscope: HTMLElement[],\n\ttarget: HTMLElement | Element\n) => {\n\tconst scopeElement = scope.find((item) => item?.contains(target));\n\n\tif (!scopeElement) return false;\n\n\t// Check if target element is inside another FocusTrap scope\n\tif (isInsideNestedTrap(scopeElement, target)) return false;\n\n\treturn true;\n};\n\nconst isInsideNestedTrap = (\n\tscopeElement: HTMLElement,\n\ttarget: HTMLElement | Element\n) => {\n\tlet current = target;\n\tlet found = false;\n\n\t// Check if some parent of active element has nested useFocusTrap marker\n\twhile (scopeElement.contains(current) && scopeElement !== current) {\n\t\tif (current.hasAttribute('data-focus-locked')) {\n\t\t\tfound = true; // Nested scope found\n\t\t\tbreak;\n\t\t}\n\t\tcurrent = current.parentElement;\n\t}\n\treturn found;\n};\n\nexport const tabIndexInside = (scope: FocusTrapShards) => {\n\treturn getScopeElements(scope).some((el) =>\n\t\tgetFocusables(el).focusables.some((e) => getTabIndex(e) > 0)\n\t);\n};\n\nexport const shardsUtils = (initialScope: HTMLElement | HTMLElement[]) => {\n\tlet currentShardIdx = 0;\n\tconst scope = toArray(initialScope);\n\n\tscope.forEach((el, i) => {\n\t\tif (el?.contains(active())) currentShardIdx = i;\n\t});\n\n\tconst nextShardIdx = nextIdx(scope, currentShardIdx);\n\tconst prevShardIdx = prevIdx(scope, currentShardIdx);\n\n\tconst current = getFocusables(scope[currentShardIdx]);\n\tconst next = getFocusables(scope[nextShardIdx]);\n\tconst prev = getFocusables(scope[prevShardIdx]);\n\n\treturn {\n\t\tfirstCurrentShard: current?.first,\n\t\tlastCurrentShard: current?.last,\n\t\tfirstNextShard: next.first,\n\t\tlastPrevShard: prev.last,\n\t};\n};\n\nexport const focusNext = (\n\tscope: HTMLElement | HTMLElement[],\n\tevent?: React.KeyboardEvent<HTMLElement>\n) => {\n\tconst { first, last } = getFocusables(scope);\n\tconst shards = shardsUtils(scope);\n\n\tif (active() === last) {\n\t\tevent?.preventDefault(); // Prevent focus on focusable outside of useFocusLock\n\t\tfirst.focus();\n\t\treturn;\n\t}\n\tif (active() === shards.lastCurrentShard) {\n\t\tevent?.preventDefault();\n\t\tshards.firstNextShard.focus();\n\t}\n};\n\nexport const focusPrev = (\n\tscope: HTMLElement | HTMLElement[],\n\tevent?: React.KeyboardEvent<HTMLElement>\n) => {\n\tconst { first, last } = getFocusables(scope);\n\tconst shards = shardsUtils(scope);\n\n\tif (active() === first) {\n\t\tevent?.preventDefault(); // Prevent focusing on focusable outside of useFocusLock scope\n\t\tlast.focus();\n\t\treturn;\n\t}\n\tif (active() === shards.firstCurrentShard) {\n\t\tevent?.preventDefault();\n\t\tshards.lastPrevShard.focus();\n\t}\n};\n\nexport const toArray = (obj: any) => (obj instanceof Array ? obj : [obj]);\n\nexport const prevIdx = (array: any[], current: number) => {\n\tif (current < 0) return current;\n\treturn current === 0 ? array.length - 1 : current - 1;\n};\n\nexport const nextIdx = (array: any[], current: number) => {\n\tif (current < 0) return current;\n\treturn current === array.length - 1 ? 0 : current + 1;\n};\n\nconst getTabIndex = (el: HTMLElement) => {\n\tconst idx = parseInt(el.getAttribute('tabIndex'), 10);\n\tif (!idx) return 0;\n\treturn idx;\n};\n\n// Focus on prev focusable if focusable was removed\nconst focusPrevOnUnmount = (el: HTMLElement, scope: HTMLElement[]) => {\n\tconst { focusables: f1 } = getFocusables(scope);\n\tconst idx = f1.indexOf(el);\n\tconst length1 = f1.length;\n\n\tsetTimeout(() => {\n\t\tconst { focusables: f2 } = getFocusables(scope);\n\n\t\tif (document?.body.contains(el)) return;\n\t\tif (f2.length === 0) return;\n\t\tif (length1 !== f2.length + 1) return;\n\n\t\tidx === 0 ? f2[f2.length - 1].focus() : f2[idx - 1].focus();\n\t}, 10);\n};\n\nexport const handleFocusablesUnmount = (scope: HTMLElement[]) => {\n\tconst once = { once: true };\n\n\tgetFocusables(scope).focusables.forEach((el) => {\n\t\tconst handleBlur = () => focusPrevOnUnmount(el, scope);\n\t\tel.removeEventListener('blur', handleBlur);\n\t\tel.addEventListener('blur', handleBlur, once);\n\t});\n};\n\nexport const setFocusLockMarkers = (scope: HTMLElement[]) => {\n\tscope.forEach((el) => el.setAttribute('data-focus-locked', ''));\n};\n\nexport const cleanFocusLockMarkers = (scope: HTMLElement[]) => {\n\tscope.forEach((el) => el.removeAttribute('data-focus-locked'));\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusTrap.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EACN,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,YAAY,GACZ,MAAM,YAAY,CAAC;AAiDpB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,QAA2B,EAAE,EACN,EAAE;IACzB,MAAM,EACL,SAAS,GAAG,KAAK,EACjB,kBAAkB,GAAG,KAAK,EAC1B,QAAQ,GAAG,KAAK,EAChB,mBAAmB,GAAG,KAAK,EAC3B,SAAS,GAAG,IAAI,EAChB,YAAY,GAAG,IAAI,EACnB,MAAM,GAAG,EAAE,KAER,KAAK,EADL,IAAI,UACJ,KAAK,EATH,6GASL,CAAQ,CAAC;IACV,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAiC,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC;IAExC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC;IACxD,qBAAqB,CAAC;QACrB,YAAY,EAAE,YAAY;QAC1B,OAAO,EAAE,CAAC,QAAQ,IAAI,kBAAkB;KACxC,CAAC,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IACH,sBAAsB,iBACrB,KAAK,EACL,OAAO,EAAE,CAAC,QAAQ,IAAI,mBAAmB,IACtC,IAAI,EACN,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC"}
1
+ {"version":3,"file":"useFocusTrap.js","sourceRoot":"","sources":["../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EACN,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,YAAY,GACZ,MAAM,YAAY,CAAC;AAiDpB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,QAA2B,EAAE,EACN,EAAE;IACzB,MAAM,EACL,SAAS,GAAG,KAAK,EACjB,kBAAkB,GAAG,KAAK,EAC1B,QAAQ,GAAG,KAAK,EAChB,mBAAmB,GAAG,KAAK,EAC3B,SAAS,GAAG,IAAI,EAChB,YAAY,GAAG,IAAI,EACnB,MAAM,GAAG,EAAE,KAER,KAAK,EADL,IAAI,UACJ,KAAK,EATH,6GASL,CAAQ,CAAC;IACV,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAiC,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,CAAC;IAExC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC;IACxD,qBAAqB,CAAC;QACrB,YAAY,EAAE,YAAY;QAC1B,OAAO,EAAE,CAAC,QAAQ,IAAI,kBAAkB;KACxC,CAAC,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IACH,sBAAsB,iBACrB,KAAK,EACL,OAAO,EAAE,CAAC,QAAQ,IAAI,mBAAmB,IACtC,IAAI,EACN,CAAC;IACH,YAAY,CAAC;QACZ,KAAK;QACL,OAAO,EAAE,CAAC,QAAQ,IAAI,SAAS;KAC/B,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC","sourcesContent":["import { useRef } from 'react';\n\nimport {\n\tuseAutoFocus,\n\tuseAutoFocusContainer,\n\tuseRestoreFocus,\n\tuseDisableClickOutside,\n\tuseFocusLock,\n} from './internal';\n\nexport type FocusTrapShards = (\n\t| HTMLElement\n\t| React.RefObject<HTMLElement>\n\t| React.MutableRefObject<HTMLElement>\n)[];\n\nexport interface UseFocusTrapProps {\n\t/**\n\t * Sets focus on first focusable element.\n\t * Default is false.\n\t */\n\tautoFocus?: boolean;\n\n\t/**\n\t * Sets focus on container referenced within useFocusTrap.\n\t * Default is false.\n\t *\n\t * Required to properly handle focus inside Modal, Drawer, etc.\n\t * Executed before useAutoFocus hook, thus might be overriden by it.\n\t */\n\tautoFocusContainer?: boolean;\n\n\t/** Disables everything: focus lock, auto focus, restore focus, etc. */\n\tdisabled?: boolean;\n\n\t/**\n\t * Prevents focus to move to another focusable element outside of useFocusTrap when clicked/tapped.\n\t * Default is false.\n\t */\n\tdisableClickOutside?: boolean;\n\n\t/**\n\t * Prevent user from from tabbing focus out of scope'ed elements\n\t * Default is true.\n\t */\n\tfocusLock?: boolean;\n\n\t/**\n\t * Disables restoring focus position on unmount.\n\t * Default is true.\n\t */\n\trestoreFocus?: boolean;\n\n\t/** Array of refs or nodes, which useFocusTrap should consider as a part of it */\n\tshards?: FocusTrapShards;\n}\n\nexport const useFocusTrap = (\n\tprops: UseFocusTrapProps = {}\n): React.RefObject<any> => {\n\tconst {\n\t\tautoFocus = false,\n\t\tautoFocusContainer = false,\n\t\tdisabled = false,\n\t\tdisableClickOutside = false,\n\t\tfocusLock = true,\n\t\trestoreFocus = true,\n\t\tshards = [],\n\t\t...rest\n\t} = props;\n\tconst focusTrapRef = useRef(null) as React.RefObject<HTMLElement>;\n\tconst scope = [focusTrapRef, ...shards];\n\n\tuseRestoreFocus({ enabled: !disabled && restoreFocus });\n\tuseAutoFocusContainer({\n\t\tcontainerRef: focusTrapRef,\n\t\tenabled: !disabled && autoFocusContainer,\n\t});\n\tuseAutoFocus({\n\t\tscope,\n\t\tenabled: !disabled && autoFocus,\n\t});\n\tuseDisableClickOutside({\n\t\tscope,\n\t\tenabled: !disabled && disableClickOutside,\n\t\t...rest, // Passing onClickOutside\n\t});\n\tuseFocusLock({\n\t\tscope,\n\t\tenabled: !disabled && focusLock,\n\t});\n\n\treturn focusTrapRef;\n};\n"]}
@@ -1,36 +1,34 @@
1
1
  import { useEffect, useState, useCallback } from 'react';
2
2
  export const useFocusVisible = (target, onBlur, onFocus) => {
3
3
  const [isFocusVisible, setIsFocusVisible] = useState(true);
4
- const [focusVisible, setFocusVisible] = useState(true);
4
+ const [keyboardUser, setKeyboardUser] = useState(true);
5
5
  const [focused, setFocused] = useState(false);
6
6
  const focusFunction = (event) => {
7
- if (onFocus)
8
- onFocus(event);
7
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
9
8
  setIsFocusVisible(true);
10
9
  setFocused(true);
11
10
  };
12
11
  const blurFunction = (event) => {
13
- if (onBlur)
14
- onBlur(event);
12
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
15
13
  setIsFocusVisible(false);
16
14
  setFocused(false);
17
15
  };
18
16
  useEffect(() => {
19
- setIsFocusVisible(focusVisible);
20
- }, [focused, focusVisible]);
17
+ setIsFocusVisible(keyboardUser);
18
+ }, [focused, keyboardUser]);
21
19
  // KeyboardEvent
22
20
  const keyboardEventHandler = useCallback(() => {
23
- setFocusVisible(true);
21
+ setKeyboardUser(true);
24
22
  }, []);
25
23
  // MouseEvent
26
24
  const mouseEventHandler = useCallback(() => {
27
- setFocusVisible(false);
25
+ setKeyboardUser(false);
28
26
  }, []);
29
27
  const useEvent = (event, callback) => {
30
28
  useEffect(() => {
31
29
  const { current } = target;
32
- current.addEventListener(event, callback);
33
- return () => current.removeEventListener(event, callback);
30
+ current === null || current === void 0 ? void 0 : current.addEventListener(event, callback);
31
+ return () => current === null || current === void 0 ? void 0 : current.removeEventListener(event, callback);
34
32
  }, [event, callback]);
35
33
  };
36
34
  useEvent('mousedown', mouseEventHandler);
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusVisible.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,MAA4B,EAC5B,MAAuD,EACvD,OAAwD,EACvD,EAAE;IACH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC9D,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC7D,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,UAAU,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACd,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,gBAAgB;IAChB,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,eAAe,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,aAAa;IACb,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,eAAe,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,QAAoB,EAAE,EAAE;QACxD,SAAS,CAAC,GAAG,EAAE;YACd,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAC3B,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1C,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAExC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC,CAAC"}
1
+ {"version":3,"file":"useFocusVisible.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,MAA4B,EAC5B,MAAuD,EACvD,OAAwD,EACvD,EAAE;IACH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC9D,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,CAAC;QACjB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC7D,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,KAAK,CAAC,CAAC;QAChB,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,UAAU,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACd,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5B,gBAAgB;IAChB,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,eAAe,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,aAAa;IACb,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,eAAe,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,QAAoB,EAAE,EAAE;QACxD,SAAS,CAAC,GAAG,EAAE;YACd,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAC3B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3C,OAAO,GAAG,EAAE,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAExC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC,CAAC","sourcesContent":["import React, { useEffect, useState, useCallback } from 'react';\n\nexport const useFocusVisible = (\n\ttarget: React.RefObject<any>,\n\tonBlur?: (event: React.FocusEvent<HTMLElement>) => void,\n\tonFocus?: (event: React.FocusEvent<HTMLElement>) => void\n) => {\n\tconst [isFocusVisible, setIsFocusVisible] = useState(true);\n\tconst [keyboardUser, setKeyboardUser] = useState(true);\n\tconst [focused, setFocused] = useState(false);\n\n\tconst focusFunction = (event: React.FocusEvent<HTMLElement>) => {\n\t\tonFocus?.(event);\n\t\tsetIsFocusVisible(true);\n\t\tsetFocused(true);\n\t};\n\n\tconst blurFunction = (event: React.FocusEvent<HTMLElement>) => {\n\t\tonBlur?.(event);\n\t\tsetIsFocusVisible(false);\n\t\tsetFocused(false);\n\t};\n\n\tuseEffect(() => {\n\t\tsetIsFocusVisible(keyboardUser);\n\t}, [focused, keyboardUser]);\n\n\t// KeyboardEvent\n\tconst keyboardEventHandler = useCallback(() => {\n\t\tsetKeyboardUser(true);\n\t}, []);\n\n\t// MouseEvent\n\tconst mouseEventHandler = useCallback(() => {\n\t\tsetKeyboardUser(false);\n\t}, []);\n\n\tconst useEvent = (event: string, callback: () => void) => {\n\t\tuseEffect(() => {\n\t\t\tconst { current } = target;\n\t\t\tcurrent?.addEventListener(event, callback);\n\t\t\treturn () => current?.removeEventListener(event, callback);\n\t\t}, [event, callback]);\n\t};\n\n\tuseEvent('mousedown', mouseEventHandler);\n\tuseEvent('mouseup', mouseEventHandler);\n\tuseEvent('keydown', keyboardEventHandler);\n\tuseEvent('keyup', keyboardEventHandler);\n\n\treturn { isFocusVisible, focusFunction, blurFunction };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusVisible.test.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFocusVisible.test.js","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.test.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { render } from '@testing-library/react';\nimport '@testing-library/jest-dom';\nimport userEvent from '@testing-library/user-event';\nimport { useFocusVisible } from './useFocusVisible';\n\nconst TestButton = ({ children, onFocus, onBlur }: any) => {\n\tconst btnRef = React.useRef(null);\n\tconst { isFocusVisible, focusFunction, blurFunction } = useFocusVisible(\n\t\tbtnRef,\n\t\tonFocus,\n\t\tonBlur\n\t);\n\treturn (\n\t\t<button\n\t\t\tclassName={isFocusVisible ? 'focus-visible' : ''}\n\t\t\tref={btnRef}\n\t\t\tonBlur={blurFunction}\n\t\t\tonFocus={focusFunction}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n};\n\ndescribe('useFocusVisible', () => {\n\tconst user = userEvent.setup();\n\n\tit('should have class focus-visible on Button on load', () => {\n\t\tconst { container } = render(<TestButton />);\n\t\tconst element = container.firstChild as HTMLElement;\n\n\t\t// expect that focus-visible class is added on initial load\n\t\texpect(element.classList.contains('focus-visible')).toBe(true);\n\t});\n\n\tit('should remove class focus-visible on mouse interaction', async () => {\n\t\tconst { getByText } = render(<TestButton>Test Button</TestButton>);\n\t\tconst element = getByText('Test Button');\n\t\texpect(element.classList.contains('focus-visible')).toBe(true);\n\n\t\t// click on the button and expect the class to be removed\n\t\tawait user.click(getByText('Test Button'));\n\t\texpect(element.classList.contains('focus-visible')).toBe(false);\n\t});\n\n\tit('should reintroduce focus-visible class after first time', async () => {\n\t\tconst { getByText } = render(\n\t\t\t<React.Fragment>\n\t\t\t\t<TestButton>Test Button 0</TestButton>\n\t\t\t\t<TestButton>Test Button 1</TestButton>\n\t\t\t</React.Fragment>\n\t\t);\n\t\tconst firstBtn = getByText('Test Button 0');\n\t\tconst secondBtn = getByText('Test Button 1');\n\t\texpect(firstBtn.classList.contains('focus-visible')).toBe(true);\n\t\texpect(secondBtn.classList.contains('focus-visible')).toBe(true);\n\n\t\t// click first button and expect the class to be removed\n\t\tawait user.click(getByText('Test Button 0'));\n\t\texpect(firstBtn.classList.contains('focus-visible')).toBe(false);\n\n\t\t// tab and shift tab to refocus first button\n\t\tawait user.tab();\n\t\tawait user.tab({ shift: true });\n\n\t\t// expect that first button will get the class back\n\t\texpect(firstBtn.classList.contains('focus-visible')).toBe(true);\n\t});\n\n\tit('should call onFocus when focused', async () => {\n\t\t// const onFocus = console.log('working');\n\t\tconst onFocus = jest.fn();\n\t\trender(<TestButton onFocus={onFocus}>Hello</TestButton>);\n\n\t\tawait user.tab();\n\t\tawait user.tab({ shift: true });\n\t\texpect(onFocus).toHaveBeenCalledTimes(1);\n\t});\n\n\tit('should call onFocus when focused', async () => {\n\t\t// const onFocus = console.log('working');\n\t\tconst onBlur = jest.fn();\n\t\trender(<TestButton onBlur={onBlur}>Hello</TestButton>);\n\n\t\tawait user.tab();\n\t\texpect(onBlur).toHaveBeenCalledTimes(1);\n\t});\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useMergedRef.js","sourceRoot":"","sources":["../../src/hooks/useMergedRef.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,YAAY,CAAC,GAAG,IAAW;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAEjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEjB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAC9B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACvB;iBAAM;gBACN,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;aAChC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,SAAS,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"useMergedRef.js","sourceRoot":"","sources":["../../src/hooks/useMergedRef.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,YAAY,CAAC,GAAG,IAAW;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAEjC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,CAAC,GAAG;gBAAE,OAAO;YAEjB,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;gBAC9B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACvB;iBAAM;gBACN,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;aAChC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,SAAS,CAAC;AAClB,CAAC","sourcesContent":["import React from 'react';\n\nexport function useMergedRef(...refs: any[]) {\n\tconst targetRef = React.useRef();\n\n\tReact.useEffect(() => {\n\t\trefs.forEach((ref) => {\n\t\t\tif (!ref) return;\n\n\t\t\tif (typeof ref === 'function') {\n\t\t\t\tref(targetRef.current);\n\t\t\t} else {\n\t\t\t\tref.current = targetRef.current;\n\t\t\t}\n\t\t});\n\t}, [refs]);\n\n\treturn targetRef;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useScreenSize.js","sourceRoot":"","sources":["../../src/hooks/useScreenSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,UAAU,aAAa;IAC5B,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,aAAa,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IAExE,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC9D,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzD,OAAO,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC3D,KAAK,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACvD,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KACjE,CAAC;IAEF,MAAM,UAAU,GAAG;QAClB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC7D,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACxD,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC1D,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACtD,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KAChE,CAAC;IAEF,OAAO;QACN,WAAW;QACX,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;KACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"useScreenSize.js","sourceRoot":"","sources":["../../src/hooks/useScreenSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,UAAU,aAAa;IAC5B,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,aAAa,EAAE,CAAC;IAElD,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IAExE,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC9D,MAAM,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACzD,OAAO,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC3D,KAAK,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACvD,UAAU,EAAE,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KACjE,CAAC;IAEF,MAAM,UAAU,GAAG;QAClB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC7D,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACxD,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC1D,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;QACtD,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC;KAChE,CAAC;IAEF,OAAO;QACN,WAAW;QACX,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;KACX,CAAC;AACH,CAAC","sourcesContent":["import { tokens } from '@servicetitan/tokens/core';\nimport { useWindowSize } from '@react-hook/window-size';\n\nexport function useScreenSize() {\n\tconst [innerWidth, innerHeight] = useWindowSize();\n\n\tconst orientation = innerWidth > innerHeight ? 'landscape' : 'portrait';\n\n\tconst smallerThan = {\n\t\tmobile: innerWidth <= parseFloat(tokens.breakpointMobileLarge),\n\t\ttablet: innerWidth <= parseFloat(tokens.breakpointTablet),\n\t\tdesktop: innerWidth <= parseFloat(tokens.breakpointDesktop),\n\t\tlarge: innerWidth <= parseFloat(tokens.breakpointLarge),\n\t\twidescreen: innerWidth <= parseFloat(tokens.breakpointWidescreen),\n\t};\n\n\tconst largerThan = {\n\t\tmobile: innerWidth > parseFloat(tokens.breakpointMobileLarge),\n\t\ttablet: innerWidth > parseFloat(tokens.breakpointTablet),\n\t\tdesktop: innerWidth > parseFloat(tokens.breakpointDesktop),\n\t\tlarge: innerWidth > parseFloat(tokens.breakpointLarge),\n\t\twidescreen: innerWidth > parseFloat(tokens.breakpointWidescreen),\n\t};\n\n\treturn {\n\t\tsmallerThan,\n\t\tlargerThan,\n\t\tinnerWidth,\n\t\tinnerHeight,\n\t\torientation,\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useScrollPosition.js","sourceRoot":"","sources":["../../src/hooks/useScrollPosition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgBvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAA2B,EAAe,EAAE;IAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;QAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,WAAW,EAAE;YAClE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;SACjE;KACD;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc;QAC/C,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;KACP,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,MAAM,YAAY,GAAG,GAAG,EAAE;YACzB,IAAI,EAAE,EAAE;gBACP,MAAM,mBAAmB,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;gBAC5D,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;gBAE5D,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;gBAChE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC;gBAE9D,QAAQ,CAAC;oBACR,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;oBACzD,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,IAAI,EAAE,mBAAmB;wBACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC;wBAC3B,CAAC,CAAC,KAAK;iBACR,CAAC,CAAC;aACH;QACF,CAAC,CAAC;QAEF,kCAAkC;QAClC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAEpC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAIF,yEAAyE;AACzE,SAAS,EAAE,CACV,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,+CAArB,GAAG,EACF,GAAI,IAAoD,CACxD,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CACX,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,mBAAmB,+CAAxB,GAAG,EACF,GAAI,IAAuD,CAC3D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"useScrollPosition.js","sourceRoot":"","sources":["../../src/hooks/useScrollPosition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAgBvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAA2B,EAAe,EAAE;IAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;QAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,WAAW,EAAE;YAClE,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;SACjE;KACD;IAED,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc;QAC/C,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;KACP,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,MAAM,YAAY,GAAG,GAAG,EAAE;YACzB,IAAI,EAAE,EAAE;gBACP,MAAM,mBAAmB,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;gBAC5D,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;gBAE5D,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;gBAChE,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC;gBAE9D,QAAQ,CAAC;oBACR,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;oBACzD,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;oBACtD,IAAI,EAAE,mBAAmB;wBACxB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC;wBAC3B,CAAC,CAAC,KAAK;iBACR,CAAC,CAAC;aACH;QACF,CAAC,CAAC;QAEF,kCAAkC;QAClC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAEpC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAExE,OAAO,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAIF,yEAAyE;AACzE,SAAS,EAAE,CACV,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,gBAAgB,+CAArB,GAAG,EACF,GAAI,IAAoD,CACxD,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CACX,GAAa,EACb,GAAG,IAEiC;;IAEpC,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,mBAAmB,+CAAxB,GAAG,EACF,GAAI,IAAuD,CAC3D,CAAC;AACH,CAAC","sourcesContent":["import { RefObject, useEffect, useState } from 'react';\n\ninterface ScrollState {\n\t/** Scroll position from top, false if no scrollbar */\n\ttop: number | boolean;\n\n\t/** Scroll position from right, false if no scrollbar */\n\tright: number | boolean;\n\n\t/** Scroll position from bottom, false if no scrollbar */\n\tbottom: number | boolean;\n\n\t/** Scroll position from left, false if no scrollbar */\n\tleft: number | boolean;\n}\n\nexport const useScrollPosition = (ref: RefObject<HTMLElement>): ScrollState => {\n\tif (process.env.NODE_ENV === 'development') {\n\t\tif (typeof ref !== 'object' || typeof ref.current === 'undefined') {\n\t\t\tconsole.error('useScrollPosition expects a single ref argument');\n\t\t}\n\t}\n\n\tconst [state, setState] = useState<ScrollState>({\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0,\n\t});\n\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tconst handleScroll = () => {\n\t\t\tif (el) {\n\t\t\t\tconst horizontalScrollbar = el.scrollWidth > el.clientWidth;\n\t\t\t\tconst verticalScrollbar = el.scrollHeight > el.clientHeight;\n\n\t\t\t\tconst bottom = el.scrollHeight - el.scrollTop - el.clientHeight;\n\t\t\t\tconst right = el.scrollWidth - el.scrollLeft - el.clientWidth;\n\n\t\t\t\tsetState({\n\t\t\t\t\ttop: verticalScrollbar ? Math.round(el.scrollTop) : false,\n\t\t\t\t\tright: horizontalScrollbar ? Math.round(right) : false,\n\t\t\t\t\tbottom: verticalScrollbar ? Math.round(bottom) : false,\n\t\t\t\t\tleft: horizontalScrollbar\n\t\t\t\t\t\t? Math.round(el.scrollLeft)\n\t\t\t\t\t\t: false,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t/** Handle scroll once rendered */\n\t\trequestAnimationFrame(handleScroll);\n\n\t\tel && on(el, 'scroll', handleScroll, { capture: false, passive: true });\n\n\t\treturn () => el && off(el, 'scroll', handleScroll);\n\t}, [ref]);\n\n\treturn state;\n};\n\ntype El = Window | Document | HTMLElement | EventTarget;\n\n/* https://github.com/streamich/react-use/blob/master/src/misc/util.ts */\nfunction on<T extends El>(\n\tobj: T | null,\n\t...args:\n\t\t| Parameters<T['addEventListener']>\n\t\t| [string, Function | null, ...any]\n): void {\n\tobj?.addEventListener?.(\n\t\t...(args as Parameters<HTMLElement['addEventListener']>)\n\t);\n}\n\nfunction off<T extends El>(\n\tobj: T | null,\n\t...args:\n\t\t| Parameters<T['removeEventListener']>\n\t\t| [string, Function | null, ...any]\n): void {\n\tobj?.removeEventListener?.(\n\t\t...(args as Parameters<HTMLElement['removeEventListener']>)\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useVisuallyHidden.js","sourceRoot":"","sources":["../../src/hooks/useVisuallyHidden.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACrC,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,GAAG;QACZ,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,UAAU;KACH,CAAC;IAEnB,OAAO,EAAE,WAAW,EAAE,CAAC;AACxB,CAAC,CAAC"}
1
+ {"version":3,"file":"useVisuallyHidden.js","sourceRoot":"","sources":["../../src/hooks/useVisuallyHidden.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACrC,MAAM,WAAW,GAAG;QACnB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,GAAG;QACZ,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,UAAU;KACH,CAAC;IAEnB,OAAO,EAAE,WAAW,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import { CSSProperties } from 'react';\n\nexport const useVisuallyHidden = () => {\n\tconst hiddenStyle = {\n\t\tborder: 'none',\n\t\tdisplay: 'table-cell',\n\t\tfloat: 'left',\n\t\theight: '1px',\n\t\twidth: '1px',\n\t\tmaxWidth: '1px',\n\t\tminWidth: '1px',\n\t\tmargin: '-.5em -1px -.5em 0',\n\t\topacity: '0',\n\t\toverflow: 'hidden',\n\t\tpadding: '0',\n\t\tpointerEvents: 'none',\n\t\tposition: 'absolute',\n\t} as CSSProperties;\n\n\treturn { hiddenStyle };\n};\n"]}