bootstrap-rn 0.4.5 → 0.4.7

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 (288) hide show
  1. package/lib/module/Context.js.map +1 -1
  2. package/lib/module/Provider.js +3 -7
  3. package/lib/module/Provider.js.map +1 -1
  4. package/lib/module/components/Body.js +10 -5
  5. package/lib/module/components/Body.js.map +1 -1
  6. package/lib/module/components/buttons/Button.js +10 -8
  7. package/lib/module/components/buttons/Button.js.map +1 -1
  8. package/lib/module/components/close/CloseButton.js +7 -3
  9. package/lib/module/components/close/CloseButton.js.map +1 -1
  10. package/lib/module/components/collapse/useCollapse.js +2 -3
  11. package/lib/module/components/collapse/useCollapse.js.map +1 -1
  12. package/lib/module/components/dropdown/Dropdown.js +1 -2
  13. package/lib/module/components/dropdown/Dropdown.js.map +1 -1
  14. package/lib/module/components/dropdown/DropdownContext.js.map +1 -1
  15. package/lib/module/components/dropdown/DropdownMenu.js +33 -59
  16. package/lib/module/components/dropdown/DropdownMenu.js.map +1 -1
  17. package/lib/module/components/dropdown/useDismissDropdown.js +5 -4
  18. package/lib/module/components/dropdown/useDismissDropdown.js.map +1 -1
  19. package/lib/module/components/dropdown/useDropdown.js +35 -11
  20. package/lib/module/components/dropdown/useDropdown.js.map +1 -1
  21. package/lib/module/components/dropdown/useToggleDropdown.js +4 -6
  22. package/lib/module/components/dropdown/useToggleDropdown.js.map +1 -1
  23. package/lib/module/components/forms/FormCheckInput.js +1 -1
  24. package/lib/module/components/forms/Input.js +1 -1
  25. package/lib/module/components/forms/internals/PickerNative.js +1 -1
  26. package/lib/module/components/forms/internals/PickerNative.js.map +1 -1
  27. package/lib/module/components/helpers/BackdropHandler.js +6 -92
  28. package/lib/module/components/helpers/BackdropHandler.js.map +1 -1
  29. package/lib/module/components/helpers/BackdropHandler.web.js +8 -0
  30. package/lib/module/components/helpers/BackdropHandler.web.js.map +1 -0
  31. package/lib/module/components/helpers/Dialog.js +29 -0
  32. package/lib/module/components/helpers/Dialog.js.map +1 -0
  33. package/lib/module/components/helpers/Dialog.web.js +117 -0
  34. package/lib/module/components/helpers/Dialog.web.js.map +1 -0
  35. package/lib/module/components/helpers/Portal.js +5 -0
  36. package/lib/module/components/helpers/Portal.js.map +1 -0
  37. package/lib/module/components/helpers/Portal.web.js +16 -0
  38. package/lib/module/components/helpers/Portal.web.js.map +1 -0
  39. package/lib/module/components/helpers/PortalHost.js +5 -0
  40. package/lib/module/components/helpers/PortalHost.js.map +1 -0
  41. package/lib/module/components/helpers/PortalHost.web.js +15 -0
  42. package/lib/module/components/helpers/PortalHost.web.js.map +1 -0
  43. package/lib/module/components/modal/Modal.js +58 -47
  44. package/lib/module/components/modal/Modal.js.map +1 -1
  45. package/lib/module/components/modal/ModalContext.js.map +1 -1
  46. package/lib/module/components/modal/ModalTitle.js +6 -0
  47. package/lib/module/components/modal/ModalTitle.js.map +1 -1
  48. package/lib/module/components/modal/useModal.js +4 -13
  49. package/lib/module/components/modal/useModal.js.map +1 -1
  50. package/lib/module/components/nav/useTabbable.js +2 -3
  51. package/lib/module/components/nav/useTabbable.js.map +1 -1
  52. package/lib/module/components/navbar/NavbarToggler.js +1 -1
  53. package/lib/module/components/navbar/useNavbar.js +2 -3
  54. package/lib/module/components/navbar/useNavbar.js.map +1 -1
  55. package/lib/module/components/offcanvas/Offcanvas.js +84 -83
  56. package/lib/module/components/offcanvas/Offcanvas.js.map +1 -1
  57. package/lib/module/components/offcanvas/OffcanvasContext.js.map +1 -1
  58. package/lib/module/components/offcanvas/OffcanvasTitle.js +6 -0
  59. package/lib/module/components/offcanvas/OffcanvasTitle.js.map +1 -1
  60. package/lib/module/components/offcanvas/useOffcanvas.js +6 -14
  61. package/lib/module/components/offcanvas/useOffcanvas.js.map +1 -1
  62. package/lib/module/components/pagination/PaginationItem.js +39 -39
  63. package/lib/module/components/popover/Popover.js +6 -8
  64. package/lib/module/components/popover/Popover.js.map +1 -1
  65. package/lib/module/components/popover/PopoverArrow.js +18 -9
  66. package/lib/module/components/popover/PopoverArrow.js.map +1 -1
  67. package/lib/module/components/popover/PopoverContext.js.map +1 -1
  68. package/lib/module/components/popover/injectPopover.js +48 -45
  69. package/lib/module/components/popover/injectPopover.js.map +1 -1
  70. package/lib/module/components/tooltip/Tooltip.js +7 -23
  71. package/lib/module/components/tooltip/Tooltip.js.map +1 -1
  72. package/lib/module/components/tooltip/TooltipArrow.js +22 -12
  73. package/lib/module/components/tooltip/TooltipArrow.js.map +1 -1
  74. package/lib/module/components/tooltip/TooltipContext.js.map +1 -1
  75. package/lib/module/components/tooltip/injectTooltip.js +46 -42
  76. package/lib/module/components/tooltip/injectTooltip.js.map +1 -1
  77. package/lib/module/hooks/useBackgroundNative.js.map +1 -1
  78. package/lib/module/hooks/useFocusRing.js +13 -0
  79. package/lib/module/hooks/useFocusRing.js.map +1 -0
  80. package/lib/module/hooks/useFocusRing.web.js +5 -0
  81. package/lib/module/hooks/useFocusRing.web.js.map +1 -0
  82. package/lib/module/hooks/useInteractionState.js +11 -11
  83. package/lib/module/hooks/useInteractionState.js.map +1 -1
  84. package/lib/module/hooks/useOverlay.js +121 -0
  85. package/lib/module/hooks/useOverlay.js.map +1 -0
  86. package/lib/module/hooks/useOverlay.web.js +113 -0
  87. package/lib/module/hooks/useOverlay.web.js.map +1 -0
  88. package/lib/module/hooks/useScrollbarEffects.js +7 -60
  89. package/lib/module/hooks/useScrollbarEffects.js.map +1 -1
  90. package/lib/module/hooks/useScrollbarEffects.web.js +59 -0
  91. package/lib/module/hooks/useScrollbarEffects.web.js.map +1 -0
  92. package/lib/module/index.js +3 -3
  93. package/lib/module/index.js.map +1 -1
  94. package/lib/module/style/StyleSheet.js +1 -3
  95. package/lib/module/style/StyleSheet.js.map +1 -1
  96. package/lib/module/theme/variables.js +9 -9
  97. package/lib/module/utils.js +0 -11
  98. package/lib/module/utils.js.map +1 -1
  99. package/lib/typescript/Context.d.ts +0 -1
  100. package/lib/typescript/Context.d.ts.map +1 -1
  101. package/lib/typescript/Provider.d.ts.map +1 -1
  102. package/lib/typescript/components/Body.d.ts +2 -2
  103. package/lib/typescript/components/Body.d.ts.map +1 -1
  104. package/lib/typescript/components/Link.d.ts +1 -1
  105. package/lib/typescript/components/Link.d.ts.map +1 -1
  106. package/lib/typescript/components/Pressable.d.ts +1 -1
  107. package/lib/typescript/components/Pressable.d.ts.map +1 -1
  108. package/lib/typescript/components/TextInput.d.ts +3 -3
  109. package/lib/typescript/components/TextInput.d.ts.map +1 -1
  110. package/lib/typescript/components/buttons/Button.d.ts +1 -1
  111. package/lib/typescript/components/buttons/Button.d.ts.map +1 -1
  112. package/lib/typescript/components/close/CloseButton.d.ts +1 -1
  113. package/lib/typescript/components/close/CloseButton.d.ts.map +1 -1
  114. package/lib/typescript/components/collapse/useCollapse.d.ts.map +1 -1
  115. package/lib/typescript/components/dropdown/Dropdown.d.ts +0 -1
  116. package/lib/typescript/components/dropdown/Dropdown.d.ts.map +1 -1
  117. package/lib/typescript/components/dropdown/DropdownContext.d.ts +14 -3
  118. package/lib/typescript/components/dropdown/DropdownContext.d.ts.map +1 -1
  119. package/lib/typescript/components/dropdown/DropdownMenu.d.ts +0 -1
  120. package/lib/typescript/components/dropdown/DropdownMenu.d.ts.map +1 -1
  121. package/lib/typescript/components/dropdown/useDismissDropdown.d.ts +1 -1
  122. package/lib/typescript/components/dropdown/useDismissDropdown.d.ts.map +1 -1
  123. package/lib/typescript/components/dropdown/useDropdown.d.ts +38 -4
  124. package/lib/typescript/components/dropdown/useDropdown.d.ts.map +1 -1
  125. package/lib/typescript/components/dropdown/useToggleDropdown.d.ts +4 -3
  126. package/lib/typescript/components/dropdown/useToggleDropdown.d.ts.map +1 -1
  127. package/lib/typescript/components/forms/Picker.d.ts +1 -1
  128. package/lib/typescript/components/forms/internals/PickerNative.d.ts +1 -1
  129. package/lib/typescript/components/forms/internals/PickerNative.d.ts.map +1 -1
  130. package/lib/typescript/components/forms/internals/PickerWeb.d.ts +1 -1
  131. package/lib/typescript/components/forms/internals/PickerWeb.d.ts.map +1 -1
  132. package/lib/typescript/components/helpers/BackdropHandler.d.ts +2 -11
  133. package/lib/typescript/components/helpers/BackdropHandler.d.ts.map +1 -1
  134. package/lib/typescript/components/helpers/BackdropHandler.web.d.ts +3 -0
  135. package/lib/typescript/components/helpers/BackdropHandler.web.d.ts.map +1 -0
  136. package/lib/typescript/components/helpers/Dialog.d.ts +15 -0
  137. package/lib/typescript/components/helpers/Dialog.d.ts.map +1 -0
  138. package/lib/typescript/components/helpers/Dialog.web.d.ts +15 -0
  139. package/lib/typescript/components/helpers/Dialog.web.d.ts.map +1 -0
  140. package/lib/typescript/components/helpers/Portal.d.ts +8 -0
  141. package/lib/typescript/components/helpers/Portal.d.ts.map +1 -0
  142. package/lib/typescript/components/helpers/Portal.web.d.ts +8 -0
  143. package/lib/typescript/components/helpers/Portal.web.d.ts.map +1 -0
  144. package/lib/typescript/components/helpers/PortalHost.d.ts +6 -0
  145. package/lib/typescript/components/helpers/PortalHost.d.ts.map +1 -0
  146. package/lib/typescript/components/helpers/PortalHost.web.d.ts +7 -0
  147. package/lib/typescript/components/helpers/PortalHost.web.d.ts.map +1 -0
  148. package/lib/typescript/components/list-group/ListGroup.d.ts +1 -1
  149. package/lib/typescript/components/list-group/ListGroupItemAction.d.ts +1 -1
  150. package/lib/typescript/components/list-group/ListGroupItemAction.d.ts.map +1 -1
  151. package/lib/typescript/components/modal/Modal.d.ts +1 -1
  152. package/lib/typescript/components/modal/Modal.d.ts.map +1 -1
  153. package/lib/typescript/components/modal/ModalContext.d.ts +1 -0
  154. package/lib/typescript/components/modal/ModalContext.d.ts.map +1 -1
  155. package/lib/typescript/components/modal/ModalTitle.d.ts.map +1 -1
  156. package/lib/typescript/components/modal/useModal.d.ts +2 -1
  157. package/lib/typescript/components/modal/useModal.d.ts.map +1 -1
  158. package/lib/typescript/components/nav/Nav.d.ts +1 -1
  159. package/lib/typescript/components/nav/NavLink.d.ts +1 -1
  160. package/lib/typescript/components/nav/NavLink.d.ts.map +1 -1
  161. package/lib/typescript/components/nav/useTabbable.d.ts.map +1 -1
  162. package/lib/typescript/components/navbar/Navbar.d.ts +2 -2
  163. package/lib/typescript/components/navbar/NavbarBrand.d.ts +1 -1
  164. package/lib/typescript/components/navbar/NavbarBrand.d.ts.map +1 -1
  165. package/lib/typescript/components/navbar/NavbarToggler.d.ts +1 -1
  166. package/lib/typescript/components/navbar/NavbarToggler.d.ts.map +1 -1
  167. package/lib/typescript/components/navbar/useNavbar.d.ts.map +1 -1
  168. package/lib/typescript/components/offcanvas/Offcanvas.d.ts +1 -4
  169. package/lib/typescript/components/offcanvas/Offcanvas.d.ts.map +1 -1
  170. package/lib/typescript/components/offcanvas/OffcanvasContext.d.ts +3 -1
  171. package/lib/typescript/components/offcanvas/OffcanvasContext.d.ts.map +1 -1
  172. package/lib/typescript/components/offcanvas/OffcanvasTitle.d.ts.map +1 -1
  173. package/lib/typescript/components/offcanvas/useOffcanvas.d.ts +3 -1
  174. package/lib/typescript/components/offcanvas/useOffcanvas.d.ts.map +1 -1
  175. package/lib/typescript/components/popover/Popover.d.ts +3 -4
  176. package/lib/typescript/components/popover/Popover.d.ts.map +1 -1
  177. package/lib/typescript/components/popover/PopoverArrow.d.ts.map +1 -1
  178. package/lib/typescript/components/popover/PopoverContext.d.ts +3 -4
  179. package/lib/typescript/components/popover/PopoverContext.d.ts.map +1 -1
  180. package/lib/typescript/components/popover/injectPopover.d.ts +5 -7
  181. package/lib/typescript/components/popover/injectPopover.d.ts.map +1 -1
  182. package/lib/typescript/components/tooltip/Tooltip.d.ts +3 -4
  183. package/lib/typescript/components/tooltip/Tooltip.d.ts.map +1 -1
  184. package/lib/typescript/components/tooltip/TooltipArrow.d.ts.map +1 -1
  185. package/lib/typescript/components/tooltip/TooltipContext.d.ts +3 -4
  186. package/lib/typescript/components/tooltip/TooltipContext.d.ts.map +1 -1
  187. package/lib/typescript/components/tooltip/injectTooltip.d.ts +5 -7
  188. package/lib/typescript/components/tooltip/injectTooltip.d.ts.map +1 -1
  189. package/lib/typescript/hooks/useBackgroundNative.d.ts.map +1 -1
  190. package/lib/typescript/hooks/useFocusRing.d.ts +3 -0
  191. package/lib/typescript/hooks/useFocusRing.d.ts.map +1 -0
  192. package/lib/typescript/hooks/useFocusRing.web.d.ts +3 -0
  193. package/lib/typescript/hooks/useFocusRing.web.d.ts.map +1 -0
  194. package/lib/typescript/hooks/useInteractionState.d.ts +7 -7
  195. package/lib/typescript/hooks/useInteractionState.d.ts.map +1 -1
  196. package/lib/typescript/hooks/useOverlay.d.ts +64 -0
  197. package/lib/typescript/hooks/useOverlay.d.ts.map +1 -0
  198. package/lib/typescript/hooks/useOverlay.web.d.ts +37 -0
  199. package/lib/typescript/hooks/useOverlay.web.d.ts.map +1 -0
  200. package/lib/typescript/hooks/useScrollbarEffects.d.ts.map +1 -1
  201. package/lib/typescript/hooks/useScrollbarEffects.web.d.ts +7 -0
  202. package/lib/typescript/hooks/useScrollbarEffects.web.d.ts.map +1 -0
  203. package/lib/typescript/index.d.ts +5 -4
  204. package/lib/typescript/index.d.ts.map +1 -1
  205. package/lib/typescript/style/StyleSheet.d.ts.map +1 -1
  206. package/lib/typescript/types.d.ts +12 -6
  207. package/lib/typescript/types.d.ts.map +1 -1
  208. package/lib/typescript/utils.d.ts +2 -3
  209. package/lib/typescript/utils.d.ts.map +1 -1
  210. package/package.json +92 -87
  211. package/src/Context.ts +37 -38
  212. package/src/Provider.tsx +61 -66
  213. package/src/components/Body.tsx +22 -22
  214. package/src/components/TextInput.tsx +66 -66
  215. package/src/components/buttons/Button.tsx +381 -379
  216. package/src/components/close/CloseButton.tsx +142 -138
  217. package/src/components/collapse/useCollapse.ts +25 -26
  218. package/src/components/dropdown/Dropdown.tsx +77 -80
  219. package/src/components/dropdown/DropdownContext.ts +14 -3
  220. package/src/components/dropdown/DropdownMenu.tsx +243 -284
  221. package/src/components/dropdown/useDismissDropdown.ts +30 -29
  222. package/src/components/dropdown/useDropdown.ts +55 -38
  223. package/src/components/dropdown/useToggleDropdown.ts +31 -32
  224. package/src/components/forms/FormCheckInput.tsx +268 -268
  225. package/src/components/forms/Input.tsx +220 -220
  226. package/src/components/forms/internals/PickerNative.tsx +9 -10
  227. package/src/components/helpers/BackdropHandler.tsx +5 -119
  228. package/src/components/helpers/BackdropHandler.web.tsx +6 -0
  229. package/src/components/helpers/Dialog.tsx +49 -0
  230. package/src/components/helpers/Dialog.web.tsx +145 -0
  231. package/src/components/helpers/Portal.tsx +10 -0
  232. package/src/components/helpers/Portal.web.tsx +22 -0
  233. package/src/components/helpers/PortalHost.tsx +7 -0
  234. package/src/components/helpers/PortalHost.web.tsx +14 -0
  235. package/src/components/modal/Modal.tsx +60 -46
  236. package/src/components/modal/ModalContext.ts +12 -11
  237. package/src/components/modal/ModalTitle.tsx +41 -31
  238. package/src/components/modal/useModal.ts +13 -25
  239. package/src/components/nav/useTabbable.ts +31 -32
  240. package/src/components/navbar/NavbarToggler.tsx +130 -130
  241. package/src/components/navbar/useNavbar.ts +30 -31
  242. package/src/components/offcanvas/Offcanvas.tsx +92 -95
  243. package/src/components/offcanvas/OffcanvasContext.ts +13 -11
  244. package/src/components/offcanvas/OffcanvasTitle.tsx +43 -33
  245. package/src/components/offcanvas/useOffcanvas.ts +12 -20
  246. package/src/components/pagination/PaginationItem.tsx +139 -139
  247. package/src/components/popover/Popover.tsx +87 -90
  248. package/src/components/popover/PopoverArrow.tsx +22 -6
  249. package/src/components/popover/PopoverContext.ts +13 -18
  250. package/src/components/popover/injectPopover.tsx +63 -55
  251. package/src/components/tooltip/Tooltip.tsx +79 -98
  252. package/src/components/tooltip/TooltipArrow.tsx +26 -8
  253. package/src/components/tooltip/TooltipContext.ts +13 -18
  254. package/src/components/tooltip/injectTooltip.tsx +62 -53
  255. package/src/hooks/useAction.ts +78 -78
  256. package/src/hooks/useBackgroundNative.tsx +6 -4
  257. package/src/hooks/useFocusRing.ts +13 -0
  258. package/src/hooks/useFocusRing.web.ts +3 -0
  259. package/src/hooks/useInteractionState.ts +75 -81
  260. package/src/hooks/useOverlay.ts +197 -0
  261. package/src/hooks/useOverlay.web.ts +190 -0
  262. package/src/hooks/useScrollbarEffects.ts +5 -83
  263. package/src/hooks/useScrollbarEffects.web.ts +83 -0
  264. package/src/index.ts +5 -5
  265. package/src/style/StyleSheet.ts +2 -5
  266. package/src/theme/variables.ts +1420 -1420
  267. package/src/types.ts +14 -14
  268. package/src/utils.ts +4 -22
  269. package/lib/module/components/SafeAreaView.js +0 -44
  270. package/lib/module/components/SafeAreaView.js.map +0 -1
  271. package/lib/module/components/helpers/Overlay.js +0 -50
  272. package/lib/module/components/helpers/Overlay.js.map +0 -1
  273. package/lib/module/hooks/useIdentifier.js +0 -14
  274. package/lib/module/hooks/useIdentifier.js.map +0 -1
  275. package/lib/module/hooks/useTrigger.js +0 -97
  276. package/lib/module/hooks/useTrigger.js.map +0 -1
  277. package/lib/typescript/components/SafeAreaView.d.ts +0 -13
  278. package/lib/typescript/components/SafeAreaView.d.ts.map +0 -1
  279. package/lib/typescript/components/helpers/Overlay.d.ts +0 -28
  280. package/lib/typescript/components/helpers/Overlay.d.ts.map +0 -1
  281. package/lib/typescript/hooks/useIdentifier.d.ts +0 -2
  282. package/lib/typescript/hooks/useIdentifier.d.ts.map +0 -1
  283. package/lib/typescript/hooks/useTrigger.d.ts +0 -33
  284. package/lib/typescript/hooks/useTrigger.d.ts.map +0 -1
  285. package/src/components/SafeAreaView.tsx +0 -71
  286. package/src/components/helpers/Overlay.tsx +0 -81
  287. package/src/hooks/useIdentifier.ts +0 -15
  288. package/src/hooks/useTrigger.ts +0 -141
@@ -1,138 +1,142 @@
1
- import React, { useContext } from 'react';
2
- import css from '../../style/css';
3
- import { getStyles } from '../../utils';
4
- import StyleSheet from '../../style/StyleSheet';
5
- import Pressable, { PressableProps, PressableRef } from '../Pressable';
6
- import ModalContext from '../modal/ModalContext';
7
- import OffcanvasContext from '../offcanvas/OffcanvasContext';
8
- import useMedia from '../../hooks/useMedia';
9
- import useStyle from '../../hooks/useStyle';
10
- import useInteractionState from '../../hooks/useInteractionState';
11
- import useBackground from '../../hooks/useBackground';
12
- import { escapeSvg } from '../../theme/functions';
13
- import type { ThemeVariables } from '../../types';
14
-
15
- export interface CloseButtonProps extends Omit<PressableProps, 'children'> {
16
- disabled?: boolean;
17
- }
18
-
19
- const styles = StyleSheet.create({
20
- '.btn-close': css`
21
- // Workaround for missing box-sizing in react native.
22
- $additional-width: $btn-close-padding-x * 2;
23
- $additional-height: $btn-close-padding-y * 2;
24
-
25
- // box-sizing: content-box;
26
- width: $btn-close-width + $additional-width;
27
- height: $btn-close-height + $additional-height;
28
- padding: $btn-close-padding-y $btn-close-padding-x;
29
- background-color: transparent; // include transparent for button elements
30
- background-image: ${(t: ThemeVariables) => escapeSvg(t['btn-close-bg'])};
31
- background-position: center;
32
- background-size: $btn-close-width auto;
33
- background-repeat: no-repeat;
34
- border-width: 0; // for button elements
35
- // @include border-radius();
36
- opacity: $btn-close-opacity;
37
-
38
- &:hover {
39
- opacity: $btn-close-hover-opacity;
40
- }
41
-
42
- &:focus {
43
- // outline: 0;
44
- // box-shadow: $btn-close-focus-shadow;
45
- opacity: $btn-close-focus-opacity;
46
- }
47
- `,
48
- '.btn-close --text': css`
49
- color: $btn-close-color;
50
-
51
- // Override <a>'s hover style
52
- &:hover {
53
- color: $btn-close-color;
54
- text-decoration: none;
55
- }
56
- `,
57
- '.btn-close.disabled': css`
58
- pointer-events: none;
59
- user-select: none;
60
- opacity: $btn-close-disabled-opacity;
61
- `,
62
- // Modal styles
63
- '.modal-header .btn-close': css`
64
- padding: $modal-header-padding-y * 0.5 $modal-header-padding-x * 0.5;
65
- margin: -0.5 * $modal-header-padding-y -0.5 * $modal-header-padding-x -0.5 *
66
- $modal-header-padding-y auto;
67
-
68
- // Workaround for missing box-sizing in react native.
69
- width: $btn-close-width + $modal-header-padding-x;
70
- height: $btn-close-height + $modal-header-padding-y;
71
- `,
72
- // Offcanvas styles
73
- '.offcanvas-header .btn-close': css`
74
- padding: $offcanvas-padding-y * 0.5 $offcanvas-padding-x * 0.5;
75
- margin-top: -0.5 * $offcanvas-padding-y;
76
- margin-right: -0.5 * $offcanvas-padding-x;
77
- margin-bottom: -0.5 * $offcanvas-padding-y;
78
-
79
- // Workaround for missing box-sizing in react native.
80
- width: $btn-close-width + $offcanvas-padding-x;
81
- height: $btn-close-height + $offcanvas-padding-y;
82
- `,
83
- });
84
-
85
- const CloseButton = React.forwardRef<PressableRef, CloseButtonProps>(
86
- (props, ref) => {
87
- const {
88
- disabled = false,
89
- style,
90
- textStyle,
91
- styleName,
92
- ...elementProps
93
- } = props;
94
-
95
- const media = useMedia();
96
-
97
- const modal = useContext(ModalContext);
98
- const offcanvas = useContext(OffcanvasContext);
99
-
100
- const classes = getStyles(styles, [
101
- '.btn-close',
102
- disabled && '.btn-close.disabled',
103
- // Modal styles
104
- modal && '.modal-header .btn-close',
105
- // Offcanvas styles
106
- offcanvas && '.offcanvas-header .btn-close',
107
- ]);
108
- const textClasses = getStyles(styles, ['.btn-close --text']);
109
-
110
- const resolveStyle = useStyle([classes, style], styleName);
111
-
112
- const { interaction, interactionProps } = useInteractionState(elementProps);
113
-
114
- const background = useBackground(
115
- resolveStyle({
116
- media,
117
- interaction,
118
- }),
119
- );
120
-
121
- return (
122
- <Pressable
123
- {...elementProps}
124
- {...interactionProps}
125
- ref={ref}
126
- disabled={disabled}
127
- style={background.style}
128
- textStyle={[textClasses, textStyle]}
129
- >
130
- {background.element}
131
- </Pressable>
132
- );
133
- },
134
- );
135
-
136
- CloseButton.displayName = 'CloseButton';
137
-
138
- export default CloseButton;
1
+ import React, { useContext } from 'react';
2
+ import css from '../../style/css';
3
+ import { getStyles } from '../../utils';
4
+ import StyleSheet from '../../style/StyleSheet';
5
+ import Pressable, { PressableProps, PressableRef } from '../Pressable';
6
+ import ModalContext from '../modal/ModalContext';
7
+ import OffcanvasContext from '../offcanvas/OffcanvasContext';
8
+ import useMedia from '../../hooks/useMedia';
9
+ import useStyle from '../../hooks/useStyle';
10
+ import useInteractionState from '../../hooks/useInteractionState';
11
+ import useBackground from '../../hooks/useBackground';
12
+ import { escapeSvg } from '../../theme/functions';
13
+ import type { ThemeVariables } from '../../types';
14
+
15
+ export interface CloseButtonProps extends Omit<PressableProps, 'children'> {
16
+ disabled?: boolean;
17
+ }
18
+
19
+ const styles = StyleSheet.create({
20
+ '.btn-close': css`
21
+ // Workaround for missing box-sizing in react native.
22
+ $additional-width: $btn-close-padding-x * 2;
23
+ $additional-height: $btn-close-padding-y * 2;
24
+
25
+ // box-sizing: content-box;
26
+ width: $btn-close-width + $additional-width;
27
+ height: $btn-close-height + $additional-height;
28
+ padding: $btn-close-padding-y $btn-close-padding-x;
29
+ background-color: transparent; // include transparent for button elements
30
+ background-image: ${(t: ThemeVariables) => escapeSvg(t['btn-close-bg'])};
31
+ background-position: center;
32
+ background-size: $btn-close-width auto;
33
+ background-repeat: no-repeat;
34
+ border-width: 0; // for button elements
35
+ border-radius: $border-radius;
36
+ opacity: $btn-close-opacity;
37
+
38
+ &:hover {
39
+ opacity: $btn-close-hover-opacity;
40
+ }
41
+
42
+ &:focus {
43
+ @include platform(web) {
44
+ outline-style: none; // outline: 0;
45
+ box-shadow: $btn-close-focus-shadow;
46
+ }
47
+ opacity: $btn-close-focus-opacity;
48
+ }
49
+ `,
50
+ '.btn-close --text': css`
51
+ color: $btn-close-color;
52
+
53
+ // Override <a>'s hover style
54
+ &:hover {
55
+ color: $btn-close-color;
56
+ text-decoration: none;
57
+ }
58
+ `,
59
+ '.btn-close.disabled': css`
60
+ pointer-events: none;
61
+ user-select: none;
62
+ opacity: $btn-close-disabled-opacity;
63
+ `,
64
+ // Modal styles
65
+ '.modal-header .btn-close': css`
66
+ padding: $modal-header-padding-y * 0.5 $modal-header-padding-x * 0.5;
67
+ margin: -0.5 * $modal-header-padding-y -0.5 * $modal-header-padding-x -0.5 *
68
+ $modal-header-padding-y auto;
69
+
70
+ // Workaround for missing box-sizing in react native.
71
+ width: $btn-close-width + $modal-header-padding-x;
72
+ height: $btn-close-height + $modal-header-padding-y;
73
+ `,
74
+ // Offcanvas styles
75
+ '.offcanvas-header .btn-close': css`
76
+ padding: $offcanvas-padding-y * 0.5 $offcanvas-padding-x * 0.5;
77
+ margin-top: -0.5 * $offcanvas-padding-y;
78
+ margin-right: -0.5 * $offcanvas-padding-x;
79
+ margin-bottom: -0.5 * $offcanvas-padding-y;
80
+
81
+ // Workaround for missing box-sizing in react native.
82
+ width: $btn-close-width + $offcanvas-padding-x;
83
+ height: $btn-close-height + $offcanvas-padding-y;
84
+ `,
85
+ });
86
+
87
+ const CloseButton = React.forwardRef<PressableRef, CloseButtonProps>(
88
+ (props, ref) => {
89
+ const {
90
+ hitSlop = 12,
91
+ disabled = false,
92
+ style,
93
+ textStyle,
94
+ styleName,
95
+ ...elementProps
96
+ } = props;
97
+
98
+ const media = useMedia();
99
+
100
+ const modal = useContext(ModalContext);
101
+ const offcanvas = useContext(OffcanvasContext);
102
+
103
+ const classes = getStyles(styles, [
104
+ '.btn-close',
105
+ disabled && '.btn-close.disabled',
106
+ // Modal styles
107
+ modal && '.modal-header .btn-close',
108
+ // Offcanvas styles
109
+ offcanvas && '.offcanvas-header .btn-close',
110
+ ]);
111
+ const textClasses = getStyles(styles, ['.btn-close --text']);
112
+
113
+ const resolveStyle = useStyle([classes, style], styleName);
114
+
115
+ const { interaction, interactionProps } = useInteractionState(elementProps);
116
+
117
+ const background = useBackground(
118
+ resolveStyle({
119
+ media,
120
+ interaction,
121
+ }),
122
+ );
123
+
124
+ return (
125
+ <Pressable
126
+ {...elementProps}
127
+ {...interactionProps}
128
+ ref={ref}
129
+ hitSlop={hitSlop}
130
+ disabled={disabled}
131
+ style={background.style}
132
+ textStyle={[textClasses, textStyle]}
133
+ >
134
+ {background.element}
135
+ </Pressable>
136
+ );
137
+ },
138
+ );
139
+
140
+ CloseButton.displayName = 'CloseButton';
141
+
142
+ export default CloseButton;
@@ -1,26 +1,25 @@
1
- import { useMemo } from 'react';
2
- import useIdentifier from '../../hooks/useIdentifier';
3
- import useControlledState from '../../hooks/useControlledState';
4
-
5
- export default function useCollapse(
6
- defaultVisible: boolean,
7
- controlledVisible?: boolean,
8
- onToggle?: () => void,
9
- ) {
10
- const identifier = useIdentifier('collapse');
11
-
12
- const [visible, setVisible] = useControlledState(
13
- defaultVisible,
14
- controlledVisible,
15
- onToggle,
16
- );
17
-
18
- return useMemo(
19
- () => ({
20
- identifier,
21
- visible,
22
- setVisible,
23
- }),
24
- [identifier, visible, setVisible],
25
- );
26
- }
1
+ import { useId, useMemo } from 'react';
2
+ import useControlledState from '../../hooks/useControlledState';
3
+
4
+ export default function useCollapse(
5
+ defaultVisible: boolean,
6
+ controlledVisible?: boolean,
7
+ onToggle?: () => void,
8
+ ) {
9
+ const identifier = useId();
10
+
11
+ const [visible, setVisible] = useControlledState(
12
+ defaultVisible,
13
+ controlledVisible,
14
+ onToggle,
15
+ );
16
+
17
+ return useMemo(
18
+ () => ({
19
+ identifier,
20
+ visible,
21
+ setVisible,
22
+ }),
23
+ [identifier, visible, setVisible],
24
+ );
25
+ }
@@ -1,80 +1,77 @@
1
- import React from 'react';
2
- import StyleSheet from '../../style/StyleSheet';
3
- import css from '../../style/css';
4
- import View, { ViewProps, ViewRef } from '../View';
5
- import { getStyles } from '../../utils';
6
- import DropdownContext, { DropdownDirection } from './DropdownContext';
7
- import DropdownToggle from './DropdownToggle';
8
- import DropdownMenu from './DropdownMenu';
9
- import DropdownHeader from './DropdownHeader';
10
- import DropdownItem from './DropdownItem';
11
- import DropdownItemText from './DropdownItemText';
12
- import DropdownDivider from './DropdownDivider';
13
- import useDropdown from './useDropdown';
14
- import useDismissDropdown from './useDismissDropdown';
15
- import useToggleDropdown from './useToggleDropdown';
16
-
17
- export interface DropdownProps extends ViewProps {
18
- defaultVisible?: boolean;
19
- visible?: boolean;
20
- onToggle?: () => void;
21
- direction?: DropdownDirection;
22
- center?: boolean;
23
- display?: 'dynamic' | 'static';
24
- autoClose?: boolean | 'inside' | 'outside';
25
- }
26
-
27
- const styles = StyleSheet.create({
28
- '.dropdown': css`
29
- position: relative;
30
- `,
31
- });
32
-
33
- const Dropdown = React.forwardRef<ViewRef, DropdownProps>((props, ref) => {
34
- const {
35
- children,
36
- defaultVisible = false,
37
- visible,
38
- onToggle = () => {},
39
- direction = 'down',
40
- center = false,
41
- display = 'dynamic',
42
- autoClose = 'outside',
43
- style,
44
- ...elementProps
45
- } = props;
46
-
47
- const dropdown = useDropdown(
48
- defaultVisible,
49
- visible,
50
- onToggle,
51
- direction,
52
- center,
53
- display,
54
- autoClose,
55
- );
56
-
57
- const classes = getStyles(styles, ['.dropdown']);
58
-
59
- return (
60
- <View {...elementProps} ref={ref} style={[classes, style]}>
61
- <DropdownContext.Provider value={dropdown}>
62
- {children}
63
- </DropdownContext.Provider>
64
- </View>
65
- );
66
- });
67
-
68
- Dropdown.displayName = 'Dropdown';
69
-
70
- export default Object.assign(Dropdown, {
71
- Context: DropdownContext,
72
- Toggle: DropdownToggle,
73
- Menu: DropdownMenu,
74
- Header: DropdownHeader,
75
- Item: DropdownItem,
76
- ItemText: DropdownItemText,
77
- Divider: DropdownDivider,
78
- useDismiss: useDismissDropdown,
79
- useToggle: useToggleDropdown,
80
- });
1
+ import React from 'react';
2
+ import StyleSheet from '../../style/StyleSheet';
3
+ import css from '../../style/css';
4
+ import View, { ViewProps, ViewRef } from '../View';
5
+ import { getStyles } from '../../utils';
6
+ import DropdownContext, { DropdownDirection } from './DropdownContext';
7
+ import DropdownToggle from './DropdownToggle';
8
+ import DropdownMenu from './DropdownMenu';
9
+ import DropdownHeader from './DropdownHeader';
10
+ import DropdownItem from './DropdownItem';
11
+ import DropdownItemText from './DropdownItemText';
12
+ import DropdownDivider from './DropdownDivider';
13
+ import useDropdown from './useDropdown';
14
+ import useDismissDropdown from './useDismissDropdown';
15
+ import useToggleDropdown from './useToggleDropdown';
16
+
17
+ export interface DropdownProps extends ViewProps {
18
+ defaultVisible?: boolean;
19
+ visible?: boolean;
20
+ onToggle?: () => void;
21
+ direction?: DropdownDirection;
22
+ center?: boolean;
23
+ display?: 'dynamic' | 'static';
24
+ }
25
+
26
+ const styles = StyleSheet.create({
27
+ '.dropdown': css`
28
+ position: relative;
29
+ `,
30
+ });
31
+
32
+ const Dropdown = React.forwardRef<ViewRef, DropdownProps>((props, ref) => {
33
+ const {
34
+ children,
35
+ defaultVisible = false,
36
+ visible,
37
+ onToggle = () => {},
38
+ direction = 'down',
39
+ center = false,
40
+ display = 'dynamic',
41
+ style,
42
+ ...elementProps
43
+ } = props;
44
+
45
+ const dropdown = useDropdown(
46
+ defaultVisible,
47
+ visible,
48
+ onToggle,
49
+ direction,
50
+ center,
51
+ display,
52
+ );
53
+
54
+ const classes = getStyles(styles, ['.dropdown']);
55
+
56
+ return (
57
+ <View {...elementProps} ref={ref} style={[classes, style]}>
58
+ <DropdownContext.Provider value={dropdown}>
59
+ {children}
60
+ </DropdownContext.Provider>
61
+ </View>
62
+ );
63
+ });
64
+
65
+ Dropdown.displayName = 'Dropdown';
66
+
67
+ export default Object.assign(Dropdown, {
68
+ Context: DropdownContext,
69
+ Toggle: DropdownToggle,
70
+ Menu: DropdownMenu,
71
+ Header: DropdownHeader,
72
+ Item: DropdownItem,
73
+ ItemText: DropdownItemText,
74
+ Divider: DropdownDivider,
75
+ useDismiss: useDismissDropdown,
76
+ useToggle: useToggleDropdown,
77
+ });
@@ -1,5 +1,8 @@
1
1
  import { createContext } from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ import type { PressableRef } from '../Pressable';
2
4
  import type { ViewRef } from '../View';
5
+ import { OverlayAlignment } from '../../types';
3
6
 
4
7
  export type DropdownDirection = 'up' | 'down' | 'start' | 'end';
5
8
 
@@ -7,11 +10,19 @@ export interface DropdownContextProps {
7
10
  identifier: string;
8
11
  visible: boolean;
9
12
  setVisible: React.Dispatch<React.SetStateAction<boolean>>;
10
- toggleRef: React.RefObject<ViewRef | null>;
13
+ align: OverlayAlignment | null;
14
+ setAlign: React.Dispatch<React.SetStateAction<OverlayAlignment | null>>;
11
15
  direction: DropdownDirection;
12
- center: boolean;
13
16
  display: string;
14
- autoClose: string | boolean;
17
+ trigger: {
18
+ ref: React.RefObject<PressableRef | null>;
19
+ getProps: (props: Record<string, unknown>) => Record<string, unknown>;
20
+ };
21
+ content: {
22
+ ref: React.RefObject<ViewRef | null>;
23
+ getProps: (props: Record<string, unknown>) => Record<string, unknown>;
24
+ style: StyleProp<ViewStyle>;
25
+ };
15
26
  }
16
27
 
17
28
  const DropdownContext = createContext<DropdownContextProps | null>(null);