@dxc-technology/halstack-react 0.0.0-5aa300b → 0.0.0-5b32837

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 (292) hide show
  1. package/BackgroundColorContext.d.ts +1 -10
  2. package/BackgroundColorContext.js +5 -22
  3. package/HalstackContext.d.ts +1231 -6
  4. package/HalstackContext.js +121 -105
  5. package/README.md +47 -0
  6. package/accordion/Accordion.d.ts +1 -1
  7. package/accordion/Accordion.js +30 -87
  8. package/accordion/Accordion.stories.tsx +52 -115
  9. package/accordion/Accordion.test.js +19 -34
  10. package/accordion/types.d.ts +5 -17
  11. package/accordion-group/AccordionGroup.d.ts +4 -3
  12. package/accordion-group/AccordionGroup.js +29 -77
  13. package/accordion-group/AccordionGroup.stories.tsx +78 -77
  14. package/accordion-group/AccordionGroup.test.js +44 -72
  15. package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
  16. package/accordion-group/AccordionGroupAccordion.js +31 -0
  17. package/accordion-group/types.d.ts +6 -18
  18. package/action-icon/ActionIcon.d.ts +4 -0
  19. package/action-icon/ActionIcon.js +47 -0
  20. package/action-icon/ActionIcon.stories.tsx +41 -0
  21. package/action-icon/ActionIcon.test.js +64 -0
  22. package/action-icon/types.d.ts +26 -0
  23. package/alert/Alert.js +19 -58
  24. package/alert/Alert.stories.tsx +28 -0
  25. package/alert/Alert.test.js +29 -46
  26. package/alert/types.d.ts +5 -5
  27. package/badge/Badge.d.ts +1 -1
  28. package/badge/Badge.js +141 -43
  29. package/badge/Badge.stories.tsx +210 -0
  30. package/badge/Badge.test.js +30 -0
  31. package/badge/types.d.ts +52 -3
  32. package/bleed/Bleed.js +13 -21
  33. package/bleed/Bleed.stories.tsx +1 -0
  34. package/bleed/types.d.ts +2 -2
  35. package/box/Box.d.ts +1 -1
  36. package/box/Box.js +18 -59
  37. package/box/Box.stories.tsx +38 -51
  38. package/box/Box.test.js +2 -7
  39. package/box/types.d.ts +3 -15
  40. package/bulleted-list/BulletedList.js +19 -53
  41. package/bulleted-list/BulletedList.stories.tsx +8 -93
  42. package/bulleted-list/types.d.ts +32 -5
  43. package/button/Button.d.ts +1 -1
  44. package/button/Button.js +68 -102
  45. package/button/Button.stories.tsx +104 -94
  46. package/button/Button.test.js +20 -17
  47. package/button/types.d.ts +8 -4
  48. package/card/Card.d.ts +1 -1
  49. package/card/Card.js +48 -89
  50. package/card/Card.stories.tsx +12 -42
  51. package/card/Card.test.js +11 -22
  52. package/card/types.d.ts +6 -12
  53. package/checkbox/Checkbox.js +87 -122
  54. package/checkbox/Checkbox.stories.tsx +68 -54
  55. package/checkbox/Checkbox.test.js +108 -64
  56. package/checkbox/types.d.ts +8 -4
  57. package/chip/Chip.js +36 -64
  58. package/chip/Chip.stories.tsx +80 -17
  59. package/chip/Chip.test.js +16 -31
  60. package/chip/types.d.ts +4 -4
  61. package/common/OpenSans.css +68 -80
  62. package/common/coreTokens.d.ts +237 -0
  63. package/common/coreTokens.js +184 -0
  64. package/common/utils.d.ts +1 -0
  65. package/common/utils.js +6 -12
  66. package/common/variables.d.ts +1383 -0
  67. package/common/variables.js +886 -1143
  68. package/container/Container.d.ts +4 -0
  69. package/container/Container.js +194 -0
  70. package/container/Container.stories.tsx +214 -0
  71. package/container/types.d.ts +74 -0
  72. package/date-input/Calendar.d.ts +1 -1
  73. package/date-input/Calendar.js +52 -96
  74. package/date-input/DateInput.js +103 -107
  75. package/date-input/DateInput.stories.tsx +194 -60
  76. package/date-input/DateInput.test.js +676 -620
  77. package/date-input/DatePicker.js +47 -92
  78. package/date-input/Icons.d.ts +6 -0
  79. package/date-input/Icons.js +58 -0
  80. package/date-input/YearPicker.d.ts +1 -1
  81. package/date-input/YearPicker.js +29 -44
  82. package/date-input/types.d.ts +31 -27
  83. package/dialog/Dialog.d.ts +1 -1
  84. package/dialog/Dialog.js +61 -119
  85. package/dialog/Dialog.stories.tsx +310 -212
  86. package/dialog/Dialog.test.js +269 -32
  87. package/dialog/types.d.ts +18 -26
  88. package/dropdown/Dropdown.js +50 -103
  89. package/dropdown/Dropdown.stories.tsx +200 -82
  90. package/dropdown/Dropdown.test.js +393 -379
  91. package/dropdown/DropdownMenu.js +20 -37
  92. package/dropdown/DropdownMenuItem.js +9 -34
  93. package/dropdown/types.d.ts +17 -19
  94. package/file-input/FileInput.js +184 -256
  95. package/file-input/FileInput.stories.tsx +86 -3
  96. package/file-input/FileInput.test.js +356 -395
  97. package/file-input/FileItem.js +15 -41
  98. package/file-input/types.d.ts +10 -10
  99. package/flex/Flex.js +27 -39
  100. package/flex/Flex.stories.tsx +35 -26
  101. package/flex/types.d.ts +74 -9
  102. package/footer/Footer.d.ts +1 -1
  103. package/footer/Footer.js +70 -117
  104. package/footer/Footer.stories.tsx +55 -21
  105. package/footer/Footer.test.js +33 -57
  106. package/footer/Icons.d.ts +3 -2
  107. package/footer/Icons.js +66 -7
  108. package/footer/types.d.ts +25 -27
  109. package/grid/Grid.d.ts +7 -0
  110. package/grid/Grid.js +76 -0
  111. package/grid/Grid.stories.tsx +219 -0
  112. package/grid/types.d.ts +115 -0
  113. package/header/Header.d.ts +4 -3
  114. package/header/Header.js +48 -133
  115. package/header/Header.stories.tsx +115 -36
  116. package/header/Header.test.js +13 -26
  117. package/header/Icons.d.ts +2 -2
  118. package/header/Icons.js +2 -7
  119. package/header/types.d.ts +5 -20
  120. package/heading/Heading.js +10 -32
  121. package/heading/Heading.test.js +71 -88
  122. package/heading/types.d.ts +7 -7
  123. package/image/Image.d.ts +4 -0
  124. package/image/Image.js +70 -0
  125. package/image/Image.stories.tsx +127 -0
  126. package/image/types.d.ts +72 -0
  127. package/image/types.js +5 -0
  128. package/inset/Inset.js +13 -21
  129. package/inset/Inset.stories.tsx +2 -1
  130. package/inset/types.d.ts +2 -2
  131. package/layout/ApplicationLayout.d.ts +5 -5
  132. package/layout/ApplicationLayout.js +29 -66
  133. package/layout/ApplicationLayout.stories.tsx +1 -1
  134. package/layout/Icons.d.ts +8 -5
  135. package/layout/Icons.js +51 -59
  136. package/layout/SidenavContext.d.ts +1 -1
  137. package/layout/SidenavContext.js +3 -9
  138. package/layout/types.d.ts +5 -6
  139. package/link/Link.js +24 -45
  140. package/link/Link.stories.tsx +60 -0
  141. package/link/Link.test.js +24 -44
  142. package/link/types.d.ts +14 -14
  143. package/main.d.ts +8 -5
  144. package/main.js +33 -59
  145. package/{tabs-nav → nav-tabs}/NavTabs.d.ts +2 -2
  146. package/{tabs-nav → nav-tabs}/NavTabs.js +23 -55
  147. package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +109 -5
  148. package/{tabs-nav → nav-tabs}/NavTabs.test.js +39 -45
  149. package/nav-tabs/Tab.js +118 -0
  150. package/{tabs-nav → nav-tabs}/types.d.ts +14 -15
  151. package/nav-tabs/types.js +5 -0
  152. package/number-input/NumberInput.d.ts +7 -0
  153. package/number-input/NumberInput.js +26 -35
  154. package/number-input/NumberInput.stories.tsx +42 -26
  155. package/number-input/NumberInput.test.js +701 -413
  156. package/number-input/types.d.ts +11 -5
  157. package/package.json +31 -29
  158. package/paginator/Icons.d.ts +5 -5
  159. package/paginator/Icons.js +5 -19
  160. package/paginator/Paginator.js +17 -47
  161. package/paginator/Paginator.stories.tsx +24 -0
  162. package/paginator/Paginator.test.js +252 -225
  163. package/paginator/types.d.ts +3 -3
  164. package/paragraph/Paragraph.d.ts +3 -4
  165. package/paragraph/Paragraph.js +6 -22
  166. package/paragraph/Paragraph.stories.tsx +0 -17
  167. package/password-input/Icons.d.ts +6 -0
  168. package/password-input/Icons.js +35 -0
  169. package/password-input/PasswordInput.js +57 -126
  170. package/password-input/PasswordInput.stories.tsx +1 -33
  171. package/password-input/PasswordInput.test.js +158 -141
  172. package/password-input/types.d.ts +8 -7
  173. package/progress-bar/ProgressBar.d.ts +2 -2
  174. package/progress-bar/ProgressBar.js +23 -55
  175. package/progress-bar/{ProgressBar.stories.jsx → ProgressBar.stories.tsx} +36 -3
  176. package/progress-bar/ProgressBar.test.js +36 -53
  177. package/progress-bar/types.d.ts +4 -3
  178. package/quick-nav/QuickNav.js +4 -27
  179. package/quick-nav/QuickNav.stories.tsx +15 -1
  180. package/quick-nav/types.d.ts +10 -10
  181. package/radio-group/Radio.d.ts +1 -1
  182. package/radio-group/Radio.js +31 -63
  183. package/radio-group/RadioGroup.js +45 -93
  184. package/radio-group/RadioGroup.stories.tsx +131 -18
  185. package/radio-group/RadioGroup.test.js +505 -471
  186. package/radio-group/types.d.ts +8 -8
  187. package/resultset-table/Icons.d.ts +7 -0
  188. package/{resultsetTable → resultset-table}/Icons.js +1 -5
  189. package/resultset-table/ResultsetTable.d.ts +7 -0
  190. package/{resultsetTable → resultset-table}/ResultsetTable.js +38 -66
  191. package/{resultsetTable → resultset-table}/ResultsetTable.stories.tsx +86 -5
  192. package/{resultsetTable → resultset-table}/ResultsetTable.test.js +155 -114
  193. package/{resultsetTable → resultset-table}/types.d.ts +13 -7
  194. package/resultset-table/types.js +5 -0
  195. package/select/Icons.d.ts +7 -7
  196. package/select/Icons.js +1 -5
  197. package/select/Listbox.d.ts +1 -1
  198. package/select/Listbox.js +17 -72
  199. package/select/Option.js +19 -40
  200. package/select/Select.js +120 -175
  201. package/select/Select.stories.tsx +478 -190
  202. package/select/Select.test.js +1974 -1837
  203. package/select/types.d.ts +16 -17
  204. package/sidenav/Icons.d.ts +7 -0
  205. package/sidenav/Icons.js +47 -0
  206. package/sidenav/Sidenav.d.ts +2 -2
  207. package/sidenav/Sidenav.js +81 -151
  208. package/sidenav/Sidenav.stories.tsx +110 -17
  209. package/sidenav/Sidenav.test.js +3 -10
  210. package/sidenav/types.d.ts +31 -28
  211. package/slider/Slider.js +70 -128
  212. package/slider/Slider.test.js +108 -104
  213. package/slider/types.d.ts +4 -4
  214. package/spinner/Spinner.js +29 -73
  215. package/spinner/{Spinner.stories.jsx → Spinner.stories.tsx} +53 -27
  216. package/spinner/Spinner.test.js +26 -35
  217. package/spinner/types.d.ts +3 -3
  218. package/status-light/StatusLight.d.ts +4 -0
  219. package/status-light/StatusLight.js +51 -0
  220. package/status-light/StatusLight.stories.tsx +74 -0
  221. package/status-light/StatusLight.test.js +25 -0
  222. package/status-light/types.d.ts +17 -0
  223. package/status-light/types.js +5 -0
  224. package/switch/Switch.js +51 -99
  225. package/switch/Switch.stories.tsx +33 -34
  226. package/switch/Switch.test.js +52 -97
  227. package/switch/types.d.ts +4 -4
  228. package/table/ActionsCell.d.ts +4 -0
  229. package/table/ActionsCell.js +54 -0
  230. package/table/DropdownTheme.js +57 -0
  231. package/table/Table.d.ts +4 -1
  232. package/table/Table.js +27 -32
  233. package/table/Table.stories.tsx +615 -0
  234. package/table/Table.test.js +94 -7
  235. package/table/types.d.ts +45 -6
  236. package/tabs/Tab.js +23 -40
  237. package/tabs/Tabs.js +62 -145
  238. package/tabs/Tabs.stories.tsx +39 -1
  239. package/tabs/Tabs.test.js +66 -123
  240. package/tabs/types.d.ts +19 -19
  241. package/tag/Tag.js +28 -60
  242. package/tag/Tag.stories.tsx +14 -1
  243. package/tag/Tag.test.js +20 -31
  244. package/tag/types.d.ts +7 -7
  245. package/text-input/Icons.d.ts +5 -5
  246. package/text-input/Icons.js +1 -5
  247. package/text-input/Suggestion.js +11 -28
  248. package/text-input/Suggestions.d.ts +1 -1
  249. package/text-input/Suggestions.js +15 -65
  250. package/text-input/TextInput.js +219 -320
  251. package/text-input/TextInput.stories.tsx +117 -152
  252. package/text-input/TextInput.test.js +1211 -1196
  253. package/text-input/types.d.ts +25 -17
  254. package/textarea/Textarea.js +70 -113
  255. package/textarea/Textarea.stories.tsx +174 -0
  256. package/textarea/Textarea.test.js +152 -183
  257. package/textarea/types.d.ts +9 -5
  258. package/toggle-group/ToggleGroup.d.ts +2 -2
  259. package/toggle-group/ToggleGroup.js +92 -106
  260. package/toggle-group/ToggleGroup.stories.tsx +49 -4
  261. package/toggle-group/ToggleGroup.test.js +69 -88
  262. package/toggle-group/types.d.ts +26 -17
  263. package/typography/Typography.d.ts +2 -2
  264. package/typography/Typography.js +15 -123
  265. package/typography/Typography.stories.tsx +1 -1
  266. package/typography/types.d.ts +1 -1
  267. package/useTheme.d.ts +1135 -1
  268. package/useTheme.js +2 -9
  269. package/useTranslatedLabels.d.ts +84 -1
  270. package/useTranslatedLabels.js +1 -7
  271. package/utils/BaseTypography.d.ts +21 -0
  272. package/utils/BaseTypography.js +94 -0
  273. package/utils/FocusLock.d.ts +13 -0
  274. package/utils/FocusLock.js +124 -0
  275. package/wizard/Wizard.js +16 -51
  276. package/wizard/Wizard.stories.tsx +20 -0
  277. package/wizard/Wizard.test.js +54 -81
  278. package/wizard/types.d.ts +8 -9
  279. package/card/ice-cream.jpg +0 -0
  280. package/number-input/NumberInputContext.d.ts +0 -4
  281. package/number-input/NumberInputContext.js +0 -19
  282. package/number-input/numberInputContextTypes.d.ts +0 -19
  283. package/resultsetTable/Icons.d.ts +0 -7
  284. package/resultsetTable/ResultsetTable.d.ts +0 -4
  285. package/slider/Slider.stories.tsx +0 -183
  286. package/table/Table.stories.jsx +0 -277
  287. package/tabs-nav/Tab.js +0 -128
  288. package/textarea/Textarea.stories.jsx +0 -157
  289. /package/{resultsetTable → action-icon}/types.js +0 -0
  290. /package/{tabs-nav → container}/types.js +0 -0
  291. /package/{number-input/numberInputContextTypes.js → grid/types.js} +0 -0
  292. /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
@@ -4,8 +4,9 @@ import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
5
  import DxcSelect from "./Select";
6
6
  import Listbox from "./Listbox";
7
- import DxcButton from "../button/Button";
8
- import DxcCheckbox from "../checkbox/Checkbox";
7
+ import { ThemeProvider } from "styled-components";
8
+ import useTheme from "../useTheme";
9
+ import { HalstackProvider } from "../HalstackContext";
9
10
 
10
11
  export default {
11
12
  title: "Select",
@@ -13,12 +14,14 @@ export default {
13
14
  };
14
15
 
15
16
  const one_option = [{ label: "Option 01", value: "1" }];
17
+
16
18
  const single_options = [
17
19
  { label: "Option 01", value: "1" },
18
20
  { label: "Option 02", value: "2" },
19
21
  { label: "Option 03", value: "3" },
20
22
  { label: "Option 04", value: "4" },
21
23
  ];
24
+
22
25
  const group_options = [
23
26
  {
24
27
  label: "Group 001",
@@ -61,6 +64,7 @@ const group_options = [
61
64
  ],
62
65
  },
63
66
  ];
67
+
64
68
  const icon_options_grouped = [
65
69
  {
66
70
  label: "Group 001",
@@ -124,6 +128,7 @@ const icon_options_grouped = [
124
128
  ],
125
129
  },
126
130
  ];
131
+
127
132
  const icon_options = [
128
133
  {
129
134
  label: "3G Mobile",
@@ -172,6 +177,7 @@ const icon_options = [
172
177
  ),
173
178
  },
174
179
  ];
180
+
175
181
  const url_options = [
176
182
  {
177
183
  label: "Social Media",
@@ -182,9 +188,9 @@ const url_options = [
182
188
  icon: "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Instagram_logo_2016.svg/800px-Instagram_logo_2016.svg.png",
183
189
  },
184
190
  {
185
- label: "Twitter",
186
- value: "twitter",
187
- icon: "https://cdn.computerhoy.com/sites/navi.axelspringer.es/public/styles/480/public/media/image/2013/08/17981-logo-twitter.png?itok=dElA6iAV",
191
+ label: "X",
192
+ value: "x",
193
+ icon: "https://static.dezeen.com/uploads/2023/07/x-logo-twitter-elon-musk_dezeen_2364_col_0.jpg",
188
194
  },
189
195
  {
190
196
  label: "Facebook",
@@ -241,13 +247,22 @@ const url_options = [
241
247
  ],
242
248
  },
243
249
  ];
250
+
244
251
  const optionsWithEllipsisMedium = [
245
252
  { label: "Optiond1234567890123456789012345678901234", value: "1" },
246
253
  { label: "Optiond12345678901234567890123456789012345", value: "2" },
247
254
  { label: "Option 031111111111111111111111111111222", value: "3" },
248
- { label: "Option 03111111111111111111111111111222", value: "4" },
249
255
  ];
250
256
 
257
+ const opinionatedTheme = {
258
+ select: {
259
+ selectedOptionBackgroundColor: "#e6f4ff",
260
+ fontColor: "#000000",
261
+ optionFontColor: "#000000",
262
+ hoverBorderColor: "#a46ede",
263
+ },
264
+ };
265
+
251
266
  const Select = () => (
252
267
  <>
253
268
  <Title title="States" theme="light" level={2} />
@@ -360,200 +375,380 @@ const Select = () => (
360
375
  <Title title="Multiple selection with ellipsis" theme="light" level={4} />
361
376
  <DxcSelect label="Label" options={single_options} multiple defaultValue={["1", "2", "3", "4"]} />
362
377
  <Title title="Value with ellipsis" theme="light" level={4} />
363
- <DxcSelect label="Label" options={optionsWithEllipsisMedium} defaultValue="1" size="medium" />
378
+ <DxcSelect label="Label" options={optionsWithEllipsisMedium} defaultValue="1" />
364
379
  <Title title="Options with ellipsis" theme="light" level={4} />
365
380
  <DxcSelect
366
381
  label="Label"
367
382
  placeholder="Choose an option"
368
383
  defaultValue="1"
369
384
  options={optionsWithEllipsisMedium}
370
- size="medium"
371
- />
372
- </ExampleContainer>
373
- </>
374
- );
375
- const SelectListbox = () => (
376
- <>
377
- <Title title="Listbox" theme="light" level={2} />
378
- <ExampleContainer>
379
- <Title
380
- title="List dialog uses a Radix Popover to appear over elements with a certain z-index"
381
- theme="light"
382
- level={3}
383
- />
384
- <div
385
- style={{
386
- display: "flex",
387
- flexDirection: "column",
388
- gap: "20px",
389
- height: "150px",
390
- width: "min-content",
391
- marginBottom: "100px",
392
- padding: "20px",
393
- border: "1px solid black",
394
- borderRadius: "4px",
395
- overflow: "auto",
396
- zIndex: "1300",
397
- }}
398
- >
399
- <DxcSelect label="Label" options={single_options} optional placeholder="Choose an option" />
400
- <button style={{ zIndex: "1", width: "100px" }}>Submit</button>
401
- </div>
402
- </ExampleContainer>
403
- <Title title="Listbox option states" theme="light" level={3} />
404
- <ExampleContainer pseudoState="pseudo-hover">
405
- <Title title="Hovered option" theme="light" level={4} />
406
- <Listbox
407
- id="x"
408
- currentValue=""
409
- options={one_option}
410
- visualFocusIndex={-1}
411
- lastOptionIndex={0}
412
- multiple={false}
413
- optional={false}
414
- optionalItem={{ label: "Empty", value: "" }}
415
- searchable={false}
416
- handleOptionOnClick={() => {}}
417
- getSelectWidth={() => 360}
418
- />
419
- </ExampleContainer>
420
- <ExampleContainer pseudoState="pseudo-active">
421
- <Title title="Active option" theme="light" level={4} />
422
- <Listbox
423
- id="x"
424
- currentValue=""
425
- options={one_option}
426
- visualFocusIndex={-1}
427
- lastOptionIndex={0}
428
- multiple={false}
429
- optional={false}
430
- optionalItem={{ label: "Empty", value: "" }}
431
- searchable={false}
432
- handleOptionOnClick={() => {}}
433
- getSelectWidth={() => 360}
434
- />
435
- </ExampleContainer>
436
- <ExampleContainer>
437
- <Title title="Focused option" theme="light" level={4} />
438
- <Listbox
439
- id="x"
440
- currentValue=""
441
- options={one_option}
442
- visualFocusIndex={0}
443
- lastOptionIndex={0}
444
- multiple={false}
445
- optional={false}
446
- optionalItem={{ label: "Empty", value: "" }}
447
- searchable={false}
448
- handleOptionOnClick={() => {}}
449
- getSelectWidth={() => 360}
385
+ margin={{ top: "xxlarge" }}
450
386
  />
451
387
  </ExampleContainer>
388
+ <Title title="Opinionated theme" theme="light" level={2} />
452
389
  <ExampleContainer pseudoState="pseudo-hover">
453
- <Title title="Hovered selected option" theme="light" level={4} />
454
- <Listbox
455
- id="x"
456
- currentValue="1"
457
- options={single_options}
458
- visualFocusIndex={-1}
459
- lastOptionIndex={3}
460
- multiple={false}
461
- optional={false}
462
- optionalItem={{ label: "Empty", value: "" }}
463
- searchable={false}
464
- handleOptionOnClick={() => {}}
465
- getSelectWidth={() => 360}
466
- />
467
- </ExampleContainer>
468
- <ExampleContainer pseudoState="pseudo-active">
469
- <Title title="Active selected option" theme="light" level={4} />
470
- <Listbox
471
- id="x"
472
- currentValue="2"
473
- options={single_options}
474
- visualFocusIndex={0}
475
- lastOptionIndex={3}
476
- multiple={false}
477
- optional={false}
478
- optionalItem={{ label: "Empty", value: "" }}
479
- searchable={false}
480
- handleOptionOnClick={() => {}}
481
- getSelectWidth={() => 360}
482
- />
390
+ <Title title="Hovered" theme="light" level={4} />
391
+ <HalstackProvider theme={opinionatedTheme}>
392
+ <DxcSelect label="Hovered" options={single_options} />
393
+ </HalstackProvider>
483
394
  </ExampleContainer>
484
- <Title title="Listbox with icons" theme="light" level={3} />
485
- <ExampleContainer>
486
- <Title title="Icons (SVGs)" theme="light" level={4} />
487
- <Listbox
488
- id="x"
489
- currentValue="3"
490
- options={icon_options}
491
- visualFocusIndex={-1}
492
- lastOptionIndex={3}
493
- multiple={false}
494
- optional={false}
495
- optionalItem={{ label: "Empty", value: "" }}
496
- searchable={false}
497
- handleOptionOnClick={() => {}}
498
- getSelectWidth={() => 360}
499
- />
395
+ <ExampleContainer pseudoState="pseudo-focus-within">
396
+ <Title title="Focused" theme="light" level={4} />
397
+ <HalstackProvider theme={opinionatedTheme}>
398
+ <DxcSelect label="Focused" options={single_options} />
399
+ </HalstackProvider>
500
400
  </ExampleContainer>
501
401
  <ExampleContainer>
502
- <Title title="Icons (Images)" theme="light" level={4} />
503
- <Listbox
504
- id="x"
505
- currentValue="facebook"
506
- options={url_options}
507
- visualFocusIndex={-1}
508
- lastOptionIndex={6}
509
- multiple={false}
510
- optional={false}
511
- optionalItem={{ label: "Empty", value: "" }}
512
- searchable={false}
513
- handleOptionOnClick={() => {}}
514
- getSelectWidth={() => 360}
515
- />
402
+ <Title title="Disabled" theme="light" level={4} />
403
+ <HalstackProvider theme={opinionatedTheme}>
404
+ <DxcSelect label="Disabled" placeholder="Placeholder" disabled options={single_options} />
405
+ </HalstackProvider>
516
406
  </ExampleContainer>
517
407
  <ExampleContainer>
518
- <Title title="Grouped icons (SVGs)" theme="light" level={4} />
519
- <Listbox
520
- id="x"
521
- currentValue={["0", "3"]}
522
- options={icon_options_grouped}
523
- visualFocusIndex={-1}
524
- lastOptionIndex={3}
525
- multiple={false}
526
- optional={false}
527
- optionalItem={{ label: "Empty", value: "" }}
528
- searchable={false}
529
- handleOptionOnClick={() => {}}
530
- getSelectWidth={() => 360}
531
- />
408
+ <Title title="Disabled with value" theme="light" level={4} />
409
+ <HalstackProvider theme={opinionatedTheme}>
410
+ <DxcSelect label="Disabled with value" disabled options={single_options} defaultValue="1" />
411
+ </HalstackProvider>
532
412
  </ExampleContainer>
533
413
  <ExampleContainer>
534
- <Title title="Grouped icons (Images)" theme="light" level={4} />
535
- <Listbox
536
- id="x"
537
- currentValue={["facebook", "figma"]}
538
- options={url_options}
539
- visualFocusIndex={-1}
540
- lastOptionIndex={6}
541
- multiple={true}
542
- optional={false}
543
- optionalItem={{ label: "Empty", value: "" }}
544
- searchable={false}
545
- handleOptionOnClick={() => {}}
546
- getSelectWidth={() => 360}
547
- />
414
+ <Title title="Error" theme="light" level={4} />
415
+ <HalstackProvider theme={opinionatedTheme}>
416
+ <DxcSelect
417
+ label="Label"
418
+ options={single_options}
419
+ error="Error message."
420
+ helperText="Helper text"
421
+ placeholder="Placeholder"
422
+ />
423
+ <ExampleContainer>
424
+ <Title title="Multiple selection" theme="light" level={4} />
425
+ <DxcSelect label="Multiple select" searchable options={single_options} multiple defaultValue={["1", "2"]} />
426
+ </ExampleContainer>
427
+ <ExampleContainer pseudoState="pseudo-hover">
428
+ <Title title="Multiple clear hovered" theme="light" level={4} />
429
+ <DxcSelect label="Multiple select" options={single_options} multiple defaultValue={["1", "2"]} />
430
+ </ExampleContainer>
431
+ <ExampleContainer pseudoState="pseudo-active">
432
+ <Title title="Multiple clear actived" theme="light" level={4} />
433
+ <DxcSelect label="Multiple select" options={single_options} multiple defaultValue={["1", "2"]} />
434
+ </ExampleContainer>
435
+ </HalstackProvider>
548
436
  </ExampleContainer>
549
437
  </>
550
438
  );
439
+
440
+ const SelectListbox = () => {
441
+ const colorsTheme: any = useTheme();
442
+
443
+ return (
444
+ <>
445
+ <ThemeProvider theme={colorsTheme.select}>
446
+ <Title title="Listbox" theme="light" level={2} />
447
+ <ExampleContainer>
448
+ <Title
449
+ title="List dialog uses a Radix Popover to appear over elements with a certain z-index"
450
+ theme="light"
451
+ level={3}
452
+ />
453
+ <div
454
+ style={{
455
+ position: "relative",
456
+ display: "flex",
457
+ flexDirection: "column",
458
+ gap: "20px",
459
+ height: "150px",
460
+ width: "min-content",
461
+ marginBottom: "100px",
462
+ padding: "20px",
463
+ border: "1px solid black",
464
+ borderRadius: "4px",
465
+ overflow: "auto",
466
+ zIndex: "1300",
467
+ }}
468
+ >
469
+ <DxcSelect label="Label" options={single_options} optional placeholder="Choose an option" />
470
+ <button style={{ zIndex: "1", width: "100px" }}>Submit</button>
471
+ </div>
472
+ </ExampleContainer>
473
+ <Title title="Listbox option states" theme="light" level={3} />
474
+ <ExampleContainer pseudoState="pseudo-hover">
475
+ <Title title="Hovered option" theme="light" level={4} />
476
+ <Listbox
477
+ id="x"
478
+ currentValue=""
479
+ options={one_option}
480
+ visualFocusIndex={-1}
481
+ lastOptionIndex={0}
482
+ multiple={false}
483
+ optional={false}
484
+ optionalItem={{ label: "Empty", value: "" }}
485
+ searchable={false}
486
+ handleOptionOnClick={() => {}}
487
+ styles={{ width: 360 }}
488
+ />
489
+ </ExampleContainer>
490
+ <ExampleContainer pseudoState="pseudo-active">
491
+ <Title title="Active option" theme="light" level={4} />
492
+ <Listbox
493
+ id="x"
494
+ currentValue=""
495
+ options={one_option}
496
+ visualFocusIndex={-1}
497
+ lastOptionIndex={0}
498
+ multiple={false}
499
+ optional={false}
500
+ optionalItem={{ label: "Empty", value: "" }}
501
+ searchable={false}
502
+ handleOptionOnClick={() => {}}
503
+ styles={{ width: 360 }}
504
+ />
505
+ </ExampleContainer>
506
+ <ExampleContainer>
507
+ <Title title="Focused option" theme="light" level={4} />
508
+ <Listbox
509
+ id="x"
510
+ currentValue=""
511
+ options={one_option}
512
+ visualFocusIndex={0}
513
+ lastOptionIndex={0}
514
+ multiple={false}
515
+ optional={false}
516
+ optionalItem={{ label: "Empty", value: "" }}
517
+ searchable={false}
518
+ handleOptionOnClick={() => {}}
519
+ styles={{ width: 360 }}
520
+ />
521
+ </ExampleContainer>
522
+ <ExampleContainer pseudoState="pseudo-hover">
523
+ <Title title="Hovered selected option" theme="light" level={4} />
524
+ <Listbox
525
+ id="x"
526
+ currentValue="1"
527
+ options={single_options}
528
+ visualFocusIndex={-1}
529
+ lastOptionIndex={3}
530
+ multiple={false}
531
+ optional={false}
532
+ optionalItem={{ label: "Empty", value: "" }}
533
+ searchable={false}
534
+ handleOptionOnClick={() => {}}
535
+ styles={{ width: 360 }}
536
+ />
537
+ </ExampleContainer>
538
+ <ExampleContainer pseudoState="pseudo-active">
539
+ <Title title="Active selected option" theme="light" level={4} />
540
+ <Listbox
541
+ id="x"
542
+ currentValue="2"
543
+ options={single_options}
544
+ visualFocusIndex={0}
545
+ lastOptionIndex={3}
546
+ multiple={false}
547
+ optional={false}
548
+ optionalItem={{ label: "Empty", value: "" }}
549
+ searchable={false}
550
+ handleOptionOnClick={() => {}}
551
+ styles={{ width: 360 }}
552
+ />
553
+ </ExampleContainer>
554
+ <Title title="Listbox with icons" theme="light" level={3} />
555
+ <ExampleContainer>
556
+ <Title title="Icons (SVGs)" theme="light" level={4} />
557
+ <Listbox
558
+ id="x"
559
+ currentValue="3"
560
+ options={icon_options}
561
+ visualFocusIndex={-1}
562
+ lastOptionIndex={3}
563
+ multiple={false}
564
+ optional={false}
565
+ optionalItem={{ label: "Empty", value: "" }}
566
+ searchable={false}
567
+ handleOptionOnClick={() => {}}
568
+ styles={{ width: 360 }}
569
+ />
570
+ </ExampleContainer>
571
+ <ExampleContainer>
572
+ <Title title="Icons (Images)" theme="light" level={4} />
573
+ <Listbox
574
+ id="x"
575
+ currentValue="facebook"
576
+ options={url_options}
577
+ visualFocusIndex={-1}
578
+ lastOptionIndex={6}
579
+ multiple={false}
580
+ optional={false}
581
+ optionalItem={{ label: "Empty", value: "" }}
582
+ searchable={false}
583
+ handleOptionOnClick={() => {}}
584
+ styles={{ width: 360 }}
585
+ />
586
+ </ExampleContainer>
587
+ <ExampleContainer>
588
+ <Title title="Grouped icons (SVGs)" theme="light" level={4} />
589
+ <Listbox
590
+ id="x"
591
+ currentValue={["0", "3"]}
592
+ options={icon_options_grouped}
593
+ visualFocusIndex={-1}
594
+ lastOptionIndex={3}
595
+ multiple={false}
596
+ optional={false}
597
+ optionalItem={{ label: "Empty", value: "" }}
598
+ searchable={false}
599
+ handleOptionOnClick={() => {}}
600
+ styles={{ width: 360 }}
601
+ />
602
+ </ExampleContainer>
603
+ <ExampleContainer>
604
+ <Title title="Grouped icons (Images)" theme="light" level={4} />
605
+ <Listbox
606
+ id="x"
607
+ currentValue={["facebook", "figma"]}
608
+ options={url_options}
609
+ visualFocusIndex={-1}
610
+ lastOptionIndex={6}
611
+ multiple={true}
612
+ optional={false}
613
+ optionalItem={{ label: "Empty", value: "" }}
614
+ searchable={false}
615
+ handleOptionOnClick={() => {}}
616
+ styles={{ width: 360 }}
617
+ />
618
+ </ExampleContainer>
619
+ </ThemeProvider>
620
+ <ThemeProvider theme={colorsTheme.select}>
621
+ <Title title="Opinionated theme" theme="light" level={2} />
622
+ <ExampleContainer pseudoState="pseudo-hover">
623
+ <Title title="Hovered option" theme="light" level={4} />
624
+ <HalstackProvider theme={opinionatedTheme}>
625
+ <Listbox
626
+ id="x"
627
+ currentValue=""
628
+ options={one_option}
629
+ visualFocusIndex={-1}
630
+ lastOptionIndex={0}
631
+ multiple={false}
632
+ optional={false}
633
+ optionalItem={{ label: "Empty", value: "" }}
634
+ searchable={false}
635
+ handleOptionOnClick={() => {}}
636
+ styles={{ width: 360 }}
637
+ />
638
+ </HalstackProvider>
639
+ </ExampleContainer>
640
+ <ExampleContainer pseudoState="pseudo-active">
641
+ <Title title="Active option" theme="light" level={4} />{" "}
642
+ <HalstackProvider theme={opinionatedTheme}>
643
+ <Listbox
644
+ id="x"
645
+ currentValue=""
646
+ options={one_option}
647
+ visualFocusIndex={-1}
648
+ lastOptionIndex={0}
649
+ multiple={false}
650
+ optional={false}
651
+ optionalItem={{ label: "Empty", value: "" }}
652
+ searchable={false}
653
+ handleOptionOnClick={() => {}}
654
+ styles={{ width: 360 }}
655
+ />
656
+ </HalstackProvider>
657
+ </ExampleContainer>
658
+ <ExampleContainer>
659
+ <Title title="Focused option" theme="light" level={4} />{" "}
660
+ <HalstackProvider theme={opinionatedTheme}>
661
+ <Listbox
662
+ id="x"
663
+ currentValue=""
664
+ options={one_option}
665
+ visualFocusIndex={0}
666
+ lastOptionIndex={0}
667
+ multiple={false}
668
+ optional={false}
669
+ optionalItem={{ label: "Empty", value: "" }}
670
+ searchable={false}
671
+ handleOptionOnClick={() => {}}
672
+ styles={{ width: 360 }}
673
+ />
674
+ </HalstackProvider>
675
+ </ExampleContainer>
676
+ <ExampleContainer pseudoState="pseudo-hover">
677
+ <Title title="Hovered selected option" theme="light" level={4} />{" "}
678
+ <HalstackProvider theme={opinionatedTheme}>
679
+ <Listbox
680
+ id="x"
681
+ currentValue="1"
682
+ options={single_options}
683
+ visualFocusIndex={-1}
684
+ lastOptionIndex={3}
685
+ multiple={false}
686
+ optional={false}
687
+ optionalItem={{ label: "Empty", value: "" }}
688
+ searchable={false}
689
+ handleOptionOnClick={() => {}}
690
+ styles={{ width: 360 }}
691
+ />
692
+ </HalstackProvider>
693
+ </ExampleContainer>
694
+ <ExampleContainer pseudoState="pseudo-active">
695
+ <Title title="Active selected option" theme="light" level={4} />{" "}
696
+ <HalstackProvider theme={opinionatedTheme}>
697
+ <Listbox
698
+ id="x"
699
+ currentValue="2"
700
+ options={single_options}
701
+ visualFocusIndex={0}
702
+ lastOptionIndex={3}
703
+ multiple={false}
704
+ optional={false}
705
+ optionalItem={{ label: "Empty", value: "" }}
706
+ searchable={false}
707
+ handleOptionOnClick={() => {}}
708
+ styles={{ width: 360 }}
709
+ />
710
+ </HalstackProvider>
711
+ </ExampleContainer>
712
+ <Title title="Listbox with icons" theme="light" level={3} />
713
+ <ExampleContainer>
714
+ <Title title="Icons (SVGs)" theme="light" level={4} />{" "}
715
+ <HalstackProvider theme={opinionatedTheme}>
716
+ <Listbox
717
+ id="x"
718
+ currentValue="3"
719
+ options={icon_options}
720
+ visualFocusIndex={-1}
721
+ lastOptionIndex={3}
722
+ multiple={false}
723
+ optional={false}
724
+ optionalItem={{ label: "Empty", value: "" }}
725
+ searchable={false}
726
+ handleOptionOnClick={() => {}}
727
+ styles={{ width: 360 }}
728
+ />
729
+ </HalstackProvider>
730
+ </ExampleContainer>
731
+ </ThemeProvider>
732
+ </>
733
+ );
734
+ };
735
+
551
736
  const SearchableSelect = () => (
552
737
  <ExampleContainer expanded>
553
738
  <Title title="Searchable select" theme="light" level={4} />
554
739
  <DxcSelect label="Select Label" searchable options={single_options} placeholder="Choose an option" />
555
740
  </ExampleContainer>
556
741
  );
742
+
743
+ const SearchableSelectOpinionated = () => (
744
+ <ExampleContainer expanded>
745
+ <Title title="Searchable select" theme="light" level={4} />
746
+ <HalstackProvider theme={opinionatedTheme}>
747
+ <DxcSelect label="Select Label" searchable options={single_options} placeholder="Choose an option" />
748
+ </HalstackProvider>
749
+ </ExampleContainer>
750
+ );
751
+
557
752
  const SearchValue = () => (
558
753
  <ExampleContainer expanded>
559
754
  <Title title="Searchable select with value" theme="light" level={4} />
@@ -566,6 +761,22 @@ const SearchValue = () => (
566
761
  />
567
762
  </ExampleContainer>
568
763
  );
764
+
765
+ const SearchValueOpinionated = () => (
766
+ <ExampleContainer expanded>
767
+ <Title title="Searchable select with value" theme="light" level={4} />
768
+ <HalstackProvider theme={opinionatedTheme}>
769
+ <DxcSelect
770
+ label="Select Label"
771
+ searchable
772
+ defaultValue="1"
773
+ options={single_options}
774
+ placeholder="Choose an option"
775
+ />
776
+ </HalstackProvider>
777
+ </ExampleContainer>
778
+ );
779
+
569
780
  const MultipleSelect = () => (
570
781
  <>
571
782
  <ExampleContainer expanded>
@@ -580,12 +791,38 @@ const MultipleSelect = () => (
580
791
  </ExampleContainer>
581
792
  </>
582
793
  );
794
+
795
+ const MultipleSelectOpinioated = () => (
796
+ <ExampleContainer expanded>
797
+ <Title title="Multiple select" theme="light" level={4} />
798
+ <HalstackProvider theme={opinionatedTheme}>
799
+ <DxcSelect
800
+ label="Select label"
801
+ options={single_options}
802
+ defaultValue={["1", "4"]}
803
+ multiple
804
+ placeholder="Choose an option"
805
+ />
806
+ </HalstackProvider>
807
+ </ExampleContainer>
808
+ );
809
+
583
810
  const DefaultGroupedOptionsSelect = () => (
584
811
  <ExampleContainer expanded>
585
812
  <Title title="Grouped options simple select" theme="light" level={4} />
586
813
  <DxcSelect label="Label" options={group_options} defaultValue="9" placeholder="Choose an option" />
587
814
  </ExampleContainer>
588
815
  );
816
+
817
+ const DefaultGroupedOptionsSelectOpinionated = () => (
818
+ <ExampleContainer expanded>
819
+ <Title title="Grouped options simple select" theme="light" level={4} />
820
+ <HalstackProvider theme={opinionatedTheme}>
821
+ <DxcSelect label="Label" options={group_options} defaultValue="9" placeholder="Choose an option" />
822
+ </HalstackProvider>
823
+ </ExampleContainer>
824
+ );
825
+
589
826
  const MultipleGroupedOptionsSelect = () => (
590
827
  <ExampleContainer expanded>
591
828
  <Title title="Grouped options multiple select" theme="light" level={4} />
@@ -598,22 +835,19 @@ const MultipleGroupedOptionsSelect = () => (
598
835
  />
599
836
  </ExampleContainer>
600
837
  );
601
- const SelectMultipleWithIcons = () => (
602
- <ExampleContainer expanded>
603
- <Title title="Multiple select with icons" theme="light" level={4} />
604
- <DxcSelect label="Label" options={icon_options} multiple defaultValue={["1", "3"]} placeholder="Choose an option" />
605
- </ExampleContainer>
606
- );
607
- const MultipleGroupedOptionsSelectWithIcons = () => (
838
+
839
+ const MultipleGroupedOptionsSelectOpinionated = () => (
608
840
  <ExampleContainer expanded>
609
- <Title title="Multiple grouped options with icons" theme="light" level={4} />
610
- <DxcSelect
611
- label="Label"
612
- options={icon_options_grouped}
613
- multiple
614
- defaultValue={["3", "2"]}
615
- placeholder="Choose an option"
616
- />
841
+ <Title title="Grouped options multiple select" theme="light" level={4} />
842
+ <HalstackProvider theme={opinionatedTheme}>
843
+ <DxcSelect
844
+ label="Label"
845
+ options={group_options}
846
+ defaultValue={["0", "2"]}
847
+ multiple
848
+ placeholder="Choose an option"
849
+ />
850
+ </HalstackProvider>
617
851
  </ExampleContainer>
618
852
  );
619
853
 
@@ -631,6 +865,22 @@ const MultipleSearchable = () => (
631
865
  </ExampleContainer>
632
866
  );
633
867
 
868
+ const MultipleSearchableOpinionated = () => (
869
+ <ExampleContainer expanded>
870
+ <Title title="Searchable multiple select with value" theme="light" level={4} />
871
+ <HalstackProvider theme={opinionatedTheme}>
872
+ <DxcSelect
873
+ label="Select Label"
874
+ searchable
875
+ multiple
876
+ defaultValue={["1", "4"]}
877
+ options={single_options}
878
+ placeholder="Choose an option"
879
+ />
880
+ </HalstackProvider>
881
+ </ExampleContainer>
882
+ );
883
+
634
884
  export const Chromatic = Select.bind({});
635
885
  Chromatic.play = async ({ canvasElement }) => {
636
886
  const canvas = within(canvasElement);
@@ -650,18 +900,36 @@ Searchable.play = async ({ canvasElement }) => {
650
900
  await userEvent.type(canvas.getByRole("combobox"), "r");
651
901
  };
652
902
 
903
+ export const SearchableOpinionated = SearchableSelectOpinionated.bind({});
904
+ SearchableOpinionated.play = async ({ canvasElement }) => {
905
+ const canvas = within(canvasElement);
906
+ await userEvent.type(canvas.getByRole("combobox"), "r");
907
+ };
908
+
653
909
  export const SearchableWithValue = SearchValue.bind({});
654
910
  SearchableWithValue.play = async ({ canvasElement }) => {
655
911
  const canvas = within(canvasElement);
656
912
  await userEvent.click(canvas.getByRole("combobox"));
657
913
  };
658
914
 
915
+ export const SearchableWithValueOpinionated = SearchValueOpinionated.bind({});
916
+ SearchableWithValueOpinionated.play = async ({ canvasElement }) => {
917
+ const canvas = within(canvasElement);
918
+ await userEvent.click(canvas.getByRole("combobox"));
919
+ };
920
+
659
921
  export const MultipleSearchableWithValue = MultipleSearchable.bind({});
660
922
  MultipleSearchableWithValue.play = async ({ canvasElement }) => {
661
923
  const canvas = within(canvasElement);
662
924
  await userEvent.click(canvas.getAllByRole("combobox")[0]);
663
925
  };
664
926
 
927
+ export const MultipleSearchableWithValueOpinionated = MultipleSearchableOpinionated.bind({});
928
+ MultipleSearchableWithValueOpinionated.play = async ({ canvasElement }) => {
929
+ const canvas = within(canvasElement);
930
+ await userEvent.click(canvas.getAllByRole("combobox")[0]);
931
+ };
932
+
665
933
  export const GroupOptionsDisplayed = DefaultGroupedOptionsSelect.bind({});
666
934
  GroupOptionsDisplayed.play = async ({ canvasElement }) => {
667
935
  const canvas = within(canvasElement);
@@ -669,15 +937,35 @@ GroupOptionsDisplayed.play = async ({ canvasElement }) => {
669
937
  await userEvent.click(select);
670
938
  };
671
939
 
940
+ export const GroupOptionsDisplayedOpinionated = DefaultGroupedOptionsSelectOpinionated.bind({});
941
+ GroupOptionsDisplayedOpinionated.play = async ({ canvasElement }) => {
942
+ const canvas = within(canvasElement);
943
+ const select = canvas.getByRole("combobox");
944
+ await userEvent.click(select);
945
+ };
946
+
672
947
  export const MultipleOptionsDisplayed = MultipleSelect.bind({});
673
948
  MultipleOptionsDisplayed.play = async ({ canvasElement }) => {
674
949
  const canvas = within(canvasElement);
675
950
  await userEvent.click(canvas.getAllByRole("combobox")[0]);
676
951
  };
677
952
 
953
+ export const MultipleOptionsDisplayedOpinionated = MultipleSelectOpinioated.bind({});
954
+ MultipleOptionsDisplayedOpinionated.play = async ({ canvasElement }) => {
955
+ const canvas = within(canvasElement);
956
+ await userEvent.click(canvas.getAllByRole("combobox")[0]);
957
+ };
958
+
678
959
  export const MultipleGroupedOptionsDisplayed = MultipleGroupedOptionsSelect.bind({});
679
960
  MultipleGroupedOptionsDisplayed.play = async ({ canvasElement }) => {
680
961
  const canvas = within(canvasElement);
681
962
  const select = canvas.getByRole("combobox");
682
963
  await userEvent.click(select);
683
964
  };
965
+
966
+ export const MultipleGroupedOptionsDisplayedOpinionated = MultipleGroupedOptionsSelectOpinionated.bind({});
967
+ MultipleGroupedOptionsDisplayedOpinionated.play = async ({ canvasElement }) => {
968
+ const canvas = within(canvasElement);
969
+ const select = canvas.getByRole("combobox");
970
+ await userEvent.click(select);
971
+ };