@dxc-technology/halstack-react 0.0.0-38c90fa → 0.0.0-397893c

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 (353) hide show
  1. package/BackgroundColorContext.d.ts +1 -10
  2. package/BackgroundColorContext.js +5 -22
  3. package/HalstackContext.d.ts +1235 -0
  4. package/HalstackContext.js +310 -0
  5. package/README.md +47 -0
  6. package/accordion/Accordion.d.ts +1 -1
  7. package/accordion/Accordion.js +117 -193
  8. package/accordion/Accordion.stories.tsx +103 -127
  9. package/accordion/Accordion.test.js +56 -0
  10. package/accordion/types.d.ts +11 -22
  11. package/accordion-group/AccordionGroup.d.ts +5 -4
  12. package/accordion-group/AccordionGroup.js +38 -107
  13. package/accordion-group/AccordionGroup.stories.tsx +95 -68
  14. package/accordion-group/AccordionGroup.test.js +98 -0
  15. package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
  16. package/accordion-group/AccordionGroupAccordion.js +31 -0
  17. package/accordion-group/types.d.ts +17 -22
  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 +23 -59
  24. package/alert/Alert.stories.tsx +28 -0
  25. package/alert/Alert.test.js +75 -0
  26. package/alert/types.d.ts +5 -5
  27. package/badge/Badge.d.ts +4 -0
  28. package/badge/Badge.js +8 -19
  29. package/badge/types.d.ts +5 -0
  30. package/bleed/Bleed.js +14 -55
  31. package/bleed/Bleed.stories.tsx +95 -95
  32. package/bleed/types.d.ts +26 -2
  33. package/box/Box.d.ts +1 -1
  34. package/box/Box.js +30 -81
  35. package/box/Box.stories.tsx +38 -51
  36. package/box/Box.test.js +13 -0
  37. package/box/types.d.ts +3 -14
  38. package/bulleted-list/BulletedList.d.ts +7 -0
  39. package/bulleted-list/BulletedList.js +89 -0
  40. package/bulleted-list/BulletedList.stories.tsx +115 -0
  41. package/bulleted-list/types.d.ts +38 -0
  42. package/button/Button.d.ts +1 -1
  43. package/button/Button.js +62 -113
  44. package/button/Button.stories.tsx +160 -90
  45. package/button/Button.test.js +38 -0
  46. package/button/types.d.ts +12 -8
  47. package/card/Card.d.ts +1 -1
  48. package/card/Card.js +58 -102
  49. package/card/Card.stories.tsx +12 -42
  50. package/card/Card.test.js +39 -0
  51. package/card/types.d.ts +6 -11
  52. package/checkbox/Checkbox.d.ts +2 -2
  53. package/checkbox/Checkbox.js +144 -182
  54. package/checkbox/Checkbox.stories.tsx +166 -136
  55. package/checkbox/Checkbox.test.js +199 -0
  56. package/checkbox/types.d.ts +18 -6
  57. package/chip/Chip.d.ts +1 -1
  58. package/chip/Chip.js +46 -124
  59. package/chip/Chip.stories.tsx +123 -30
  60. package/chip/Chip.test.js +41 -0
  61. package/chip/types.d.ts +8 -16
  62. package/common/OpenSans.css +68 -80
  63. package/common/coreTokens.d.ts +237 -0
  64. package/common/coreTokens.js +184 -0
  65. package/common/utils.d.ts +1 -0
  66. package/common/utils.js +6 -12
  67. package/common/variables.d.ts +1381 -0
  68. package/common/variables.js +1002 -1361
  69. package/container/Container.d.ts +4 -0
  70. package/container/Container.js +194 -0
  71. package/container/Container.stories.tsx +214 -0
  72. package/container/types.d.ts +74 -0
  73. package/date-input/Calendar.d.ts +4 -0
  74. package/date-input/Calendar.js +214 -0
  75. package/date-input/DateInput.js +171 -306
  76. package/date-input/DateInput.stories.tsx +203 -56
  77. package/date-input/DateInput.test.js +808 -0
  78. package/date-input/DatePicker.d.ts +4 -0
  79. package/date-input/DatePicker.js +115 -0
  80. package/date-input/Icons.d.ts +6 -0
  81. package/date-input/Icons.js +58 -0
  82. package/date-input/YearPicker.d.ts +4 -0
  83. package/date-input/YearPicker.js +100 -0
  84. package/date-input/types.d.ts +86 -22
  85. package/dialog/Dialog.d.ts +1 -1
  86. package/dialog/Dialog.js +68 -130
  87. package/dialog/Dialog.stories.tsx +320 -167
  88. package/dialog/Dialog.test.js +307 -0
  89. package/dialog/types.d.ts +18 -25
  90. package/dropdown/Dropdown.d.ts +1 -1
  91. package/dropdown/Dropdown.js +244 -327
  92. package/dropdown/Dropdown.stories.tsx +255 -64
  93. package/dropdown/Dropdown.test.js +599 -0
  94. package/dropdown/DropdownMenu.d.ts +4 -0
  95. package/dropdown/DropdownMenu.js +63 -0
  96. package/dropdown/DropdownMenuItem.d.ts +4 -0
  97. package/dropdown/DropdownMenuItem.js +67 -0
  98. package/dropdown/types.d.ts +36 -27
  99. package/file-input/FileInput.d.ts +2 -2
  100. package/file-input/FileInput.js +246 -357
  101. package/file-input/FileInput.stories.tsx +123 -12
  102. package/file-input/FileInput.test.js +459 -0
  103. package/file-input/FileItem.d.ts +4 -14
  104. package/file-input/FileItem.js +50 -99
  105. package/file-input/types.d.ts +25 -8
  106. package/flex/Flex.d.ts +4 -0
  107. package/flex/Flex.js +57 -0
  108. package/flex/Flex.stories.tsx +112 -0
  109. package/flex/types.d.ts +97 -0
  110. package/footer/Footer.d.ts +1 -1
  111. package/footer/Footer.js +70 -190
  112. package/footer/Footer.stories.tsx +60 -19
  113. package/footer/Footer.test.js +85 -0
  114. package/footer/Icons.d.ts +3 -2
  115. package/footer/Icons.js +67 -8
  116. package/footer/types.d.ts +25 -26
  117. package/grid/Grid.d.ts +7 -0
  118. package/grid/Grid.js +76 -0
  119. package/grid/Grid.stories.tsx +219 -0
  120. package/grid/types.d.ts +115 -0
  121. package/header/Header.d.ts +4 -3
  122. package/header/Header.js +99 -203
  123. package/header/Header.stories.tsx +152 -63
  124. package/header/Header.test.js +66 -0
  125. package/header/Icons.d.ts +2 -2
  126. package/header/Icons.js +4 -9
  127. package/header/types.d.ts +5 -19
  128. package/heading/Heading.js +10 -32
  129. package/heading/Heading.test.js +169 -0
  130. package/heading/types.d.ts +7 -7
  131. package/image/Image.d.ts +4 -0
  132. package/image/Image.js +70 -0
  133. package/image/Image.stories.tsx +127 -0
  134. package/image/types.d.ts +72 -0
  135. package/image/types.js +5 -0
  136. package/inset/Inset.js +14 -55
  137. package/inset/Inset.stories.tsx +37 -36
  138. package/inset/types.d.ts +26 -2
  139. package/layout/ApplicationLayout.d.ts +16 -6
  140. package/layout/ApplicationLayout.js +83 -174
  141. package/layout/ApplicationLayout.stories.tsx +85 -94
  142. package/layout/Icons.d.ts +8 -0
  143. package/layout/Icons.js +51 -48
  144. package/layout/SidenavContext.d.ts +5 -0
  145. package/layout/SidenavContext.js +13 -0
  146. package/layout/types.d.ts +19 -35
  147. package/link/Link.d.ts +3 -2
  148. package/link/Link.js +64 -110
  149. package/link/Link.stories.tsx +159 -52
  150. package/link/Link.test.js +63 -0
  151. package/link/types.d.ts +15 -35
  152. package/main.d.ts +16 -17
  153. package/main.js +67 -119
  154. package/nav-tabs/NavTabs.d.ts +8 -0
  155. package/nav-tabs/NavTabs.js +93 -0
  156. package/nav-tabs/NavTabs.stories.tsx +274 -0
  157. package/nav-tabs/NavTabs.test.js +75 -0
  158. package/nav-tabs/Tab.d.ts +4 -0
  159. package/nav-tabs/Tab.js +117 -0
  160. package/nav-tabs/types.d.ts +52 -0
  161. package/nav-tabs/types.js +5 -0
  162. package/number-input/NumberInput.d.ts +7 -0
  163. package/number-input/NumberInput.js +27 -43
  164. package/number-input/NumberInput.stories.tsx +44 -28
  165. package/number-input/NumberInput.test.js +830 -0
  166. package/number-input/types.d.ts +28 -15
  167. package/package.json +46 -47
  168. package/paginator/Icons.d.ts +5 -0
  169. package/paginator/Icons.js +21 -47
  170. package/paginator/Paginator.js +34 -91
  171. package/paginator/Paginator.stories.tsx +24 -0
  172. package/paginator/Paginator.test.js +335 -0
  173. package/paginator/types.d.ts +3 -3
  174. package/paragraph/Paragraph.d.ts +5 -0
  175. package/paragraph/Paragraph.js +22 -0
  176. package/paragraph/Paragraph.stories.tsx +27 -0
  177. package/password-input/Icons.d.ts +6 -0
  178. package/password-input/Icons.js +35 -0
  179. package/password-input/PasswordInput.js +57 -123
  180. package/password-input/PasswordInput.stories.tsx +1 -33
  181. package/password-input/PasswordInput.test.js +198 -0
  182. package/password-input/types.d.ts +21 -17
  183. package/progress-bar/ProgressBar.js +65 -91
  184. package/progress-bar/ProgressBar.stories.tsx +93 -0
  185. package/progress-bar/ProgressBar.test.js +93 -0
  186. package/progress-bar/types.d.ts +3 -3
  187. package/quick-nav/QuickNav.d.ts +4 -0
  188. package/quick-nav/QuickNav.js +94 -0
  189. package/quick-nav/QuickNav.stories.tsx +356 -0
  190. package/quick-nav/types.d.ts +21 -0
  191. package/quick-nav/types.js +5 -0
  192. package/radio-group/Radio.d.ts +1 -1
  193. package/radio-group/Radio.js +64 -80
  194. package/radio-group/RadioGroup.js +101 -139
  195. package/radio-group/RadioGroup.stories.tsx +171 -36
  196. package/radio-group/RadioGroup.test.js +691 -183
  197. package/radio-group/types.d.ts +89 -11
  198. package/resultset-table/Icons.d.ts +7 -0
  199. package/resultset-table/Icons.js +47 -0
  200. package/resultset-table/ResultsetTable.js +159 -0
  201. package/{resultsetTable → resultset-table}/ResultsetTable.stories.tsx +50 -25
  202. package/resultset-table/ResultsetTable.test.js +305 -0
  203. package/{resultsetTable → resultset-table}/types.d.ts +7 -7
  204. package/resultset-table/types.js +5 -0
  205. package/select/Icons.d.ts +10 -0
  206. package/select/Icons.js +89 -0
  207. package/select/Listbox.d.ts +4 -0
  208. package/select/Listbox.js +143 -0
  209. package/select/Option.d.ts +4 -0
  210. package/select/Option.js +87 -0
  211. package/select/Select.js +229 -502
  212. package/select/Select.stories.tsx +603 -204
  213. package/select/Select.test.js +2370 -0
  214. package/select/types.d.ts +64 -25
  215. package/sidenav/Icons.d.ts +7 -0
  216. package/sidenav/Icons.js +47 -0
  217. package/sidenav/Sidenav.d.ts +6 -5
  218. package/sidenav/Sidenav.js +131 -71
  219. package/sidenav/Sidenav.stories.tsx +251 -151
  220. package/sidenav/Sidenav.test.js +37 -0
  221. package/sidenav/types.d.ts +52 -26
  222. package/slider/Slider.d.ts +2 -2
  223. package/slider/Slider.js +148 -180
  224. package/slider/Slider.test.js +254 -0
  225. package/slider/types.d.ts +11 -3
  226. package/spinner/Spinner.js +31 -75
  227. package/spinner/{Spinner.stories.jsx → Spinner.stories.tsx} +53 -27
  228. package/spinner/Spinner.test.js +55 -0
  229. package/spinner/types.d.ts +3 -3
  230. package/status-light/StatusLight.d.ts +4 -0
  231. package/status-light/StatusLight.js +51 -0
  232. package/status-light/StatusLight.stories.tsx +74 -0
  233. package/status-light/StatusLight.test.js +25 -0
  234. package/status-light/types.d.ts +17 -0
  235. package/status-light/types.js +5 -0
  236. package/switch/Switch.d.ts +2 -2
  237. package/switch/Switch.js +149 -114
  238. package/switch/Switch.stories.tsx +44 -67
  239. package/switch/Switch.test.js +180 -0
  240. package/switch/types.d.ts +13 -5
  241. package/table/Table.js +8 -30
  242. package/table/{Table.stories.jsx → Table.stories.tsx} +80 -1
  243. package/table/Table.test.js +21 -0
  244. package/table/types.d.ts +8 -8
  245. package/tabs/Tab.d.ts +4 -0
  246. package/tabs/Tab.js +113 -0
  247. package/tabs/Tabs.d.ts +1 -1
  248. package/tabs/Tabs.js +316 -145
  249. package/tabs/Tabs.stories.tsx +119 -13
  250. package/tabs/Tabs.test.js +294 -0
  251. package/tabs/types.d.ts +29 -15
  252. package/tag/Tag.d.ts +1 -1
  253. package/tag/Tag.js +43 -85
  254. package/tag/Tag.stories.tsx +37 -27
  255. package/tag/Tag.test.js +49 -0
  256. package/tag/types.d.ts +25 -16
  257. package/text-input/Icons.d.ts +8 -0
  258. package/text-input/Icons.js +56 -0
  259. package/text-input/Suggestion.d.ts +4 -0
  260. package/text-input/Suggestion.js +67 -0
  261. package/text-input/Suggestions.d.ts +4 -0
  262. package/text-input/Suggestions.js +84 -0
  263. package/text-input/TextInput.js +326 -548
  264. package/text-input/TextInput.stories.tsx +281 -272
  265. package/text-input/TextInput.test.js +1739 -0
  266. package/text-input/types.d.ts +70 -24
  267. package/textarea/Textarea.js +85 -135
  268. package/textarea/Textarea.stories.tsx +174 -0
  269. package/textarea/Textarea.test.js +406 -0
  270. package/textarea/types.d.ts +27 -16
  271. package/toggle-group/ToggleGroup.d.ts +2 -2
  272. package/toggle-group/ToggleGroup.js +92 -105
  273. package/toggle-group/ToggleGroup.stories.tsx +53 -8
  274. package/toggle-group/ToggleGroup.test.js +137 -0
  275. package/toggle-group/types.d.ts +34 -17
  276. package/typography/Typography.d.ts +4 -0
  277. package/typography/Typography.js +23 -0
  278. package/typography/Typography.stories.tsx +198 -0
  279. package/typography/types.d.ts +18 -0
  280. package/typography/types.js +5 -0
  281. package/useTheme.d.ts +1133 -1
  282. package/useTheme.js +4 -11
  283. package/useTranslatedLabels.d.ts +85 -0
  284. package/useTranslatedLabels.js +14 -0
  285. package/utils/BaseTypography.d.ts +21 -0
  286. package/utils/BaseTypography.js +94 -0
  287. package/utils/FocusLock.d.ts +13 -0
  288. package/utils/FocusLock.js +124 -0
  289. package/wizard/Wizard.d.ts +1 -1
  290. package/wizard/Wizard.js +70 -101
  291. package/wizard/Wizard.stories.tsx +48 -19
  292. package/wizard/Wizard.test.js +114 -0
  293. package/wizard/types.d.ts +12 -8
  294. package/ThemeContext.d.ts +0 -15
  295. package/ThemeContext.js +0 -243
  296. package/V3Select/V3Select.js +0 -455
  297. package/V3Select/index.d.ts +0 -27
  298. package/V3Textarea/V3Textarea.js +0 -260
  299. package/V3Textarea/index.d.ts +0 -27
  300. package/card/ice-cream.jpg +0 -0
  301. package/common/RequiredComponent.js +0 -32
  302. package/date/Date.js +0 -373
  303. package/date/index.d.ts +0 -27
  304. package/input-text/Icons.js +0 -22
  305. package/input-text/InputText.js +0 -611
  306. package/input-text/index.d.ts +0 -36
  307. package/list/List.d.ts +0 -4
  308. package/list/List.js +0 -47
  309. package/list/List.stories.tsx +0 -95
  310. package/list/types.d.ts +0 -7
  311. package/number-input/NumberInputContext.d.ts +0 -4
  312. package/number-input/NumberInputContext.js +0 -19
  313. package/number-input/numberInputContextTypes.d.ts +0 -19
  314. package/progress-bar/ProgressBar.stories.jsx +0 -58
  315. package/radio/Radio.d.ts +0 -4
  316. package/radio/Radio.js +0 -174
  317. package/radio/Radio.stories.tsx +0 -192
  318. package/radio/types.d.ts +0 -54
  319. package/resultsetTable/ResultsetTable.js +0 -251
  320. package/row/Row.d.ts +0 -3
  321. package/row/Row.js +0 -127
  322. package/row/Row.stories.tsx +0 -237
  323. package/row/types.d.ts +0 -10
  324. package/slider/Slider.stories.tsx +0 -177
  325. package/stack/Stack.d.ts +0 -3
  326. package/stack/Stack.js +0 -97
  327. package/stack/Stack.stories.tsx +0 -164
  328. package/stack/types.d.ts +0 -9
  329. package/text/Text.d.ts +0 -7
  330. package/text/Text.js +0 -30
  331. package/text/Text.stories.tsx +0 -19
  332. package/textarea/Textarea.stories.jsx +0 -136
  333. package/toggle/Toggle.js +0 -186
  334. package/toggle/index.d.ts +0 -21
  335. package/upload/Upload.js +0 -201
  336. package/upload/buttons-upload/ButtonsUpload.js +0 -111
  337. package/upload/buttons-upload/Icons.js +0 -40
  338. package/upload/dragAndDropArea/DragAndDropArea.js +0 -225
  339. package/upload/dragAndDropArea/Icons.js +0 -39
  340. package/upload/file-upload/FileToUpload.js +0 -115
  341. package/upload/file-upload/Icons.js +0 -66
  342. package/upload/files-upload/FilesToUpload.js +0 -109
  343. package/upload/index.d.ts +0 -15
  344. package/upload/transaction/Icons.js +0 -160
  345. package/upload/transaction/Transaction.js +0 -104
  346. package/upload/transactions/Transactions.js +0 -94
  347. /package/{list → action-icon}/types.js +0 -0
  348. /package/{radio → badge}/types.js +0 -0
  349. /package/{resultsetTable → bulleted-list}/types.js +0 -0
  350. /package/{row → container}/types.js +0 -0
  351. /package/{stack → flex}/types.js +0 -0
  352. /package/{number-input/numberInputContextTypes.js → grid/types.js} +0 -0
  353. /package/{resultsetTable → resultset-table}/ResultsetTable.d.ts +0 -0
@@ -3,36 +3,72 @@ import { userEvent, within } from "@storybook/testing-library";
3
3
  import DxcDropdown from "./Dropdown";
4
4
  import Title from "../../.storybook/components/Title";
5
5
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
+ import DropdownMenu from "./DropdownMenu";
7
+ import { Option } from "./types";
8
+ import useTheme from "../useTheme";
9
+ import DxcFlex from "../flex/Flex";
10
+ import { HalstackProvider } from "../HalstackContext";
11
+ import { ThemeProvider } from "styled-components";
6
12
 
7
13
  export default {
8
14
  title: "Dropdown",
9
15
  component: DxcDropdown,
10
16
  };
11
17
 
12
- const iconSVG = () => {
13
- return (
14
- <svg viewBox="0 0 24 24" fill="currentColor">
15
- <path d="M0 0h24v24H0z" fill="none" />
16
- <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
17
- </svg>
18
- );
19
- };
20
-
21
- const iconSVGLarge = () => {
22
- return (
23
- <svg enable-background="new 0 0 24 24" height="48px" viewBox="0 0 24 24" width="48px" fill="currentColor">
24
- <g>
25
- <path d="M0,0h24v24H0V0z" fill="none" />
26
- <path d="M0,0h24v24H0V0z" fill="none" />
27
- </g>
28
- <g>
29
- <path d="M12,17.27L18.18,21l-1.64-7.03L22,9.24l-7.19-0.61L12,2L9.19,8.63L2,9.24l5.46,4.73L5.82,21L12,17.27z" />
30
- </g>
31
- </svg>
32
- );
33
- };
18
+ const hamburguerIcon = (
19
+ <svg xmlns="http://www.w3.org/2000/svg" height="20" width="20">
20
+ <path d="M3 14.5V13h14v1.5Zm0-3.75v-1.5h14v1.5ZM3 7V5.5h14V7Z" />
21
+ </svg>
22
+ );
23
+ const iconSVG = (
24
+ <svg viewBox="0 0 24 24" height="24" width="24" fill="currentColor">
25
+ <path d="M0 0h24v24H0z" fill="none" />
26
+ <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
27
+ </svg>
28
+ );
29
+ const iconSVGLarge = (
30
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" height="48" width="48">
31
+ <path d="M11 44q-1.2 0-2.1-.9Q8 42.2 8 41V15q0-1.2.9-2.1.9-.9 2.1-.9h5.5v-.5q0-3.15 2.175-5.325Q20.85 4 24 4q3.15 0 5.325 2.175Q31.5 8.35 31.5 11.5v.5H37q1.2 0 2.1.9.9.9.9 2.1v26q0 1.2-.9 2.1-.9.9-2.1.9Zm0-3h26V15h-5.5v4.5q0 .65-.425 1.075Q30.65 21 30 21q-.65 0-1.075-.425-.425-.425-.425-1.075V15h-9v4.5q0 .65-.425 1.075Q18.65 21 18 21q-.65 0-1.075-.425-.425-.425-.425-1.075V15H11v26Zm8.5-29h9v-.5q0-1.9-1.3-3.2Q25.9 7 24 7q-1.9 0-3.2 1.3-1.3 1.3-1.3 3.2ZM11 41V15v26Z" />
32
+ </svg>
33
+ );
34
+ const iconUrl = "https://iconape.com/wp-content/files/yd/367773/svg/logo-linkedin-logo-icon-png-svg.png";
35
+ const icons = [iconSVG, iconSVGLarge, iconUrl];
34
36
 
35
- const options: any = [
37
+ const defaultOptions: Option[] = [
38
+ {
39
+ value: "1",
40
+ label: "Amazon",
41
+ },
42
+ {
43
+ value: "2",
44
+ label: "Ebay",
45
+ },
46
+ {
47
+ value: "3",
48
+ label: "Apple",
49
+ },
50
+ {
51
+ value: "4",
52
+ label: "Wallapop",
53
+ },
54
+ {
55
+ value: "5",
56
+ label: "Aliexpress",
57
+ },
58
+ {
59
+ value: "6",
60
+ label: "Etsy",
61
+ },
62
+ {
63
+ value: "7",
64
+ label: "Alibaba",
65
+ },
66
+ {
67
+ value: "8",
68
+ label: "Gearbest shop",
69
+ },
70
+ ];
71
+ const options: Option[] = [
36
72
  {
37
73
  value: "1",
38
74
  label: "Amazon with a very long text",
@@ -46,17 +82,25 @@ const options: any = [
46
82
  label: "Apple",
47
83
  },
48
84
  ];
49
-
50
- const option: any = [
85
+ const optionWithIcon: Option[] = [
51
86
  {
52
87
  value: "1",
53
88
  label: "Ebay",
89
+ icon: iconUrl,
54
90
  },
55
91
  ];
56
92
 
57
- const optionsIcon: any = options.map((op, i) => ({ ...op, icon: i === 1 ? iconSVGLarge : iconSVG }));
93
+ const optionsIcon: any = options.map((op, i) => ({ ...op, icon: icons[i] }));
58
94
 
59
- export const Chromatic = () => (
95
+ const opinionatedTheme = {
96
+ dropdown: {
97
+ baseColor: "#ffffff",
98
+ fontColor: "#000000",
99
+ optionFontColor: "#000000",
100
+ },
101
+ };
102
+
103
+ const Dropdown = () => (
60
104
  <>
61
105
  <ExampleContainer>
62
106
  <Title title="Default" theme="light" level={4} />
@@ -66,7 +110,7 @@ export const Chromatic = () => (
66
110
  <Title title="Hovered" theme="light" level={4} />
67
111
  <DxcDropdown label="Hovered" options={options} onSelectOption={(value) => {}} />
68
112
  </ExampleContainer>
69
- <ExampleContainer pseudoState="pseudo-focus-visible">
113
+ <ExampleContainer pseudoState="pseudo-focus">
70
114
  <Title title="Focused" theme="light" level={4} />
71
115
  <DxcDropdown label="Focused" options={options} onSelectOption={(value) => {}} />
72
116
  </ExampleContainer>
@@ -92,7 +136,7 @@ export const Chromatic = () => (
92
136
  label="Icon after"
93
137
  options={options}
94
138
  onSelectOption={(value) => {}}
95
- icon={iconSVG}
139
+ icon="https://iconape.com/wp-content/files/yd/367773/svg/logo-linkedin-logo-icon-png-svg.png"
96
140
  iconPosition="after"
97
141
  />
98
142
  </ExampleContainer>
@@ -101,9 +145,22 @@ export const Chromatic = () => (
101
145
  <DxcDropdown options={options} onSelectOption={(value) => {}} icon={iconSVG} />
102
146
  </ExampleContainer>
103
147
  <ExampleContainer>
104
- <Title title="Large icon" theme="light" level={4} />
148
+ <Title title="Only icon without caret" theme="light" level={4} />
149
+ <DxcDropdown options={options} onSelectOption={(value) => {}} icon={hamburguerIcon} caretHidden />
150
+ </ExampleContainer>
151
+ <ExampleContainer>
152
+ <Title title="Large icon (SVG)" theme="light" level={4} />
105
153
  <DxcDropdown label="Large icon" options={options} onSelectOption={(value) => {}} icon={iconSVGLarge} />
106
154
  </ExampleContainer>
155
+ <ExampleContainer>
156
+ <Title title="Large icon (image)" theme="light" level={4} />
157
+ <DxcDropdown
158
+ label="Large icon"
159
+ options={options}
160
+ onSelectOption={(value) => {}}
161
+ icon="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Hamburger_icon.svg/2048px-Hamburger_icon.svg.png"
162
+ />
163
+ </ExampleContainer>
107
164
  <ExampleContainer>
108
165
  <Title title="Disabled with icon" theme="light" level={4} />
109
166
  <DxcDropdown
@@ -186,62 +243,196 @@ export const Chromatic = () => (
186
243
  size="fillParent"
187
244
  />
188
245
  </ExampleContainer>
246
+ <ExampleContainer expanded>
247
+ <Title title="Opened menu" theme="light" level={4} />
248
+ <DxcDropdown label="Label" options={options} onSelectOption={(value) => {}} margin={{ top: "xxlarge" }} />
249
+ </ExampleContainer>
189
250
  </>
190
251
  );
191
252
 
192
- const DropdownWithOptions = () => (
193
- <ExampleContainer expanded>
194
- <Title title="Options" theme="light" level={4} />
195
- <DxcDropdown label="Options with icon" options={optionsIcon} onSelectOption={(value) => {}} />
196
- </ExampleContainer>
197
- );
253
+ const DropdownListStates = () => {
254
+ const colorsTheme: any = useTheme();
198
255
 
199
- const DropdownHoverOption = () => (
200
- <ExampleContainer pseudoState="pseudo-hover" expanded>
201
- <Title title="Hovered option" theme="light" level={4} />
202
- <DxcDropdown label="Hovered options" options={option} onSelectOption={(value) => {}} />
203
- </ExampleContainer>
204
- );
256
+ return (
257
+ <>
258
+ <Title title="Dropdown Menu" theme="light" level={2} />
259
+ <ExampleContainer>
260
+ <Title
261
+ title="List dialog uses a Radix Popover to appear over elements with a certain z-index"
262
+ theme="light"
263
+ level={3}
264
+ />
265
+ <div
266
+ style={{
267
+ position: "relative",
268
+ display: "flex",
269
+ flexDirection: "column",
270
+ gap: "20px",
271
+ height: "150px",
272
+ width: "min-content",
273
+ marginBottom: "100px",
274
+ padding: "20px",
275
+ border: "1px solid black",
276
+ borderRadius: "4px",
277
+ overflow: "auto",
278
+ zIndex: "1300",
279
+ }}
280
+ >
281
+ <DxcDropdown
282
+ label="Select a platform"
283
+ options={defaultOptions}
284
+ onSelectOption={(option) => {}}
285
+ size="medium"
286
+ />
287
+ <button style={{ zIndex: "1", width: "100px" }}>Submit</button>
288
+ </div>
289
+ </ExampleContainer>
290
+ <ThemeProvider theme={colorsTheme.dropdown}>
291
+ <Title title="Option states" theme="light" level={3} />
292
+ <ExampleContainer pseudoState="pseudo-hover">
293
+ <Title title="Hovered option" theme="light" level={4} />
294
+ <DropdownMenu
295
+ id="x"
296
+ dropdownTriggerId="dtx"
297
+ iconsPosition="before"
298
+ visualFocusIndex={-1}
299
+ menuItemOnClick={(value) => {}}
300
+ onKeyDown={(e) => {}}
301
+ options={optionWithIcon}
302
+ styles={{ width: 240 }}
303
+ />
304
+ </ExampleContainer>
305
+ <ExampleContainer pseudoState="pseudo-active">
306
+ <Title title="Active option" theme="light" level={4} />
307
+ <DropdownMenu
308
+ id="x"
309
+ dropdownTriggerId="dtx"
310
+ iconsPosition="before"
311
+ visualFocusIndex={-1}
312
+ menuItemOnClick={(value) => {}}
313
+ onKeyDown={(e) => {}}
314
+ options={optionWithIcon}
315
+ styles={{ width: 240 }}
316
+ />
317
+ </ExampleContainer>
318
+ <ExampleContainer>
319
+ <Title title="Focused option" theme="light" level={4} />
320
+ <DropdownMenu
321
+ id="x"
322
+ dropdownTriggerId="dtx"
323
+ iconsPosition="before"
324
+ visualFocusIndex={0}
325
+ menuItemOnClick={(value) => {}}
326
+ onKeyDown={(e) => {}}
327
+ options={options}
328
+ styles={{ width: 240 }}
329
+ />
330
+ </ExampleContainer>
331
+ <Title title="Icons" theme="light" level={3} />
332
+ <ExampleContainer>
333
+ <Title title="Before" theme="light" level={4} />
334
+ <DropdownMenu
335
+ id="x"
336
+ dropdownTriggerId="dtx"
337
+ iconsPosition="before"
338
+ visualFocusIndex={-1}
339
+ menuItemOnClick={(value) => {}}
340
+ onKeyDown={(e) => {}}
341
+ options={optionsIcon}
342
+ styles={{ width: 240 }}
343
+ />
344
+ <Title title="After" theme="light" level={4} />
345
+ <DropdownMenu
346
+ id="x"
347
+ dropdownTriggerId="dtx"
348
+ iconsPosition="after"
349
+ visualFocusIndex={-1}
350
+ menuItemOnClick={(value) => {}}
351
+ onKeyDown={(e) => {}}
352
+ options={optionsIcon}
353
+ styles={{ width: 240 }}
354
+ />
355
+ </ExampleContainer>
356
+ </ThemeProvider>
357
+ </>
358
+ );
359
+ };
205
360
 
206
- const DropdownActiveOption = () => (
207
- <ExampleContainer pseudoState="pseudo-active" expanded>
208
- <Title title="Actived option" theme="light" level={4} />
209
- <DxcDropdown label="Actived options" options={option} onSelectOption={(value) => {}} />
361
+ const DropdownRightAlignment = () => (
362
+ <ExampleContainer expanded>
363
+ <Title title="Dropdown collisions on the right boundary (right)" theme="light" level={4} />
364
+ <DxcFlex justifyContent="flex-end">
365
+ <DxcDropdown label="Label" options={options} onSelectOption={(value) => {}} />
366
+ </DxcFlex>
210
367
  </ExampleContainer>
211
368
  );
212
369
 
213
- const DropdownWithOptionsIconAfter = () => (
370
+ const DropdownCenterAlignment = () => (
214
371
  <ExampleContainer expanded>
215
- <Title title="Icon after options" theme="light" level={4} />
216
- <DxcDropdown
217
- label="Icon after options"
218
- options={optionsIcon}
219
- onSelectOption={(value) => {}}
220
- optionsIconPosition="after"
221
- />
372
+ <Title title="Dropdown collisions on the right boundary (centered)" theme="light" level={4} />
373
+ <DxcFlex justifyContent="flex-end">
374
+ <DxcDropdown label="Label" options={defaultOptions} onSelectOption={(value) => {}} margin="small" />
375
+ </DxcFlex>
222
376
  </ExampleContainer>
223
377
  );
224
378
 
225
- export const DropdownOptions = DropdownWithOptions.bind({});
226
- DropdownOptions.play = async ({ canvasElement }) => {
379
+ export const Chromatic = Dropdown.bind({});
380
+ Chromatic.play = async ({ canvasElement }) => {
227
381
  const canvas = within(canvasElement);
228
- await userEvent.click(canvas.getByRole("button"));
382
+ const buttonList = canvas.getAllByRole("button");
383
+ await userEvent.click(buttonList[buttonList.length - 1]);
229
384
  };
230
385
 
231
- export const DropdownHoveredOption = DropdownHoverOption.bind({});
232
- DropdownHoveredOption.play = async ({ canvasElement }) => {
386
+ export const OpinionatedTheme = () => (
387
+ <>
388
+ <Title title="Opinionated theme" theme="light" level={2} />
389
+ <ExampleContainer>
390
+ <Title title="Default" theme="light" level={4} />
391
+ <HalstackProvider theme={opinionatedTheme}>
392
+ <DxcDropdown label="Default" options={options} onSelectOption={(value) => {}} icon={iconSVG} />
393
+ </HalstackProvider>
394
+ </ExampleContainer>
395
+ <ExampleContainer pseudoState="pseudo-hover">
396
+ <Title title="Hovered" theme="light" level={4} />
397
+ <HalstackProvider theme={opinionatedTheme}>
398
+ <DxcDropdown label="Hovered" options={options} onSelectOption={(value) => {}} icon={iconSVG} />
399
+ </HalstackProvider>
400
+ </ExampleContainer>
401
+ <ExampleContainer pseudoState="pseudo-active">
402
+ <Title title="Actived" theme="light" level={4} />
403
+ <HalstackProvider theme={opinionatedTheme}>
404
+ <DxcDropdown label="Actived" options={options} onSelectOption={(value) => {}} icon={iconSVG} />
405
+ </HalstackProvider>
406
+ </ExampleContainer>
407
+ <ExampleContainer pseudoState="pseudo-focus">
408
+ <Title title="Focused" theme="light" level={4} />
409
+ <HalstackProvider theme={opinionatedTheme}>
410
+ <DxcDropdown label="Focused" options={options} onSelectOption={(value) => {}} icon={iconSVG} />
411
+ </HalstackProvider>
412
+ </ExampleContainer>
413
+ <ExampleContainer>
414
+ <Title title="Disabled" theme="light" level={4} />
415
+ <HalstackProvider theme={opinionatedTheme}>
416
+ <DxcDropdown label="Disabled" options={options} onSelectOption={(value) => {}} icon={iconSVG} disabled />
417
+ </HalstackProvider>
418
+ </ExampleContainer>
419
+ </>
420
+ );
421
+
422
+ export const DropdownMenuStates = DropdownListStates.bind({});
423
+ DropdownMenuStates.play = async ({ canvasElement }) => {
233
424
  const canvas = within(canvasElement);
234
- await userEvent.click(canvas.getByRole("button"));
425
+ await userEvent.click(canvas.getAllByRole("button")[0]);
235
426
  };
236
427
 
237
- export const DropdownActivedOption = DropdownActiveOption.bind({});
238
- DropdownActivedOption.play = async ({ canvasElement }) => {
428
+ export const DropdownMenuAlignedRight = DropdownRightAlignment.bind({});
429
+ DropdownMenuAlignedRight.play = async ({ canvasElement }) => {
239
430
  const canvas = within(canvasElement);
240
431
  await userEvent.click(canvas.getByRole("button"));
241
432
  };
242
433
 
243
- export const DropdownOptionsIconAfter = DropdownWithOptionsIconAfter.bind({});
244
- DropdownOptionsIconAfter.play = async ({ canvasElement }) => {
434
+ export const DropdownMenuAlignedCenter = DropdownCenterAlignment.bind({});
435
+ DropdownMenuAlignedCenter.play = async ({ canvasElement }) => {
245
436
  const canvas = within(canvasElement);
246
437
  await userEvent.click(canvas.getByRole("button"));
247
438
  };