@basic-ui/core 0.0.38 → 0.0.41

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 (266) hide show
  1. package/build/cjs/index.js +1 -1
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Accordion/Accordion.d.ts +7 -7
  4. package/build/esm/Accordion/Accordion.js +22 -17
  5. package/build/esm/Accordion/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/AccordionBody.d.ts +5 -5
  7. package/build/esm/Accordion/AccordionBody.js +23 -15
  8. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  9. package/build/esm/Accordion/AccordionHeader.d.ts +6 -6
  10. package/build/esm/Accordion/AccordionHeader.js +45 -31
  11. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  12. package/build/esm/Accordion/AccordionItem.d.ts +7 -7
  13. package/build/esm/Accordion/AccordionItem.js +16 -16
  14. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  15. package/build/esm/Accordion/context.d.ts +4 -4
  16. package/build/esm/Accordion/context.js +12 -10
  17. package/build/esm/Accordion/context.js.map +1 -1
  18. package/build/esm/CheckBox/CheckBox.d.ts +6 -6
  19. package/build/esm/CheckBox/CheckBox.js +19 -12
  20. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  21. package/build/esm/ComboBox/Combobox.d.ts +10 -10
  22. package/build/esm/ComboBox/Combobox.js +52 -46
  23. package/build/esm/ComboBox/Combobox.js.map +1 -1
  24. package/build/esm/ComboBox/ComboboxButton.d.ts +8 -8
  25. package/build/esm/ComboBox/ComboboxButton.js +19 -20
  26. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  27. package/build/esm/ComboBox/ComboboxInput.d.ts +10 -10
  28. package/build/esm/ComboBox/ComboboxInput.js +52 -50
  29. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  30. package/build/esm/ComboBox/ComboboxLabel.d.ts +5 -5
  31. package/build/esm/ComboBox/ComboboxLabel.js +11 -12
  32. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  33. package/build/esm/ComboBox/ComboboxList.d.ts +6 -6
  34. package/build/esm/ComboBox/ComboboxList.js +15 -17
  35. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  36. package/build/esm/ComboBox/ComboboxOption.d.ts +7 -7
  37. package/build/esm/ComboBox/ComboboxOption.js +31 -34
  38. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  39. package/build/esm/ComboBox/ComboboxPopover.d.ts +8 -8
  40. package/build/esm/ComboBox/ComboboxPopover.js +15 -17
  41. package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
  42. package/build/esm/ComboBox/context.d.ts +13 -13
  43. package/build/esm/ComboBox/context.js +6 -5
  44. package/build/esm/ComboBox/context.js.map +1 -1
  45. package/build/esm/ComboBox/hooks.d.ts +4 -4
  46. package/build/esm/ComboBox/hooks.js +82 -115
  47. package/build/esm/ComboBox/hooks.js.map +1 -1
  48. package/build/esm/ComboBox/makeHash.js +3 -3
  49. package/build/esm/ComboBox/makeHash.js.map +1 -1
  50. package/build/esm/FocusLock/FocusLock.d.ts +7 -7
  51. package/build/esm/FocusLock/FocusLock.js +17 -16
  52. package/build/esm/FocusLock/FocusLock.js.map +1 -1
  53. package/build/esm/FocusLock/tabUtils.js +4 -4
  54. package/build/esm/FocusLock/tabUtils.js.map +1 -1
  55. package/build/esm/FocusLock/useFocusLock.d.ts +4 -4
  56. package/build/esm/FocusLock/useFocusLock.js +10 -11
  57. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  58. package/build/esm/List/List.d.ts +6 -6
  59. package/build/esm/List/List.js +5 -6
  60. package/build/esm/List/List.js.map +1 -1
  61. package/build/esm/List/ListItem.d.ts +6 -6
  62. package/build/esm/List/ListItem.js +5 -6
  63. package/build/esm/List/ListItem.js.map +1 -1
  64. package/build/esm/List/context.js +3 -3
  65. package/build/esm/List/context.js.map +1 -1
  66. package/build/esm/Menu/Menu.d.ts +6 -6
  67. package/build/esm/Menu/Menu.js +29 -21
  68. package/build/esm/Menu/Menu.js.map +1 -1
  69. package/build/esm/Menu/MenuButton.d.ts +10 -10
  70. package/build/esm/Menu/MenuButton.js +27 -24
  71. package/build/esm/Menu/MenuButton.js.map +1 -1
  72. package/build/esm/Menu/MenuItem.d.ts +6 -6
  73. package/build/esm/Menu/MenuItem.js +23 -24
  74. package/build/esm/Menu/MenuItem.js.map +1 -1
  75. package/build/esm/Menu/MenuList.d.ts +5 -5
  76. package/build/esm/Menu/MenuList.js +61 -45
  77. package/build/esm/Menu/MenuList.js.map +1 -1
  78. package/build/esm/Menu/MenuPopover.d.ts +6 -6
  79. package/build/esm/Menu/MenuPopover.js +8 -10
  80. package/build/esm/Menu/MenuPopover.js.map +1 -1
  81. package/build/esm/Menu/context.d.ts +2 -2
  82. package/build/esm/Menu/context.js +11 -8
  83. package/build/esm/Menu/context.js.map +1 -1
  84. package/build/esm/Modal/Modal.d.ts +6 -7
  85. package/build/esm/Modal/Modal.js +11 -10
  86. package/build/esm/Modal/Modal.js.map +1 -1
  87. package/build/esm/Modal/ModalBackdrop.d.ts +6 -6
  88. package/build/esm/Modal/ModalBackdrop.js +20 -19
  89. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  90. package/build/esm/Popper/Popper.d.ts +8 -8
  91. package/build/esm/Popper/Popper.js +46 -37
  92. package/build/esm/Popper/Popper.js.map +1 -1
  93. package/build/esm/Popper/PopperArrow.d.ts +5 -5
  94. package/build/esm/Popper/PopperArrow.js +8 -9
  95. package/build/esm/Popper/PopperArrow.js.map +1 -1
  96. package/build/esm/Popper/context.d.ts +1 -1
  97. package/build/esm/Popper/context.js +5 -3
  98. package/build/esm/Popper/context.js.map +1 -1
  99. package/build/esm/Portal/Portal.d.ts +1 -1
  100. package/build/esm/Portal/Portal.js +6 -5
  101. package/build/esm/Portal/Portal.js.map +1 -1
  102. package/build/esm/RadioButton/RadioButton.d.ts +7 -7
  103. package/build/esm/RadioButton/RadioButton.js +12 -13
  104. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  105. package/build/esm/RadioButton/RadioGroup.d.ts +8 -8
  106. package/build/esm/RadioButton/RadioGroup.js +22 -16
  107. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  108. package/build/esm/RadioButton/context.d.ts +2 -2
  109. package/build/esm/RadioButton/context.js +6 -5
  110. package/build/esm/RadioButton/context.js.map +1 -1
  111. package/build/esm/SkipNav/SkipNav.d.ts +6 -6
  112. package/build/esm/SkipNav/SkipNav.js +5 -6
  113. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  114. package/build/esm/Spinner/Spinner.d.ts +7 -7
  115. package/build/esm/Spinner/Spinner.js +41 -31
  116. package/build/esm/Spinner/Spinner.js.map +1 -1
  117. package/build/esm/Spinner/SpinnerButton.d.ts +6 -6
  118. package/build/esm/Spinner/SpinnerButton.js +11 -12
  119. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  120. package/build/esm/Spinner/context.d.ts +2 -2
  121. package/build/esm/Spinner/context.js +6 -5
  122. package/build/esm/Spinner/context.js.map +1 -1
  123. package/build/esm/Tabs/Tab.d.ts +6 -6
  124. package/build/esm/Tabs/Tab.js +29 -29
  125. package/build/esm/Tabs/Tab.js.map +1 -1
  126. package/build/esm/Tabs/TabList.d.ts +6 -6
  127. package/build/esm/Tabs/TabList.js +24 -21
  128. package/build/esm/Tabs/TabList.js.map +1 -1
  129. package/build/esm/Tabs/TabPanel.d.ts +6 -6
  130. package/build/esm/Tabs/TabPanel.js +12 -12
  131. package/build/esm/Tabs/TabPanel.js.map +1 -1
  132. package/build/esm/Tabs/TabPanels.d.ts +5 -5
  133. package/build/esm/Tabs/TabPanels.js +13 -12
  134. package/build/esm/Tabs/TabPanels.js.map +1 -1
  135. package/build/esm/Tabs/Tabs.d.ts +6 -6
  136. package/build/esm/Tabs/Tabs.js +27 -14
  137. package/build/esm/Tabs/Tabs.js.map +1 -1
  138. package/build/esm/Tabs/context.d.ts +3 -3
  139. package/build/esm/Tabs/context.js +12 -10
  140. package/build/esm/Tabs/context.js.map +1 -1
  141. package/build/esm/Tooltip/Tooltip.d.ts +7 -7
  142. package/build/esm/Tooltip/Tooltip.js +18 -16
  143. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  144. package/build/esm/Tooltip/stateMachine.js +56 -80
  145. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  146. package/build/esm/Tooltip/useTooltip.d.ts +7 -7
  147. package/build/esm/Tooltip/useTooltip.js +32 -30
  148. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  149. package/build/esm/hooks/useAutoFocus.d.ts +2 -2
  150. package/build/esm/hooks/useAutoFocus.js +1 -1
  151. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  152. package/build/esm/hooks/useChildrenCounter.d.ts +1 -1
  153. package/build/esm/hooks/useChildrenCounter.js +6 -4
  154. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  155. package/build/esm/hooks/useControlledState.d.ts +3 -7
  156. package/build/esm/hooks/useControlledState.js +7 -2
  157. package/build/esm/hooks/useControlledState.js.map +1 -1
  158. package/build/esm/hooks/useFocusReturn.d.ts +1 -1
  159. package/build/esm/hooks/useFocusReturn.js +6 -6
  160. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  161. package/build/esm/hooks/useFocusState.d.ts +3 -3
  162. package/build/esm/hooks/useFocusState.js +13 -9
  163. package/build/esm/hooks/useFocusState.js.map +1 -1
  164. package/build/esm/hooks/useGestureHandlers.d.ts +5 -5
  165. package/build/esm/hooks/useGestureHandlers.js +59 -63
  166. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  167. package/build/esm/hooks/useMeasure.d.ts +2 -2
  168. package/build/esm/hooks/useMeasure.js +13 -7
  169. package/build/esm/hooks/useMeasure.js.map +1 -1
  170. package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
  171. package/build/esm/hooks/useOnClickOutside.js +5 -4
  172. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  173. package/build/esm/hooks/useOnKeyDown.js +4 -3
  174. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  175. package/build/esm/hooks/useReducerMachine.d.ts +1 -1
  176. package/build/esm/hooks/useReducerMachine.js +13 -10
  177. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  178. package/build/esm/hooks/useRemoveBodyScroll.js +4 -4
  179. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  180. package/build/esm/hooks/useScope.d.ts +1 -1
  181. package/build/esm/hooks/useScope.js +10 -12
  182. package/build/esm/hooks/useScope.js.map +1 -1
  183. package/build/esm/hooks/useThrottle.js +10 -5
  184. package/build/esm/hooks/useThrottle.js.map +1 -1
  185. package/build/esm/utils/assignRef.d.ts +1 -1
  186. package/build/esm/utils/assignRef.js +7 -3
  187. package/build/esm/utils/assignRef.js.map +1 -1
  188. package/build/esm/utils/createSubscription.js +7 -5
  189. package/build/esm/utils/createSubscription.js.map +1 -1
  190. package/build/esm/utils/rubberBandClamp.js +5 -2
  191. package/build/esm/utils/rubberBandClamp.js.map +1 -1
  192. package/build/esm/utils/wrapEvent.d.ts +3 -3
  193. package/build/esm/utils/wrapEvent.js +7 -3
  194. package/build/esm/utils/wrapEvent.js.map +1 -1
  195. package/build/tsconfig-build.tsbuildinfo +1 -0
  196. package/build/tsconfig.tsbuildinfo +1 -1
  197. package/package.json +3 -3
  198. package/src/Accordion/Accordion.story.tsx +1 -0
  199. package/src/Accordion/Accordion.tsx +15 -7
  200. package/src/Accordion/AccordionBody.tsx +7 -8
  201. package/src/Accordion/AccordionHeader.tsx +35 -33
  202. package/src/Accordion/AccordionItem.tsx +15 -7
  203. package/src/Accordion/context.ts +5 -3
  204. package/src/CheckBox/CheckBox.tsx +6 -6
  205. package/src/ComboBox/ComboBox.story.tsx +5 -5
  206. package/src/ComboBox/Combobox.tsx +12 -17
  207. package/src/ComboBox/ComboboxButton.tsx +16 -15
  208. package/src/ComboBox/ComboboxInput.tsx +19 -10
  209. package/src/ComboBox/ComboboxLabel.tsx +5 -4
  210. package/src/ComboBox/ComboboxList.tsx +6 -6
  211. package/src/ComboBox/ComboboxOption.tsx +11 -7
  212. package/src/ComboBox/ComboboxPopover.tsx +14 -8
  213. package/src/ComboBox/context.ts +14 -12
  214. package/src/ComboBox/hooks.tsx +9 -11
  215. package/src/FocusLock/FocusLock.tsx +14 -7
  216. package/src/FocusLock/useFocusLock.ts +5 -3
  217. package/src/List/List.tsx +5 -5
  218. package/src/List/ListItem.tsx +5 -5
  219. package/src/Menu/Menu.story.tsx +7 -6
  220. package/src/Menu/Menu.tsx +16 -8
  221. package/src/Menu/MenuButton.tsx +15 -16
  222. package/src/Menu/MenuItem.tsx +15 -10
  223. package/src/Menu/MenuList.tsx +8 -12
  224. package/src/Menu/MenuPopover.tsx +7 -5
  225. package/src/Menu/context.ts +10 -4
  226. package/src/Modal/Modal.story.tsx +1 -0
  227. package/src/Modal/Modal.tsx +12 -6
  228. package/src/Modal/ModalBackdrop.tsx +15 -9
  229. package/src/Modal/NavDrawer.story.tsx +3 -3
  230. package/src/Popper/Popper.story.tsx +3 -4
  231. package/src/Popper/Popper.tsx +13 -12
  232. package/src/Popper/PopperArrow.tsx +5 -4
  233. package/src/Popper/context.ts +2 -1
  234. package/src/Portal/Portal.tsx +1 -1
  235. package/src/RadioButton/RadioButton.story.tsx +1 -0
  236. package/src/RadioButton/RadioButton.tsx +14 -7
  237. package/src/RadioButton/RadioGroup.tsx +14 -10
  238. package/src/RadioButton/context.ts +2 -4
  239. package/src/SkipNav/SkipNav.tsx +5 -5
  240. package/src/Spinner/Spinner.story.tsx +1 -0
  241. package/src/Spinner/Spinner.tsx +14 -9
  242. package/src/Spinner/SpinnerButton.tsx +12 -6
  243. package/src/Spinner/context.ts +2 -3
  244. package/src/Tabs/Tab.story.tsx +1 -0
  245. package/src/Tabs/Tab.tsx +16 -11
  246. package/src/Tabs/TabList.tsx +6 -5
  247. package/src/Tabs/TabPanel.tsx +6 -5
  248. package/src/Tabs/TabPanels.tsx +4 -4
  249. package/src/Tabs/Tabs.tsx +6 -7
  250. package/src/Tabs/context.ts +4 -4
  251. package/src/Tooltip/Tooltip.story.tsx +3 -2
  252. package/src/Tooltip/Tooltip.tsx +11 -9
  253. package/src/Tooltip/stateMachine.ts +1 -1
  254. package/src/Tooltip/useTooltip.ts +19 -10
  255. package/src/hooks/useAutoFocus.ts +3 -1
  256. package/src/hooks/useChildrenCounter.ts +2 -1
  257. package/src/hooks/useControlledState.ts +7 -8
  258. package/src/hooks/useFocusReturn.ts +2 -1
  259. package/src/hooks/useFocusState.ts +4 -2
  260. package/src/hooks/useGestureHandlers.ts +11 -7
  261. package/src/hooks/useMeasure.ts +2 -1
  262. package/src/hooks/useOnClickOutside.ts +2 -2
  263. package/src/hooks/useReducerMachine.ts +2 -1
  264. package/src/hooks/useScope.ts +2 -1
  265. package/src/utils/assignRef.ts +1 -1
  266. package/src/utils/wrapEvent.ts +4 -5
@@ -1,4 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+
4
+ var _on, _on2, _on3, _states;
2
5
 
3
6
  /* eslint-disable @typescript-eslint/no-use-before-define */
4
7
 
@@ -10,82 +13,46 @@ import { scopeQuery } from './scopeQuery'; /////////////////////////////////////
10
13
  // States
11
14
  // Nothing going on, waiting for the user to type or use the arrow keys
12
15
 
13
- export const IDLE = 'IDLE'; // The component is suggesting options as the user types
16
+ export var IDLE = 'IDLE'; // The component is suggesting options as the user types
14
17
 
15
- const SUGGESTING = 'SUGGESTING'; // The user is using the keyboard to navigate the list, not typing
18
+ var SUGGESTING = 'SUGGESTING'; // The user is using the keyboard to navigate the list, not typing
16
19
 
17
- export const NAVIGATING = 'NAVIGATING';
20
+ export var NAVIGATING = 'NAVIGATING';
18
21
  ////////////////////////////////////////////////////////////////////////////////
19
22
  // Actions:
20
23
  // Used to sync the state with controlled state, right after mounting
21
- export const INIT = 'INIT'; // User cleared the value w/ backspace, but input still has focus
24
+ export var INIT = 'INIT'; // User cleared the value w/ backspace, but input still has focus
22
25
 
23
- export const CLEAR = 'CLEAR'; // User cleared the value w/ backspace, but input still has focus
26
+ export var CLEAR = 'CLEAR'; // User cleared the value w/ backspace, but input still has focus
24
27
 
25
- export const CLEAR_SELECTION = 'CLEAR_SELECTION'; // User is typing
28
+ export var CLEAR_SELECTION = 'CLEAR_SELECTION'; // User is typing
26
29
 
27
- export const CHANGE = 'CHANGE'; // User is navigating w/ the keyboard
30
+ export var CHANGE = 'CHANGE'; // User is navigating w/ the keyboard
28
31
 
29
- export const NAVIGATE = 'NAVIGATE'; // User can be navigating with keyboard and then click instead, we want the
32
+ export var NAVIGATE = 'NAVIGATE'; // User can be navigating with keyboard and then click instead, we want the
30
33
  // value from the click, not the current nav item
31
34
 
32
- const SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';
33
- export const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK'; // Pretty self-explanatory, user can hit escape or blur to close the popover
35
+ var SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';
36
+ export var SELECT_WITH_CLICK = 'SELECT_WITH_CLICK'; // Pretty self-explanatory, user can hit escape or blur to close the popover
34
37
 
35
- const ESCAPE = 'ESCAPE';
36
- const BLUR = 'BLUR';
37
- export const FOCUS = 'FOCUS';
38
- export const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';
39
- export const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';
38
+ var ESCAPE = 'ESCAPE';
39
+ var BLUR = 'BLUR';
40
+ export var FOCUS = 'FOCUS';
41
+ export var OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';
42
+ export var CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';
40
43
  ////////////////////////////////////////////////////////////////////////////////
41
- export const stateChart = {
44
+ export var stateChart = {
42
45
  initial: IDLE,
43
- states: {
44
- [IDLE]: {
45
- on: {
46
- [BLUR]: IDLE,
47
- [CLEAR]: IDLE,
48
- [INIT]: IDLE,
49
- [CLEAR_SELECTION]: IDLE,
50
- [CHANGE]: SUGGESTING,
51
- [FOCUS]: SUGGESTING,
52
- [NAVIGATE]: NAVIGATING,
53
- [OPEN_WITH_BUTTON]: SUGGESTING
54
- }
55
- },
56
- [SUGGESTING]: {
57
- on: {
58
- [CHANGE]: SUGGESTING,
59
- [FOCUS]: SUGGESTING,
60
- [INIT]: SUGGESTING,
61
- [NAVIGATE]: NAVIGATING,
62
- [CLEAR]: IDLE,
63
- [CLEAR_SELECTION]: SUGGESTING,
64
- [ESCAPE]: IDLE,
65
- [BLUR]: IDLE,
66
- [SELECT_WITH_CLICK]: IDLE,
67
- [CLOSE_WITH_BUTTON]: IDLE
68
- }
69
- },
70
- [NAVIGATING]: {
71
- on: {
72
- [CHANGE]: SUGGESTING,
73
- [FOCUS]: SUGGESTING,
74
- [INIT]: NAVIGATING,
75
- [CLEAR]: IDLE,
76
- [CLEAR_SELECTION]: NAVIGATING,
77
- [BLUR]: IDLE,
78
- [ESCAPE]: IDLE,
79
- [NAVIGATE]: NAVIGATING,
80
- [SELECT_WITH_KEYBOARD]: IDLE,
81
- [SELECT_WITH_CLICK]: IDLE,
82
- [CLOSE_WITH_BUTTON]: IDLE
83
- }
84
- }
85
- }
46
+ states: (_states = {}, _defineProperty(_states, IDLE, {
47
+ on: (_on = {}, _defineProperty(_on, BLUR, IDLE), _defineProperty(_on, CLEAR, IDLE), _defineProperty(_on, INIT, IDLE), _defineProperty(_on, CLEAR_SELECTION, IDLE), _defineProperty(_on, CHANGE, SUGGESTING), _defineProperty(_on, FOCUS, SUGGESTING), _defineProperty(_on, NAVIGATE, NAVIGATING), _defineProperty(_on, OPEN_WITH_BUTTON, SUGGESTING), _on)
48
+ }), _defineProperty(_states, SUGGESTING, {
49
+ on: (_on2 = {}, _defineProperty(_on2, CHANGE, SUGGESTING), _defineProperty(_on2, FOCUS, SUGGESTING), _defineProperty(_on2, INIT, SUGGESTING), _defineProperty(_on2, NAVIGATE, NAVIGATING), _defineProperty(_on2, CLEAR, IDLE), _defineProperty(_on2, CLEAR_SELECTION, SUGGESTING), _defineProperty(_on2, ESCAPE, IDLE), _defineProperty(_on2, BLUR, IDLE), _defineProperty(_on2, SELECT_WITH_CLICK, IDLE), _defineProperty(_on2, CLOSE_WITH_BUTTON, IDLE), _on2)
50
+ }), _defineProperty(_states, NAVIGATING, {
51
+ on: (_on3 = {}, _defineProperty(_on3, CHANGE, SUGGESTING), _defineProperty(_on3, FOCUS, SUGGESTING), _defineProperty(_on3, INIT, NAVIGATING), _defineProperty(_on3, CLEAR, IDLE), _defineProperty(_on3, CLEAR_SELECTION, NAVIGATING), _defineProperty(_on3, BLUR, IDLE), _defineProperty(_on3, ESCAPE, IDLE), _defineProperty(_on3, NAVIGATE, NAVIGATING), _defineProperty(_on3, SELECT_WITH_KEYBOARD, IDLE), _defineProperty(_on3, SELECT_WITH_CLICK, IDLE), _defineProperty(_on3, CLOSE_WITH_BUTTON, IDLE), _on3)
52
+ }), _states)
86
53
  };
87
54
  export function comboboxReducer(data, action) {
88
- const nextState = _extends({}, data, {
55
+ var nextState = _extends({}, data, {
89
56
  state: action.nextState,
90
57
  lastActionType: action.type
91
58
  });
@@ -154,8 +121,10 @@ export function comboboxReducer(data, action) {
154
121
  throw new Error("Unknown action ".concat(action.type));
155
122
  }
156
123
  }
157
- const visibleStates = [SUGGESTING, NAVIGATING];
158
- export const isVisible = state => visibleStates.indexOf(state) >= 0; ////////////////////////////////////////////////////////////////////////////////
124
+ var visibleStates = [SUGGESTING, NAVIGATING];
125
+ export var isVisible = function isVisible(state) {
126
+ return visibleStates.indexOf(state) >= 0;
127
+ }; ////////////////////////////////////////////////////////////////////////////////
159
128
  // The rest is all implementation details
160
129
  // Move focus back to the input if we start navigating w/ the
161
130
  // keyboard after focus has moved to any focusable content in
@@ -164,7 +133,7 @@ export const isVisible = state => visibleStates.indexOf(state) >= 0; ///////////
164
133
  export function useFocusManagement(lastActionType, inputRef) {
165
134
  // useEffect so that the cursor goes to the end of the input instead
166
135
  // of awkwardly at the beginning, unclear to me why ...
167
- useEffect(() => {
136
+ useEffect(function () {
168
137
  if (lastActionType === NAVIGATE || lastActionType === ESCAPE || lastActionType === SELECT_WITH_CLICK || lastActionType === OPEN_WITH_BUTTON) {
169
138
  inputRef.current && inputRef.current.focus();
170
139
  }
@@ -172,8 +141,10 @@ export function useFocusManagement(lastActionType, inputRef) {
172
141
  }
173
142
 
174
143
  function getNextItem(currentItem, incr, optionsItems, autocomplete) {
175
- const index = currentItem === '' ? -1 : optionsItems.findIndex(n => String(n.id) === currentItem);
176
- const optionsLen = optionsItems.length; // Nothing selected, either go to start, or end
144
+ var index = currentItem === '' ? -1 : optionsItems.findIndex(function (n) {
145
+ return String(n.id) === currentItem;
146
+ });
147
+ var optionsLen = optionsItems.length; // Nothing selected, either go to start, or end
177
148
 
178
149
  if (index < 0) {
179
150
  if (incr > 0) {
@@ -184,7 +155,7 @@ function getNextItem(currentItem, incr, optionsItems, autocomplete) {
184
155
  return optionsItems[optionsLen - 1].id;
185
156
  }
186
157
  } else if (autocomplete) {
187
- const nextIndex = index + incr;
158
+ var nextIndex = index + incr;
188
159
 
189
160
  if (nextIndex < 0 || nextIndex >= optionsLen) {
190
161
  // Next is outside the bounds of list, return nothing selected
@@ -200,23 +171,22 @@ function getNextItem(currentItem, incr, optionsItems, autocomplete) {
200
171
 
201
172
 
202
173
  export function useKeyDown() {
203
- const {
204
- data: {
205
- text,
206
- navigationItem
207
- },
208
- onSelect,
209
- optionsRef,
210
- inputRef,
211
- state,
212
- transition,
213
- autocompletePropRef,
214
- clearOnEscapeRef,
215
- persistSelectionRef,
216
- listScope
217
- } = useComboBoxContext();
174
+ var _useComboBoxContext = useComboBoxContext(),
175
+ _useComboBoxContext$d = _useComboBoxContext.data,
176
+ text = _useComboBoxContext$d.text,
177
+ navigationItem = _useComboBoxContext$d.navigationItem,
178
+ onSelect = _useComboBoxContext.onSelect,
179
+ optionsRef = _useComboBoxContext.optionsRef,
180
+ inputRef = _useComboBoxContext.inputRef,
181
+ state = _useComboBoxContext.state,
182
+ transition = _useComboBoxContext.transition,
183
+ autocompletePropRef = _useComboBoxContext.autocompletePropRef,
184
+ clearOnEscapeRef = _useComboBoxContext.clearOnEscapeRef,
185
+ persistSelectionRef = _useComboBoxContext.persistSelectionRef,
186
+ listScope = _useComboBoxContext.listScope;
187
+
218
188
  return function handleKeyDown(event) {
219
- const optionNodes = listScope.current.queryAllNodes(scopeQuery);
189
+ var optionNodes = listScope.current.queryAllNodes(scopeQuery);
220
190
 
221
191
  switch (event.key) {
222
192
  case 'ArrowUp':
@@ -224,7 +194,7 @@ export function useKeyDown() {
224
194
  {
225
195
  // Don't scroll the page
226
196
  event.preventDefault();
227
- const optionsLen = optionNodes.length; // If the developer didn't render any options, there's no point in
197
+ var optionsLen = optionNodes.length; // If the developer didn't render any options, there's no point in
228
198
  // trying to navigate--but seriously what the heck? Give us some
229
199
  // options fam.
230
200
 
@@ -239,14 +209,14 @@ export function useKeyDown() {
239
209
  });
240
210
  } else {
241
211
  // ArrowUp decreases index, ArrowDown increases
242
- const incr = event.key === 'ArrowUp' ? -1 : 1; // When autocompletting, we'll not cycle through the list directly
212
+ var incr = event.key === 'ArrowUp' ? -1 : 1; // When autocompletting, we'll not cycle through the list directly
243
213
 
244
- const autocomplete = autocompletePropRef.current; // Get next selected item
214
+ var autocomplete = autocompletePropRef.current; // Get next selected item
245
215
 
246
- const nextItem = getNextItem(navigationItem, incr, optionNodes, autocomplete);
247
- const value = nextItem !== '' ? optionsRef.current[nextItem].text : null;
216
+ var nextItem = getNextItem(navigationItem, incr, optionNodes, autocomplete);
217
+ var value = nextItem !== '' ? optionsRef.current[nextItem].text : null;
248
218
  transition(NAVIGATE, {
249
- value,
219
+ value: value,
250
220
  item: nextItem
251
221
  });
252
222
  }
@@ -264,18 +234,19 @@ export function useKeyDown() {
264
234
  } // emulate a inputRef change event, might not work in future versions of React
265
235
 
266
236
 
267
- const lastValue = inputRef.current.value;
237
+ var lastValue = inputRef.current.value;
268
238
  inputRef.current.value = '';
269
- const tracker = inputRef.current._valueTracker;
239
+ var tracker = inputRef.current._valueTracker;
270
240
 
271
241
  if (tracker) {
272
242
  tracker.setValue(lastValue);
273
243
  }
274
244
 
275
- const event = new Event('change', {
245
+ var _event = new Event('change', {
276
246
  bubbles: true
277
247
  });
278
- inputRef.current.dispatchEvent(event);
248
+
249
+ inputRef.current.dispatchEvent(_event);
279
250
  }
280
251
 
281
252
  break;
@@ -284,10 +255,9 @@ export function useKeyDown() {
284
255
  case 'Enter':
285
256
  {
286
257
  if (state === NAVIGATING && navigationItem !== '') {
287
- const {
288
- value: navigationValue,
289
- text: navigationText
290
- } = optionsRef.current[navigationItem]; // don't want to submit forms
258
+ var _optionsRef$current$n = optionsRef.current[navigationItem],
259
+ navigationValue = _optionsRef$current$n.value,
260
+ navigationText = _optionsRef$current$n.text; // don't want to submit forms
291
261
 
292
262
  event.preventDefault();
293
263
  onSelect && onSelect(navigationText, navigationItem, navigationValue);
@@ -303,22 +273,20 @@ export function useKeyDown() {
303
273
  };
304
274
  }
305
275
  export function useBlur() {
306
- const {
307
- data: {
308
- navigationItem,
309
- text: stateText
310
- },
311
- transition,
312
- optionsRef,
313
- popoverRef,
314
- inputRef,
315
- buttonRef,
316
- onSelect,
317
- selectOnBlur // not implemented yet
318
-
319
- } = useComboBoxContext();
276
+ var _useComboBoxContext2 = useComboBoxContext(),
277
+ _useComboBoxContext2$ = _useComboBoxContext2.data,
278
+ navigationItem = _useComboBoxContext2$.navigationItem,
279
+ stateText = _useComboBoxContext2$.text,
280
+ transition = _useComboBoxContext2.transition,
281
+ optionsRef = _useComboBoxContext2.optionsRef,
282
+ popoverRef = _useComboBoxContext2.popoverRef,
283
+ inputRef = _useComboBoxContext2.inputRef,
284
+ buttonRef = _useComboBoxContext2.buttonRef,
285
+ onSelect = _useComboBoxContext2.onSelect,
286
+ selectOnBlur = _useComboBoxContext2.selectOnBlur;
287
+
320
288
  return function handleBlur() {
321
- requestAnimationFrame(() => {
289
+ requestAnimationFrame(function () {
322
290
  // we on want to close only if focus rests outside the combobox
323
291
  if (document.activeElement !== inputRef.current && document.activeElement !== buttonRef.current && popoverRef.current) {
324
292
  if (popoverRef.current.contains(document.activeElement)) {// focus landed inside the combobox, keep it open
@@ -335,10 +303,9 @@ export function useBlur() {
335
303
  });
336
304
  } else {
337
305
  // select the currently selected item
338
- const {
339
- value: navigationValue,
340
- text: navigationText
341
- } = optionsRef.current[navigationItem];
306
+ var _optionsRef$current$n2 = optionsRef.current[navigationItem],
307
+ navigationValue = _optionsRef$current$n2.value,
308
+ navigationText = _optionsRef$current$n2.text;
342
309
  onSelect && onSelect(navigationText, navigationItem, navigationValue);
343
310
  transition(BLUR, {
344
311
  text: navigationText,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ComboBox/hooks.tsx"],"names":["useEffect","getCircularIndex","useComboBoxContext","scopeQuery","IDLE","SUGGESTING","NAVIGATING","INIT","CLEAR","CLEAR_SELECTION","CHANGE","NAVIGATE","SELECT_WITH_KEYBOARD","SELECT_WITH_CLICK","ESCAPE","BLUR","FOCUS","OPEN_WITH_BUTTON","CLOSE_WITH_BUTTON","stateChart","initial","states","on","comboboxReducer","data","action","nextState","state","lastActionType","type","text","navigationItem","item","persistSelection","Error","visibleStates","isVisible","indexOf","useFocusManagement","inputRef","current","focus","getNextItem","currentItem","incr","optionsItems","autocomplete","index","findIndex","n","String","id","optionsLen","length","nextIndex","useKeyDown","onSelect","optionsRef","transition","autocompletePropRef","clearOnEscapeRef","persistSelectionRef","listScope","handleKeyDown","event","optionNodes","queryAllNodes","key","preventDefault","nextItem","value","lastValue","tracker","_valueTracker","setValue","Event","bubbles","dispatchEvent","navigationValue","navigationText","useBlur","stateText","popoverRef","buttonRef","selectOnBlur","handleBlur","requestAnimationFrame","document","activeElement","contains"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable default-case */\nimport { useEffect } from 'react';\nimport {\n StateChart as GenericStateChart,\n StateMachineState,\n} from '../hooks/useReducerMachine';\nimport { getCircularIndex } from '../utils/getCircularIndex';\nimport { useComboBoxContext } from './context';\nimport { scopeQuery } from './scopeQuery';\n\n////////////////////////////////////////////////////////////////////////////////\n// States\n\n// Nothing going on, waiting for the user to type or use the arrow keys\nexport const IDLE = 'IDLE';\n\n// The component is suggesting options as the user types\nconst SUGGESTING = 'SUGGESTING';\n\n// The user is using the keyboard to navigate the list, not typing\nexport const NAVIGATING = 'NAVIGATING';\n\nexport type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;\n\n////////////////////////////////////////////////////////////////////////////////\n// Actions:\n\n// Used to sync the state with controlled state, right after mounting\nexport const INIT = 'INIT';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR = 'CLEAR';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR_SELECTION = 'CLEAR_SELECTION';\n\n// User is typing\nexport const CHANGE = 'CHANGE';\n\n// User is navigating w/ the keyboard\nexport const NAVIGATE = 'NAVIGATE';\n\n// User can be navigating with keyboard and then click instead, we want the\n// value from the click, not the current nav item\nconst SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';\nexport const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK';\n\n// Pretty self-explanatory, user can hit escape or blur to close the popover\nconst ESCAPE = 'ESCAPE';\nconst BLUR = 'BLUR';\n\nexport const FOCUS = 'FOCUS';\n\nexport const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';\n\nexport const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';\n\nexport type ActionTypes =\n | typeof CLEAR\n | typeof CLEAR_SELECTION\n | typeof CHANGE\n | typeof INIT\n | typeof NAVIGATE\n | typeof SELECT_WITH_KEYBOARD\n | typeof SELECT_WITH_CLICK\n | typeof ESCAPE\n | typeof BLUR\n | typeof FOCUS\n | typeof OPEN_WITH_BUTTON\n | typeof CLOSE_WITH_BUTTON;\n\n////////////////////////////////////////////////////////////////////////////////\nexport const stateChart: GenericStateChart<StateTypes, ActionTypes> = {\n initial: IDLE,\n states: {\n [IDLE]: {\n on: {\n [BLUR]: IDLE,\n [CLEAR]: IDLE,\n [INIT]: IDLE,\n [CLEAR_SELECTION]: IDLE,\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [OPEN_WITH_BUTTON]: SUGGESTING,\n },\n },\n [SUGGESTING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: SUGGESTING,\n [ESCAPE]: IDLE,\n [BLUR]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n [NAVIGATING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: NAVIGATING,\n [BLUR]: IDLE,\n [ESCAPE]: IDLE,\n [NAVIGATE]: NAVIGATING,\n [SELECT_WITH_KEYBOARD]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n },\n};\n\nexport interface ReducerState\n extends StateMachineState<StateTypes, ActionTypes> {\n item: string;\n navigationItem: string;\n text: string;\n}\n\ninterface ActionObject {\n type: ActionTypes;\n state: StateTypes;\n nextState: StateTypes;\n [rest: string]: any;\n}\n\nexport function comboboxReducer(\n data: Readonly<ReducerState>,\n action: ActionObject\n): ReducerState {\n const nextState = {\n ...data,\n state: action.nextState,\n lastActionType: action.type,\n };\n\n switch (action.type) {\n case INIT:\n case CHANGE:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: '',\n };\n case NAVIGATE:\n case OPEN_WITH_BUTTON:\n if (action.persistSelection) {\n return {\n ...nextState,\n navigationItem: data.item,\n };\n }\n\n return {\n ...nextState,\n navigationItem: action.item,\n };\n case CLEAR_SELECTION:\n return {\n ...nextState,\n navigationItem: '',\n };\n case CLEAR:\n return {\n ...nextState,\n text: '',\n navigationItem: '',\n item: '',\n };\n case BLUR:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: action.item,\n };\n case CLOSE_WITH_BUTTON:\n case ESCAPE:\n return {\n ...nextState,\n navigationItem: '',\n item: '',\n };\n case SELECT_WITH_CLICK:\n case SELECT_WITH_KEYBOARD:\n return {\n ...nextState,\n text: action.text,\n item: action.item,\n navigationItem: '',\n };\n case FOCUS:\n return {\n ...nextState,\n navigationItem: action.item,\n };\n\n default:\n throw new Error(`Unknown action ${action.type}`);\n }\n}\n\nconst visibleStates = [SUGGESTING, NAVIGATING];\nexport const isVisible = (state: any) => visibleStates.indexOf(state) >= 0;\n\n////////////////////////////////////////////////////////////////////////////////\n// The rest is all implementation details\n\n// Move focus back to the input if we start navigating w/ the\n// keyboard after focus has moved to any focusable content in\n// the popup.\nexport function useFocusManagement(\n lastActionType: ActionTypes,\n inputRef: React.MutableRefObject<HTMLInputElement | null>\n) {\n // useEffect so that the cursor goes to the end of the input instead\n // of awkwardly at the beginning, unclear to me why ...\n useEffect(() => {\n if (\n lastActionType === NAVIGATE ||\n lastActionType === ESCAPE ||\n lastActionType === SELECT_WITH_CLICK ||\n lastActionType === OPEN_WITH_BUTTON\n ) {\n inputRef.current && inputRef.current.focus();\n }\n });\n}\n\nfunction getNextItem(\n currentItem: string,\n incr: number,\n optionsItems: HTMLElement[],\n autocomplete: boolean\n): string {\n const index =\n currentItem === ''\n ? -1\n : optionsItems.findIndex((n) => String(n.id) === currentItem);\n\n const optionsLen = optionsItems.length;\n\n // Nothing selected, either go to start, or end\n if (index < 0) {\n if (incr > 0) {\n // Go to start\n return optionsItems[0].id;\n } else {\n // Go to end\n return optionsItems[optionsLen - 1].id;\n }\n } else if (autocomplete) {\n const nextIndex = index + incr;\n\n if (nextIndex < 0 || nextIndex >= optionsLen) {\n // Next is outside the bounds of list, return nothing selected\n return '';\n }\n }\n\n // I'm sure it won't be null, we already check optionsLen above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return optionsItems[getCircularIndex(index + incr, optionsLen)!].id;\n}\n\n// We want the same events when the input or the popup have focus (HOW COOL ARE\n// HOOKS BTW?) This is probably the hairiest piece but it's not bad.\nexport function useKeyDown() {\n const {\n data: { text, navigationItem },\n onSelect,\n optionsRef,\n inputRef,\n state,\n transition,\n autocompletePropRef,\n clearOnEscapeRef,\n persistSelectionRef,\n listScope,\n } = useComboBoxContext();\n\n return function handleKeyDown(event: React.KeyboardEvent<any>) {\n const optionNodes = listScope.current.queryAllNodes(scopeQuery);\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n // Don't scroll the page\n event.preventDefault();\n\n const optionsLen = optionNodes.length;\n\n // If the developer didn't render any options, there's no point in\n // trying to navigate--but seriously what the heck? Give us some\n // options fam.\n if (optionsLen === 0) {\n return;\n }\n\n if (state === IDLE) {\n // Opening a closed list\n transition(NAVIGATE, {\n persistSelection: persistSelectionRef.current,\n });\n } else {\n // ArrowUp decreases index, ArrowDown increases\n const incr = event.key === 'ArrowUp' ? -1 : 1;\n\n // When autocompletting, we'll not cycle through the list directly\n const autocomplete = autocompletePropRef.current;\n\n // Get next selected item\n const nextItem = getNextItem(\n navigationItem,\n incr,\n optionNodes,\n autocomplete\n );\n\n const value =\n nextItem !== '' ? optionsRef.current[nextItem].text : null;\n\n transition(NAVIGATE, { value, item: nextItem });\n }\n break;\n }\n case 'Escape': {\n if (state !== IDLE) {\n transition(ESCAPE);\n } else if (state === IDLE && text !== '') {\n if (!inputRef.current || !clearOnEscapeRef.current) {\n break;\n }\n\n // emulate a inputRef change event, might not work in future versions of React\n const lastValue = inputRef.current.value;\n inputRef.current.value = '';\n\n const tracker = (inputRef.current as any)._valueTracker;\n if (tracker) {\n tracker.setValue(lastValue);\n }\n\n const event = new Event('change', { bubbles: true });\n inputRef.current.dispatchEvent(event);\n }\n break;\n }\n case 'Enter': {\n if (state === NAVIGATING && navigationItem !== '') {\n const {\n value: navigationValue,\n text: navigationText,\n } = optionsRef.current[navigationItem];\n\n // don't want to submit forms\n event.preventDefault();\n onSelect && onSelect(navigationText, navigationItem, navigationValue);\n transition(SELECT_WITH_KEYBOARD, {\n text: navigationText,\n item: navigationItem,\n });\n }\n break;\n }\n }\n };\n}\n\nexport function useBlur() {\n const {\n data: { navigationItem, text: stateText },\n transition,\n optionsRef,\n popoverRef,\n inputRef,\n buttonRef,\n onSelect,\n selectOnBlur, // not implemented yet\n } = useComboBoxContext();\n\n return function handleBlur() {\n requestAnimationFrame(() => {\n // we on want to close only if focus rests outside the combobox\n if (\n document.activeElement !== inputRef.current &&\n document.activeElement !== buttonRef.current &&\n popoverRef.current\n ) {\n if (popoverRef.current.contains(document.activeElement)) {\n // focus landed inside the combobox, keep it open\n // in the future, we can make it not close, select, or anything\n // this way we can have like... checkboxes available in the\n // menu item, etc.\n } else {\n // focus landed outside the combobox, close it.\n if (!selectOnBlur || navigationItem === '') {\n // we don't wanna select on blur, or navigationIndex is invalid\n transition(BLUR, { text: stateText, item: '' });\n } else {\n // select the currently selected item\n const {\n value: navigationValue,\n text: navigationText,\n } = optionsRef.current[navigationItem];\n\n onSelect &&\n onSelect(navigationText, navigationItem, navigationValue);\n\n transition(BLUR, {\n text: navigationText,\n item: navigationItem,\n });\n }\n }\n }\n });\n };\n}\n"],"file":"hooks.js"}
1
+ {"version":3,"sources":["../../../src/ComboBox/hooks.tsx"],"names":["useEffect","getCircularIndex","useComboBoxContext","scopeQuery","IDLE","SUGGESTING","NAVIGATING","INIT","CLEAR","CLEAR_SELECTION","CHANGE","NAVIGATE","SELECT_WITH_KEYBOARD","SELECT_WITH_CLICK","ESCAPE","BLUR","FOCUS","OPEN_WITH_BUTTON","CLOSE_WITH_BUTTON","stateChart","initial","states","on","comboboxReducer","data","action","nextState","state","lastActionType","type","text","navigationItem","item","persistSelection","Error","visibleStates","isVisible","indexOf","useFocusManagement","inputRef","current","focus","getNextItem","currentItem","incr","optionsItems","autocomplete","index","findIndex","n","String","id","optionsLen","length","nextIndex","useKeyDown","onSelect","optionsRef","transition","autocompletePropRef","clearOnEscapeRef","persistSelectionRef","listScope","handleKeyDown","event","optionNodes","queryAllNodes","key","preventDefault","nextItem","value","lastValue","tracker","_valueTracker","setValue","Event","bubbles","dispatchEvent","navigationValue","navigationText","useBlur","stateText","popoverRef","buttonRef","selectOnBlur","handleBlur","requestAnimationFrame","document","activeElement","contains"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\n/* eslint-disable default-case */\nimport type { KeyboardEvent, MutableRefObject } from 'react';\nimport { useEffect } from 'react';\n\nimport type {\n StateChart as GenericStateChart,\n StateMachineState,\n} from '../hooks/useReducerMachine';\nimport { getCircularIndex } from '../utils/getCircularIndex';\nimport { useComboBoxContext } from './context';\nimport { scopeQuery } from './scopeQuery';\n\n////////////////////////////////////////////////////////////////////////////////\n// States\n\n// Nothing going on, waiting for the user to type or use the arrow keys\nexport const IDLE = 'IDLE';\n\n// The component is suggesting options as the user types\nconst SUGGESTING = 'SUGGESTING';\n\n// The user is using the keyboard to navigate the list, not typing\nexport const NAVIGATING = 'NAVIGATING';\n\nexport type StateTypes = typeof IDLE | typeof SUGGESTING | typeof NAVIGATING;\n\n////////////////////////////////////////////////////////////////////////////////\n// Actions:\n\n// Used to sync the state with controlled state, right after mounting\nexport const INIT = 'INIT';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR = 'CLEAR';\n\n// User cleared the value w/ backspace, but input still has focus\nexport const CLEAR_SELECTION = 'CLEAR_SELECTION';\n\n// User is typing\nexport const CHANGE = 'CHANGE';\n\n// User is navigating w/ the keyboard\nexport const NAVIGATE = 'NAVIGATE';\n\n// User can be navigating with keyboard and then click instead, we want the\n// value from the click, not the current nav item\nconst SELECT_WITH_KEYBOARD = 'SELECT_WITH_KEYBOARD';\nexport const SELECT_WITH_CLICK = 'SELECT_WITH_CLICK';\n\n// Pretty self-explanatory, user can hit escape or blur to close the popover\nconst ESCAPE = 'ESCAPE';\nconst BLUR = 'BLUR';\n\nexport const FOCUS = 'FOCUS';\n\nexport const OPEN_WITH_BUTTON = 'OPEN_WITH_BUTTON';\n\nexport const CLOSE_WITH_BUTTON = 'CLOSE_WITH_BUTTON';\n\nexport type ActionTypes =\n | typeof CLEAR\n | typeof CLEAR_SELECTION\n | typeof CHANGE\n | typeof INIT\n | typeof NAVIGATE\n | typeof SELECT_WITH_KEYBOARD\n | typeof SELECT_WITH_CLICK\n | typeof ESCAPE\n | typeof BLUR\n | typeof FOCUS\n | typeof OPEN_WITH_BUTTON\n | typeof CLOSE_WITH_BUTTON;\n\n////////////////////////////////////////////////////////////////////////////////\nexport const stateChart: GenericStateChart<StateTypes, ActionTypes> = {\n initial: IDLE,\n states: {\n [IDLE]: {\n on: {\n [BLUR]: IDLE,\n [CLEAR]: IDLE,\n [INIT]: IDLE,\n [CLEAR_SELECTION]: IDLE,\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [OPEN_WITH_BUTTON]: SUGGESTING,\n },\n },\n [SUGGESTING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: SUGGESTING,\n [NAVIGATE]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: SUGGESTING,\n [ESCAPE]: IDLE,\n [BLUR]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n [NAVIGATING]: {\n on: {\n [CHANGE]: SUGGESTING,\n [FOCUS]: SUGGESTING,\n [INIT]: NAVIGATING,\n [CLEAR]: IDLE,\n [CLEAR_SELECTION]: NAVIGATING,\n [BLUR]: IDLE,\n [ESCAPE]: IDLE,\n [NAVIGATE]: NAVIGATING,\n [SELECT_WITH_KEYBOARD]: IDLE,\n [SELECT_WITH_CLICK]: IDLE,\n [CLOSE_WITH_BUTTON]: IDLE,\n },\n },\n },\n};\n\nexport interface ReducerState\n extends StateMachineState<StateTypes, ActionTypes> {\n item: string;\n navigationItem: string;\n text: string;\n}\n\ninterface ActionObject {\n type: ActionTypes;\n state: StateTypes;\n nextState: StateTypes;\n [rest: string]: any;\n}\n\nexport function comboboxReducer(\n data: Readonly<ReducerState>,\n action: ActionObject\n): ReducerState {\n const nextState = {\n ...data,\n state: action.nextState,\n lastActionType: action.type,\n };\n\n switch (action.type) {\n case INIT:\n case CHANGE:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: '',\n };\n case NAVIGATE:\n case OPEN_WITH_BUTTON:\n if (action.persistSelection) {\n return {\n ...nextState,\n navigationItem: data.item,\n };\n }\n\n return {\n ...nextState,\n navigationItem: action.item,\n };\n case CLEAR_SELECTION:\n return {\n ...nextState,\n navigationItem: '',\n };\n case CLEAR:\n return {\n ...nextState,\n text: '',\n navigationItem: '',\n item: '',\n };\n case BLUR:\n return {\n ...nextState,\n text: action.text,\n navigationItem: '',\n item: action.item,\n };\n case CLOSE_WITH_BUTTON:\n case ESCAPE:\n return {\n ...nextState,\n navigationItem: '',\n item: '',\n };\n case SELECT_WITH_CLICK:\n case SELECT_WITH_KEYBOARD:\n return {\n ...nextState,\n text: action.text,\n item: action.item,\n navigationItem: '',\n };\n case FOCUS:\n return {\n ...nextState,\n navigationItem: action.item,\n };\n\n default:\n throw new Error(`Unknown action ${action.type}`);\n }\n}\n\nconst visibleStates = [SUGGESTING, NAVIGATING];\nexport const isVisible = (state: any) => visibleStates.indexOf(state) >= 0;\n\n////////////////////////////////////////////////////////////////////////////////\n// The rest is all implementation details\n\n// Move focus back to the input if we start navigating w/ the\n// keyboard after focus has moved to any focusable content in\n// the popup.\nexport function useFocusManagement(\n lastActionType: ActionTypes,\n inputRef: MutableRefObject<HTMLInputElement | null>\n) {\n // useEffect so that the cursor goes to the end of the input instead\n // of awkwardly at the beginning, unclear to me why ...\n useEffect(() => {\n if (\n lastActionType === NAVIGATE ||\n lastActionType === ESCAPE ||\n lastActionType === SELECT_WITH_CLICK ||\n lastActionType === OPEN_WITH_BUTTON\n ) {\n inputRef.current && inputRef.current.focus();\n }\n });\n}\n\nfunction getNextItem(\n currentItem: string,\n incr: number,\n optionsItems: HTMLElement[],\n autocomplete: boolean\n): string {\n const index =\n currentItem === ''\n ? -1\n : optionsItems.findIndex((n) => String(n.id) === currentItem);\n\n const optionsLen = optionsItems.length;\n\n // Nothing selected, either go to start, or end\n if (index < 0) {\n if (incr > 0) {\n // Go to start\n return optionsItems[0].id;\n } else {\n // Go to end\n return optionsItems[optionsLen - 1].id;\n }\n } else if (autocomplete) {\n const nextIndex = index + incr;\n\n if (nextIndex < 0 || nextIndex >= optionsLen) {\n // Next is outside the bounds of list, return nothing selected\n return '';\n }\n }\n\n // I'm sure it won't be null, we already check optionsLen above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return optionsItems[getCircularIndex(index + incr, optionsLen)!].id;\n}\n\n// We want the same events when the input or the popup have focus (HOW COOL ARE\n// HOOKS BTW?) This is probably the hairiest piece but it's not bad.\nexport function useKeyDown() {\n const {\n data: { text, navigationItem },\n onSelect,\n optionsRef,\n inputRef,\n state,\n transition,\n autocompletePropRef,\n clearOnEscapeRef,\n persistSelectionRef,\n listScope,\n } = useComboBoxContext();\n\n return function handleKeyDown(event: KeyboardEvent<any>) {\n const optionNodes = listScope.current.queryAllNodes(scopeQuery);\n\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown': {\n // Don't scroll the page\n event.preventDefault();\n\n const optionsLen = optionNodes.length;\n\n // If the developer didn't render any options, there's no point in\n // trying to navigate--but seriously what the heck? Give us some\n // options fam.\n if (optionsLen === 0) {\n return;\n }\n\n if (state === IDLE) {\n // Opening a closed list\n transition(NAVIGATE, {\n persistSelection: persistSelectionRef.current,\n });\n } else {\n // ArrowUp decreases index, ArrowDown increases\n const incr = event.key === 'ArrowUp' ? -1 : 1;\n\n // When autocompletting, we'll not cycle through the list directly\n const autocomplete = autocompletePropRef.current;\n\n // Get next selected item\n const nextItem = getNextItem(\n navigationItem,\n incr,\n optionNodes,\n autocomplete\n );\n\n const value =\n nextItem !== '' ? optionsRef.current[nextItem].text : null;\n\n transition(NAVIGATE, { value, item: nextItem });\n }\n break;\n }\n case 'Escape': {\n if (state !== IDLE) {\n transition(ESCAPE);\n } else if (state === IDLE && text !== '') {\n if (!inputRef.current || !clearOnEscapeRef.current) {\n break;\n }\n\n // emulate a inputRef change event, might not work in future versions of React\n const lastValue = inputRef.current.value;\n inputRef.current.value = '';\n\n const tracker = (inputRef.current as any)._valueTracker;\n if (tracker) {\n tracker.setValue(lastValue);\n }\n\n const event = new Event('change', { bubbles: true });\n inputRef.current.dispatchEvent(event);\n }\n break;\n }\n case 'Enter': {\n if (state === NAVIGATING && navigationItem !== '') {\n const { value: navigationValue, text: navigationText } =\n optionsRef.current[navigationItem];\n\n // don't want to submit forms\n event.preventDefault();\n onSelect && onSelect(navigationText, navigationItem, navigationValue);\n transition(SELECT_WITH_KEYBOARD, {\n text: navigationText,\n item: navigationItem,\n });\n }\n break;\n }\n }\n };\n}\n\nexport function useBlur() {\n const {\n data: { navigationItem, text: stateText },\n transition,\n optionsRef,\n popoverRef,\n inputRef,\n buttonRef,\n onSelect,\n selectOnBlur, // not implemented yet\n } = useComboBoxContext();\n\n return function handleBlur() {\n requestAnimationFrame(() => {\n // we on want to close only if focus rests outside the combobox\n if (\n document.activeElement !== inputRef.current &&\n document.activeElement !== buttonRef.current &&\n popoverRef.current\n ) {\n if (popoverRef.current.contains(document.activeElement)) {\n // focus landed inside the combobox, keep it open\n // in the future, we can make it not close, select, or anything\n // this way we can have like... checkboxes available in the\n // menu item, etc.\n } else {\n // focus landed outside the combobox, close it.\n if (!selectOnBlur || navigationItem === '') {\n // we don't wanna select on blur, or navigationIndex is invalid\n transition(BLUR, { text: stateText, item: '' });\n } else {\n // select the currently selected item\n const { value: navigationValue, text: navigationText } =\n optionsRef.current[navigationItem];\n\n onSelect &&\n onSelect(navigationText, navigationItem, navigationValue);\n\n transition(BLUR, {\n text: navigationText,\n item: navigationItem,\n });\n }\n }\n }\n });\n };\n}\n"],"file":"hooks.js"}
@@ -6,14 +6,14 @@
6
6
  // don't know how it works, tbqh)
7
7
  // https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript
8
8
  export function makeHash(str) {
9
- let hash = 0;
9
+ var hash = 0;
10
10
 
11
11
  if (str.length === 0) {
12
12
  return hash;
13
13
  }
14
14
 
15
- for (let i = 0; i < str.length; i++) {
16
- const char = str.charCodeAt(i);
15
+ for (var i = 0; i < str.length; i++) {
16
+ var char = str.charCodeAt(i);
17
17
  hash = (hash << 5) - hash + char;
18
18
  hash = hash & hash;
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ComboBox/makeHash.ts"],"names":["makeHash","str","hash","length","i","char","charCodeAt"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,QAAT,CAAkBC,GAAlB,EAA+B;AACpC,MAAIC,IAAI,GAAG,CAAX;;AACA,MAAID,GAAG,CAACE,MAAJ,KAAe,CAAnB,EAAsB;AACpB,WAAOD,IAAP;AACD;;AACD,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,GAAG,CAACE,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;AACnC,UAAMC,IAAI,GAAGJ,GAAG,CAACK,UAAJ,CAAeF,CAAf,CAAb;AACAF,IAAAA,IAAI,GAAG,CAACA,IAAI,IAAI,CAAT,IAAcA,IAAd,GAAqBG,IAA5B;AACAH,IAAAA,IAAI,GAAGA,IAAI,GAAGA,IAAd;AACD;;AACD,SAAOA,IAAP;AACD","sourcesContent":["// We don't want to track the active descendant with indexes because nothing is\n// more annoying in a combobox than having it change values RIGHT AS YOU HIT\n// ENTER. That only happens if you use the index as your data, rather than\n// *your data as your data*. We use this to generate a unique ID based on the\n// value of each item. This function is short, sweet, and good enough™ (I also\n// don't know how it works, tbqh)\n// https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\nexport function makeHash(str: string) {\n let hash = 0;\n if (str.length === 0) {\n return hash;\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return hash;\n}\n"],"file":"makeHash.js"}
1
+ {"version":3,"sources":["../../../src/ComboBox/makeHash.ts"],"names":["makeHash","str","hash","length","i","char","charCodeAt"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,QAAT,CAAkBC,GAAlB,EAA+B;AACpC,MAAIC,IAAI,GAAG,CAAX;;AACA,MAAID,GAAG,CAACE,MAAJ,KAAe,CAAnB,EAAsB;AACpB,WAAOD,IAAP;AACD;;AACD,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,GAAG,CAACE,MAAxB,EAAgCC,CAAC,EAAjC,EAAqC;AACnC,QAAMC,IAAI,GAAGJ,GAAG,CAACK,UAAJ,CAAeF,CAAf,CAAb;AACAF,IAAAA,IAAI,GAAG,CAACA,IAAI,IAAI,CAAT,IAAcA,IAAd,GAAqBG,IAA5B;AACAH,IAAAA,IAAI,GAAGA,IAAI,GAAGA,IAAd;AACD;;AACD,SAAOA,IAAP;AACD","sourcesContent":["// We don't want to track the active descendant with indexes because nothing is\n// more annoying in a combobox than having it change values RIGHT AS YOU HIT\n// ENTER. That only happens if you use the index as your data, rather than\n// *your data as your data*. We use this to generate a unique ID based on the\n// value of each item. This function is short, sweet, and good enough™ (I also\n// don't know how it works, tbqh)\n// https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript\nexport function makeHash(str: string) {\n let hash = 0;\n if (str.length === 0) {\n return hash;\n }\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return hash;\n}\n"],"file":"makeHash.js"}
@@ -1,9 +1,9 @@
1
- import type * as React from 'react';
2
- export interface FocusLockProps extends React.HTMLAttributes<HTMLDivElement> {
3
- as?: React.ElementType<any>;
4
- innerAs?: React.ElementType<any>;
5
- children?: React.ReactNode;
6
- childRef: React.MutableRefObject<HTMLElement | null>;
1
+ import type { ElementType, FC, HTMLAttributes, MutableRefObject, ReactNode } from 'react';
2
+ export interface FocusLockProps extends HTMLAttributes<HTMLDivElement> {
3
+ as?: ElementType<any>;
4
+ innerAs?: ElementType<any>;
5
+ children?: ReactNode;
6
+ childRef: MutableRefObject<HTMLElement | null>;
7
7
  enabled?: boolean;
8
8
  }
9
- export declare const FocusLock: React.FC<FocusLockProps>;
9
+ export declare const FocusLock: FC<FocusLockProps>;
@@ -1,29 +1,30 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
3
  import { useRef } from 'react';
4
4
  import { useFocusLock } from './useFocusLock';
5
5
  import { jsx as _jsx } from "react/jsx-runtime";
6
6
  import { Fragment as _Fragment } from "react/jsx-runtime";
7
7
  import { jsxs as _jsxs } from "react/jsx-runtime";
8
- export const FocusLock = function FocusLock(props) {
9
- const {
10
- as: Comp = 'div',
11
- childRef,
12
- enabled = false,
13
- style = {},
14
- children
15
- } = props,
16
- otherProps = _objectWithoutPropertiesLoose(props, ["as", "childRef", "enabled", "style", "children"]);
8
+ export var FocusLock = function FocusLock(props) {
9
+ var _props$as = props.as,
10
+ Comp = _props$as === void 0 ? 'div' : _props$as,
11
+ childRef = props.childRef,
12
+ _props$enabled = props.enabled,
13
+ enabled = _props$enabled === void 0 ? false : _props$enabled,
14
+ _props$style = props.style,
15
+ style = _props$style === void 0 ? {} : _props$style,
16
+ children = props.children,
17
+ otherProps = _objectWithoutProperties(props, ["as", "childRef", "enabled", "style", "children"]);
17
18
 
18
- const lockStartRef = useRef(null);
19
- const lockEndRef = useRef(null);
19
+ var lockStartRef = useRef(null);
20
+ var lockEndRef = useRef(null);
20
21
  useFocusLock(childRef, {
21
- enabled,
22
- lockStartRef,
23
- lockEndRef
22
+ enabled: enabled,
23
+ lockStartRef: lockStartRef,
24
+ lockEndRef: lockEndRef
24
25
  });
25
26
 
26
- const lockStyle = _extends({
27
+ var lockStyle = _extends({
27
28
  width: 1,
28
29
  height: 0,
29
30
  padding: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/FocusLock/FocusLock.tsx"],"names":["useRef","useFocusLock","FocusLock","props","as","Comp","childRef","enabled","style","children","otherProps","lockStartRef","lockEndRef","lockStyle","width","height","padding","overflow","position","top","left"],"mappings":";;AAAA,SAASA,MAAT,QAAuB,OAAvB;AAEA,SAASC,YAAT,QAA6B,gBAA7B;;;;AAUA,OAAO,MAAMC,SAAmC,GAAG,SAASA,SAAT,CAAmBC,KAAnB,EAA0B;AAC3E,QAAM;AACJC,IAAAA,EAAE,EAAEC,IAAI,GAAG,KADP;AAEJC,IAAAA,QAFI;AAGJC,IAAAA,OAAO,GAAG,KAHN;AAIJC,IAAAA,KAAK,GAAG,EAJJ;AAKJC,IAAAA;AALI,MAOFN,KAPJ;AAAA,QAMKO,UANL,iCAOIP,KAPJ;;AAQA,QAAMQ,YAAY,GAAGX,MAAM,CAAc,IAAd,CAA3B;AACA,QAAMY,UAAU,GAAGZ,MAAM,CAAc,IAAd,CAAzB;AAEAC,EAAAA,YAAY,CAACK,QAAD,EAAW;AAAEC,IAAAA,OAAF;AAAWI,IAAAA,YAAX;AAAyBC,IAAAA;AAAzB,GAAX,CAAZ;;AAEA,QAAMC,SAAS;AACbC,IAAAA,KAAK,EAAE,CADM;AAEbC,IAAAA,MAAM,EAAE,CAFK;AAGbC,IAAAA,OAAO,EAAE,CAHI;AAIbC,IAAAA,QAAQ,EAAE,QAJG;AAKbC,IAAAA,QAAQ,EAAE,OALG;AAMbC,IAAAA,GAAG,EAAE,CANQ;AAObC,IAAAA,IAAI,EAAE;AAPO,KAQVZ,KARU,CAAf;;AAWA,sBACE;AAAA,4BACE,KAAC,IAAD;AACE,MAAA,GAAG,EAAEG,YADP;AAEE,+BAAsB,EAFxB;AAGE,qBAAa,IAHf;AAIE,MAAA,QAAQ,EAAE,CAJZ;AAKE,MAAA,KAAK,EAAEE;AALT,OAMMH,UANN,EADF,EASGD,QATH,eAUE,KAAC,IAAD;AACE,MAAA,GAAG,EAAEG,UADP;AAEE,6BAAoB,EAFtB;AAGE,qBAAa,IAHf;AAIE,MAAA,QAAQ,EAAE,CAJZ;AAKE,MAAA,KAAK,EAAEC;AALT,OAMMH,UANN,EAVF;AAAA,IADF;AAqBD,CA9CM","sourcesContent":["import { useRef } from 'react';\nimport type * as React from 'react';\nimport { useFocusLock } from './useFocusLock';\n\nexport interface FocusLockProps extends React.HTMLAttributes<HTMLDivElement> {\n as?: React.ElementType<any>;\n innerAs?: React.ElementType<any>;\n children?: React.ReactNode;\n childRef: React.MutableRefObject<HTMLElement | null>;\n enabled?: boolean;\n}\n\nexport const FocusLock: React.FC<FocusLockProps> = function FocusLock(props) {\n const {\n as: Comp = 'div',\n childRef,\n enabled = false,\n style = {},\n children,\n ...otherProps\n } = props;\n const lockStartRef = useRef<HTMLElement>(null);\n const lockEndRef = useRef<HTMLElement>(null);\n\n useFocusLock(childRef, { enabled, lockStartRef, lockEndRef });\n\n const lockStyle = {\n width: 1,\n height: 0,\n padding: 0,\n overflow: 'hidden',\n position: 'fixed',\n top: 1,\n left: 1,\n ...style,\n };\n\n return (\n <>\n <Comp\n ref={lockStartRef}\n data-focus-lock-start=\"\"\n aria-hidden={true}\n tabIndex={0}\n style={lockStyle}\n {...otherProps}\n />\n {children}\n <Comp\n ref={lockEndRef}\n data-focus-lock-end=\"\"\n aria-hidden={true}\n tabIndex={0}\n style={lockStyle}\n {...otherProps}\n />\n </>\n );\n};\n"],"file":"FocusLock.js"}
1
+ {"version":3,"sources":["../../../src/FocusLock/FocusLock.tsx"],"names":["useRef","useFocusLock","FocusLock","props","as","Comp","childRef","enabled","style","children","otherProps","lockStartRef","lockEndRef","lockStyle","width","height","padding","overflow","position","top","left"],"mappings":";;AAOA,SAASA,MAAT,QAAuB,OAAvB;AAEA,SAASC,YAAT,QAA6B,gBAA7B;;;;AAUA,OAAO,IAAMC,SAA6B,GAAG,SAASA,SAAT,CAAmBC,KAAnB,EAA0B;AAAA,kBAQjEA,KARiE,CAEnEC,EAFmE;AAAA,MAE/DC,IAF+D,0BAExD,KAFwD;AAAA,MAGnEC,QAHmE,GAQjEH,KARiE,CAGnEG,QAHmE;AAAA,uBAQjEH,KARiE,CAInEI,OAJmE;AAAA,MAInEA,OAJmE,+BAIzD,KAJyD;AAAA,qBAQjEJ,KARiE,CAKnEK,KALmE;AAAA,MAKnEA,KALmE,6BAK3D,EAL2D;AAAA,MAMnEC,QANmE,GAQjEN,KARiE,CAMnEM,QANmE;AAAA,MAOhEC,UAPgE,4BAQjEP,KARiE;;AASrE,MAAMQ,YAAY,GAAGX,MAAM,CAAc,IAAd,CAA3B;AACA,MAAMY,UAAU,GAAGZ,MAAM,CAAc,IAAd,CAAzB;AAEAC,EAAAA,YAAY,CAACK,QAAD,EAAW;AAAEC,IAAAA,OAAO,EAAPA,OAAF;AAAWI,IAAAA,YAAY,EAAZA,YAAX;AAAyBC,IAAAA,UAAU,EAAVA;AAAzB,GAAX,CAAZ;;AAEA,MAAMC,SAAS;AACbC,IAAAA,KAAK,EAAE,CADM;AAEbC,IAAAA,MAAM,EAAE,CAFK;AAGbC,IAAAA,OAAO,EAAE,CAHI;AAIbC,IAAAA,QAAQ,EAAE,QAJG;AAKbC,IAAAA,QAAQ,EAAE,OALG;AAMbC,IAAAA,GAAG,EAAE,CANQ;AAObC,IAAAA,IAAI,EAAE;AAPO,KAQVZ,KARU,CAAf;;AAWA,sBACE;AAAA,4BACE,KAAC,IAAD;AACE,MAAA,GAAG,EAAEG,YADP;AAEE,+BAAsB,EAFxB;AAGE,qBAAa,IAHf;AAIE,MAAA,QAAQ,EAAE,CAJZ;AAKE,MAAA,KAAK,EAAEE;AALT,OAMMH,UANN,EADF,EASGD,QATH,eAUE,KAAC,IAAD;AACE,MAAA,GAAG,EAAEG,UADP;AAEE,6BAAoB,EAFtB;AAGE,qBAAa,IAHf;AAIE,MAAA,QAAQ,EAAE,CAJZ;AAKE,MAAA,KAAK,EAAEC;AALT,OAMMH,UANN,EAVF;AAAA,IADF;AAqBD,CA9CM","sourcesContent":["import type {\n ElementType,\n FC,\n HTMLAttributes,\n MutableRefObject,\n ReactNode,\n} from 'react';\nimport { useRef } from 'react';\n\nimport { useFocusLock } from './useFocusLock';\n\nexport interface FocusLockProps extends HTMLAttributes<HTMLDivElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n children?: ReactNode;\n childRef: MutableRefObject<HTMLElement | null>;\n enabled?: boolean;\n}\n\nexport const FocusLock: FC<FocusLockProps> = function FocusLock(props) {\n const {\n as: Comp = 'div',\n childRef,\n enabled = false,\n style = {},\n children,\n ...otherProps\n } = props;\n const lockStartRef = useRef<HTMLElement>(null);\n const lockEndRef = useRef<HTMLElement>(null);\n\n useFocusLock(childRef, { enabled, lockStartRef, lockEndRef });\n\n const lockStyle = {\n width: 1,\n height: 0,\n padding: 0,\n overflow: 'hidden',\n position: 'fixed',\n top: 1,\n left: 1,\n ...style,\n };\n\n return (\n <>\n <Comp\n ref={lockStartRef}\n data-focus-lock-start=\"\"\n aria-hidden={true}\n tabIndex={0}\n style={lockStyle}\n {...otherProps}\n />\n {children}\n <Comp\n ref={lockEndRef}\n data-focus-lock-end=\"\"\n aria-hidden={true}\n tabIndex={0}\n style={lockStyle}\n {...otherProps}\n />\n </>\n );\n};\n"],"file":"FocusLock.js"}
@@ -1,7 +1,7 @@
1
- export const tabblable = ['button:enabled:not([readonly])', 'select:enabled:not([readonly])', 'textarea:enabled:not([readonly])', 'input:enabled:not([readonly])', 'a[href]', 'area[href]', 'iframe', 'object', 'embed', '[tabindex]', '[contenteditable]', '[autofocus]'].join(',');
1
+ export var tabblable = ['button:enabled:not([readonly])', 'select:enabled:not([readonly])', 'textarea:enabled:not([readonly])', 'input:enabled:not([readonly])', 'a[href]', 'area[href]', 'iframe', 'object', 'embed', '[tabindex]', '[contenteditable]', '[autofocus]'].join(',');
2
2
  /* This is naive and will not consider tabIndex */
3
3
 
4
- export const getTabblableNodes = parentNode => {
4
+ export var getTabblableNodes = function getTabblableNodes(parentNode) {
5
5
  if (!parentNode) {
6
6
  return [];
7
7
  }
@@ -9,12 +9,12 @@ export const getTabblableNodes = parentNode => {
9
9
  return Array.from(parentNode.querySelectorAll(tabblable));
10
10
  };
11
11
  export function focusOnChildNode(parentNode, itemIndex) {
12
- const elements = getTabblableNodes(parentNode);
12
+ var elements = getTabblableNodes(parentNode);
13
13
 
14
14
  if (elements.length > 0) {
15
15
  elements[itemIndex === -1 ? elements.length - 1 : 0].focus();
16
16
  } else {
17
- const currentTabIndex = parentNode.tabIndex;
17
+ var currentTabIndex = parentNode.tabIndex;
18
18
  parentNode.tabIndex = 0;
19
19
  parentNode.focus();
20
20
  parentNode.tabIndex = currentTabIndex;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/FocusLock/tabUtils.ts"],"names":["tabblable","join","getTabblableNodes","parentNode","Array","from","querySelectorAll","focusOnChildNode","itemIndex","elements","length","focus","currentTabIndex","tabIndex"],"mappings":"AAAA,OAAO,MAAMA,SAAS,GAAG,CACvB,gCADuB,EAEvB,gCAFuB,EAGvB,kCAHuB,EAIvB,+BAJuB,EAMvB,SANuB,EAOvB,YAPuB,EASvB,QATuB,EAUvB,QAVuB,EAWvB,OAXuB,EAavB,YAbuB,EAcvB,mBAduB,EAevB,aAfuB,EAgBvBC,IAhBuB,CAgBlB,GAhBkB,CAAlB;AAkBP;;AACA,OAAO,MAAMC,iBAAiB,GAC5BC,UAD+B,IAEb;AAClB,MAAI,CAACA,UAAL,EAAiB;AACf,WAAO,EAAP;AACD;;AAED,SAAOC,KAAK,CAACC,IAAN,CAAWF,UAAU,CAACG,gBAAX,CAA4BN,SAA5B,CAAX,CAAP;AACD,CARM;AAUP,OAAO,SAASO,gBAAT,CAA0BJ,UAA1B,EAAmDK,SAAnD,EAAsE;AAC3E,QAAMC,QAAQ,GAAGP,iBAAiB,CAACC,UAAD,CAAlC;;AACA,MAAIM,QAAQ,CAACC,MAAT,GAAkB,CAAtB,EAAyB;AACvBD,IAAAA,QAAQ,CAACD,SAAS,KAAK,CAAC,CAAf,GAAmBC,QAAQ,CAACC,MAAT,GAAkB,CAArC,GAAyC,CAA1C,CAAR,CAAqDC,KAArD;AACD,GAFD,MAEO;AACL,UAAMC,eAAe,GAAGT,UAAU,CAACU,QAAnC;AACAV,IAAAA,UAAU,CAACU,QAAX,GAAsB,CAAtB;AACAV,IAAAA,UAAU,CAACQ,KAAX;AACAR,IAAAA,UAAU,CAACU,QAAX,GAAsBD,eAAtB;AACD;AACF","sourcesContent":["export const tabblable = [\n 'button:enabled:not([readonly])',\n 'select:enabled:not([readonly])',\n 'textarea:enabled:not([readonly])',\n 'input:enabled:not([readonly])',\n\n 'a[href]',\n 'area[href]',\n\n 'iframe',\n 'object',\n 'embed',\n\n '[tabindex]',\n '[contenteditable]',\n '[autofocus]',\n].join(',');\n\n/* This is naive and will not consider tabIndex */\nexport const getTabblableNodes = (\n parentNode: HTMLElement | null\n): HTMLElement[] => {\n if (!parentNode) {\n return [];\n }\n\n return Array.from(parentNode.querySelectorAll(tabblable));\n};\n\nexport function focusOnChildNode(parentNode: HTMLElement, itemIndex: 0 | -1) {\n const elements = getTabblableNodes(parentNode);\n if (elements.length > 0) {\n elements[itemIndex === -1 ? elements.length - 1 : 0].focus();\n } else {\n const currentTabIndex = parentNode.tabIndex;\n parentNode.tabIndex = 0;\n parentNode.focus();\n parentNode.tabIndex = currentTabIndex;\n }\n}\n"],"file":"tabUtils.js"}
1
+ {"version":3,"sources":["../../../src/FocusLock/tabUtils.ts"],"names":["tabblable","join","getTabblableNodes","parentNode","Array","from","querySelectorAll","focusOnChildNode","itemIndex","elements","length","focus","currentTabIndex","tabIndex"],"mappings":"AAAA,OAAO,IAAMA,SAAS,GAAG,CACvB,gCADuB,EAEvB,gCAFuB,EAGvB,kCAHuB,EAIvB,+BAJuB,EAMvB,SANuB,EAOvB,YAPuB,EASvB,QATuB,EAUvB,QAVuB,EAWvB,OAXuB,EAavB,YAbuB,EAcvB,mBAduB,EAevB,aAfuB,EAgBvBC,IAhBuB,CAgBlB,GAhBkB,CAAlB;AAkBP;;AACA,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAC/BC,UAD+B,EAEb;AAClB,MAAI,CAACA,UAAL,EAAiB;AACf,WAAO,EAAP;AACD;;AAED,SAAOC,KAAK,CAACC,IAAN,CAAWF,UAAU,CAACG,gBAAX,CAA4BN,SAA5B,CAAX,CAAP;AACD,CARM;AAUP,OAAO,SAASO,gBAAT,CAA0BJ,UAA1B,EAAmDK,SAAnD,EAAsE;AAC3E,MAAMC,QAAQ,GAAGP,iBAAiB,CAACC,UAAD,CAAlC;;AACA,MAAIM,QAAQ,CAACC,MAAT,GAAkB,CAAtB,EAAyB;AACvBD,IAAAA,QAAQ,CAACD,SAAS,KAAK,CAAC,CAAf,GAAmBC,QAAQ,CAACC,MAAT,GAAkB,CAArC,GAAyC,CAA1C,CAAR,CAAqDC,KAArD;AACD,GAFD,MAEO;AACL,QAAMC,eAAe,GAAGT,UAAU,CAACU,QAAnC;AACAV,IAAAA,UAAU,CAACU,QAAX,GAAsB,CAAtB;AACAV,IAAAA,UAAU,CAACQ,KAAX;AACAR,IAAAA,UAAU,CAACU,QAAX,GAAsBD,eAAtB;AACD;AACF","sourcesContent":["export const tabblable = [\n 'button:enabled:not([readonly])',\n 'select:enabled:not([readonly])',\n 'textarea:enabled:not([readonly])',\n 'input:enabled:not([readonly])',\n\n 'a[href]',\n 'area[href]',\n\n 'iframe',\n 'object',\n 'embed',\n\n '[tabindex]',\n '[contenteditable]',\n '[autofocus]',\n].join(',');\n\n/* This is naive and will not consider tabIndex */\nexport const getTabblableNodes = (\n parentNode: HTMLElement | null\n): HTMLElement[] => {\n if (!parentNode) {\n return [];\n }\n\n return Array.from(parentNode.querySelectorAll(tabblable));\n};\n\nexport function focusOnChildNode(parentNode: HTMLElement, itemIndex: 0 | -1) {\n const elements = getTabblableNodes(parentNode);\n if (elements.length > 0) {\n elements[itemIndex === -1 ? elements.length - 1 : 0].focus();\n } else {\n const currentTabIndex = parentNode.tabIndex;\n parentNode.tabIndex = 0;\n parentNode.focus();\n parentNode.tabIndex = currentTabIndex;\n }\n}\n"],"file":"tabUtils.js"}
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
1
+ import type { MutableRefObject } from 'react';
2
2
  export interface FocusLockOptions {
3
3
  enabled: boolean;
4
- lockStartRef: React.MutableRefObject<HTMLElement | null>;
5
- lockEndRef: React.MutableRefObject<HTMLElement | null>;
4
+ lockStartRef: MutableRefObject<HTMLElement | null>;
5
+ lockEndRef: MutableRefObject<HTMLElement | null>;
6
6
  }
7
- export declare function useFocusLock(ref: React.MutableRefObject<HTMLElement | null>, opts: FocusLockOptions): void;
7
+ export declare function useFocusLock(ref: MutableRefObject<HTMLElement | null>, opts: FocusLockOptions): void;