@procore/core-react 11.25.1 → 11.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/babel.config.js +1 -1
  2. package/dist/Avatar/Avatar.styles.js +5 -5
  3. package/dist/AvatarStack/AvatarStack.styles.js +7 -7
  4. package/dist/Badge/Badge.styles.js +2 -2
  5. package/dist/Banner/Banner.d.ts +8 -0
  6. package/dist/Banner/Banner.js +13 -2
  7. package/dist/Banner/Banner.js.map +1 -1
  8. package/dist/Banner/Banner.styles.js +16 -11
  9. package/dist/Banner/Banner.styles.js.map +1 -1
  10. package/dist/Banner/Banner.types.d.ts +4 -2
  11. package/dist/Banner/Banner.types.js.map +1 -1
  12. package/dist/Banner/index.d.ts +1 -1
  13. package/dist/Banner/index.js +1 -1
  14. package/dist/Banner/index.js.map +1 -1
  15. package/dist/Box/Box.styles.js +1 -1
  16. package/dist/Breadcrumbs/Breadcrumbs.styles.js +4 -4
  17. package/dist/Button/Button.styles.js +5 -5
  18. package/dist/Calendar/Calendar.styles.js +8 -8
  19. package/dist/Card/Card.styles.js +1 -1
  20. package/dist/Checkbox/Checkbox.styles.js +6 -6
  21. package/dist/ContactItem/ContactItem.styles.js +5 -5
  22. package/dist/Content/Content.styles.js +2 -2
  23. package/dist/DateInput/DateInput.styles.js +6 -6
  24. package/dist/DetailPage/DetailPage.styles.js +10 -10
  25. package/dist/DetailPage/DetailPage.styles.js.map +1 -1
  26. package/dist/DetailPage/examples/TableExample.d.ts +2 -0
  27. package/dist/DetailPage/examples/TableExample.js +141 -0
  28. package/dist/DetailPage/examples/TableExample.js.map +1 -0
  29. package/dist/Dropdown/Dropdown.styles.js +3 -3
  30. package/dist/DropdownFlyout/DropdownFlyout.styles.js +4 -4
  31. package/dist/Dropzone/Dropzone.js +1 -1
  32. package/dist/Dropzone/Dropzone.styles.js +9 -9
  33. package/dist/EmptyState/EmptyState.styles.js +6 -6
  34. package/dist/Field/Field.styles.js +3 -3
  35. package/dist/FileList/FileList.styles.js +4 -4
  36. package/dist/FileSelect/FileExplorer/FileExplorer.styles.js +9 -9
  37. package/dist/FileSelect/FileExplorer/FileExplorerSidebar.styles.js +3 -3
  38. package/dist/FileSelect/FileSelect.styles.js +2 -2
  39. package/dist/FileSelect/FileSelectDropzone/FileSelectDropzone.styles.js +3 -3
  40. package/dist/FileSelect/FileTokenList/FileTokenList.styles.js +2 -2
  41. package/dist/FileSelect/GridSource/GridSource.styles.js +6 -6
  42. package/dist/FileSelect/LocalSource/LocalSource.styles.js +4 -4
  43. package/dist/FileSelect/SourceItem/SourceItem.styles.js +3 -3
  44. package/dist/FileSelect/ThumbnailList/ThumbnailList.styles.js +6 -6
  45. package/dist/FileSelect/TreeSource/TreeSource.styles.js +1 -1
  46. package/dist/FileToken/FileToken.styles.js +4 -4
  47. package/dist/FilterToken/FilterToken.styles.js +2 -2
  48. package/dist/FlexList/FlexList.styles.js +1 -1
  49. package/dist/Form/Form.styles.js +16 -16
  50. package/dist/Grid/Grid.styles.js +2 -2
  51. package/dist/GroupSelect/GroupSelect.styles.js +1 -1
  52. package/dist/Input/Input.styles.js +1 -1
  53. package/dist/Link/Link.styles.js +2 -2
  54. package/dist/Link/Link.styles.js.map +1 -1
  55. package/dist/ListPage/ListPage.styles.js +8 -8
  56. package/dist/Loader/Loader.styles.js +2 -2
  57. package/dist/MenuImperative/MenuImperative.styles.js +10 -10
  58. package/dist/Modal/Modal.styles.js +13 -13
  59. package/dist/MultiSelect/MultiSelect.styles.js +6 -6
  60. package/dist/NextMenu/NextMenu.styles.js +3 -3
  61. package/dist/Notation/Notation.js +1 -1
  62. package/dist/NumberInput/NumberInput.styles.js +7 -7
  63. package/dist/Overlay/OverlayArrow.styles.js +1 -1
  64. package/dist/PageLayout/PageLayout.styles.js +14 -14
  65. package/dist/PageLayout/PageLayout.styles.js.map +1 -1
  66. package/dist/Pagination/Pagination.styles.js +5 -5
  67. package/dist/Panel/Panel.styles.js +11 -11
  68. package/dist/Pill/Pill.styles.js +2 -2
  69. package/dist/PillSelect/PillSelect.styles.js +4 -4
  70. package/dist/Popover/Popover.styles.js +2 -2
  71. package/dist/Portal/Portal.styles.js +1 -1
  72. package/dist/ProgressBar/ProgressBar.styles.js +2 -2
  73. package/dist/RadioButton/RadioButton.styles.js +3 -3
  74. package/dist/Required/Required.styles.js +3 -3
  75. package/dist/Search/Search.styles.js +5 -5
  76. package/dist/Section/Section.styles.d.ts +1 -1
  77. package/dist/Section/Section.styles.js +6 -6
  78. package/dist/SegmentedController/SegmentedController.styles.js +4 -4
  79. package/dist/Select/Select.styles.js +7 -7
  80. package/dist/Semantic/Semantic.d.ts +6 -1
  81. package/dist/Semantic/Semantic.js +7 -1
  82. package/dist/Semantic/Semantic.js.map +1 -1
  83. package/dist/Semantic/Semantic.styles.d.ts +14 -4
  84. package/dist/Semantic/Semantic.styles.js +20 -10
  85. package/dist/Semantic/Semantic.styles.js.map +1 -1
  86. package/dist/Semantic/index.d.ts +1 -1
  87. package/dist/Semantic/index.js +1 -1
  88. package/dist/Semantic/index.js.map +1 -1
  89. package/dist/Sidebar/Sidebar.styles.js +7 -7
  90. package/dist/Slider/Slider.styles.js +5 -5
  91. package/dist/Spinner/Spinner.styles.js +7 -7
  92. package/dist/SuperSelect/SuperSelect.presets.styles.js +1 -1
  93. package/dist/SuperSelect/SuperSelect.styles.js +37 -37
  94. package/dist/Switch/Switch.styles.js +4 -4
  95. package/dist/Table/Table.styles.js +28 -28
  96. package/dist/TableShelf/TableShelf.styles.js +5 -5
  97. package/dist/Tabs/Tabs.styles.js +8 -8
  98. package/dist/Tearsheet/Tearsheet.styles.js +5 -5
  99. package/dist/TextArea/TextArea.styles.js +1 -1
  100. package/dist/TextEditorOutput/TextEditorOutput.styles.js +1 -1
  101. package/dist/Thumbnail/Thumbnail.styles.js +17 -17
  102. package/dist/ThumbnailGrid/ThumbnailGrid.styles.js +7 -7
  103. package/dist/TieredSelect/TieredSelect.js +6 -1
  104. package/dist/TieredSelect/TieredSelect.js.map +1 -1
  105. package/dist/TieredSelect/TieredSelect.styles.js +9 -9
  106. package/dist/Tile/Tile.styles.js +8 -8
  107. package/dist/Title/Title.d.ts +2 -2
  108. package/dist/Title/Title.js.map +1 -1
  109. package/dist/Title/Title.styles.d.ts +2 -1
  110. package/dist/Title/Title.styles.js +13 -10
  111. package/dist/Title/Title.styles.js.map +1 -1
  112. package/dist/Title/Title.types.d.ts +7 -0
  113. package/dist/Title/Title.types.js.map +1 -1
  114. package/dist/Toast/Toast.styles.js +3 -3
  115. package/dist/ToggleButton/ToggleButton.styles.js +1 -1
  116. package/dist/Token/Token.styles.js +3 -3
  117. package/dist/ToolHeader/ToolHeader.styles.js +6 -6
  118. package/dist/Tooltip/Tooltip.styles.js +2 -2
  119. package/dist/Tree/Tree.styles.js +9 -9
  120. package/dist/Typeahead/Typeahead.styles.js +3 -3
  121. package/dist/Typography/Typography.styles.js +1 -1
  122. package/dist/Typography/Typography.table.story.js +2 -2
  123. package/dist/_hooks/ScrollLock.js +11 -0
  124. package/dist/_hooks/ScrollLock.js.map +1 -1
  125. package/dist/_typedoc/Avatar/Avatar.types.json +20 -20
  126. package/dist/_typedoc/AvatarStack/AvatarStack.types.json +23 -23
  127. package/dist/_typedoc/Badge/Badge.types.json +6 -6
  128. package/dist/_typedoc/Banner/Banner.types.json +16 -16
  129. package/dist/_typedoc/Box/Box.types.json +68 -68
  130. package/dist/_typedoc/Breadcrumbs/Breadcrumbs.types.json +10 -10
  131. package/dist/_typedoc/Button/Button.types.json +11 -11
  132. package/dist/_typedoc/Calendar/Calendar.types.json +80 -80
  133. package/dist/_typedoc/Card/Card.types.json +6 -6
  134. package/dist/_typedoc/Checkbox/Checkbox.types.json +9 -9
  135. package/dist/_typedoc/ContactItem/ContactItem.types.json +9 -9
  136. package/dist/_typedoc/DateInput/DateInput.types.json +35 -35
  137. package/dist/_typedoc/DateSelect/DateSelect.types.json +13 -13
  138. package/dist/_typedoc/DetailPage/DetailPage.types.json +4 -4
  139. package/dist/_typedoc/Dropdown/Dropdown.types.json +37 -37
  140. package/dist/_typedoc/DropdownFlyout/DropdownFlyout.types.json +29 -29
  141. package/dist/_typedoc/Dropzone/Dropzone.types.json +41 -41
  142. package/dist/_typedoc/EmptyState/EmptyState.types.json +14 -14
  143. package/dist/_typedoc/FileList/FileList.types.json +9 -9
  144. package/dist/_typedoc/FileSelect/FileSelect.types.json +26 -26
  145. package/dist/_typedoc/FileSelect/GridSource/GridSource.types.json +20 -20
  146. package/dist/_typedoc/FileSelect/LocalSource/LocalSource.types.json +14 -14
  147. package/dist/_typedoc/FileSelect/TreeSource/TreeSource.types.json +9 -9
  148. package/dist/_typedoc/Flex/Flex.types.json +27 -27
  149. package/dist/_typedoc/FlexList/FlexList.types.json +30 -30
  150. package/dist/_typedoc/Form/Form.types.json +726 -726
  151. package/dist/_typedoc/Grid/Grid.types.json +8 -8
  152. package/dist/_typedoc/GroupSelect/GroupSelect.types.json +52 -52
  153. package/dist/_typedoc/Input/Input.types.json +2 -2
  154. package/dist/_typedoc/Link/Link.types.json +4 -4
  155. package/dist/_typedoc/ListPage/ListPage.types.json +13 -13
  156. package/dist/_typedoc/Menu/Menu.types.json +62 -62
  157. package/dist/_typedoc/MenuImperative/MenuImperative.types.json +74 -74
  158. package/dist/_typedoc/Modal/Modal.types.json +41 -41
  159. package/dist/_typedoc/MultiSelect/MultiSelect.types.json +31 -31
  160. package/dist/_typedoc/Notation/Notation.types.json +4 -4
  161. package/dist/_typedoc/NumberInput/NumberInput.types.json +38 -38
  162. package/dist/_typedoc/OverlayTrigger/OverlayTrigger.types.json +31 -31
  163. package/dist/_typedoc/PageLayout/PageLayout.types.json +22 -22
  164. package/dist/_typedoc/Pagination/Pagination.types.json +7 -7
  165. package/dist/_typedoc/Panel/Panel.types.json +27 -27
  166. package/dist/_typedoc/Pill/Pill.types.json +2 -2
  167. package/dist/_typedoc/PillSelect/PillSelect.types.json +47 -47
  168. package/dist/_typedoc/Popover/Popover.types.json +14 -14
  169. package/dist/_typedoc/ProgressBar/ProgressBar.types.json +6 -6
  170. package/dist/_typedoc/RadioButton/RadioButton.types.json +6 -6
  171. package/dist/_typedoc/Required/Required.types.json +5 -5
  172. package/dist/_typedoc/Search/Search.types.json +18 -18
  173. package/dist/_typedoc/Section/Section.types.json +14 -14
  174. package/dist/_typedoc/SegmentedController/SegmentedController.types.json +20 -20
  175. package/dist/_typedoc/Select/Select.types.json +57 -57
  176. package/dist/_typedoc/Slider/Slider.types.json +6 -6
  177. package/dist/_typedoc/Spinner/Spinner.types.json +9 -9
  178. package/dist/_typedoc/Switch/Switch.types.json +3 -3
  179. package/dist/_typedoc/Table/Table.types.json +97 -97
  180. package/dist/_typedoc/Tabs/Tabs.types.json +17 -17
  181. package/dist/_typedoc/Tearsheet/Tearsheet.types.json +16 -16
  182. package/dist/_typedoc/TextArea/TextArea.types.json +3 -3
  183. package/dist/_typedoc/TextEditor/TextEditor.types.json +9 -9
  184. package/dist/_typedoc/TextEditorOutput/TextEditorOutput.types.json +4 -4
  185. package/dist/_typedoc/Thumbnail/Thumbnail.types.json +19 -19
  186. package/dist/_typedoc/TieredDropdown/TieredDropdown.types.json +42 -42
  187. package/dist/_typedoc/TieredSelect/TieredSelect.types.json +28 -28
  188. package/dist/_typedoc/Tile/Tile.types.json +30 -30
  189. package/dist/_typedoc/Title/Title.types.json +23 -0
  190. package/dist/_typedoc/Toast/Toast.types.json +4 -4
  191. package/dist/_typedoc/ToggleButton/ToggleButton.types.json +3 -3
  192. package/dist/_typedoc/Token/Token.types.json +4 -4
  193. package/dist/_typedoc/ToolHeader/ToolHeader.types.json +10 -10
  194. package/dist/_typedoc/Tooltip/Tooltip.types.json +13 -13
  195. package/dist/_typedoc/Tree/Tree.types.json +86 -86
  196. package/dist/_typedoc/Typeahead/Typeahead.types.json +2 -2
  197. package/dist/_typedoc/Typography/Typography.types.json +8 -8
  198. package/dist/_typedoc/_utils/types.json +3 -3
  199. package/dist/_utils/propsTypedoc.d.ts +1 -0
  200. package/dist/_utils/propsTypedoc.js +1 -0
  201. package/dist/_utils/propsTypedoc.js.map +1 -1
  202. package/dist/index.d.ts +1 -0
  203. package/dist/index.js +1 -0
  204. package/dist/index.js.map +1 -1
  205. package/package.json +13 -10
  206. package/tsconfig.prod.json +7 -1
  207. package/dist/FileSelect/SourceItem/SourceItem.test.js +0 -53
  208. package/dist/MultiSelect/MultiSelect.test.js +0 -250
  209. package/dist/OverlayTrigger/OverlayTrigger.test.js +0 -483
  210. package/dist/SuperSelect/SuperSelect.utils.test.js +0 -717
  211. package/dist/SuperSelect/useSuperSelect.test.js +0 -1284
  212. package/dist/_hooks/OverflowObserver/OverflowObserver.test.js +0 -110
  213. package/dist/_hooks/__tests__/Anchor.test.js +0 -109
  214. package/dist/_hooks/__tests__/BoundingRect.test.js +0 -85
  215. package/dist/_hooks/__tests__/Buffer.test.js +0 -76
  216. package/dist/_hooks/__tests__/DateTime.test.js +0 -136
  217. package/dist/_hooks/__tests__/DelayedCallback.test.js +0 -119
  218. package/dist/_hooks/__tests__/DelayedToggle.test.js +0 -50
  219. package/dist/_hooks/__tests__/Deprecation.test.js +0 -58
  220. package/dist/_hooks/__tests__/Event.test.js +0 -46
  221. package/dist/_hooks/__tests__/EventListener.test.js +0 -124
  222. package/dist/_hooks/__tests__/Hotkey.test.js +0 -18
  223. package/dist/_hooks/__tests__/InjectedScript.test.js +0 -80
  224. package/dist/_hooks/__tests__/ListNavigation.test.js +0 -101
  225. package/dist/_hooks/__tests__/TextEntry.test.js +0 -92
  226. package/dist/_hooks/__tests__/Timer.test.js +0 -60
  227. package/dist/_hooks/__tests__/Trigger.test.js +0 -52
  228. package/dist/_hooks/__tests__/Visibility.test.js +0 -86
  229. package/dist/_hooks/__tests__/ZIndex.test.js +0 -76
  230. package/dist/_utils/__tests__/CalendarHelpers.test.js +0 -64
  231. package/dist/_utils/__tests__/filename.test.js +0 -27
  232. package/dist/_utils/__tests__/getAnchorPosition.test.js +0 -250
  233. package/dist/_utils/__tests__/mergeRefs.test.js +0 -58
  234. 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
- })