@procore/core-react 11.25.0 → 11.25.2

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 (275) hide show
  1. package/babel.config.js +1 -1
  2. package/dist/Avatar/Avatar.d.ts +1 -1
  3. package/dist/Avatar/Avatar.styles.js +5 -5
  4. package/dist/AvatarStack/AvatarStack.d.ts +7 -7
  5. package/dist/AvatarStack/AvatarStack.styles.d.ts +1 -1
  6. package/dist/AvatarStack/AvatarStack.styles.js +7 -7
  7. package/dist/Badge/Badge.styles.js +2 -2
  8. package/dist/Banner/Banner.styles.js +10 -10
  9. package/dist/Box/Box.styles.js +1 -1
  10. package/dist/Breadcrumbs/Breadcrumbs.styles.js +4 -4
  11. package/dist/Button/Button.styles.js +5 -5
  12. package/dist/Calendar/Calendar.d.ts +1 -1
  13. package/dist/Calendar/Calendar.styles.js +8 -8
  14. package/dist/Card/Card.styles.js +1 -1
  15. package/dist/Checkbox/Checkbox.styles.js +6 -6
  16. package/dist/ContactItem/ContactItem.styles.d.ts +1 -1
  17. package/dist/ContactItem/ContactItem.styles.js +5 -5
  18. package/dist/Content/Content.d.ts +3 -3
  19. package/dist/Content/Content.styles.js +2 -2
  20. package/dist/DateInput/DateInput.styles.js +6 -6
  21. package/dist/DetailPage/DetailPage.styles.js +7 -7
  22. package/dist/Dropdown/Dropdown.styles.js +3 -3
  23. package/dist/DropdownFlyout/DropdownFlyout.d.ts +2 -2
  24. package/dist/DropdownFlyout/DropdownFlyout.helpers.d.ts +1 -1
  25. package/dist/DropdownFlyout/DropdownFlyout.styles.js +4 -4
  26. package/dist/Dropzone/Dropzone.d.ts +2 -2
  27. package/dist/Dropzone/Dropzone.js +1 -1
  28. package/dist/Dropzone/Dropzone.styles.js +9 -9
  29. package/dist/EmptyState/EmptyState.styles.js +6 -6
  30. package/dist/Field/Field.styles.js +3 -3
  31. package/dist/FileList/FileList.d.ts +1 -1
  32. package/dist/FileList/FileList.styles.js +4 -4
  33. package/dist/FileSelect/FileExplorer/FileExplorer.styles.js +9 -9
  34. package/dist/FileSelect/FileExplorer/FileExplorerSidebar.d.ts +2 -2
  35. package/dist/FileSelect/FileExplorer/FileExplorerSidebar.styles.js +3 -3
  36. package/dist/FileSelect/FileSelect.styles.js +2 -2
  37. package/dist/FileSelect/FileSelectDropzone/FileSelectDropzone.styles.js +3 -3
  38. package/dist/FileSelect/FileTokenList/FileTokenList.styles.js +2 -2
  39. package/dist/FileSelect/GridSource/GridSource.styles.js +6 -6
  40. package/dist/FileSelect/LocalSource/LocalSource.styles.js +4 -4
  41. package/dist/FileSelect/SourceItem/SourceItem.styles.js +3 -3
  42. package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.d.ts +2 -2
  43. package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.js +6 -6
  44. package/dist/FileSelect/TreeSource/TreeSource.styles.js +1 -1
  45. package/dist/FileToken/FileToken.styles.js +4 -4
  46. package/dist/FilterToken/FilterToken.styles.js +2 -2
  47. package/dist/FlexList/FlexList.styles.js +1 -1
  48. package/dist/Form/Form.d.ts +71 -71
  49. package/dist/Form/Form.styles.js +16 -16
  50. package/dist/Form/stories/util.d.ts +3 -3
  51. package/dist/Grid/Grid.d.ts +1 -1
  52. package/dist/Grid/Grid.styles.js +2 -2
  53. package/dist/GroupSelect/GroupSelect.styles.js +1 -1
  54. package/dist/Input/Input.styles.js +1 -1
  55. package/dist/Link/Link.styles.js +1 -1
  56. package/dist/ListPage/ListPage.styles.js +8 -8
  57. package/dist/Loader/Loader.styles.js +2 -2
  58. package/dist/Menu/Menu.d.ts +4 -4
  59. package/dist/MenuImperative/MenuImperative.d.ts +3 -3
  60. package/dist/MenuImperative/MenuImperative.styles.js +10 -10
  61. package/dist/Modal/ChildRegistry.context.d.ts +1 -1
  62. package/dist/Modal/Modal.d.ts +1 -1
  63. package/dist/Modal/Modal.styles.js +13 -13
  64. package/dist/Modal/storyHelpers.d.ts +2 -2
  65. package/dist/MultiSelect/MultiSelect.styles.js +6 -6
  66. package/dist/NextMenu/NextMenu.styles.js +3 -3
  67. package/dist/NextTile/NextTile.d.ts +1 -1
  68. package/dist/Notation/Notation.js +1 -1
  69. package/dist/NumberInput/NumberInput.styles.js +7 -7
  70. package/dist/Overlay/OverlayArrow.styles.js +1 -1
  71. package/dist/OverlayTrigger/OverlayTrigger.d.ts +1 -1
  72. package/dist/OverlayTrigger/OverlayTrigger.js +9 -3
  73. package/dist/OverlayTrigger/OverlayTrigger.js.map +1 -1
  74. package/dist/OverlayTrigger/OverlayTrigger.types.d.ts +2 -1
  75. package/dist/OverlayTrigger/OverlayTrigger.types.js.map +1 -1
  76. package/dist/OverlayTrigger/a11yPresets.d.ts +48 -48
  77. package/dist/PageLayout/PageLayout.d.ts +1 -1
  78. package/dist/PageLayout/PageLayout.styles.js +13 -13
  79. package/dist/Pagination/Pagination.styles.js +5 -5
  80. package/dist/Panel/Panel.styles.js +11 -11
  81. package/dist/Pill/Pill.styles.js +2 -2
  82. package/dist/PillSelect/PillSelect.styles.js +4 -4
  83. package/dist/Popover/Popover.d.ts +1 -1
  84. package/dist/Popover/Popover.styles.js +2 -2
  85. package/dist/Portal/Portal.styles.js +1 -1
  86. package/dist/ProgressBar/ProgressBar.styles.js +2 -2
  87. package/dist/RadioButton/RadioButton.styles.js +3 -3
  88. package/dist/Required/Required.styles.js +3 -3
  89. package/dist/Search/Search.styles.js +5 -5
  90. package/dist/Section/Section.d.ts +2 -2
  91. package/dist/Section/Section.styles.js +6 -6
  92. package/dist/SegmentedController/SegmentedController.d.ts +2 -2
  93. package/dist/SegmentedController/SegmentedController.styles.js +4 -4
  94. package/dist/Select/Select.js +3 -1
  95. package/dist/Select/Select.js.map +1 -1
  96. package/dist/Select/Select.styles.js +7 -7
  97. package/dist/Select/Select.types.d.ts +3 -2
  98. package/dist/Select/Select.types.js.map +1 -1
  99. package/dist/Semantic/Semantic.d.ts +6 -1
  100. package/dist/Semantic/Semantic.js +7 -1
  101. package/dist/Semantic/Semantic.js.map +1 -1
  102. package/dist/Semantic/Semantic.styles.d.ts +14 -4
  103. package/dist/Semantic/Semantic.styles.js +20 -10
  104. package/dist/Semantic/Semantic.styles.js.map +1 -1
  105. package/dist/Semantic/index.d.ts +1 -1
  106. package/dist/Semantic/index.js +1 -1
  107. package/dist/Semantic/index.js.map +1 -1
  108. package/dist/Sidebar/Sidebar.styles.js +7 -7
  109. package/dist/Slider/Slider.styles.js +5 -5
  110. package/dist/Spinner/Spinner.styles.js +7 -7
  111. package/dist/SuperSelect/SuperSelect.components.d.ts +29 -29
  112. package/dist/SuperSelect/SuperSelect.d.ts +29 -29
  113. package/dist/SuperSelect/SuperSelect.presets.styles.js +1 -1
  114. package/dist/SuperSelect/SuperSelect.styles.js +37 -37
  115. package/dist/SuperSelect/useSuperSelect.d.ts +87 -87
  116. package/dist/Switch/Switch.styles.js +4 -4
  117. package/dist/Table/Table.styles.js +28 -28
  118. package/dist/TableShelf/TableShelf.styles.js +5 -5
  119. package/dist/Tabs/Tabs.d.ts +1 -1
  120. package/dist/Tabs/Tabs.styles.js +8 -8
  121. package/dist/Tearsheet/Tearsheet.styles.js +5 -5
  122. package/dist/TextArea/TextArea.styles.js +1 -1
  123. package/dist/TextEditor/TextEditor.d.ts +3 -3
  124. package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
  125. package/dist/Thumbnail/Thumbnail.d.ts +3 -3
  126. package/dist/Thumbnail/Thumbnail.hooks.d.ts +226 -210
  127. package/dist/Thumbnail/Thumbnail.styles.js +17 -17
  128. package/dist/Thumbnail/ThumbnailCaption.d.ts +2 -2
  129. package/dist/Thumbnail/ThumbnailDocumentIcon.d.ts +2 -2
  130. package/dist/Thumbnail/ThumbnailPreview.d.ts +2 -2
  131. package/dist/ThumbnailGrid/ThumbnailGrid.styles.d.ts +2 -2
  132. package/dist/ThumbnailGrid/ThumbnailGrid.styles.js +7 -7
  133. package/dist/TieredSelect/TieredSelect.styles.d.ts +1 -1
  134. package/dist/TieredSelect/TieredSelect.styles.js +9 -9
  135. package/dist/Tile/Tile.styles.js +8 -8
  136. package/dist/Title/Title.styles.js +7 -7
  137. package/dist/Toast/Toast.styles.js +3 -3
  138. package/dist/ToggleButton/ToggleButton.styles.js +1 -1
  139. package/dist/Token/Token.styles.js +3 -3
  140. package/dist/ToolHeader/ActionIcon.d.ts +2 -2
  141. package/dist/ToolHeader/ToolHeader.d.ts +2 -2
  142. package/dist/ToolHeader/ToolHeader.styles.js +6 -6
  143. package/dist/Tooltip/Tooltip.styles.js +2 -2
  144. package/dist/Tree/Tree.styles.js +9 -9
  145. package/dist/Typeahead/Typeahead.styles.js +3 -3
  146. package/dist/Typography/Typography.colors.story.d.ts +2 -2
  147. package/dist/Typography/Typography.styles.js +1 -1
  148. package/dist/Typography/Typography.table.story.d.ts +2 -2
  149. package/dist/Typography/Typography.table.story.js +2 -2
  150. package/dist/_hooks/Analytics.d.ts +1 -1
  151. package/dist/_hooks/Anchor.d.ts +1 -1
  152. package/dist/_hooks/BoundingRect.d.ts +1 -1
  153. package/dist/_hooks/Buffer.d.ts +1 -1
  154. package/dist/_hooks/ClickOutside.d.ts +3 -2
  155. package/dist/_hooks/ClickOutside.js +8 -3
  156. package/dist/_hooks/ClickOutside.js.map +1 -1
  157. package/dist/_hooks/DateTime/DateTime.d.ts +1 -1
  158. package/dist/_hooks/DelayedToggle.d.ts +1 -1
  159. package/dist/_hooks/Event.d.ts +1 -1
  160. package/dist/_hooks/EventListener.js +14 -4
  161. package/dist/_hooks/EventListener.js.map +1 -1
  162. package/dist/_hooks/I18n.d.ts +1 -1
  163. package/dist/_hooks/InjectedScript.d.ts +1 -1
  164. package/dist/_hooks/ListNavigation.d.ts +1 -1
  165. package/dist/_hooks/TextEntry.d.ts +1 -1
  166. package/dist/_hooks/Timer.d.ts +1 -1
  167. package/dist/_hooks/Trigger.d.ts +1 -1
  168. package/dist/_hooks/Visibility.d.ts +1 -1
  169. package/dist/_hooks/ZIndex.d.ts +1 -1
  170. package/dist/_typedoc/Avatar/Avatar.types.json +20 -20
  171. package/dist/_typedoc/AvatarStack/AvatarStack.types.json +23 -23
  172. package/dist/_typedoc/Badge/Badge.types.json +6 -6
  173. package/dist/_typedoc/Banner/Banner.types.json +13 -13
  174. package/dist/_typedoc/Box/Box.types.json +68 -68
  175. package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
  176. package/dist/_typedoc/Button/Button.types.json +11 -11
  177. package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
  178. package/dist/_typedoc/Card/Card.types.json +6 -6
  179. package/dist/_typedoc/Checkbox/Checkbox.types.json +9 -9
  180. package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
  181. package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
  182. package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
  183. package/dist/_typedoc/DetailPage/DetailPage.types.json +4 -4
  184. package/dist/_typedoc/Dropdown/Dropdown.types.json +37 -37
  185. package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +29 -29
  186. package/dist/_typedoc/Dropzone/Dropzone.types.json +41 -41
  187. package/dist/_typedoc/EmptyState/EmptyState.types.json +14 -14
  188. package/dist/_typedoc/FileList/FileList.types.json +9 -9
  189. package/dist/_typedoc/FileSelect/FileSelect.types.json +26 -26
  190. package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
  191. package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
  192. package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
  193. package/dist/_typedoc/Flex/Flex.types.json +27 -27
  194. package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
  195. package/dist/_typedoc/Form/Form.types.json +764 -724
  196. package/dist/_typedoc/Grid/Grid.types.json +8 -8
  197. package/dist/_typedoc/GroupSelect/GroupSelect.types.json +52 -52
  198. package/dist/_typedoc/Input/Input.types.json +2 -2
  199. package/dist/_typedoc/Link/Link.types.json +4 -4
  200. package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
  201. package/dist/_typedoc/Menu/Menu.types.json +62 -62
  202. package/dist/_typedoc/MenuImperative/MenuImperative.types.json +74 -74
  203. package/dist/_typedoc/Modal/Modal.types.json +41 -41
  204. package/dist/_typedoc/MultiSelect/MultiSelect.types.json +31 -31
  205. package/dist/_typedoc/Notation/Notation.types.json +4 -4
  206. package/dist/_typedoc/NumberInput/NumberInput.types.json +38 -38
  207. package/dist/_typedoc/OverlayTrigger/OverlayTrigger.types.json +40 -30
  208. package/dist/_typedoc/PageLayout/PageLayout.types.json +22 -22
  209. package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
  210. package/dist/_typedoc/Panel/Panel.types.json +27 -27
  211. package/dist/_typedoc/Pill/Pill.types.json +2 -2
  212. package/dist/_typedoc/PillSelect/PillSelect.types.json +56 -46
  213. package/dist/_typedoc/Popover/Popover.types.json +14 -14
  214. package/dist/_typedoc/ProgressBar/ProgressBar.types.json +6 -6
  215. package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
  216. package/dist/_typedoc/Required/Required.types.json +5 -5
  217. package/dist/_typedoc/Search/Search.types.json +18 -18
  218. package/dist/_typedoc/Section/Section.types.json +14 -14
  219. package/dist/_typedoc/SegmentedController/SegmentedController.types.json +20 -20
  220. package/dist/_typedoc/Select/Select.types.json +75 -55
  221. package/dist/_typedoc/Slider/Slider.types.json +6 -6
  222. package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
  223. package/dist/_typedoc/Switch/Switch.types.json +3 -3
  224. package/dist/_typedoc/Table/Table.types.json +106 -96
  225. package/dist/_typedoc/Tabs/Tabs.types.json +17 -17
  226. package/dist/_typedoc/Tearsheet/Tearsheet.types.json +16 -16
  227. package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
  228. package/dist/_typedoc/TextEditor/TextEditor.types.json +9 -9
  229. package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +4 -4
  230. package/dist/_typedoc/Thumbnail/Thumbnail.types.json +19 -19
  231. package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +42 -42
  232. package/dist/_typedoc/TieredSelect/TieredSelect.types.json +28 -28
  233. package/dist/_typedoc/Tile/Tile.types.json +30 -30
  234. package/dist/_typedoc/Toast/Toast.types.json +4 -4
  235. package/dist/_typedoc/ToggleButton/ToggleButton.types.json +3 -3
  236. package/dist/_typedoc/Token/Token.types.json +4 -4
  237. package/dist/_typedoc/ToolHeader/ToolHeader.types.json +10 -10
  238. package/dist/_typedoc/Tooltip/Tooltip.types.json +13 -13
  239. package/dist/_typedoc/Tree/Tree.types.json +86 -86
  240. package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
  241. package/dist/_typedoc/Typography/Typography.types.json +8 -8
  242. package/dist/_typedoc/_utils/types.json +3 -3
  243. package/dist/index.d.ts +1 -0
  244. package/dist/index.js +1 -0
  245. package/dist/index.js.map +1 -1
  246. package/package.json +2 -2
  247. package/tsconfig.prod.json +7 -1
  248. package/dist/FileSelect/SourceItem/SourceItem.test.js +0 -53
  249. package/dist/MultiSelect/MultiSelect.test.js +0 -250
  250. package/dist/OverlayTrigger/OverlayTrigger.test.js +0 -483
  251. package/dist/SuperSelect/SuperSelect.utils.test.js +0 -717
  252. package/dist/SuperSelect/useSuperSelect.test.js +0 -1284
  253. package/dist/_hooks/OverflowObserver/OverflowObserver.test.js +0 -110
  254. package/dist/_hooks/__tests__/Anchor.test.js +0 -109
  255. package/dist/_hooks/__tests__/BoundingRect.test.js +0 -85
  256. package/dist/_hooks/__tests__/Buffer.test.js +0 -76
  257. package/dist/_hooks/__tests__/DateTime.test.js +0 -136
  258. package/dist/_hooks/__tests__/DelayedCallback.test.js +0 -119
  259. package/dist/_hooks/__tests__/DelayedToggle.test.js +0 -50
  260. package/dist/_hooks/__tests__/Deprecation.test.js +0 -58
  261. package/dist/_hooks/__tests__/Event.test.js +0 -46
  262. package/dist/_hooks/__tests__/EventListener.test.js +0 -78
  263. package/dist/_hooks/__tests__/Hotkey.test.js +0 -18
  264. package/dist/_hooks/__tests__/InjectedScript.test.js +0 -80
  265. package/dist/_hooks/__tests__/ListNavigation.test.js +0 -101
  266. package/dist/_hooks/__tests__/TextEntry.test.js +0 -92
  267. package/dist/_hooks/__tests__/Timer.test.js +0 -60
  268. package/dist/_hooks/__tests__/Trigger.test.js +0 -52
  269. package/dist/_hooks/__tests__/Visibility.test.js +0 -86
  270. package/dist/_hooks/__tests__/ZIndex.test.js +0 -76
  271. package/dist/_utils/__tests__/CalendarHelpers.test.js +0 -64
  272. package/dist/_utils/__tests__/filename.test.js +0 -27
  273. package/dist/_utils/__tests__/getAnchorPosition.test.js +0 -250
  274. package/dist/_utils/__tests__/mergeRefs.test.js +0 -58
  275. package/dist/_utils/__tests__/slotify.test.js +0 -152
@@ -1,483 +0,0 @@
1
- import '@testing-library/jest-dom'
2
- import { act, cleanup, render, screen, waitFor } from '@testing-library/react'
3
- import userEvent from '@testing-library/user-event'
4
- import { mount } from 'enzyme'
5
- import React from 'react'
6
- import { OverlayTrigger } from '../OverlayTrigger'
7
-
8
- const spy = jest.fn()
9
-
10
- jest.mock('@react-aria/utils', () => {
11
- const originalModule = jest.requireActual('@react-aria/utils')
12
-
13
- return {
14
- __esModule: true,
15
- ...originalModule,
16
- useId: jest.fn().mockReturnValue('1'),
17
- }
18
- })
19
-
20
- const overlay = <div id="overlay">OVERLAY</div>
21
- const nestedOverlay = <div id="nested-overlay">NESTED OVERLAY</div>
22
- const trigger = <div id="trigger">TRIGGER</div>
23
-
24
- const query = (string) => global.document.querySelector(string)
25
- const queryOverlay = () => query('#overlay')
26
- const queryNestedOverlay = () => query('#nested-overlay')
27
- const queryTrigger = () => query('#trigger')
28
-
29
- describe('OverlayTrigger', () => {
30
- let container
31
- beforeEach(() => {
32
- container = document.createElement('div')
33
- document.body.appendChild(container)
34
- })
35
- afterEach(() => {
36
- document.body.removeChild(container)
37
- container = null
38
- jest.clearAllMocks()
39
- cleanup()
40
- })
41
-
42
- describe('nested OverlayTriggers', function () {
43
- it('should open both overlays when trigger is clicked', async () => {
44
- render(
45
- <OverlayTrigger initialIsVisible={false} overlay={overlay}>
46
- <OverlayTrigger initialIsVisible={false} overlay={nestedOverlay}>
47
- {trigger}
48
- </OverlayTrigger>
49
- </OverlayTrigger>,
50
- container
51
- )
52
-
53
- await userEvent.click(queryTrigger())
54
-
55
- expect(queryOverlay()).toBeInTheDocument()
56
- expect(queryNestedOverlay()).toBeInTheDocument()
57
- })
58
-
59
- it('should open both overlays when ArrowDown is pressed on trigger', async () => {
60
- render(
61
- <OverlayTrigger initialIsVisible={false} overlay={overlay}>
62
- <OverlayTrigger initialIsVisible={false} overlay={nestedOverlay}>
63
- {trigger}
64
- </OverlayTrigger>
65
- </OverlayTrigger>,
66
- container
67
- )
68
-
69
- await userEvent.type(queryTrigger(), '[ArrowDown]')
70
-
71
- expect(queryOverlay()).toBeInTheDocument()
72
- expect(queryNestedOverlay()).toBeInTheDocument()
73
- })
74
- })
75
-
76
- describe('overlay initial presence', () => {
77
- it('is closed when initialIsVisible is false', () => {
78
- render(
79
- <OverlayTrigger initialIsVisible={false} overlay={overlay}>
80
- {trigger}
81
- </OverlayTrigger>,
82
- container
83
- )
84
-
85
- expect(queryOverlay()).toBeFalsy()
86
- })
87
-
88
- it('is open initialIsVisible is true', () => {
89
- render(
90
- <OverlayTrigger initialIsVisible={true} overlay={overlay}>
91
- {trigger}
92
- </OverlayTrigger>,
93
- container
94
- )
95
-
96
- expect(queryOverlay()).toBeTruthy()
97
- })
98
- })
99
-
100
- describe('overlay is about to open', () => {
101
- it('it opens, unless beforeShow returns false', async () => {
102
- render(
103
- <OverlayTrigger
104
- overlay={overlay}
105
- beforeShow={() => undefined}
106
- afterShow={spy}
107
- >
108
- {trigger}
109
- </OverlayTrigger>,
110
- container
111
- )
112
- queryTrigger().dispatchEvent(new MouseEvent('click'))
113
-
114
- await waitFor(() => expect(queryOverlay()).toBeTruthy())
115
- expect(spy).toBeCalledTimes(1)
116
- })
117
-
118
- it('remains closed, when beforeShow returns false', async () => {
119
- render(
120
- <OverlayTrigger
121
- overlay={overlay}
122
- beforeShow={() => false}
123
- afterShow={spy}
124
- >
125
- {trigger}
126
- </OverlayTrigger>,
127
- container
128
- )
129
- queryTrigger().dispatchEvent(new MouseEvent('click'))
130
-
131
- await waitFor(() => expect(queryOverlay()).toBeFalsy())
132
- expect(spy).toBeCalledTimes(0)
133
- })
134
- })
135
-
136
- describe('overlay is about to close', () => {
137
- it('remains open when beforeHide returns false', async () => {
138
- render(
139
- <OverlayTrigger
140
- initialIsVisible={true}
141
- overlay={overlay}
142
- beforeHide={() => false}
143
- afterHide={spy}
144
- >
145
- {trigger}
146
- </OverlayTrigger>,
147
- container
148
- )
149
- queryTrigger().dispatchEvent(new MouseEvent('click'))
150
-
151
- await waitFor(() => expect(queryOverlay()).toBeTruthy())
152
- expect(spy).toBeCalledTimes(0)
153
- })
154
-
155
- it('it closes, unless beforeHide returns false', async () => {
156
- render(
157
- <OverlayTrigger
158
- initialIsVisible={true}
159
- overlay={overlay}
160
- beforeHide={() => undefined}
161
- afterHide={spy}
162
- >
163
- {trigger}
164
- </OverlayTrigger>,
165
- container
166
- )
167
-
168
- queryTrigger().dispatchEvent(new MouseEvent('click'))
169
-
170
- await waitFor(() => expect(queryOverlay()).toBeFalsy())
171
- expect(spy).toBeCalledTimes(1)
172
- })
173
- })
174
- describe('clicking outside and lifecycles', () => {
175
- describe('when closed', () => {
176
- it('does not call beforeShow nor afterShow', async () => {
177
- render(
178
- <React.Fragment>
179
- <OverlayTrigger
180
- initialIsVisible={false}
181
- overlay={overlay}
182
- beforeShow={spy}
183
- afterShow={spy}
184
- >
185
- {trigger}
186
- </OverlayTrigger>
187
- <div id="outside" />
188
- </React.Fragment>,
189
- container
190
- )
191
- query('#outside').dispatchEvent(new MouseEvent('click'))
192
-
193
- await waitFor(() => expect(queryOverlay()).toBeFalsy())
194
- expect(spy).toBeCalledTimes(0)
195
- })
196
- })
197
-
198
- describe('when open', () => {
199
- it('remains open when beforeHide returns promise of false', async () => {
200
- render(
201
- <React.Fragment>
202
- <OverlayTrigger
203
- initialIsVisible={true}
204
- overlay={overlay}
205
- beforeHide={() => Promise.resolve(false)}
206
- afterHide={spy}
207
- >
208
- {trigger}
209
- </OverlayTrigger>
210
- <div id="outside" />
211
- </React.Fragment>,
212
- container
213
- )
214
- query('#outside').dispatchEvent(new MouseEvent('click'))
215
-
216
- await waitFor(() => expect(queryOverlay()).toBeTruthy())
217
- expect(spy).toBeCalledTimes(0)
218
- })
219
-
220
- it('it closes, unless beforeHide returns false', async () => {
221
- render(
222
- <React.Fragment>
223
- <OverlayTrigger
224
- initialIsVisible={true}
225
- overlay={overlay}
226
- beforeHide={spy}
227
- afterHide={spy}
228
- >
229
- {trigger}
230
- </OverlayTrigger>
231
- <div id="outside" />
232
- </React.Fragment>,
233
- container
234
- )
235
- query('#outside').dispatchEvent(new MouseEvent('click'))
236
-
237
- await waitFor(() => expect(queryOverlay()).toBeFalsy())
238
- expect(spy).toBeCalledTimes(2)
239
- })
240
-
241
- it('should close if the trigger becomes "none"', () => {
242
- let wrapper
243
-
244
- act(() => {
245
- wrapper = mount(
246
- <OverlayTrigger
247
- initialIsVisible={true}
248
- overlay={overlay}
249
- trigger={['click', 'hover']}
250
- >
251
- {trigger}
252
- </OverlayTrigger>,
253
- container
254
- )
255
- })
256
-
257
- wrapper.setProps({ trigger: 'none', overlay, initialIsVisible: true })
258
-
259
- expect(queryOverlay()).toBeFalsy()
260
- })
261
-
262
- it('should close if one of the triggers becomes "none"', () => {
263
- let wrapper
264
-
265
- act(() => {
266
- wrapper = mount(
267
- <OverlayTrigger initialIsVisible={true} overlay={overlay}>
268
- {trigger}
269
- </OverlayTrigger>,
270
- container
271
- )
272
- })
273
-
274
- wrapper.setProps({
275
- trigger: ['click', 'none'],
276
- overlay,
277
- initialIsVisible: true,
278
- })
279
-
280
- expect(queryOverlay()).toBeFalsy()
281
- })
282
- })
283
- })
284
-
285
- describe('ARIA attributes', () => {
286
- // use overlay without id to test ARIA attributes properly
287
- const overlayWithoutId = <div data-overlay>OVERLAY</div>
288
- const queryOverlayWithoutId = () => query('[data-overlay]')
289
- const queryOverlayWrapper = () =>
290
- screen.queryByTestId('core-overlay-trigger-overlay-wrapper')
291
-
292
- it('should set no role by default', () => {
293
- render(
294
- <OverlayTrigger initialIsVisible overlay={overlayWithoutId}>
295
- {trigger}
296
- </OverlayTrigger>,
297
- container
298
- )
299
-
300
- expect(queryOverlayWithoutId().getAttribute('role')).toEqual(null)
301
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual(null)
302
- })
303
-
304
- describe('when passA11yPropsToOverlay is false', function () {
305
- describe('dialog', () => {
306
- it('should set aria to trigger and overlayWrapper', () => {
307
- render(
308
- <OverlayTrigger
309
- initialIsVisible
310
- overlay={overlayWithoutId}
311
- role="dialog"
312
- passA11yPropsToOverlay={false}
313
- >
314
- {trigger}
315
- </OverlayTrigger>,
316
- container
317
- )
318
-
319
- expect(queryOverlayWrapper().getAttribute('role')).toEqual('dialog')
320
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual('dialog')
321
- expect(queryTrigger().getAttribute('aria-expanded')).toEqual('true')
322
- expect(queryTrigger().getAttribute('aria-controls')).toEqual('1')
323
- expect(queryOverlayWrapper().getAttribute('id')).toEqual('1')
324
- })
325
- })
326
-
327
- describe('listbox', () => {
328
- it('should set aria to trigger and overlayWrapper', () => {
329
- render(
330
- <OverlayTrigger
331
- initialIsVisible
332
- overlay={overlayWithoutId}
333
- role="listbox"
334
- passA11yPropsToOverlay={false}
335
- >
336
- {trigger}
337
- </OverlayTrigger>,
338
- container
339
- )
340
-
341
- expect(queryOverlayWrapper().getAttribute('role')).toEqual('listbox')
342
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual(
343
- 'listbox'
344
- )
345
- expect(queryTrigger().getAttribute('aria-expanded')).toEqual('true')
346
- expect(queryTrigger().getAttribute('aria-controls')).toEqual('1')
347
- expect(queryOverlayWrapper().getAttribute('id')).toEqual('1')
348
- })
349
- })
350
-
351
- describe('menu', () => {
352
- it('should set aria to trigger and overlayWrapper', () => {
353
- render(
354
- <OverlayTrigger
355
- initialIsVisible
356
- overlay={overlayWithoutId}
357
- role="menu"
358
- passA11yPropsToOverlay={false}
359
- >
360
- {trigger}
361
- </OverlayTrigger>,
362
- container
363
- )
364
-
365
- expect(queryOverlayWrapper().getAttribute('role')).toEqual('menu')
366
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual('menu')
367
- expect(queryTrigger().getAttribute('aria-expanded')).toEqual('true')
368
- expect(queryTrigger().getAttribute('aria-controls')).toEqual('1')
369
- expect(queryOverlayWrapper().getAttribute('id')).toEqual('1')
370
- })
371
- })
372
- })
373
-
374
- describe('when passA11yPropsToOverlay is true', function () {
375
- describe('dialog', () => {
376
- it('should set aria to trigger and overlay', () => {
377
- render(
378
- <OverlayTrigger
379
- initialIsVisible
380
- overlay={overlayWithoutId}
381
- role="dialog"
382
- passA11yPropsToOverlay
383
- >
384
- {trigger}
385
- </OverlayTrigger>,
386
- container
387
- )
388
-
389
- expect(queryOverlayWithoutId().getAttribute('role')).toEqual('dialog')
390
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual('dialog')
391
- expect(queryTrigger().getAttribute('aria-expanded')).toEqual('true')
392
- expect(queryTrigger().getAttribute('aria-controls')).toEqual('1')
393
- expect(queryOverlayWithoutId().getAttribute('id')).toEqual('1')
394
- })
395
- })
396
-
397
- describe('listbox', () => {
398
- it('should set aria to trigger and overlay', () => {
399
- render(
400
- <OverlayTrigger
401
- initialIsVisible
402
- overlay={overlayWithoutId}
403
- role="listbox"
404
- passA11yPropsToOverlay
405
- >
406
- {trigger}
407
- </OverlayTrigger>,
408
- container
409
- )
410
-
411
- expect(queryOverlayWithoutId().getAttribute('role')).toEqual(
412
- 'listbox'
413
- )
414
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual(
415
- 'listbox'
416
- )
417
- expect(queryTrigger().getAttribute('aria-expanded')).toEqual('true')
418
- expect(queryTrigger().getAttribute('aria-controls')).toEqual('1')
419
- expect(queryOverlayWithoutId().getAttribute('id')).toEqual('1')
420
- })
421
- })
422
-
423
- describe('menu', () => {
424
- it('should set aria to trigger and overlay', () => {
425
- render(
426
- <OverlayTrigger
427
- initialIsVisible
428
- overlay={overlayWithoutId}
429
- role="menu"
430
- passA11yPropsToOverlay
431
- >
432
- {trigger}
433
- </OverlayTrigger>,
434
- container
435
- )
436
-
437
- expect(queryOverlayWithoutId().getAttribute('role')).toEqual('menu')
438
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual('menu')
439
- expect(queryTrigger().getAttribute('aria-expanded')).toEqual('true')
440
- expect(queryTrigger().getAttribute('aria-controls')).toEqual('1')
441
- expect(queryOverlayWithoutId().getAttribute('id')).toEqual('1')
442
- })
443
- })
444
-
445
- it('should not override "role" or "id" of the overlay element if provided', () => {
446
- const overlayWithAria = (
447
- <div data-overlay role="grid" id="qwerty">
448
- Overlay
449
- </div>
450
- )
451
- render(
452
- <OverlayTrigger
453
- initialIsVisible
454
- overlay={overlayWithAria}
455
- passA11yPropsToOverlay
456
- >
457
- {trigger}
458
- </OverlayTrigger>,
459
- container
460
- )
461
-
462
- expect(query('#qwerty').getAttribute('role')).toEqual('grid')
463
- expect(query('#qwerty').getAttribute('id')).toEqual('qwerty')
464
- })
465
- })
466
-
467
- it('should not override "aria-haspopup" of the trigger element if provided', () => {
468
- const triggerWithAria = (
469
- <div id="trigger" aria-haspopup="grid">
470
- Trigger
471
- </div>
472
- )
473
- render(
474
- <OverlayTrigger initialIsVisible overlay={overlayWithoutId}>
475
- {triggerWithAria}
476
- </OverlayTrigger>,
477
- container
478
- )
479
-
480
- expect(queryTrigger().getAttribute('aria-haspopup')).toEqual('grid')
481
- })
482
- })
483
- })