@telus-uds/components-base 1.25.0 → 1.27.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 (86) hide show
  1. package/CHANGELOG.md +46 -2
  2. package/component-docs.json +57 -2
  3. package/lib/Button/ButtonBase.js +2 -1
  4. package/lib/Carousel/Carousel.js +19 -1
  5. package/lib/Carousel/CarouselStepTracker/CarouselStepTracker.js +11 -2
  6. package/lib/MultiSelectFilter/ModalOverlay.js +136 -0
  7. package/lib/MultiSelectFilter/MultiSelectFilter.js +64 -26
  8. package/lib-module/Button/ButtonBase.js +2 -1
  9. package/lib-module/Carousel/Carousel.js +16 -1
  10. package/lib-module/Carousel/CarouselStepTracker/CarouselStepTracker.js +10 -2
  11. package/lib-module/MultiSelectFilter/ModalOverlay.js +112 -0
  12. package/lib-module/MultiSelectFilter/MultiSelectFilter.js +65 -27
  13. package/package.json +2 -2
  14. package/src/Button/ButtonBase.jsx +1 -1
  15. package/src/Carousel/Carousel.jsx +16 -2
  16. package/src/Carousel/CarouselStepTracker/CarouselStepTracker.jsx +7 -1
  17. package/src/MultiSelectFilter/ModalOverlay.jsx +86 -0
  18. package/src/MultiSelectFilter/MultiSelectFilter.jsx +73 -49
  19. package/.eslintrc.js +0 -9
  20. package/__tests17__/A11yText/A11yText.test.jsx +0 -34
  21. package/__tests17__/ActivityIndicator/ActivityIndicator.test.jsx +0 -68
  22. package/__tests17__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +0 -299
  23. package/__tests17__/Box/Box.test.jsx +0 -111
  24. package/__tests17__/Button/Button.test.jsx +0 -86
  25. package/__tests17__/Button/ButtonBase.test.jsx +0 -82
  26. package/__tests17__/Button/ButtonGroup.test.jsx +0 -347
  27. package/__tests17__/Button/ButtonLink.test.jsx +0 -61
  28. package/__tests17__/Card/Card.test.jsx +0 -63
  29. package/__tests17__/Carousel/Carousel.test.jsx +0 -128
  30. package/__tests17__/Carousel/CarouselTabs.test.jsx +0 -142
  31. package/__tests17__/Checkbox/Checkbox.test.jsx +0 -94
  32. package/__tests17__/Checkbox/CheckboxGroup.test.jsx +0 -246
  33. package/__tests17__/Divider/Divider.test.jsx +0 -91
  34. package/__tests17__/ExpandCollapse/ExpandCollapse.test.jsx +0 -109
  35. package/__tests17__/Feedback/Feedback.test.jsx +0 -42
  36. package/__tests17__/FlexGrid/Col.test.jsx +0 -261
  37. package/__tests17__/FlexGrid/FlexGrid.test.jsx +0 -136
  38. package/__tests17__/FlexGrid/Row.test.jsx +0 -273
  39. package/__tests17__/HorizontalScroll/HorizontalScroll.test.jsx +0 -165
  40. package/__tests17__/Icon/Icon.test.jsx +0 -61
  41. package/__tests17__/IconButton/IconButton.test.jsx +0 -52
  42. package/__tests17__/InputLabel/InputLabel.test.jsx +0 -28
  43. package/__tests17__/InputLabel/__snapshots__/InputLabel.test.jsx.snap +0 -3
  44. package/__tests17__/InputSupports/InputSupports.test.jsx +0 -60
  45. package/__tests17__/Link/Link.test.jsx +0 -63
  46. package/__tests17__/Link/TextButton.test.jsx +0 -35
  47. package/__tests17__/List/List.test.jsx +0 -82
  48. package/__tests17__/Modal/Modal.test.jsx +0 -47
  49. package/__tests17__/Notification/Notification.test.jsx +0 -20
  50. package/__tests17__/Pagination/Pagination.test.jsx +0 -160
  51. package/__tests17__/Progress/Progress.test.jsx +0 -79
  52. package/__tests17__/Radio/Radio.test.jsx +0 -87
  53. package/__tests17__/Radio/RadioGroup.test.jsx +0 -220
  54. package/__tests17__/RadioCard/RadioCard.test.jsx +0 -87
  55. package/__tests17__/RadioCard/RadioCardGroup.test.jsx +0 -246
  56. package/__tests17__/Search/Search.test.jsx +0 -87
  57. package/__tests17__/Select/Select.test.jsx +0 -94
  58. package/__tests17__/SideNav/SideNav.test.jsx +0 -110
  59. package/__tests17__/Skeleton/Skeleton.test.jsx +0 -61
  60. package/__tests17__/SkipLink/SkipLink.test.jsx +0 -61
  61. package/__tests17__/Spacer/Spacer.test.jsx +0 -63
  62. package/__tests17__/StackView/StackView.test.jsx +0 -211
  63. package/__tests17__/StackView/StackWrap.test.jsx +0 -47
  64. package/__tests17__/StackView/getStackedContent.test.jsx +0 -295
  65. package/__tests17__/StepTracker/StepTracker.test.jsx +0 -108
  66. package/__tests17__/Tabs/Tabs.test.jsx +0 -49
  67. package/__tests17__/Tags/Tags.test.jsx +0 -327
  68. package/__tests17__/TextInput/TextArea.test.jsx +0 -35
  69. package/__tests17__/TextInput/TextInputBase.test.jsx +0 -125
  70. package/__tests17__/ThemeProvider/ThemeProvider.test.jsx +0 -82
  71. package/__tests17__/ThemeProvider/useThemeTokens.test.jsx +0 -514
  72. package/__tests17__/ThemeProvider/utils/theme-tokens.test.js +0 -41
  73. package/__tests17__/ToggleSwitch/ToggleSwitch.test.jsx +0 -82
  74. package/__tests17__/ToggleSwitch/ToggleSwitchGroup.test.jsx +0 -192
  75. package/__tests17__/Tooltip/Tooltip.test.jsx +0 -65
  76. package/__tests17__/Tooltip/getTooltipPosition.test.js +0 -79
  77. package/__tests17__/Typography/typography.test.jsx +0 -90
  78. package/__tests17__/utils/children.test.jsx +0 -128
  79. package/__tests17__/utils/containUniqueFields.test.js +0 -25
  80. package/__tests17__/utils/input.test.js +0 -375
  81. package/__tests17__/utils/props.test.js +0 -36
  82. package/__tests17__/utils/semantics.test.jsx +0 -34
  83. package/__tests17__/utils/useCopy.test.js +0 -42
  84. package/__tests17__/utils/useResponsiveProp.test.jsx +0 -202
  85. package/__tests17__/utils/useSpacingScale.test.jsx +0 -273
  86. package/__tests17__/utils/useUniqueId.test.js +0 -31
@@ -1,273 +0,0 @@
1
- import React from 'react'
2
- import { renderHook } from '@testing-library/react-hooks'
3
- import { useSpacingScale } from '../../src/utils'
4
- import Theme from '../../__fixtures__/Theme'
5
- import Viewport from '../../__fixtures__/Viewport'
6
-
7
- describe('useSpacingScale', () => {
8
- // values from testTheme.js
9
- const expectedDefaultScale = [0, 4, 8, 16, 24, 32, 36]
10
- const expectedCompactScale = [0, 2, 4, 6, 8, 10, 12]
11
- const expectedResponsiveScale = {
12
- xs: [0, 1, 2, 3, 4, 5, 6],
13
- sm: [0, 3, 4, 5, 6, 7, 8],
14
- md: [0, 3, 4, 5, 6, 7, 8],
15
- lg: [0, 7, 8, 9, 10, 11, 12],
16
- xl: [0, 7, 8, 9, 10, 11, 12]
17
- }
18
-
19
- const wrapper = ({ children, viewport }) => (
20
- <Viewport viewport={viewport}>
21
- <Theme>{children}</Theme>
22
- </Viewport>
23
- )
24
-
25
- it.each(expectedDefaultScale.map((item, index) => [item, index]))(
26
- 'returns the expected size index %# from the theme spacing scale',
27
- (expectedSize, index) => {
28
- const { result } = renderHook(() => useSpacingScale(index), {
29
- wrapper
30
- })
31
- expect(result.current).toBe(expectedSize)
32
- }
33
- )
34
- it.each(expectedCompactScale.map((item, index) => [item, index]))(
35
- 'returns the expected size index %# from the theme spacing scale in a variant',
36
- (expectedSize, index) => {
37
- const { result } = renderHook(
38
- () => useSpacingScale({ space: index, options: { variant: { compact: true } } }),
39
- {
40
- wrapper
41
- }
42
- )
43
- expect(result.current).toBe(expectedSize)
44
- }
45
- )
46
- it.each(Object.entries(expectedResponsiveScale))(
47
- 'returns appropriate sizes from a responsive theme variant at %p viewport',
48
- (viewport, expectedValues) => {
49
- const { result, rerender } = renderHook(({ spacingValue }) => useSpacingScale(spacingValue), {
50
- wrapper
51
- })
52
- expectedValues.forEach((expectedSize, index) => {
53
- rerender({
54
- viewport,
55
- spacingValue: { space: index, options: { variant: { responsive: true } } }
56
- })
57
- expect(result.current).toBe(expectedSize)
58
- })
59
- }
60
- )
61
-
62
- it('returns the 0 index when passed a nullish spacing value', () => {
63
- const { result, rerender } = renderHook((spacingValue) => useSpacingScale(spacingValue), {
64
- wrapper
65
- })
66
- // implicit undefined
67
- expect(result.current).toBe(expectedDefaultScale[0])
68
- // explicit undefined
69
- rerender(undefined)
70
- expect(result.current).toBe(expectedDefaultScale[0])
71
- rerender(null)
72
- expect(result.current).toBe(expectedDefaultScale[0])
73
-
74
- // confim this test isn't a false positive misuing rerender etc
75
- rerender(1)
76
- expect(result.current).toBe(expectedDefaultScale[1])
77
- })
78
- it('returns the 0 index when passed a nullish spacing value in a variant', () => {
79
- const { result, rerender } = renderHook((spacingValue) => useSpacingScale(spacingValue), {
80
- wrapper,
81
- initialProps: { options: { variant: { compact: true } } }
82
- })
83
- // implicit undefined
84
- expect(result.current).toBe(expectedCompactScale[0])
85
- // explicit undefined
86
- rerender({ space: undefined, options: { variant: { compact: true } } })
87
- expect(result.current).toBe(expectedCompactScale[0])
88
- rerender({ space: null, options: { variant: { compact: true } } })
89
- expect(result.current).toBe(expectedCompactScale[0])
90
-
91
- // confim this test isn't a false positive misuing rerender etc
92
- rerender({ space: 1, options: { variant: { compact: true } } })
93
- expect(result.current).toBe(expectedCompactScale[1])
94
- })
95
-
96
- it('returns the highest index when passed an out-of-bounds spacing index', () => {
97
- const { result } = renderHook(() => useSpacingScale(99), {
98
- wrapper
99
- })
100
- expect(result.current).toBe(expectedDefaultScale[expectedDefaultScale.length - 1])
101
- })
102
- it('returns the highest index when passed an out-of-bounds spacing index in a variant', () => {
103
- const { result } = renderHook(
104
- () => useSpacingScale({ space: 99, options: { variant: { compact: true } } }),
105
- {
106
- wrapper
107
- }
108
- )
109
- expect(result.current).toBe(expectedCompactScale[expectedDefaultScale.length - 1])
110
- })
111
-
112
- it('returns viewport indexes that explicitly match current viewport', () => {
113
- const spacingValue = { xs: 1, sm: 2, md: 3, lg: 4, xl: 5 }
114
- const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
115
- wrapper,
116
- initialProps: { viewport: 'xs', spacingValue }
117
- })
118
- expect(result.current).toBe(expectedDefaultScale[1])
119
- rerender({ viewport: 'sm', spacingValue })
120
- expect(result.current).toBe(expectedDefaultScale[2])
121
- rerender({ viewport: 'md', spacingValue })
122
- expect(result.current).toBe(expectedDefaultScale[3])
123
- rerender({ viewport: 'lg', spacingValue })
124
- expect(result.current).toBe(expectedDefaultScale[4])
125
- rerender({ viewport: 'xl', spacingValue })
126
- expect(result.current).toBe(expectedDefaultScale[5])
127
- })
128
- it('returns viewport indexes that explicitly match current viewport in a variant', () => {
129
- const spacingValue = {
130
- xs: 1,
131
- sm: 2,
132
- md: 3,
133
- lg: 4,
134
- xl: 5,
135
- options: { variant: { compact: true } }
136
- }
137
- const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
138
- wrapper,
139
- initialProps: { viewport: 'xs', spacingValue }
140
- })
141
- expect(result.current).toBe(expectedCompactScale[1])
142
- rerender({ viewport: 'sm', spacingValue })
143
- expect(result.current).toBe(expectedCompactScale[2])
144
- rerender({ viewport: 'md', spacingValue })
145
- expect(result.current).toBe(expectedCompactScale[3])
146
- rerender({ viewport: 'lg', spacingValue })
147
- expect(result.current).toBe(expectedCompactScale[4])
148
- rerender({ viewport: 'xl', spacingValue })
149
- expect(result.current).toBe(expectedCompactScale[5])
150
- })
151
-
152
- it('returns viewport indexes that implicitly match current viewport', () => {
153
- const spacingValue = { xs: 1, md: 3 }
154
- const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
155
- wrapper,
156
- initialProps: { viewport: 'xs', spacingValue }
157
- })
158
- expect(result.current).toBe(expectedDefaultScale[1])
159
- rerender({ viewport: 'sm', spacingValue })
160
- expect(result.current).toBe(expectedDefaultScale[1])
161
- rerender({ viewport: 'md', spacingValue })
162
- expect(result.current).toBe(expectedDefaultScale[3])
163
- rerender({ viewport: 'lg', spacingValue })
164
- expect(result.current).toBe(expectedDefaultScale[3])
165
- rerender({ viewport: 'xl', spacingValue })
166
- expect(result.current).toBe(expectedDefaultScale[3])
167
- })
168
- it('returns viewport indexes that implicitly match current viewport in a variant', () => {
169
- const spacingValue = { xs: 1, md: 3, options: { variant: { compact: true } } }
170
- const { rerender, result } = renderHook((args) => useSpacingScale(args.spacingValue), {
171
- wrapper,
172
- initialProps: { viewport: 'xs', spacingValue }
173
- })
174
- expect(result.current).toBe(expectedCompactScale[1])
175
- rerender({ viewport: 'sm', spacingValue })
176
- expect(result.current).toBe(expectedCompactScale[1])
177
- rerender({ viewport: 'md', spacingValue })
178
- expect(result.current).toBe(expectedCompactScale[3])
179
- rerender({ viewport: 'lg', spacingValue })
180
- expect(result.current).toBe(expectedCompactScale[3])
181
- rerender({ viewport: 'xl', spacingValue })
182
- expect(result.current).toBe(expectedCompactScale[3])
183
- })
184
-
185
- it('chooses smallest provided viewport index if viewport is unavailable', () => {
186
- const spacingValue = { xs: 1, sm: 2, md: 3, lg: 4, xl: 5 }
187
- const { result } = renderHook((args) => useSpacingScale(args.spacingValue), {
188
- wrapper,
189
- initialProps: { viewport: null, spacingValue }
190
- })
191
- expect(result.current).toBe(expectedDefaultScale[1])
192
- })
193
- it('chooses 0 index if current viewport matches no provided index', () => {
194
- const spacingValue = { lg: 4 }
195
- const { result, rerender } = renderHook((args) => useSpacingScale(args.spacingValue), {
196
- wrapper,
197
- initialProps: { viewport: 'xs', spacingValue }
198
- })
199
- expect(result.current).toBe(expectedDefaultScale[0])
200
- rerender({ viewport: 'sm', spacingValue })
201
- expect(result.current).toBe(expectedDefaultScale[0])
202
- rerender({ viewport: 'md', spacingValue })
203
- expect(result.current).toBe(expectedDefaultScale[0])
204
- rerender({ viewport: 'lg', spacingValue })
205
- expect(result.current).toBe(expectedDefaultScale[4])
206
- rerender({ viewport: 'xl', spacingValue })
207
- expect(result.current).toBe(expectedDefaultScale[4])
208
- })
209
-
210
- it('subtracts a provided value from a spacing scale value', () => {
211
- const spacingValue = { viewport: 'xs', space: 2, options: { subtract: 3 } }
212
- const { result } = renderHook(() => useSpacingScale(spacingValue), {
213
- wrapper
214
- })
215
- expect(result.current).toBe(expectedDefaultScale[2] - 3)
216
- })
217
- it('subtracts a provided value from a spacing scale value in a variant', () => {
218
- const spacingValue = {
219
- space: 4,
220
- options: { subtract: 3, variant: { compact: true } }
221
- }
222
- const { result } = renderHook(() => useSpacingScale(spacingValue), {
223
- wrapper
224
- })
225
- expect(result.current).toBe(expectedCompactScale[4] - 3)
226
- })
227
- it('returns 0 if a subtraction would result in a negative number', () => {
228
- const spacingValue = { space: 2, options: { subtract: 999 } }
229
- const { result } = renderHook((args) => useSpacingScale(args.spacingValue), {
230
- wrapper,
231
- initialProps: { spacingValue }
232
- })
233
- expect(result.current).toBe(0)
234
- })
235
-
236
- it('gives an exact amount if `size` option is passed', () => {
237
- const size = 123456
238
- const spacingValue = { xs: 1, sm: 2, md: 3, lg: 4, xl: 5, options: { size } }
239
- const compactSpacingValue = { ...spacingValue, options: { size, variant: { compact: true } } }
240
- const { result, rerender } = renderHook((args) => useSpacingScale(args.spacingValue), {
241
- wrapper,
242
- initialProps: { viewport: 'xs', spacingValue }
243
- })
244
- expect(result.current).toBe(size)
245
- rerender({ viewport: 'sm', spacingValue })
246
- expect(result.current).toBe(size)
247
- rerender({ viewport: 'md', spacingValue })
248
- expect(result.current).toBe(size)
249
- rerender({ viewport: 'lg', spacingValue })
250
- expect(result.current).toBe(size)
251
- rerender({ viewport: 'xl', spacingValue })
252
- expect(result.current).toBe(size)
253
- rerender({ viewport: 'xs', spacingValue: compactSpacingValue })
254
- expect(result.current).toBe(size)
255
- rerender({ viewport: 'sm', spacingValue: compactSpacingValue })
256
- expect(result.current).toBe(size)
257
- rerender({ viewport: 'md', spacingValue: compactSpacingValue })
258
- expect(result.current).toBe(size)
259
- rerender({ viewport: 'lg', spacingValue: compactSpacingValue })
260
- expect(result.current).toBe(size)
261
- rerender({ viewport: 'xl', spacingValue: compactSpacingValue })
262
- expect(result.current).toBe(size)
263
- })
264
- it('subtracts from size if `subtract` and `size` options are provided', () => {
265
- const size = 123456
266
- const subtract = 12345
267
- const spacingValue = { options: { size, subtract } }
268
- const { result } = renderHook(() => useSpacingScale(spacingValue), {
269
- wrapper
270
- })
271
- expect(result.current).toBe(size - subtract)
272
- })
273
- })
@@ -1,31 +0,0 @@
1
- import { renderHook } from '@testing-library/react-hooks'
2
- import useUniqueId from '../../lib/utils/useUniqueId'
3
-
4
- describe('useUniqueId hook', () => {
5
- it('returns the same id for each re-render, but a different id for a new instance', () => {
6
- const { result, rerender } = renderHook(() => useUniqueId('prefix'))
7
-
8
- expect(result.current).toBe('prefix-1')
9
-
10
- rerender()
11
-
12
- expect(result.current).toBe('prefix-1')
13
-
14
- // has to be done within the same test case, as we can't ensure order in which tests are being run in parallel
15
- const { result: result2, rerender: rerender2 } = renderHook(() => useUniqueId('prefix'))
16
-
17
- expect(result.current).toBe('prefix-1')
18
- expect(result2.current).toBe('prefix-2')
19
-
20
- // ensure that instances' rerendering doesn't affect one another
21
- rerender2()
22
-
23
- expect(result.current).toBe('prefix-1')
24
- expect(result2.current).toBe('prefix-2')
25
-
26
- rerender()
27
-
28
- expect(result.current).toBe('prefix-1')
29
- expect(result2.current).toBe('prefix-2')
30
- })
31
- })