@dxc-technology/halstack-react 0.0.0-bd364ae → 0.0.0-bf1a0c9

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 (239) hide show
  1. package/BackgroundColorContext.d.ts +2 -2
  2. package/BackgroundColorContext.js +1 -1
  3. package/HalstackContext.d.ts +1329 -5
  4. package/HalstackContext.js +117 -77
  5. package/accordion/Accordion.js +118 -110
  6. package/accordion/Accordion.stories.tsx +104 -16
  7. package/accordion/Accordion.test.js +10 -11
  8. package/accordion/types.d.ts +2 -1
  9. package/accordion-group/AccordionGroup.js +4 -23
  10. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  11. package/accordion-group/AccordionGroup.test.js +21 -46
  12. package/accordion-group/types.d.ts +8 -1
  13. package/alert/Alert.js +4 -6
  14. package/alert/Alert.stories.tsx +28 -0
  15. package/alert/Alert.test.js +1 -1
  16. package/bleed/Bleed.stories.tsx +64 -63
  17. package/box/Box.js +4 -6
  18. package/box/Box.stories.tsx +15 -0
  19. package/box/Box.test.js +1 -1
  20. package/box/types.d.ts +1 -0
  21. package/bulleted-list/BulletedList.d.ts +7 -0
  22. package/bulleted-list/BulletedList.js +123 -0
  23. package/bulleted-list/BulletedList.stories.tsx +200 -0
  24. package/bulleted-list/types.d.ts +11 -0
  25. package/button/Button.js +52 -73
  26. package/button/Button.stories.tsx +159 -8
  27. package/button/Button.test.js +1 -1
  28. package/button/types.d.ts +5 -5
  29. package/card/Card.js +12 -13
  30. package/card/Card.stories.tsx +12 -13
  31. package/card/Card.test.js +1 -1
  32. package/card/types.d.ts +1 -0
  33. package/checkbox/Checkbox.d.ts +2 -2
  34. package/checkbox/Checkbox.js +94 -101
  35. package/checkbox/Checkbox.stories.tsx +131 -59
  36. package/checkbox/Checkbox.test.js +94 -17
  37. package/checkbox/types.d.ts +4 -0
  38. package/chip/Chip.js +18 -26
  39. package/chip/Chip.stories.tsx +96 -9
  40. package/chip/Chip.test.js +3 -5
  41. package/chip/types.d.ts +1 -1
  42. package/common/OpenSans.css +68 -80
  43. package/common/coreTokens.d.ts +146 -0
  44. package/common/coreTokens.js +167 -0
  45. package/common/utils.d.ts +1 -0
  46. package/common/utils.js +4 -4
  47. package/common/variables.d.ts +1482 -0
  48. package/common/variables.js +1009 -1118
  49. package/date-input/Calendar.d.ts +4 -0
  50. package/date-input/Calendar.js +258 -0
  51. package/date-input/DateInput.js +134 -237
  52. package/date-input/DateInput.stories.tsx +199 -33
  53. package/date-input/DateInput.test.js +494 -138
  54. package/date-input/DatePicker.d.ts +4 -0
  55. package/date-input/DatePicker.js +146 -0
  56. package/date-input/Icons.d.ts +6 -0
  57. package/date-input/Icons.js +75 -0
  58. package/date-input/YearPicker.d.ts +4 -0
  59. package/date-input/YearPicker.js +126 -0
  60. package/date-input/types.d.ts +51 -0
  61. package/dialog/Dialog.js +80 -69
  62. package/dialog/Dialog.stories.tsx +230 -123
  63. package/dialog/Dialog.test.js +334 -5
  64. package/dialog/types.d.ts +1 -0
  65. package/dropdown/Dropdown.d.ts +1 -1
  66. package/dropdown/Dropdown.js +246 -249
  67. package/dropdown/Dropdown.stories.tsx +245 -56
  68. package/dropdown/Dropdown.test.js +507 -110
  69. package/dropdown/DropdownMenu.d.ts +4 -0
  70. package/dropdown/DropdownMenu.js +74 -0
  71. package/dropdown/DropdownMenuItem.d.ts +4 -0
  72. package/dropdown/DropdownMenuItem.js +79 -0
  73. package/dropdown/types.d.ts +23 -3
  74. package/file-input/FileInput.d.ts +2 -2
  75. package/file-input/FileInput.js +174 -220
  76. package/file-input/FileInput.stories.tsx +122 -11
  77. package/file-input/FileInput.test.js +14 -14
  78. package/file-input/FileItem.d.ts +4 -14
  79. package/file-input/FileItem.js +39 -63
  80. package/file-input/types.d.ts +17 -0
  81. package/flex/Flex.d.ts +4 -0
  82. package/flex/Flex.js +71 -0
  83. package/flex/Flex.stories.tsx +112 -0
  84. package/flex/types.d.ts +97 -0
  85. package/footer/Footer.js +6 -8
  86. package/footer/Footer.stories.tsx +99 -1
  87. package/footer/Footer.test.js +14 -26
  88. package/footer/Icons.js +1 -1
  89. package/footer/types.d.ts +2 -1
  90. package/grid/Grid.d.ts +7 -0
  91. package/grid/Grid.js +91 -0
  92. package/grid/Grid.stories.tsx +219 -0
  93. package/grid/types.d.ts +115 -0
  94. package/header/Header.d.ts +3 -2
  95. package/header/Header.js +89 -89
  96. package/header/Header.stories.tsx +152 -9
  97. package/header/Header.test.js +2 -2
  98. package/header/Icons.js +2 -2
  99. package/header/types.d.ts +1 -0
  100. package/heading/Heading.js +1 -1
  101. package/heading/Heading.test.js +1 -1
  102. package/inset/Inset.stories.tsx +5 -4
  103. package/layout/ApplicationLayout.d.ts +15 -6
  104. package/layout/ApplicationLayout.js +38 -66
  105. package/layout/ApplicationLayout.stories.tsx +80 -44
  106. package/layout/types.d.ts +18 -29
  107. package/link/Link.js +4 -4
  108. package/link/Link.stories.tsx +73 -6
  109. package/link/Link.test.js +2 -4
  110. package/link/types.d.ts +3 -3
  111. package/main.d.ts +7 -9
  112. package/main.js +33 -49
  113. package/{tabs-nav → nav-tabs}/NavTabs.js +6 -6
  114. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +96 -6
  115. package/{tabs-nav → nav-tabs}/NavTabs.test.js +1 -1
  116. package/{tabs-nav → nav-tabs}/Tab.js +40 -22
  117. package/{tabs-nav → nav-tabs}/types.d.ts +1 -1
  118. package/number-input/NumberInput.test.js +44 -8
  119. package/package.json +17 -21
  120. package/paginator/Icons.d.ts +5 -0
  121. package/paginator/Icons.js +16 -28
  122. package/paginator/Paginator.js +7 -15
  123. package/paginator/Paginator.stories.tsx +24 -0
  124. package/paginator/Paginator.test.js +78 -39
  125. package/paragraph/Paragraph.d.ts +5 -0
  126. package/paragraph/Paragraph.js +38 -0
  127. package/paragraph/Paragraph.stories.tsx +44 -0
  128. package/password-input/PasswordInput.test.js +14 -13
  129. package/progress-bar/ProgressBar.js +60 -54
  130. package/progress-bar/ProgressBar.stories.jsx +38 -3
  131. package/progress-bar/ProgressBar.test.js +68 -23
  132. package/quick-nav/QuickNav.js +23 -18
  133. package/quick-nav/QuickNav.stories.tsx +145 -26
  134. package/radio-group/Radio.d.ts +1 -1
  135. package/radio-group/Radio.js +43 -28
  136. package/radio-group/RadioGroup.js +23 -22
  137. package/radio-group/RadioGroup.stories.tsx +132 -18
  138. package/radio-group/RadioGroup.test.js +124 -97
  139. package/radio-group/types.d.ts +2 -2
  140. package/resultsetTable/Icons.d.ts +7 -0
  141. package/resultsetTable/Icons.js +51 -0
  142. package/resultsetTable/ResultsetTable.js +49 -108
  143. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  144. package/resultsetTable/ResultsetTable.test.js +61 -42
  145. package/resultsetTable/types.d.ts +1 -1
  146. package/select/Listbox.d.ts +1 -1
  147. package/select/Listbox.js +33 -16
  148. package/select/Option.js +11 -24
  149. package/select/Select.js +92 -71
  150. package/select/Select.stories.tsx +513 -136
  151. package/select/Select.test.js +413 -305
  152. package/select/types.d.ts +3 -6
  153. package/sidenav/Icons.d.ts +7 -0
  154. package/sidenav/Icons.js +51 -0
  155. package/sidenav/Sidenav.d.ts +6 -5
  156. package/sidenav/Sidenav.js +147 -54
  157. package/sidenav/Sidenav.stories.tsx +251 -151
  158. package/sidenav/Sidenav.test.js +25 -37
  159. package/sidenav/types.d.ts +52 -26
  160. package/slider/Slider.d.ts +2 -2
  161. package/slider/Slider.js +121 -97
  162. package/slider/Slider.stories.tsx +64 -1
  163. package/slider/Slider.test.js +122 -22
  164. package/slider/types.d.ts +4 -0
  165. package/spinner/Spinner.js +17 -23
  166. package/spinner/Spinner.stories.jsx +53 -27
  167. package/spinner/Spinner.test.js +1 -1
  168. package/switch/Switch.d.ts +2 -2
  169. package/switch/Switch.js +137 -70
  170. package/switch/Switch.stories.tsx +41 -30
  171. package/switch/Switch.test.js +145 -18
  172. package/switch/types.d.ts +4 -0
  173. package/table/Table.js +3 -3
  174. package/table/Table.stories.jsx +80 -1
  175. package/table/Table.test.js +2 -2
  176. package/tabs/Tab.d.ts +4 -0
  177. package/tabs/Tab.js +132 -0
  178. package/tabs/Tabs.js +358 -108
  179. package/tabs/Tabs.stories.tsx +119 -5
  180. package/tabs/Tabs.test.js +220 -10
  181. package/tabs/types.d.ts +13 -3
  182. package/tag/Tag.js +8 -10
  183. package/tag/Tag.stories.tsx +14 -1
  184. package/tag/Tag.test.js +1 -1
  185. package/tag/types.d.ts +1 -1
  186. package/text-input/Icons.d.ts +8 -0
  187. package/text-input/Icons.js +60 -0
  188. package/text-input/Suggestion.js +40 -11
  189. package/text-input/Suggestions.d.ts +4 -0
  190. package/text-input/Suggestions.js +134 -0
  191. package/text-input/TextInput.js +198 -295
  192. package/text-input/TextInput.stories.tsx +280 -185
  193. package/text-input/TextInput.test.js +736 -725
  194. package/text-input/types.d.ts +22 -3
  195. package/textarea/Textarea.js +3 -4
  196. package/textarea/Textarea.stories.jsx +60 -1
  197. package/textarea/Textarea.test.js +2 -4
  198. package/toggle-group/ToggleGroup.js +7 -4
  199. package/toggle-group/ToggleGroup.stories.tsx +42 -0
  200. package/toggle-group/ToggleGroup.test.js +1 -1
  201. package/toggle-group/types.d.ts +2 -2
  202. package/typography/Typography.d.ts +4 -0
  203. package/typography/Typography.js +32 -0
  204. package/typography/Typography.stories.tsx +198 -0
  205. package/typography/types.d.ts +18 -0
  206. package/typography/types.js +5 -0
  207. package/useTheme.d.ts +1234 -1
  208. package/useTheme.js +1 -1
  209. package/useTranslatedLabels.d.ts +84 -1
  210. package/utils/BaseTypography.d.ts +21 -0
  211. package/utils/BaseTypography.js +108 -0
  212. package/utils/FocusLock.d.ts +13 -0
  213. package/utils/FocusLock.js +139 -0
  214. package/wizard/Wizard.js +10 -17
  215. package/wizard/Wizard.stories.tsx +40 -1
  216. package/wizard/Wizard.test.js +1 -1
  217. package/wizard/types.d.ts +3 -3
  218. package/common/RequiredComponent.js +0 -32
  219. package/list/List.d.ts +0 -4
  220. package/list/List.js +0 -47
  221. package/list/List.stories.tsx +0 -95
  222. package/list/types.d.ts +0 -7
  223. package/row/Row.d.ts +0 -3
  224. package/row/Row.js +0 -127
  225. package/row/Row.stories.tsx +0 -237
  226. package/row/types.d.ts +0 -28
  227. package/stack/Stack.d.ts +0 -3
  228. package/stack/Stack.js +0 -97
  229. package/stack/Stack.stories.tsx +0 -164
  230. package/stack/types.d.ts +0 -24
  231. package/text/Text.d.ts +0 -7
  232. package/text/Text.js +0 -30
  233. package/text/Text.stories.tsx +0 -19
  234. /package/{list → bulleted-list}/types.js +0 -0
  235. /package/{row → flex}/types.js +0 -0
  236. /package/{stack → grid}/types.js +0 -0
  237. /package/{tabs-nav → nav-tabs}/NavTabs.d.ts +0 -0
  238. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
  239. /package/{tabs-nav → nav-tabs}/types.js +0 -0
@@ -4,42 +4,55 @@ import { BackgroundColorProvider } from "../BackgroundColorContext";
4
4
  import Title from "../../.storybook/components/Title";
5
5
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
6
  import DarkContainer from "../../.storybook/components/DarkSection";
7
- import { userEvent } from "@storybook/testing-library";
7
+ import styled from "styled-components";
8
+ import { HalstackProvider } from "../HalstackContext";
8
9
 
9
10
  export default {
10
11
  title: "Checkbox",
11
12
  component: DxcCheckbox,
12
13
  };
13
14
 
15
+ const opinionatedTheme = {
16
+ checkbox: {
17
+ baseColor: "#0067b3",
18
+ checkColor: "#ffffff",
19
+ fontColor: "#000000",
20
+ },
21
+ };
22
+
14
23
  const Checkbox = () => (
15
24
  <>
16
25
  <ExampleContainer>
17
26
  <Title title="Default" theme="light" level={4} />
18
27
  <DxcCheckbox label="Checkbox" />
19
28
  </ExampleContainer>
20
- <ExampleContainer>
21
- <Title title="Focused" theme="light" level={4} />
22
- <DxcCheckbox label="Focused" />
23
- </ExampleContainer>
24
29
  <ExampleContainer>
25
30
  <Title title="Checked" theme="light" level={4} />
26
31
  <DxcCheckbox label="Checkbox" defaultChecked />
27
32
  </ExampleContainer>
28
33
  <ExampleContainer>
29
- <Title title="Optional" theme="light" level={4} />
30
- <DxcCheckbox label="Checkbox" optional />
34
+ <Title title="Disabled" theme="light" level={4} />
35
+ <DxcCheckbox label="Checkbox" disabled />
31
36
  </ExampleContainer>
32
37
  <ExampleContainer>
33
- <Title title="Disabled and checked" theme="light" level={4} />
34
- <DxcCheckbox label="Checkbox" disabled defaultChecked />
38
+ <Title title="Disabled, checked and optional" theme="light" level={4} />
39
+ <DxcCheckbox label="Checkbox" disabled defaultChecked optional />
35
40
  </ExampleContainer>
36
- <ExampleContainer>
37
- <Title title="Disabled and optional" theme="light" level={4} />
38
- <DxcCheckbox label="Checkbox" disabled optional />
41
+ <ExampleContainer pseudoState="pseudo-focus">
42
+ <Title title="Focused" theme="light" level={4} />
43
+ <DxcCheckbox label="Focused" />
44
+ </ExampleContainer>
45
+ <ExampleContainer pseudoState="pseudo-hover">
46
+ <Title title="Hovered" theme="light" level={4} />
47
+ <DxcCheckbox label="Hovered" />
48
+ </ExampleContainer>
49
+ <ExampleContainer pseudoState="pseudo-hover">
50
+ <Title title="Hovered and checked" theme="light" level={4} />
51
+ <DxcCheckbox label="Hovered" defaultChecked />
39
52
  </ExampleContainer>
40
53
  <ExampleContainer>
41
- <Title title="Disabled, optional and checked" theme="light" level={4} />
42
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked />
54
+ <Title title="Optional" theme="light" level={4} />
55
+ <DxcCheckbox label="Checkbox" optional />
43
56
  </ExampleContainer>
44
57
  <ExampleContainer>
45
58
  <Title title="Label after" theme="light" level={4} />
@@ -53,25 +66,9 @@ const Checkbox = () => (
53
66
  <Title title="Optional with label after" theme="light" level={4} />
54
67
  <DxcCheckbox label="Checkbox" optional labelPosition="after" />
55
68
  </ExampleContainer>
56
- <ExampleContainer>
57
- <Title title="Disabled and checked with label after" theme="light" level={4} />
58
- <DxcCheckbox label="Checkbox" disabled defaultChecked labelPosition="after" />
59
- </ExampleContainer>
60
69
  <ExampleContainer>
61
70
  <Title title="Disabled and optional with label after" theme="light" level={4} />
62
- <DxcCheckbox label="Checkbox" disabled optional labelPosition="after" />
63
- </ExampleContainer>
64
- <ExampleContainer>
65
- <Title title="Disabled, optional and checked with label after" theme="light" level={4} />
66
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked labelPosition="after" />
67
- </ExampleContainer>
68
- <ExampleContainer pseudoState="pseudo-hover">
69
- <Title title="Hovered" theme="light" level={4} />
70
- <DxcCheckbox label="Hovered" />
71
- </ExampleContainer>
72
- <ExampleContainer pseudoState="pseudo-hover">
73
- <Title title="Hovered and checked" theme="light" level={4} />
74
- <DxcCheckbox label="Hovered" defaultChecked />
71
+ <DxcCheckbox label="Checkbox" disabled labelPosition="after" optional />
75
72
  </ExampleContainer>
76
73
  <BackgroundColorProvider color="#333333">
77
74
  <DarkContainer>
@@ -84,20 +81,28 @@ const Checkbox = () => (
84
81
  <DxcCheckbox label="Checkbox" defaultChecked />
85
82
  </ExampleContainer>
86
83
  <ExampleContainer>
87
- <Title title="Optional" theme="dark" level={4} />
88
- <DxcCheckbox label="Checkbox" optional />
84
+ <Title title="Disabled" theme="dark" level={4} />
85
+ <DxcCheckbox label="Checkbox" disabled />
89
86
  </ExampleContainer>
90
87
  <ExampleContainer>
91
- <Title title="Disabled and checked" theme="dark" level={4} />
92
- <DxcCheckbox label="Checkbox" disabled defaultChecked />
88
+ <Title title="Disabled, checked and optional" theme="dark" level={4} />
89
+ <DxcCheckbox label="Checkbox" disabled defaultChecked optional />
93
90
  </ExampleContainer>
94
- <ExampleContainer>
95
- <Title title="Disabled and optional" theme="dark" level={4} />
96
- <DxcCheckbox label="Checkbox" disabled optional />
91
+ <ExampleContainer pseudoState="pseudo-focus">
92
+ <Title title="Focused" theme="dark" level={4} />
93
+ <DxcCheckbox label="Focused" />
94
+ </ExampleContainer>
95
+ <ExampleContainer pseudoState="pseudo-hover">
96
+ <Title title="Hovered" theme="dark" level={4} />
97
+ <DxcCheckbox label="Hovered" />
98
+ </ExampleContainer>
99
+ <ExampleContainer pseudoState="pseudo-hover">
100
+ <Title title="Hovered and checked" theme="dark" level={4} />
101
+ <DxcCheckbox label="Hovered" defaultChecked />
97
102
  </ExampleContainer>
98
103
  <ExampleContainer>
99
- <Title title="Disabled, optional and checked" theme="dark" level={4} />
100
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked />
104
+ <Title title="Optional" theme="dark" level={4} />
105
+ <DxcCheckbox label="Checkbox" optional />
101
106
  </ExampleContainer>
102
107
  <ExampleContainer>
103
108
  <Title title="Label after" theme="dark" level={4} />
@@ -111,25 +116,9 @@ const Checkbox = () => (
111
116
  <Title title="Optional with label after" theme="dark" level={4} />
112
117
  <DxcCheckbox label="Checkbox" optional labelPosition="after" />
113
118
  </ExampleContainer>
114
- <ExampleContainer>
115
- <Title title="Disabled and checked with label after" theme="dark" level={4} />
116
- <DxcCheckbox label="Checkbox" disabled defaultChecked labelPosition="after" />
117
- </ExampleContainer>
118
119
  <ExampleContainer>
119
120
  <Title title="Disabled and optional with label after" theme="dark" level={4} />
120
- <DxcCheckbox label="Checkbox" disabled optional labelPosition="after" />
121
- </ExampleContainer>
122
- <ExampleContainer>
123
- <Title title="Disabled, optional and checked with label after" theme="dark" level={4} />
124
- <DxcCheckbox label="Checkbox" disabled optional defaultChecked labelPosition="after" />
125
- </ExampleContainer>
126
- <ExampleContainer pseudoState="pseudo-hover">
127
- <Title title="Hovered" theme="dark" level={4} />
128
- <DxcCheckbox label="Hovered" />
129
- </ExampleContainer>
130
- <ExampleContainer pseudoState="pseudo-hover">
131
- <Title title="Hovered and checked" theme="dark" level={4} />
132
- <DxcCheckbox label="Hovered" defaultChecked />
121
+ <DxcCheckbox label="Checkbox" disabled labelPosition="after" optional />
133
122
  </ExampleContainer>
134
123
  </DarkContainer>
135
124
  </BackgroundColorProvider>
@@ -178,11 +167,94 @@ const Checkbox = () => (
178
167
  <Title title="Xxlarge" theme="light" level={4} />
179
168
  <DxcCheckbox label="Xxlarge" margin="xxlarge" />
180
169
  </ExampleContainer>
170
+ <ExampleContainer>
171
+ <Title title="Overflow container" theme="light" level={4} />
172
+ <ScrollableContainer id="scroll-container">
173
+ <DxcCheckbox label="Checkbox" defaultChecked />
174
+ <DxcCheckbox label="Checkbox" defaultChecked />
175
+ <DxcCheckbox label="Checkbox" />
176
+ <DxcCheckbox label="Checkbox" defaultChecked />
177
+ <DxcCheckbox label="Checkbox" />
178
+ <DxcCheckbox label="Checkbox" />
179
+ <DxcCheckbox label="Checkbox" />
180
+ <DxcCheckbox label="Checkbox" defaultChecked />
181
+ </ScrollableContainer>
182
+ </ExampleContainer>
183
+ <ExampleContainer>
184
+ <Title title="Label overflow" theme="light" level={4} />
185
+ <SmallContainer>
186
+ <DxcCheckbox label="Very long label to check its overflowing" defaultChecked />
187
+ <DxcCheckbox label="Very long label to check its overflowing" labelPosition="after" />
188
+ </SmallContainer>
189
+ </ExampleContainer>
190
+ <Title title="Opinionated theme" theme="light" level={2} />
191
+ <ExampleContainer>
192
+ <Title title="Default" theme="light" level={4} />
193
+ <HalstackProvider theme={opinionatedTheme}>
194
+ <DxcCheckbox label="Checkbox" />
195
+ </HalstackProvider>
196
+ </ExampleContainer>
197
+ <ExampleContainer>
198
+ <Title title="Checked" theme="light" level={4} />
199
+ <HalstackProvider theme={opinionatedTheme}>
200
+ <DxcCheckbox label="Checkbox" defaultChecked />
201
+ </HalstackProvider>
202
+ </ExampleContainer>
203
+ <ExampleContainer>
204
+ <Title title="Disabled" theme="light" level={4} />
205
+ <HalstackProvider theme={opinionatedTheme}>
206
+ <DxcCheckbox label="Checkbox" disabled />
207
+ </HalstackProvider>
208
+ </ExampleContainer>
209
+ <ExampleContainer>
210
+ <Title title="Disabled checked" theme="light" level={4} />
211
+ <HalstackProvider theme={opinionatedTheme}>
212
+ <DxcCheckbox label="Checkbox" defaultChecked disabled />
213
+ </HalstackProvider>
214
+ </ExampleContainer>
215
+ <ExampleContainer pseudoState="pseudo-focus">
216
+ <Title title="Focused" theme="light" level={4} />
217
+ <HalstackProvider theme={opinionatedTheme}>
218
+ <DxcCheckbox label="Focused" />
219
+ </HalstackProvider>
220
+ </ExampleContainer>
221
+ <ExampleContainer pseudoState="pseudo-hover">
222
+ <Title title="Hovered" theme="light" level={4} />
223
+ <HalstackProvider theme={opinionatedTheme}>
224
+ <DxcCheckbox label="Hovered" />
225
+ </HalstackProvider>
226
+ </ExampleContainer>
227
+ <ExampleContainer pseudoState="pseudo-hover">
228
+ <Title title="Hovered and checked" theme="light" level={4} />
229
+ <HalstackProvider theme={opinionatedTheme}>
230
+ <DxcCheckbox label="Hovered" defaultChecked />
231
+ </HalstackProvider>
232
+ </ExampleContainer>
181
233
  </>
182
234
  );
183
235
 
184
236
  export const Chromatic = Checkbox.bind({});
237
+
185
238
  Chromatic.play = async () => {
186
- await userEvent.tab();
187
- await userEvent.tab();
239
+ const listEl = document.getElementById("scroll-container");
240
+ listEl?.scrollTo?.({ top: 50 });
188
241
  };
242
+
243
+ const ScrollableContainer = styled.div`
244
+ display: flex;
245
+ flex-direction: column;
246
+ gap: 14px;
247
+ width: 200px;
248
+ height: 200px;
249
+ border: 1px solid #000;
250
+ padding: 14px;
251
+ overflow: auto;
252
+ `;
253
+
254
+ const SmallContainer = styled.div`
255
+ display: flex;
256
+ flex-direction: column;
257
+ gap: 14px;
258
+ width: 150px;
259
+ height: 150px;
260
+ `;
@@ -6,25 +6,39 @@ var _react = _interopRequireDefault(require("react"));
6
6
 
7
7
  var _react2 = require("@testing-library/react");
8
8
 
9
- var _Checkbox = _interopRequireDefault(require("./Checkbox"));
9
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
+
11
+ var _Checkbox = _interopRequireDefault(require("./Checkbox.tsx"));
10
12
 
11
13
  describe("Checkbox component tests", function () {
12
- test("Checkbox renders with correct text", function () {
14
+ test("Checkbox renders with correct aria-labelledby and aria-required", function () {
13
15
  var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
14
16
  label: "Checkbox"
15
17
  })),
16
- getByText = _render.getByText;
18
+ getByText = _render.getByText,
19
+ getByRole = _render.getByRole;
17
20
 
18
- expect(getByText("Checkbox")).toBeTruthy();
21
+ var labelId = getByText("Checkbox").getAttribute("id");
22
+ expect(getByRole("checkbox").getAttribute("aria-labelledby")).toBe(labelId);
23
+ expect(getByRole("checkbox").getAttribute("aria-required")).toBe("true");
24
+ });
25
+ test("Optional checkbox renders with correct aria-required", function () {
26
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
27
+ label: "Checkbox",
28
+ optional: true
29
+ })),
30
+ getByRole = _render2.getByRole;
31
+
32
+ expect(getByRole("checkbox").getAttribute("aria-required")).toBe("false");
19
33
  });
20
34
  test("Calls correct function on click", function () {
21
35
  var onChange = jest.fn();
22
36
 
23
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
37
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
24
38
  label: "Checkbox",
25
39
  onChange: onChange
26
40
  })),
27
- getByText = _render2.getByText;
41
+ getByText = _render3.getByText;
28
42
 
29
43
  _react2.fireEvent.click(getByText("Checkbox"));
30
44
 
@@ -34,45 +48,108 @@ describe("Checkbox component tests", function () {
34
48
  var onChange = jest.fn();
35
49
  var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
36
50
  label: "Checkbox",
37
- onChange: onChange
51
+ onChange: onChange,
52
+ name: "test"
38
53
  }));
39
54
  var visibleCheckbox = component.getByText("Checkbox");
40
55
  var input = component.getByRole("checkbox");
41
- expect(input.checked).toBe(false);
56
+ var submitInput = component.container.querySelector("input[name=\"test\"]");
57
+ expect(input.getAttribute("aria-checked")).toBe("false");
58
+ expect(submitInput.checked).toBe(false);
42
59
 
43
60
  _react2.fireEvent.click(visibleCheckbox);
44
61
 
45
62
  expect(onChange).toHaveBeenCalled();
46
63
  expect(onChange).toHaveBeenCalledWith(true);
47
- expect(input.checked).toBe(true);
64
+ expect(input.getAttribute("aria-checked")).toBe("true");
65
+ expect(submitInput.checked).toBe(true);
48
66
  });
49
67
  test("Controlled checkbox", function () {
50
68
  var onChange = jest.fn();
51
69
  var component = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
52
70
  label: "Checkbox",
53
71
  checked: false,
54
- onChange: onChange
72
+ onChange: onChange,
73
+ name: "test"
55
74
  }));
56
75
  var input = component.getByRole("checkbox");
57
76
  var visibleCheckbox = component.getByText("Checkbox");
77
+ var submitInput = component.container.querySelector("input[name=\"test\"]");
58
78
 
59
79
  _react2.fireEvent.click(visibleCheckbox);
60
80
 
61
81
  expect(onChange).toHaveBeenCalled();
62
82
  expect(onChange).toHaveBeenCalledWith(true);
63
- expect(input.checked).toBe(false);
83
+ expect(input.getAttribute("aria-checked")).toBe("false");
84
+ expect(submitInput.checked).toBe(false);
64
85
  });
65
86
  test("Renders with correct initial value and initial state when it is uncontrolled", function () {
66
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
87
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
67
88
  label: "Default label",
68
89
  defaultChecked: true,
69
- value: "test-defaultChecked"
90
+ value: "test-defaultChecked",
91
+ name: "test"
92
+ })),
93
+ getByRole = _render4.getByRole,
94
+ container = _render4.container;
95
+
96
+ var checkbox = getByRole("checkbox");
97
+ var submitInput = container.querySelector("input[name=\"test\"]");
98
+ expect(submitInput.value).toBe("test-defaultChecked");
99
+ expect(checkbox.getAttribute("aria-checked")).toBe("true");
100
+ expect(submitInput.checked).toBe(true);
101
+ });
102
+ test("Test disable keyboard and mouse interactions", function () {
103
+ var onChange = jest.fn();
104
+
105
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
106
+ label: "Checkbox",
107
+ onChange: onChange,
108
+ disabled: true,
109
+ name: "test"
70
110
  })),
71
- getByRole = _render3.getByRole;
111
+ getByRole = _render5.getByRole,
112
+ getByText = _render5.getByText,
113
+ container = _render5.container;
72
114
 
73
115
  var input = getByRole("checkbox");
74
- expect(input.checked).toBe(true);
75
- expect(input.value).toBe("test-defaultChecked");
76
- expect(input.getAttribute("aria-checked")).toBe("true");
116
+ var visibleCheckbox = getByText("Checkbox");
117
+ var submitInput = container.querySelector("input[name=\"test\"]");
118
+
119
+ _react2.fireEvent.click(visibleCheckbox);
120
+
121
+ expect(onChange).toHaveBeenCalledTimes(0);
122
+ expect(input.getAttribute("aria-checked")).toBe("false");
123
+ expect(input.getAttribute("aria-disabled")).toBe("true");
124
+ expect(submitInput.checked).toBe(false);
125
+
126
+ _userEvent["default"].tab();
127
+
128
+ expect(document.activeElement === input).toBeFalsy();
129
+ });
130
+ test("Test keyboard interactions", function () {
131
+ var onChange = jest.fn();
132
+
133
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
134
+ label: "Checkbox",
135
+ name: "test",
136
+ onChange: onChange
137
+ })),
138
+ getByRole = _render6.getByRole;
139
+
140
+ var checkbox = getByRole("checkbox");
141
+
142
+ _userEvent["default"].tab();
143
+
144
+ expect(document.activeElement === checkbox).toBeTruthy();
145
+
146
+ _react2.fireEvent.keyDown(checkbox, {
147
+ key: " ",
148
+ code: "Space",
149
+ keyCode: 32,
150
+ charCode: 32
151
+ });
152
+
153
+ expect(onChange).toHaveBeenCalledWith(true);
77
154
  });
78
155
  });
@@ -61,4 +61,8 @@ declare type Props = {
61
61
  */
62
62
  tabIndex?: number;
63
63
  };
64
+ /**
65
+ * Reference to the component.
66
+ */
67
+ export declare type RefType = HTMLDivElement;
64
68
  export default Props;
package/chip/Chip.js CHANGED
@@ -17,13 +17,13 @@ var _react = _interopRequireDefault(require("react"));
17
17
 
18
18
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
19
19
 
20
- var _variables = require("../common/variables.js");
20
+ var _variables = require("../common/variables");
21
21
 
22
- var _utils = require("../common/utils.js");
22
+ var _utils = require("../common/utils");
23
23
 
24
24
  var _useTheme = _interopRequireDefault(require("../useTheme"));
25
25
 
26
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
26
+ var _templateObject, _templateObject2, _templateObject3;
27
27
 
28
28
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
29
 
@@ -49,41 +49,31 @@ var DxcChip = function DxcChip(_ref) {
49
49
  disabled: disabled,
50
50
  prefixIcon: true,
51
51
  label: label,
52
- mode: "prefix",
53
52
  tabIndex: typeof onClickPrefix === "function" && !disabled ? tabIndex : -1,
54
53
  onClick: function onClick() {
55
54
  return onClickPrefix && !disabled && onClickPrefix();
56
55
  },
57
56
  interactuable: typeof onClickPrefix === "function" && !disabled
58
- }, typeof prefixIcon === "string" ? /*#__PURE__*/_react["default"].createElement(PrefixIconContainer, {
57
+ }, typeof prefixIcon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
59
58
  src: prefixIcon
60
59
  }) : prefixIcon), label && /*#__PURE__*/_react["default"].createElement(ChipTextContainer, {
61
60
  disabled: disabled
62
61
  }, label), suffixIcon && /*#__PURE__*/_react["default"].createElement(IconContainer, {
63
62
  disabled: disabled,
64
63
  suffixIcon: true,
65
- mode: "suffix",
66
64
  label: label,
67
65
  tabIndex: typeof onClickSuffix === "function" && !disabled ? tabIndex : -1,
68
66
  onClick: function onClick() {
69
67
  return onClickSuffix && !disabled && onClickSuffix();
70
68
  },
71
69
  interactuable: typeof onClickSuffix === "function" && !disabled
72
- }, typeof suffixIcon === "string" ? /*#__PURE__*/_react["default"].createElement(SuffixIconContainer, {
70
+ }, typeof suffixIcon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
73
71
  src: suffixIcon
74
72
  }) : suffixIcon)));
75
73
  };
76
74
 
77
75
  var getCursor = function getCursor(interactuable, disabled) {
78
- if (disabled) {
79
- return "cursor:not-allowed;";
80
- }
81
-
82
- if (interactuable) {
83
- return "cursor:pointer;";
84
- }
85
-
86
- return "cursor:default; outline:none;";
76
+ if (disabled) return "cursor: not-allowed;";else if (interactuable) return "cursor: pointer;";else return "cursor: default; outline:none;";
87
77
  };
88
78
 
89
79
  var StyledDxcChip = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n min-height: 40px;\n max-width: ", ";\n background-color: ", ";\n border-radius: ", ";\n border-width: ", ";\n border-style: ", ";\n border-color: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n cursor: ", ";\n"])), function (_ref2) {
@@ -137,24 +127,26 @@ var ChipTextContainer = _styledComponents["default"].span(_templateObject2 || (_
137
127
  return disabled && "not-allowed" || "default";
138
128
  });
139
129
 
140
- var SuffixIconContainer = _styledComponents["default"].img(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])([""])));
141
-
142
- var PrefixIconContainer = _styledComponents["default"].img(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])([""])));
143
-
144
- var IconContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n ", "\n ", "\n width: ", ";\n height: ", ";\n overflow: hidden;\n\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n &:focus {\n outline-color: ", ";\n outline-width: 2px;\n ", "\n }\n"])), function (props) {
145
- return props.disabled ? props.theme.disabledIconColor : props.theme.iconColor;
146
- }, function (props) {
130
+ var IconContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n ", "\n color: ", ";\n ", "\n\n &:hover {\n color: ", ";\n }\n &:focus {\n outline-color: ", ";\n outline-width: ", ";\n ", "\n }\n &:active {\n color: ", ";\n }\n img,\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (props) {
147
131
  return props.prefixIcon ? "margin-right: ".concat((props.label || props.suffixIcon) && props.theme.iconSpacing || props.prefixIcon && "0", ";") : "margin-left: ".concat((props.label || props.prefixIcon) && props.theme.iconSpacing || props.prefixIcon && "0", ";");
132
+ }, function (props) {
133
+ return props.disabled ? props.theme.disabledIconColor : props.theme.iconColor;
148
134
  }, function (props) {
149
135
  return getCursor(props.interactuable, props.disabled);
150
136
  }, function (props) {
151
- return props.theme.iconSize;
137
+ return !props.disabled && props.theme.hoverIconColor;
152
138
  }, function (props) {
153
- return props.theme.iconSize;
139
+ return !props.disabled && props.theme.focusColor;
154
140
  }, function (props) {
155
- return props.theme.focusColor;
141
+ return !props.disabled && props.theme.focusBorderThickness;
156
142
  }, function (props) {
157
143
  return props.disabled && "outline: none;";
144
+ }, function (props) {
145
+ return !props.disabled && props.theme.activeIconColor;
146
+ }, function (props) {
147
+ return props.theme.iconSize;
148
+ }, function (props) {
149
+ return props.theme.iconSize;
158
150
  });
159
151
 
160
152
  var _default = DxcChip;