@basic-ui/core 0.0.51 → 0.0.52

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 (350) hide show
  1. package/README.md +3 -3
  2. package/build/cjs/index.js +88 -88
  3. package/build/cjs/index.js.map +1 -1
  4. package/build/esm/Accordion/Accordion.d.ts +9 -9
  5. package/build/esm/Accordion/Accordion.js.map +1 -1
  6. package/build/esm/Accordion/AccordionBody.d.ts +6 -6
  7. package/build/esm/Accordion/AccordionBody.js.map +1 -1
  8. package/build/esm/Accordion/AccordionHeader.d.ts +7 -7
  9. package/build/esm/Accordion/AccordionHeader.js.map +1 -1
  10. package/build/esm/Accordion/AccordionItem.d.ts +9 -9
  11. package/build/esm/Accordion/AccordionItem.js.map +1 -1
  12. package/build/esm/Accordion/context.d.ts +19 -19
  13. package/build/esm/Accordion/context.js.map +1 -1
  14. package/build/esm/Accordion/index.d.ts +4 -4
  15. package/build/esm/Accordion/index.js.map +1 -1
  16. package/build/esm/Accordion/scopeQuery.d.ts +2 -2
  17. package/build/esm/Accordion/scopeQuery.js.map +1 -1
  18. package/build/esm/CheckBox/CheckBox.d.ts +7 -7
  19. package/build/esm/CheckBox/CheckBox.js.map +1 -1
  20. package/build/esm/CheckBox/index.d.ts +1 -1
  21. package/build/esm/CheckBox/index.js.map +1 -1
  22. package/build/esm/ComboBox/Combobox.d.ts +18 -18
  23. package/build/esm/ComboBox/Combobox.js.map +1 -1
  24. package/build/esm/ComboBox/ComboboxButton.d.ts +9 -9
  25. package/build/esm/ComboBox/ComboboxButton.js.map +1 -1
  26. package/build/esm/ComboBox/ComboboxInput.d.ts +17 -17
  27. package/build/esm/ComboBox/ComboboxInput.js.map +1 -1
  28. package/build/esm/ComboBox/ComboboxLabel.d.ts +7 -7
  29. package/build/esm/ComboBox/ComboboxLabel.js.map +1 -1
  30. package/build/esm/ComboBox/ComboboxList.d.ts +8 -8
  31. package/build/esm/ComboBox/ComboboxList.js.map +1 -1
  32. package/build/esm/ComboBox/ComboboxOption.d.ts +11 -11
  33. package/build/esm/ComboBox/ComboboxOption.js.map +1 -1
  34. package/build/esm/ComboBox/ComboboxPopover.d.ts +9 -9
  35. package/build/esm/ComboBox/ComboboxPopover.js.map +1 -1
  36. package/build/esm/ComboBox/cities.d.ts +5 -5
  37. package/build/esm/ComboBox/cities.js.map +1 -1
  38. package/build/esm/ComboBox/context.d.ts +30 -30
  39. package/build/esm/ComboBox/context.js.map +1 -1
  40. package/build/esm/ComboBox/hooks.d.ts +37 -37
  41. package/build/esm/ComboBox/hooks.js.map +1 -1
  42. package/build/esm/ComboBox/index.d.ts +8 -8
  43. package/build/esm/ComboBox/index.js.map +1 -1
  44. package/build/esm/ComboBox/makeHash.d.ts +1 -1
  45. package/build/esm/ComboBox/makeHash.js.map +1 -1
  46. package/build/esm/ComboBox/scopeQuery.d.ts +1 -1
  47. package/build/esm/ComboBox/scopeQuery.js.map +1 -1
  48. package/build/esm/FocusLock/FocusLock.d.ts +9 -9
  49. package/build/esm/FocusLock/FocusLock.js.map +1 -1
  50. package/build/esm/FocusLock/index.d.ts +1 -1
  51. package/build/esm/FocusLock/index.js.map +1 -1
  52. package/build/esm/FocusLock/tabUtils.d.ts +3 -3
  53. package/build/esm/FocusLock/tabUtils.js.map +1 -1
  54. package/build/esm/FocusLock/useFocusLock.d.ts +7 -7
  55. package/build/esm/FocusLock/useFocusLock.js.map +1 -1
  56. package/build/esm/List/List.d.ts +7 -7
  57. package/build/esm/List/List.js.map +1 -1
  58. package/build/esm/List/ListItem.d.ts +7 -7
  59. package/build/esm/List/ListItem.js.map +1 -1
  60. package/build/esm/List/context.d.ts +4 -4
  61. package/build/esm/List/context.js.map +1 -1
  62. package/build/esm/List/index.d.ts +2 -2
  63. package/build/esm/List/index.js.map +1 -1
  64. package/build/esm/Menu/ContextMenuTrigger.d.ts +11 -11
  65. package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
  66. package/build/esm/Menu/Menu.d.ts +10 -10
  67. package/build/esm/Menu/Menu.js.map +1 -1
  68. package/build/esm/Menu/MenuButton.d.ts +11 -11
  69. package/build/esm/Menu/MenuButton.js.map +1 -1
  70. package/build/esm/Menu/MenuItem.d.ts +8 -8
  71. package/build/esm/Menu/MenuItem.js.map +1 -1
  72. package/build/esm/Menu/MenuList.d.ts +7 -7
  73. package/build/esm/Menu/MenuList.js.map +1 -1
  74. package/build/esm/Menu/MenuPopover.d.ts +8 -8
  75. package/build/esm/Menu/MenuPopover.js.map +1 -1
  76. package/build/esm/Menu/context.d.ts +25 -25
  77. package/build/esm/Menu/context.js.map +1 -1
  78. package/build/esm/Menu/fixtures/countryList.d.ts +1 -1
  79. package/build/esm/Menu/fixtures/countryList.js.map +1 -1
  80. package/build/esm/Menu/index.d.ts +6 -6
  81. package/build/esm/Menu/index.js.map +1 -1
  82. package/build/esm/Menu/scope.d.ts +1 -1
  83. package/build/esm/Menu/scope.js.map +1 -1
  84. package/build/esm/Modal/Modal.d.ts +9 -9
  85. package/build/esm/Modal/Modal.js.map +1 -1
  86. package/build/esm/Modal/ModalBackdrop.d.ts +10 -10
  87. package/build/esm/Modal/ModalBackdrop.js.map +1 -1
  88. package/build/esm/Modal/index.d.ts +2 -2
  89. package/build/esm/Modal/index.js.map +1 -1
  90. package/build/esm/Popper/Popper.d.ts +35 -35
  91. package/build/esm/Popper/Popper.js.map +1 -1
  92. package/build/esm/Popper/PopperArrow.d.ts +6 -6
  93. package/build/esm/Popper/PopperArrow.js.map +1 -1
  94. package/build/esm/Popper/context.d.ts +6 -6
  95. package/build/esm/Popper/context.js.map +1 -1
  96. package/build/esm/Popper/index.d.ts +3 -3
  97. package/build/esm/Popper/index.js.map +1 -1
  98. package/build/esm/Portal/Portal.d.ts +6 -6
  99. package/build/esm/Portal/Portal.js.map +1 -1
  100. package/build/esm/Portal/index.d.ts +1 -1
  101. package/build/esm/Portal/index.js.map +1 -1
  102. package/build/esm/RadioButton/RadioButton.d.ts +10 -10
  103. package/build/esm/RadioButton/RadioButton.js.map +1 -1
  104. package/build/esm/RadioButton/RadioGroup.d.ts +12 -12
  105. package/build/esm/RadioButton/RadioGroup.js.map +1 -1
  106. package/build/esm/RadioButton/context.d.ts +9 -9
  107. package/build/esm/RadioButton/context.js.map +1 -1
  108. package/build/esm/RadioButton/index.d.ts +2 -2
  109. package/build/esm/RadioButton/index.js.map +1 -1
  110. package/build/esm/SkipNav/SkipNav.d.ts +7 -7
  111. package/build/esm/SkipNav/SkipNav.js.map +1 -1
  112. package/build/esm/SkipNav/index.d.ts +1 -1
  113. package/build/esm/SkipNav/index.js.map +1 -1
  114. package/build/esm/Slider/Slider.d.ts +197 -197
  115. package/build/esm/Slider/Slider.js +82 -82
  116. package/build/esm/Slider/Slider.js.map +1 -1
  117. package/build/esm/Slider/index.d.ts +1 -1
  118. package/build/esm/Slider/index.js.map +1 -1
  119. package/build/esm/Spinner/Spinner.d.ts +12 -12
  120. package/build/esm/Spinner/Spinner.js.map +1 -1
  121. package/build/esm/Spinner/SpinnerButton.d.ts +8 -8
  122. package/build/esm/Spinner/SpinnerButton.js.map +1 -1
  123. package/build/esm/Spinner/context.d.ts +12 -12
  124. package/build/esm/Spinner/context.js.map +1 -1
  125. package/build/esm/Spinner/index.d.ts +2 -2
  126. package/build/esm/Spinner/index.js.map +1 -1
  127. package/build/esm/Tabs/Tab.d.ts +7 -7
  128. package/build/esm/Tabs/Tab.js.map +1 -1
  129. package/build/esm/Tabs/TabList.d.ts +9 -9
  130. package/build/esm/Tabs/TabList.js.map +1 -1
  131. package/build/esm/Tabs/TabPanel.d.ts +8 -8
  132. package/build/esm/Tabs/TabPanel.js.map +1 -1
  133. package/build/esm/Tabs/TabPanels.d.ts +8 -8
  134. package/build/esm/Tabs/TabPanels.js.map +1 -1
  135. package/build/esm/Tabs/Tabs.d.ts +10 -10
  136. package/build/esm/Tabs/Tabs.js.map +1 -1
  137. package/build/esm/Tabs/context.d.ts +17 -17
  138. package/build/esm/Tabs/context.js.map +1 -1
  139. package/build/esm/Tabs/index.d.ts +5 -5
  140. package/build/esm/Tabs/index.js.map +1 -1
  141. package/build/esm/Tabs/scopeQuery.d.ts +1 -1
  142. package/build/esm/Tabs/scopeQuery.js.map +1 -1
  143. package/build/esm/Tooltip/Tooltip.d.ts +10 -10
  144. package/build/esm/Tooltip/Tooltip.js.map +1 -1
  145. package/build/esm/Tooltip/index.d.ts +1 -1
  146. package/build/esm/Tooltip/index.js.map +1 -1
  147. package/build/esm/Tooltip/stateMachine.d.ts +28 -28
  148. package/build/esm/Tooltip/stateMachine.js.map +1 -1
  149. package/build/esm/Tooltip/useTooltip.d.ts +10 -10
  150. package/build/esm/Tooltip/useTooltip.js.map +1 -1
  151. package/build/esm/hooks/index.d.ts +13 -13
  152. package/build/esm/hooks/index.js.map +1 -1
  153. package/build/esm/hooks/useAutoFocus.d.ts +2 -2
  154. package/build/esm/hooks/useAutoFocus.js.map +1 -1
  155. package/build/esm/hooks/useChildrenCounter.d.ts +7 -7
  156. package/build/esm/hooks/useChildrenCounter.js.map +1 -1
  157. package/build/esm/hooks/useControlledState.d.ts +3 -3
  158. package/build/esm/hooks/useControlledState.js +1 -1
  159. package/build/esm/hooks/useControlledState.js.map +1 -1
  160. package/build/esm/hooks/useFocusReturn.d.ts +2 -2
  161. package/build/esm/hooks/useFocusReturn.js.map +1 -1
  162. package/build/esm/hooks/useFocusState.d.ts +11 -11
  163. package/build/esm/hooks/useFocusState.js.map +1 -1
  164. package/build/esm/hooks/useGestureHandlers.d.ts +52 -52
  165. package/build/esm/hooks/useGestureHandlers.js.map +1 -1
  166. package/build/esm/hooks/useMeasure.d.ts +7 -7
  167. package/build/esm/hooks/useMeasure.js.map +1 -1
  168. package/build/esm/hooks/useOnClickOutside.d.ts +2 -2
  169. package/build/esm/hooks/useOnClickOutside.js.map +1 -1
  170. package/build/esm/hooks/useOnKeyDown.d.ts +1 -1
  171. package/build/esm/hooks/useOnKeyDown.js.map +1 -1
  172. package/build/esm/hooks/useReducerMachine.d.ts +24 -24
  173. package/build/esm/hooks/useReducerMachine.js.map +1 -1
  174. package/build/esm/hooks/useRemoveBodyScroll.d.ts +2 -2
  175. package/build/esm/hooks/useRemoveBodyScroll.js.map +1 -1
  176. package/build/esm/hooks/useScope.d.ts +11 -11
  177. package/build/esm/hooks/useScope.js.map +1 -1
  178. package/build/esm/hooks/useThrottle.d.ts +1 -1
  179. package/build/esm/hooks/useThrottle.js.map +1 -1
  180. package/build/esm/index.d.ts +15 -15
  181. package/build/esm/index.js.map +1 -1
  182. package/build/esm/utils/assign-ref.d.ts +3 -3
  183. package/build/esm/utils/assign-ref.js.map +1 -1
  184. package/build/esm/utils/can-use-dom.d.ts +1 -1
  185. package/build/esm/utils/can-use-dom.js.map +1 -1
  186. package/build/esm/utils/clamp.d.ts +1 -1
  187. package/build/esm/utils/clamp.js.map +1 -1
  188. package/build/esm/utils/context.d.ts +7 -7
  189. package/build/esm/utils/context.js.map +1 -1
  190. package/build/esm/utils/create-subscription.d.ts +4 -4
  191. package/build/esm/utils/create-subscription.js.map +1 -1
  192. package/build/esm/utils/get-circular-index.d.ts +1 -1
  193. package/build/esm/utils/get-circular-index.js.map +1 -1
  194. package/build/esm/utils/index.d.ts +10 -10
  195. package/build/esm/utils/index.js.map +1 -1
  196. package/build/esm/utils/is-right-click.d.ts +6 -6
  197. package/build/esm/utils/is-right-click.js +4 -4
  198. package/build/esm/utils/is-right-click.js.map +1 -1
  199. package/build/esm/utils/owner-document.d.ts +7 -7
  200. package/build/esm/utils/owner-document.js +5 -5
  201. package/build/esm/utils/owner-document.js.map +1 -1
  202. package/build/esm/utils/polymorphic.d.ts +39 -39
  203. package/build/esm/utils/polymorphic.js.map +1 -1
  204. package/build/esm/utils/rubber-band-clamp.d.ts +2 -2
  205. package/build/esm/utils/rubber-band-clamp.js.map +1 -1
  206. package/build/esm/utils/use-stable-callback.d.ts +16 -16
  207. package/build/esm/utils/use-stable-callback.js +16 -16
  208. package/build/esm/utils/use-stable-callback.js.map +1 -1
  209. package/build/esm/utils/wrap-event.d.ts +3 -3
  210. package/build/esm/utils/wrap-event.js.map +1 -1
  211. package/build/tsconfig-build.tsbuildinfo +1 -1
  212. package/package.json +2 -2
  213. package/src/Accordion/Accordion.story.tsx +74 -74
  214. package/src/Accordion/Accordion.tsx +59 -59
  215. package/src/Accordion/AccordionBody.tsx +52 -52
  216. package/src/Accordion/AccordionHeader.tsx +167 -167
  217. package/src/Accordion/AccordionItem.tsx +50 -50
  218. package/src/Accordion/context.ts +37 -37
  219. package/src/Accordion/index.ts +4 -4
  220. package/src/Accordion/scopeQuery.ts +7 -7
  221. package/src/Accordion/styles.css +21 -21
  222. package/src/CheckBox/CheckBox.tsx +41 -41
  223. package/src/CheckBox/index.ts +1 -1
  224. package/src/ComboBox/ComboBox.story.tsx +120 -120
  225. package/src/ComboBox/Combobox.tsx +148 -148
  226. package/src/ComboBox/ComboboxButton.tsx +61 -61
  227. package/src/ComboBox/ComboboxInput.tsx +187 -187
  228. package/src/ComboBox/ComboboxLabel.tsx +33 -33
  229. package/src/ComboBox/ComboboxList.tsx +47 -47
  230. package/src/ComboBox/ComboboxOption.tsx +111 -111
  231. package/src/ComboBox/ComboboxPopover.tsx +64 -64
  232. package/src/ComboBox/cities.ts +23194 -23194
  233. package/src/ComboBox/context.ts +35 -35
  234. package/src/ComboBox/hooks.tsx +451 -451
  235. package/src/ComboBox/index.ts +8 -8
  236. package/src/ComboBox/makeHash.ts +19 -19
  237. package/src/ComboBox/scopeQuery.ts +6 -6
  238. package/src/ComboBox/styles.css +32 -32
  239. package/src/FocusLock/FocusLock.tsx +66 -66
  240. package/src/FocusLock/index.ts +1 -1
  241. package/src/FocusLock/tabUtils.ts +40 -40
  242. package/src/FocusLock/useFocusLock.ts +56 -56
  243. package/src/List/List.story.tsx +18 -18
  244. package/src/List/List.tsx +17 -17
  245. package/src/List/ListItem.tsx +23 -23
  246. package/src/List/context.ts +19 -19
  247. package/src/List/index.ts +2 -2
  248. package/src/Menu/ContextMenu.story.tsx +73 -73
  249. package/src/Menu/ContextMenuTrigger.tsx +76 -76
  250. package/src/Menu/Menu.story.tsx +160 -160
  251. package/src/Menu/Menu.tsx +83 -83
  252. package/src/Menu/MenuButton.tsx +83 -83
  253. package/src/Menu/MenuComplex.story.tsx +58 -58
  254. package/src/Menu/MenuItem.tsx +88 -88
  255. package/src/Menu/MenuList.tsx +254 -254
  256. package/src/Menu/MenuPopover.tsx +35 -35
  257. package/src/Menu/context.ts +44 -44
  258. package/src/Menu/fixtures/countryList.ts +198 -198
  259. package/src/Menu/index.ts +6 -6
  260. package/src/Menu/scope.ts +7 -7
  261. package/src/Menu/styles.css +42 -42
  262. package/src/Modal/Modal.story.tsx +258 -258
  263. package/src/Modal/Modal.tsx +48 -48
  264. package/src/Modal/ModalBackdrop.tsx +78 -78
  265. package/src/Modal/NavDrawer.story.tsx +158 -158
  266. package/src/Modal/index.ts +2 -2
  267. package/src/Modal/styles.css +46 -46
  268. package/src/Popper/Popper.story.tsx +263 -263
  269. package/src/Popper/Popper.tsx +154 -154
  270. package/src/Popper/PopperArrow.tsx +35 -35
  271. package/src/Popper/context.ts +10 -10
  272. package/src/Popper/index.ts +3 -3
  273. package/src/Popper/styles.css +60 -60
  274. package/src/Portal/Portal.tsx +20 -20
  275. package/src/Portal/index.ts +1 -1
  276. package/src/RadioButton/RadioButton.story.tsx +77 -77
  277. package/src/RadioButton/RadioButton.tsx +55 -55
  278. package/src/RadioButton/RadioGroup.tsx +60 -60
  279. package/src/RadioButton/context.ts +17 -17
  280. package/src/RadioButton/index.ts +2 -2
  281. package/src/SkipNav/SkipNav.tsx +16 -16
  282. package/src/SkipNav/index.tsx +1 -1
  283. package/src/Slider/Slider.story.tsx +45 -45
  284. package/src/Slider/Slider.tsx +1120 -1120
  285. package/src/Slider/index.ts +1 -1
  286. package/src/Slider/styles.css +131 -131
  287. package/src/Spinner/Spinner.story.tsx +31 -31
  288. package/src/Spinner/Spinner.tsx +117 -117
  289. package/src/Spinner/SpinnerButton.tsx +54 -54
  290. package/src/Spinner/context.ts +20 -20
  291. package/src/Spinner/index.ts +2 -2
  292. package/src/Spinner/styles.css +23 -23
  293. package/src/Tabs/Tab.story.tsx +80 -80
  294. package/src/Tabs/Tab.tsx +136 -136
  295. package/src/Tabs/TabList.tsx +71 -71
  296. package/src/Tabs/TabPanel.tsx +53 -53
  297. package/src/Tabs/TabPanels.tsx +30 -30
  298. package/src/Tabs/Tabs.tsx +46 -46
  299. package/src/Tabs/context.ts +30 -30
  300. package/src/Tabs/index.tsx +5 -5
  301. package/src/Tabs/scopeQuery.ts +6 -6
  302. package/src/Tooltip/Tooltip.story.tsx +61 -61
  303. package/src/Tooltip/Tooltip.tsx +50 -50
  304. package/src/Tooltip/index.ts +1 -1
  305. package/src/Tooltip/stateMachine.ts +192 -192
  306. package/src/Tooltip/styles.css +17 -17
  307. package/src/Tooltip/useTooltip.ts +136 -136
  308. package/src/hooks/index.ts +13 -13
  309. package/src/hooks/useAutoFocus.ts +22 -22
  310. package/src/hooks/useChildrenCounter.ts +51 -51
  311. package/src/hooks/useControlledState.ts +3 -3
  312. package/src/hooks/useFocusReturn.ts +43 -43
  313. package/src/hooks/useFocusState.ts +30 -30
  314. package/src/hooks/useGestureHandlers.ts +286 -286
  315. package/src/hooks/useMeasure.ts +33 -33
  316. package/src/hooks/useOnClickOutside.ts +32 -32
  317. package/src/hooks/useOnKeyDown.ts +19 -19
  318. package/src/hooks/useReducerMachine.ts +60 -60
  319. package/src/hooks/useRemoveBodyScroll.ts +39 -39
  320. package/src/hooks/useScope.ts +52 -52
  321. package/src/hooks/useThrottle.ts +19 -19
  322. package/src/index.ts +20 -20
  323. package/src/utils/assign-ref.ts +27 -27
  324. package/src/utils/can-use-dom.ts +7 -7
  325. package/src/utils/clamp.ts +3 -3
  326. package/src/utils/context.tsx +48 -48
  327. package/src/utils/create-subscription.ts +16 -16
  328. package/src/utils/get-circular-index.ts +7 -7
  329. package/src/utils/index.ts +10 -10
  330. package/src/utils/is-right-click.ts +14 -14
  331. package/src/utils/owner-document.ts +13 -13
  332. package/src/utils/polymorphic.ts +78 -78
  333. package/src/utils/rubber-band-clamp.ts +25 -25
  334. package/src/utils/use-stable-callback.ts +58 -58
  335. package/src/utils/wrap-event.ts +22 -22
  336. package/build/esm/TimerField/clamp.d.ts +0 -1
  337. package/build/esm/TimerField/clamp.js +0 -2
  338. package/build/esm/TimerField/clamp.js.map +0 -1
  339. package/build/esm/TimerField/index.d.ts +0 -1
  340. package/build/esm/TimerField/index.js +0 -2
  341. package/build/esm/TimerField/index.js.map +0 -1
  342. package/build/esm/TimerField/useControlledState.d.ts +0 -1
  343. package/build/esm/TimerField/useControlledState.js +0 -2
  344. package/build/esm/TimerField/useControlledState.js.map +0 -1
  345. package/build/esm/TimerField/useTimerField.d.ts +0 -44
  346. package/build/esm/TimerField/useTimerField.js +0 -430
  347. package/build/esm/TimerField/useTimerField.js.map +0 -1
  348. package/build/esm/TimerField/wrapEvent.d.ts +0 -1
  349. package/build/esm/TimerField/wrapEvent.js +0 -2
  350. package/build/esm/TimerField/wrapEvent.js.map +0 -1
@@ -1,78 +1,78 @@
1
- import type {
2
- HTMLAttributes,
3
- ElementType,
4
- CSSProperties,
5
- MouseEvent,
6
- KeyboardEvent,
7
- } from 'react';
8
- import { useRef, forwardRef } from 'react';
9
-
10
- import { assignMultipleRefs } from '../utils/assign-ref';
11
- import { wrapEvent } from '../utils/wrap-event';
12
-
13
- export interface ModalBackdropProps extends HTMLAttributes<HTMLDivElement> {
14
- as?: ElementType<any>;
15
- innerAs?: ElementType<any>;
16
- onClose?: () => void;
17
- style?: CSSProperties;
18
- disableCloseOnClick?: boolean;
19
- disableEscapeKeyDown?: boolean;
20
- }
21
-
22
- export const ModalBackdrop = forwardRef<HTMLDivElement, ModalBackdropProps>(
23
- (
24
- {
25
- as: Comp = 'div',
26
- onClose,
27
- onClick,
28
- onMouseDown,
29
- onKeyDown,
30
- disableCloseOnClick = false,
31
- disableEscapeKeyDown = false,
32
- ...otherProps
33
- },
34
- forwardedRef
35
- ) => {
36
- const ref = useRef();
37
- const mouseDownTargetRef = useRef<EventTarget | null>(null);
38
-
39
- const handleClick = (e: MouseEvent<HTMLDivElement>) => {
40
- // Ignore the events not coming from the "backdrop"
41
- // We don't want to close the dialog when clicking the dialog content.
42
- if (e.target !== e.currentTarget) {
43
- return;
44
- }
45
-
46
- // Make sure the event starts and ends on the same DOM element.
47
- if (e.target !== mouseDownTargetRef.current) {
48
- return;
49
- }
50
-
51
- mouseDownTargetRef.current = null;
52
- !disableCloseOnClick && onClose?.();
53
- e.stopPropagation();
54
- };
55
-
56
- const handleMouseDown = (e: MouseEvent<HTMLDivElement>) => {
57
- mouseDownTargetRef.current = e.target;
58
- };
59
-
60
- const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {
61
- if (e.key === 'Escape') {
62
- !disableEscapeKeyDown && onClose?.();
63
- e.stopPropagation();
64
- }
65
- };
66
-
67
- return (
68
- <Comp
69
- ref={assignMultipleRefs(ref, forwardedRef)}
70
- data-modal-root=""
71
- onClick={wrapEvent(onClick, handleClick)}
72
- onMouseDown={wrapEvent(onMouseDown, handleMouseDown)}
73
- onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}
74
- {...otherProps}
75
- />
76
- );
77
- }
78
- );
1
+ import type {
2
+ HTMLAttributes,
3
+ ElementType,
4
+ CSSProperties,
5
+ MouseEvent,
6
+ KeyboardEvent,
7
+ } from 'react';
8
+ import { useRef, forwardRef } from 'react';
9
+
10
+ import { assignMultipleRefs } from '../utils/assign-ref';
11
+ import { wrapEvent } from '../utils/wrap-event';
12
+
13
+ export interface ModalBackdropProps extends HTMLAttributes<HTMLDivElement> {
14
+ as?: ElementType<any>;
15
+ innerAs?: ElementType<any>;
16
+ onClose?: () => void;
17
+ style?: CSSProperties;
18
+ disableCloseOnClick?: boolean;
19
+ disableEscapeKeyDown?: boolean;
20
+ }
21
+
22
+ export const ModalBackdrop = forwardRef<HTMLDivElement, ModalBackdropProps>(
23
+ (
24
+ {
25
+ as: Comp = 'div',
26
+ onClose,
27
+ onClick,
28
+ onMouseDown,
29
+ onKeyDown,
30
+ disableCloseOnClick = false,
31
+ disableEscapeKeyDown = false,
32
+ ...otherProps
33
+ },
34
+ forwardedRef
35
+ ) => {
36
+ const ref = useRef();
37
+ const mouseDownTargetRef = useRef<EventTarget | null>(null);
38
+
39
+ const handleClick = (e: MouseEvent<HTMLDivElement>) => {
40
+ // Ignore the events not coming from the "backdrop"
41
+ // We don't want to close the dialog when clicking the dialog content.
42
+ if (e.target !== e.currentTarget) {
43
+ return;
44
+ }
45
+
46
+ // Make sure the event starts and ends on the same DOM element.
47
+ if (e.target !== mouseDownTargetRef.current) {
48
+ return;
49
+ }
50
+
51
+ mouseDownTargetRef.current = null;
52
+ !disableCloseOnClick && onClose?.();
53
+ e.stopPropagation();
54
+ };
55
+
56
+ const handleMouseDown = (e: MouseEvent<HTMLDivElement>) => {
57
+ mouseDownTargetRef.current = e.target;
58
+ };
59
+
60
+ const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {
61
+ if (e.key === 'Escape') {
62
+ !disableEscapeKeyDown && onClose?.();
63
+ e.stopPropagation();
64
+ }
65
+ };
66
+
67
+ return (
68
+ <Comp
69
+ ref={assignMultipleRefs(ref, forwardedRef)}
70
+ data-modal-root=""
71
+ onClick={wrapEvent(onClick, handleClick)}
72
+ onMouseDown={wrapEvent(onMouseDown, handleMouseDown)}
73
+ onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}
74
+ {...otherProps}
75
+ />
76
+ );
77
+ }
78
+ );
@@ -1,158 +1,158 @@
1
- import { useState } from 'react';
2
- import { useSpring, animated } from 'react-spring';
3
-
4
- import { Modal, ModalBackdrop } from './';
5
- import { Portal } from '../Portal';
6
- import './styles.css';
7
-
8
- export default {
9
- title: 'components/Modal/NavDrawer',
10
- };
11
-
12
- const LoremIpsum = ({ numOfParagraphs = 20 }) => {
13
- const content = [];
14
-
15
- for (let i = 0; i < numOfParagraphs; i++) {
16
- content.push(
17
- <p key={`paragraph_${i}`}>
18
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
19
- vestibulum sapien nec mauris placerat, et facilisis massa placerat.
20
- Curabitur sagittis condimentum lectus vel aliquam. Sed ultrices, metus
21
- sed suscipit venenatis, metus lectus vestibulum neque, eget sodales
22
- justo sapien in ante. In a neque mollis, volutpat est a, vehicula lacus.
23
- Praesent lectus justo, tempor a laoreet in, consectetur nec sapien.
24
- Phasellus non venenatis erat. Maecenas eget mi sodales, euismod tortor
25
- vitae, ultricies quam. Sed varius nunc id tincidunt porttitor. Morbi
26
- lectus massa, malesuada at lorem ut, semper volutpat orci. Donec mauris
27
- eros, faucibus ut egestas a, ultricies vel tortor. Phasellus mi lectus,
28
- consectetur a risus at, faucibus porttitor ligula. Maecenas felis eros,
29
- porttitor vel placerat eget, malesuada ac leo. Cras a eros id dui
30
- porttitor ullamcorper sit amet quis lorem.
31
- </p>
32
- );
33
- }
34
-
35
- return <>{content}</>;
36
- };
37
-
38
- const Wrapper = ({ children }) => {
39
- return (
40
- <div style={{ maxWidth: 900, margin: '0 auto' }}>
41
- <div
42
- style={{
43
- boxSizing: 'border-box',
44
- display: 'flex',
45
- alignItems: 'flex-start',
46
- padding: '96px 48px',
47
- justifyContent: 'space-around',
48
- width: '100%',
49
- position: 'relative',
50
- }}
51
- >
52
- <a href="#" onClick={(e) => e.preventDefault()}>
53
- Link
54
- </a>
55
- <div style={{ minHeight: 120, width: 100 }}>{children}</div>
56
- <a href="#" onClick={(e) => e.preventDefault()}>
57
- Link
58
- </a>
59
- </div>
60
- <div>
61
- <LoremIpsum />
62
- </div>
63
- </div>
64
- );
65
- };
66
-
67
- const SimpleModalControlledAnimated = () => {
68
- const [open, setOpen] = useState(false);
69
- const [pointerEvents, setPointerEvents] =
70
- useState<PointerEventsProperty>('none');
71
- const [{ transformX, opacity }, set] = useSpring(() => ({
72
- transformX: -120,
73
- opacity: 0,
74
- }));
75
-
76
- const handleClose = () => {
77
- const t = Date.now();
78
- setPointerEvents('none');
79
- set({
80
- transformX: -120,
81
- opacity: 0,
82
- config: {
83
- mass: 1,
84
- tension: 820,
85
- friction: 50,
86
- clamp: true,
87
- },
88
- onRest: () => {
89
- console.log('Close in: ', Date.now() - t);
90
- setOpen(false);
91
- },
92
- });
93
- };
94
-
95
- const handleOpen = () => {
96
- const t = Date.now();
97
- setOpen(true);
98
- setPointerEvents('auto');
99
- set({
100
- transformX: 0,
101
- opacity: 1,
102
- config: {
103
- mass: 1,
104
- tension: 770,
105
- friction: 50,
106
- clamp: true,
107
- },
108
- onRest: () => {
109
- console.log('Opened in: ', Date.now() - t);
110
- },
111
- });
112
- };
113
-
114
- const trans = (x: number) => `translateX(${x}%)`;
115
-
116
- return (
117
- <>
118
- <button onClick={handleOpen}>Open modal</button>
119
- {open && (
120
- <Portal>
121
- <animated.div
122
- style={{
123
- opacity,
124
- position: 'fixed',
125
- boxSizing: 'border-box',
126
- top: '0',
127
- left: '0',
128
- right: '0',
129
- bottom: '0',
130
- backgroundColor: 'rgba(0, 0, 0, 0.3)',
131
- pointerEvents: 'none',
132
- }}
133
- />
134
- <ModalBackdrop onClose={handleClose} style={{ pointerEvents }}>
135
- <Modal
136
- as={animated.div}
137
- className="nav-drawer-left"
138
- style={{
139
- transform: transformX.to(trans),
140
- opacity,
141
- }}
142
- >
143
- <button>This is a cool button</button>
144
- Hello world
145
- <LoremIpsum />
146
- </Modal>
147
- </ModalBackdrop>
148
- </Portal>
149
- )}
150
- </>
151
- );
152
- };
153
-
154
- export const ControlledAnimated = () => (
155
- <Wrapper>
156
- <SimpleModalControlledAnimated />
157
- </Wrapper>
158
- );
1
+ import { useState } from 'react';
2
+ import { useSpring, animated } from 'react-spring';
3
+
4
+ import { Modal, ModalBackdrop } from './';
5
+ import { Portal } from '../Portal';
6
+ import './styles.css';
7
+
8
+ export default {
9
+ title: 'components/Modal/NavDrawer',
10
+ };
11
+
12
+ const LoremIpsum = ({ numOfParagraphs = 20 }) => {
13
+ const content = [];
14
+
15
+ for (let i = 0; i < numOfParagraphs; i++) {
16
+ content.push(
17
+ <p key={`paragraph_${i}`}>
18
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
19
+ vestibulum sapien nec mauris placerat, et facilisis massa placerat.
20
+ Curabitur sagittis condimentum lectus vel aliquam. Sed ultrices, metus
21
+ sed suscipit venenatis, metus lectus vestibulum neque, eget sodales
22
+ justo sapien in ante. In a neque mollis, volutpat est a, vehicula lacus.
23
+ Praesent lectus justo, tempor a laoreet in, consectetur nec sapien.
24
+ Phasellus non venenatis erat. Maecenas eget mi sodales, euismod tortor
25
+ vitae, ultricies quam. Sed varius nunc id tincidunt porttitor. Morbi
26
+ lectus massa, malesuada at lorem ut, semper volutpat orci. Donec mauris
27
+ eros, faucibus ut egestas a, ultricies vel tortor. Phasellus mi lectus,
28
+ consectetur a risus at, faucibus porttitor ligula. Maecenas felis eros,
29
+ porttitor vel placerat eget, malesuada ac leo. Cras a eros id dui
30
+ porttitor ullamcorper sit amet quis lorem.
31
+ </p>
32
+ );
33
+ }
34
+
35
+ return <>{content}</>;
36
+ };
37
+
38
+ const Wrapper = ({ children }) => {
39
+ return (
40
+ <div style={{ maxWidth: 900, margin: '0 auto' }}>
41
+ <div
42
+ style={{
43
+ boxSizing: 'border-box',
44
+ display: 'flex',
45
+ alignItems: 'flex-start',
46
+ padding: '96px 48px',
47
+ justifyContent: 'space-around',
48
+ width: '100%',
49
+ position: 'relative',
50
+ }}
51
+ >
52
+ <a href="#" onClick={(e) => e.preventDefault()}>
53
+ Link
54
+ </a>
55
+ <div style={{ minHeight: 120, width: 100 }}>{children}</div>
56
+ <a href="#" onClick={(e) => e.preventDefault()}>
57
+ Link
58
+ </a>
59
+ </div>
60
+ <div>
61
+ <LoremIpsum />
62
+ </div>
63
+ </div>
64
+ );
65
+ };
66
+
67
+ const SimpleModalControlledAnimated = () => {
68
+ const [open, setOpen] = useState(false);
69
+ const [pointerEvents, setPointerEvents] =
70
+ useState<PointerEventsProperty>('none');
71
+ const [{ transformX, opacity }, set] = useSpring(() => ({
72
+ transformX: -120,
73
+ opacity: 0,
74
+ }));
75
+
76
+ const handleClose = () => {
77
+ const t = Date.now();
78
+ setPointerEvents('none');
79
+ set({
80
+ transformX: -120,
81
+ opacity: 0,
82
+ config: {
83
+ mass: 1,
84
+ tension: 820,
85
+ friction: 50,
86
+ clamp: true,
87
+ },
88
+ onRest: () => {
89
+ console.log('Close in: ', Date.now() - t);
90
+ setOpen(false);
91
+ },
92
+ });
93
+ };
94
+
95
+ const handleOpen = () => {
96
+ const t = Date.now();
97
+ setOpen(true);
98
+ setPointerEvents('auto');
99
+ set({
100
+ transformX: 0,
101
+ opacity: 1,
102
+ config: {
103
+ mass: 1,
104
+ tension: 770,
105
+ friction: 50,
106
+ clamp: true,
107
+ },
108
+ onRest: () => {
109
+ console.log('Opened in: ', Date.now() - t);
110
+ },
111
+ });
112
+ };
113
+
114
+ const trans = (x: number) => `translateX(${x}%)`;
115
+
116
+ return (
117
+ <>
118
+ <button onClick={handleOpen}>Open modal</button>
119
+ {open && (
120
+ <Portal>
121
+ <animated.div
122
+ style={{
123
+ opacity,
124
+ position: 'fixed',
125
+ boxSizing: 'border-box',
126
+ top: '0',
127
+ left: '0',
128
+ right: '0',
129
+ bottom: '0',
130
+ backgroundColor: 'rgba(0, 0, 0, 0.3)',
131
+ pointerEvents: 'none',
132
+ }}
133
+ />
134
+ <ModalBackdrop onClose={handleClose} style={{ pointerEvents }}>
135
+ <Modal
136
+ as={animated.div}
137
+ className="nav-drawer-left"
138
+ style={{
139
+ transform: transformX.to(trans),
140
+ opacity,
141
+ }}
142
+ >
143
+ <button>This is a cool button</button>
144
+ Hello world
145
+ <LoremIpsum />
146
+ </Modal>
147
+ </ModalBackdrop>
148
+ </Portal>
149
+ )}
150
+ </>
151
+ );
152
+ };
153
+
154
+ export const ControlledAnimated = () => (
155
+ <Wrapper>
156
+ <SimpleModalControlledAnimated />
157
+ </Wrapper>
158
+ );
@@ -1,2 +1,2 @@
1
- export * from './Modal';
2
- export * from './ModalBackdrop';
1
+ export * from './Modal';
2
+ export * from './ModalBackdrop';
@@ -1,46 +1,46 @@
1
- [data-modal-root] {
2
- position: fixed;
3
- box-sizing: border-box;
4
- top: 0;
5
- left: 0;
6
- right: 0;
7
- bottom: 0;
8
- overflow-y: auto;
9
- }
10
-
11
- [data-modal-container] {
12
- position: relative;
13
- left: 0;
14
- right: 0;
15
- margin: 96px auto;
16
- width: 100%;
17
- max-width: 600px;
18
- background-color: #fff;
19
- box-shadow: 0px 2px 6px hsla(0, 0%, 0%, 0.15);
20
- border-radius: 3px;
21
- overflow-y: auto;
22
- }
23
-
24
- [data-modal-backdrop] {
25
- position: fixed;
26
- box-sizing: border-box;
27
- top: 0;
28
- left: 0;
29
- right: 0;
30
- bottom: 0;
31
- background-color: rgba(0, 0, 0, 0.3);
32
- pointer-events: none;
33
- }
34
-
35
- .nav-drawer-left {
36
- position: relative;
37
- left: 0;
38
- right: 0;
39
- margin: 0;
40
- width: 260px;
41
- background-color: #fff;
42
- box-shadow: 0px 2px 6px hsla(0, 0%, 0%, 0.15);
43
- border-radius: 0px;
44
- max-height: 100%;
45
- overflow-y: auto;
46
- }
1
+ [data-modal-root] {
2
+ position: fixed;
3
+ box-sizing: border-box;
4
+ top: 0;
5
+ left: 0;
6
+ right: 0;
7
+ bottom: 0;
8
+ overflow-y: auto;
9
+ }
10
+
11
+ [data-modal-container] {
12
+ position: relative;
13
+ left: 0;
14
+ right: 0;
15
+ margin: 96px auto;
16
+ width: 100%;
17
+ max-width: 600px;
18
+ background-color: #fff;
19
+ box-shadow: 0px 2px 6px hsla(0, 0%, 0%, 0.15);
20
+ border-radius: 3px;
21
+ overflow-y: auto;
22
+ }
23
+
24
+ [data-modal-backdrop] {
25
+ position: fixed;
26
+ box-sizing: border-box;
27
+ top: 0;
28
+ left: 0;
29
+ right: 0;
30
+ bottom: 0;
31
+ background-color: rgba(0, 0, 0, 0.3);
32
+ pointer-events: none;
33
+ }
34
+
35
+ .nav-drawer-left {
36
+ position: relative;
37
+ left: 0;
38
+ right: 0;
39
+ margin: 0;
40
+ width: 260px;
41
+ background-color: #fff;
42
+ box-shadow: 0px 2px 6px hsla(0, 0%, 0%, 0.15);
43
+ border-radius: 0px;
44
+ max-height: 100%;
45
+ overflow-y: auto;
46
+ }