@nypl/design-system-react-components 0.25.5 → 0.25.9

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 (275) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/README.md +1 -1
  3. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
  4. package/dist/components/Button/Button.d.ts +6 -6
  5. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  6. package/dist/components/Card/Card.d.ts +6 -4
  7. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  9. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  11. package/dist/components/Form/Form.d.ts +2 -2
  12. package/dist/components/Heading/Heading.d.ts +7 -3
  13. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  14. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  15. package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -2
  16. package/dist/components/Icons/Icon.d.ts +4 -4
  17. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  18. package/dist/components/Icons/IconTypes.d.ts +1 -23
  19. package/dist/components/Image/Image.d.ts +11 -3
  20. package/dist/components/Image/ImageTypes.d.ts +3 -1
  21. package/dist/components/Link/LinkTypes.d.ts +1 -0
  22. package/dist/components/Logo/Logo.d.ts +28 -0
  23. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  24. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  25. package/dist/components/Modal/Modal.d.ts +0 -4
  26. package/dist/components/Notification/Notification.d.ts +4 -2
  27. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  28. package/dist/components/Radio/Radio.d.ts +6 -5
  29. package/dist/components/RadioGroup/RadioGroup.d.ts +3 -2
  30. package/dist/components/SearchBar/SearchBar.d.ts +10 -2
  31. package/dist/components/Select/Select.d.ts +5 -2
  32. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  33. package/dist/components/Slider/Slider.d.ts +3 -2
  34. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  35. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  36. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  37. package/dist/components/Table/Table.d.ts +23 -0
  38. package/dist/components/Template/Template.d.ts +8 -3
  39. package/dist/components/Text/Text.d.ts +2 -2
  40. package/dist/components/TextInput/TextInput.d.ts +4 -3
  41. package/dist/components/Toggle/Toggle.d.ts +48 -0
  42. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  43. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  44. package/dist/design-system-react-components.cjs.development.js +5989 -5490
  45. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  46. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  48. package/dist/design-system-react-components.esm.js +6057 -5551
  49. package/dist/design-system-react-components.esm.js.map +1 -1
  50. package/dist/index.d.ts +11 -4
  51. package/dist/styles.css +2 -2
  52. package/dist/theme/components/breadcrumb.d.ts +9 -0
  53. package/dist/theme/components/button.d.ts +0 -12
  54. package/dist/theme/components/card.d.ts +14 -2
  55. package/dist/theme/components/customTable.d.ts +47 -0
  56. package/dist/theme/components/fieldset.d.ts +2 -2
  57. package/dist/theme/components/global.d.ts +1 -1
  58. package/dist/theme/components/heading.d.ts +4 -0
  59. package/dist/theme/components/label.d.ts +1 -1
  60. package/dist/theme/components/link.d.ts +14 -1
  61. package/dist/theme/components/list.d.ts +0 -2
  62. package/dist/theme/components/logo.d.ts +4 -0
  63. package/dist/theme/components/notification.d.ts +8 -4
  64. package/dist/theme/components/searchBar.d.ts +7 -13
  65. package/dist/theme/components/select.d.ts +1 -0
  66. package/dist/theme/components/structuredContent.d.ts +33 -0
  67. package/dist/theme/components/template.d.ts +10 -10
  68. package/dist/theme/components/textInput.d.ts +2 -0
  69. package/dist/theme/components/toggle.d.ts +71 -0
  70. package/dist/theme/foundations/spacing.d.ts +2 -0
  71. package/dist/utils/utils.d.ts +10 -0
  72. package/package.json +2 -3
  73. package/src/__tests__/utils/utils.test.ts +23 -1
  74. package/src/components/Accordion/Accordion.stories.mdx +15 -14
  75. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  76. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  77. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  78. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +50 -14
  79. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +20 -0
  80. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
  81. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +198 -0
  82. package/src/components/Button/Button.stories.mdx +93 -48
  83. package/src/components/Button/Button.test.tsx +0 -12
  84. package/src/components/Button/Button.tsx +7 -8
  85. package/src/components/Button/ButtonTypes.tsx +0 -1
  86. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  87. package/src/components/Card/Card.stories.mdx +246 -64
  88. package/src/components/Card/Card.test.tsx +45 -22
  89. package/src/components/Card/Card.tsx +26 -13
  90. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  91. package/src/components/Chakra/Box.stories.mdx +3 -3
  92. package/src/components/Chakra/Center.stories.mdx +5 -5
  93. package/src/components/Chakra/Grid.stories.mdx +14 -17
  94. package/src/components/Chakra/Stack.stories.mdx +2 -2
  95. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  96. package/src/components/Checkbox/Checkbox.tsx +13 -8
  97. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  99. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  100. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  101. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  102. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  103. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  104. package/src/components/DatePicker/DatePicker.test.tsx +8 -6
  105. package/src/components/DatePicker/DatePicker.tsx +10 -6
  106. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  107. package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
  108. package/src/components/Form/Form.stories.mdx +49 -41
  109. package/src/components/Form/Form.tsx +5 -4
  110. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  111. package/src/components/Heading/Heading.stories.mdx +59 -23
  112. package/src/components/Heading/Heading.test.tsx +82 -18
  113. package/src/components/Heading/Heading.tsx +31 -31
  114. package/src/components/Heading/HeadingTypes.tsx +6 -6
  115. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  116. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  117. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  118. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  119. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  120. package/src/components/Hero/Hero.stories.mdx +72 -53
  121. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +9 -8
  122. package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
  123. package/src/components/Icons/Icon.stories.mdx +77 -75
  124. package/src/components/Icons/Icon.tsx +4 -5
  125. package/src/components/Icons/IconSvgs.tsx +2 -42
  126. package/src/components/Icons/IconTypes.tsx +1 -24
  127. package/src/components/Image/Image.stories.mdx +214 -104
  128. package/src/components/Image/Image.test.tsx +10 -0
  129. package/src/components/Image/Image.tsx +21 -10
  130. package/src/components/Image/ImageTypes.ts +2 -0
  131. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  132. package/src/components/Label/Label.stories.mdx +21 -20
  133. package/src/components/Link/Link.stories.mdx +103 -53
  134. package/src/components/Link/Link.test.tsx +108 -7
  135. package/src/components/Link/Link.tsx +58 -19
  136. package/src/components/Link/LinkTypes.tsx +1 -0
  137. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  138. package/src/components/List/List.stories.mdx +36 -24
  139. package/src/components/Logo/Logo.stories.mdx +220 -0
  140. package/src/components/Logo/Logo.test.tsx +98 -0
  141. package/src/components/Logo/Logo.tsx +97 -0
  142. package/src/components/Logo/LogoSvgs.tsx +34 -0
  143. package/src/components/Logo/LogoTypes.tsx +32 -0
  144. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  145. package/src/components/Modal/Modal.stories.mdx +20 -5
  146. package/src/components/Modal/Modal.tsx +2 -8
  147. package/src/components/Notification/Notification.stories.mdx +96 -40
  148. package/src/components/Notification/Notification.test.tsx +62 -16
  149. package/src/components/Notification/Notification.tsx +26 -9
  150. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  151. package/src/components/Pagination/Pagination.stories.mdx +18 -8
  152. package/src/components/Pagination/Pagination.tsx +1 -1
  153. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  154. package/src/components/Placeholder/Placeholder.tsx +7 -14
  155. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  156. package/src/components/Radio/Radio.stories.mdx +39 -19
  157. package/src/components/Radio/Radio.tsx +13 -9
  158. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  159. package/src/components/RadioGroup/RadioGroup.tsx +15 -11
  160. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
  161. package/src/components/SearchBar/SearchBar.Test.tsx +114 -22
  162. package/src/components/SearchBar/SearchBar.stories.mdx +111 -33
  163. package/src/components/SearchBar/SearchBar.tsx +57 -33
  164. package/src/components/Select/Select.stories.mdx +177 -66
  165. package/src/components/Select/Select.test.tsx +2 -2
  166. package/src/components/Select/Select.tsx +22 -12
  167. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  168. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  169. package/src/components/Slider/Slider.stories.mdx +74 -23
  170. package/src/components/Slider/Slider.test.tsx +35 -0
  171. package/src/components/Slider/Slider.tsx +22 -11
  172. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -30
  173. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  174. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  175. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  176. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  177. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  178. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  179. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  180. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  181. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  182. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  183. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  184. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  185. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  186. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  187. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  188. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  189. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  190. package/src/components/Table/Table.stories.mdx +66 -0
  191. package/src/components/Table/Table.test.tsx +60 -0
  192. package/src/components/Table/Table.tsx +116 -0
  193. package/src/components/Tabs/Tabs.stories.mdx +19 -13
  194. package/src/components/Tabs/Tabs.test.tsx +1 -1
  195. package/src/components/Template/Template.stories.mdx +57 -49
  196. package/src/components/Template/Template.test.tsx +65 -5
  197. package/src/components/Template/Template.tsx +35 -5
  198. package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -0
  199. package/src/components/Text/Text.stories.mdx +33 -11
  200. package/src/components/Text/Text.tsx +2 -2
  201. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  202. package/src/components/TextInput/TextInput.test.tsx +96 -0
  203. package/src/components/TextInput/TextInput.tsx +12 -8
  204. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  205. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  206. package/src/components/Toggle/Toggle.test.tsx +140 -0
  207. package/src/components/Toggle/Toggle.tsx +123 -0
  208. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  209. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  210. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  211. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  212. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  213. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  214. package/src/docs/Chakra.stories.mdx +5 -8
  215. package/src/docs/Intro.stories.mdx +2 -2
  216. package/src/index.ts +13 -4
  217. package/src/styles/base/_03-base.scss +1 -1
  218. package/src/styles/base/_place-holder.scss +7 -7
  219. package/src/styles.scss +1 -5
  220. package/src/theme/components/breadcrumb.ts +14 -4
  221. package/src/theme/components/button.ts +5 -12
  222. package/src/theme/components/card.ts +9 -7
  223. package/src/theme/components/checkbox.ts +1 -1
  224. package/src/theme/components/customTable.ts +50 -0
  225. package/src/theme/components/datePicker.ts +1 -1
  226. package/src/theme/components/global.ts +7 -7
  227. package/src/theme/components/heading.ts +13 -11
  228. package/src/theme/components/helperErrorText.ts +1 -1
  229. package/src/theme/components/icon.ts +2 -2
  230. package/src/theme/components/image.ts +9 -1
  231. package/src/theme/components/link.ts +17 -5
  232. package/src/theme/components/list.ts +1 -3
  233. package/src/theme/components/logo.ts +54 -0
  234. package/src/theme/components/notification.ts +9 -7
  235. package/src/theme/components/searchBar.ts +7 -13
  236. package/src/theme/components/select.ts +1 -0
  237. package/src/theme/components/statusBadge.ts +1 -1
  238. package/src/theme/components/structuredContent.ts +54 -0
  239. package/src/theme/components/template.ts +10 -10
  240. package/src/theme/components/text.ts +6 -6
  241. package/src/theme/components/textInput.ts +1 -0
  242. package/src/theme/components/toggle.ts +69 -0
  243. package/src/theme/components/videoPlayer.ts +0 -2
  244. package/src/theme/foundations/global.ts +2 -2
  245. package/src/theme/foundations/spacing.ts +3 -0
  246. package/src/theme/foundations/typography.ts +84 -12
  247. package/src/theme/index.ts +8 -0
  248. package/src/utils/componentCategories.ts +4 -2
  249. package/src/utils/utils.ts +17 -0
  250. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  251. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  252. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  253. package/dist/components/Input/Input.d.ts +0 -36
  254. package/dist/components/Input/Input.stories.d.ts +0 -29
  255. package/dist/components/Input/InputTypes.d.ts +0 -6
  256. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  257. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  258. package/dist/helpers/getCSSVariable.d.ts +0 -1
  259. package/dist/interfaces.d.ts +0 -3
  260. package/dist/utils/bem.d.ts +0 -1
  261. package/src/__tests__/utils/bem.test.ts +0 -37
  262. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  263. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  264. package/src/components/CardEdition/CardEdition.tsx +0 -60
  265. package/src/components/CardEdition/_CardEdition.scss +0 -137
  266. package/src/components/Input/Input.stories.tsx +0 -133
  267. package/src/components/Input/Input.test.tsx +0 -266
  268. package/src/components/Input/Input.tsx +0 -81
  269. package/src/components/Input/InputTypes.tsx +0 -8
  270. package/src/components/Input/_Input.scss +0 -78
  271. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  272. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  273. package/src/helpers/getCSSVariable.tsx +0 -5
  274. package/src/interfaces.ts +0 -3
  275. package/src/utils/bem.ts +0 -44
@@ -1,16 +1,22 @@
1
+ import { VStack } from "@chakra-ui/react";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
10
 
10
- import { VStack } from "@chakra-ui/react";
11
+ import Button from "../Button/Button";
12
+ import Form from "../Form/Form";
11
13
  import Select from "./Select";
14
+ import { SelectTypes } from "./SelectTypes";
12
15
  import { getCategory } from "../../utils/componentCategories";
13
16
  import DSProvider from "../../theme/provider";
17
+ import { getStorybookEnumValues } from "../../utils/utils";
18
+
19
+ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
14
20
 
15
21
  <Meta
16
22
  title={getCategory("Select")}
@@ -19,17 +25,40 @@ import DSProvider from "../../theme/provider";
19
25
  parameters={{
20
26
  design: {
21
27
  type: "figma",
22
- url:
23
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A549",
28
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A549",
24
29
  },
25
30
  jest: ["Select.test.tsx"],
26
31
  }}
27
32
  argTypes={{
28
33
  children: { table: { disable: true } },
29
- id: { table: { disable: true } },
30
- name: { table: { disable: true } },
31
- onChange: { table: { disable: true } },
32
- value: { table: { disable: true } },
34
+ id: { control: false },
35
+ isDisabled: {
36
+ table: { defaultValue: { summary: false } },
37
+ },
38
+ isInvalid: {
39
+ table: { defaultValue: { summary: false } },
40
+ },
41
+ isRequired: {
42
+ table: { defaultValue: { summary: false } },
43
+ },
44
+ name: { control: false },
45
+ key: { table: { disable: true } },
46
+ onChange: { control: false },
47
+ ref: { table: { disable: true } },
48
+ showHelperInvalidText: {
49
+ table: { defaultValue: { summary: true } },
50
+ },
51
+ showLabel: {
52
+ table: { defaultValue: { summary: true } },
53
+ },
54
+ showOptReqLabel: {
55
+ table: { defaultValue: { summary: true } },
56
+ },
57
+ type: {
58
+ control: false,
59
+ table: { defaultValue: { summary: "SelectTypes.Default" } },
60
+ },
61
+ value: { control: false },
33
62
  }}
34
63
  />
35
64
 
@@ -38,7 +67,7 @@ import DSProvider from "../../theme/provider";
38
67
  | Component Version | DS Version |
39
68
  | ----------------- | ---------- |
40
69
  | Added | `0.7.0` |
41
- | Latest | `0.25.1` |
70
+ | Latest | `0.25.9` |
42
71
 
43
72
  <Description of={Select} />
44
73
 
@@ -63,17 +92,23 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
63
92
 
64
93
  <Canvas withToolbar>
65
94
  <Story
66
- name="Select"
95
+ name="Select with Controls"
67
96
  args={{
97
+ className: undefined,
68
98
  helperText: "This is the helper text.",
99
+ id: "select-id",
69
100
  invalidText: "This is the error text :(",
70
101
  isDisabled: false,
71
102
  isInvalid: false,
72
103
  isRequired: false,
73
104
  labelText: "What is your favorite color?",
74
105
  name: "color",
106
+ onChange: undefined,
107
+ showHelperInvalidText: undefined,
75
108
  showLabel: true,
76
109
  showOptReqLabel: true,
110
+ type: SelectTypes.Default,
111
+ value: undefined,
77
112
  }}
78
113
  >
79
114
  {(args) => (
@@ -88,7 +123,7 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
88
123
  </Story>
89
124
  </Canvas>
90
125
 
91
- <ArgsTable story="Select" />
126
+ <ArgsTable story="Select with Controls" />
92
127
 
93
128
  ## Labelling Variations
94
129
 
@@ -102,8 +137,8 @@ text within the `label` element.
102
137
  <Story name="Labelling Variations">
103
138
  <VStack align="stretch" spacing={8}>
104
139
  <Select
105
- labelText="What is your favorite color?"
106
140
  helperText="Display the label"
141
+ labelText="What is your favorite color?"
107
142
  name="color"
108
143
  >
109
144
  <option value="red">Red</option>
@@ -113,8 +148,8 @@ text within the `label` element.
113
148
  <option value="white">White</option>
114
149
  </Select>
115
150
  <Select
116
- labelText="What is your favorite color?"
117
151
  helperText="Do not display the label"
152
+ labelText="What is your favorite color?"
118
153
  name="color"
119
154
  showLabel={false}
120
155
  >
@@ -125,10 +160,10 @@ text within the `label` element.
125
160
  <option value="white">White</option>
126
161
  </Select>
127
162
  <Select
128
- labelText="What is your favorite color?"
129
163
  helperText="Display the Required/Optional text"
130
- name="color"
131
164
  isRequired
165
+ labelText="What is your favorite color?"
166
+ name="color"
132
167
  >
133
168
  <option value="red">Red</option>
134
169
  <option value="green">Green</option>
@@ -137,11 +172,11 @@ text within the `label` element.
137
172
  <option value="white">White</option>
138
173
  </Select>
139
174
  <Select
140
- labelText="What is your favorite color?"
141
175
  helperText="Do not display the Required/Optional text"
176
+ isRequired
177
+ labelText="What is your favorite color?"
142
178
  name="color"
143
179
  showOptReqLabel={false}
144
- isRequired
145
180
  >
146
181
  <option value="red">Red</option>
147
182
  <option value="green">Green</option>
@@ -158,11 +193,11 @@ text within the `label` element.
158
193
  <Canvas>
159
194
  <DSProvider>
160
195
  <Select
161
- labelText="What is your favorite color?"
162
196
  helperText="This is the helper text."
163
197
  invalidText="This is the error text :("
164
- name="color"
165
198
  isInvalid
199
+ labelText="What is your favorite color?"
200
+ name="color"
166
201
  >
167
202
  <option value="red">Red</option>
168
203
  <option value="green">Green</option>
@@ -178,11 +213,11 @@ text within the `label` element.
178
213
  <Canvas>
179
214
  <DSProvider>
180
215
  <Select
181
- labelText="What is your favorite color?"
182
216
  helperText="This is the helper text."
183
217
  invalidText="This is the error text :("
184
- name="color"
185
218
  isDisabled
219
+ labelText="What is your favorite color?"
220
+ name="color"
186
221
  >
187
222
  <option value="red">Red</option>
188
223
  <option value="green">Green</option>
@@ -198,57 +233,133 @@ text within the `label` element.
198
233
  ### Controlled Component using `value` and `onChange` props
199
234
 
200
235
  If your application uses controlled React components and the DS `Select`
201
- component must be controlled, you can control and extract the data through the
236
+ component must be controlled, you can pass and extract the value through the
202
237
  `value` and `onChange` props. This will be called every time a new `option`
203
238
  value is selected.
204
239
 
240
+ Try it out: open up the browser's console to see new values being logged on
241
+ each change.
242
+
205
243
  ```jsx
206
- const value = "red";
207
- const onChange = (e) => {
208
- // This will return the value selected through the event object.
209
- console.log(e.target.value);
210
- };
211
- // ...
212
-
213
- <Select
214
- labelText="What is your favorite color?"
215
- helperText="This is the helper text."
216
- name="color"
217
- value={value}
218
- onChange={onChange}
219
- >
220
- <option value="red">Red</option>
221
- <option value="green">Green</option>
222
- <option value="blue">Blue</option>
223
- <option value="black">Black</option>
224
- <option value="white">White</option>
225
- </Select>;
244
+ export function SelectControlledExample() {
245
+ const [value, setValue] = React.useState();
246
+ const onChange = (e) => {
247
+ // This will return the value selected through the event object.
248
+ console.log(e.target.value);
249
+ setValue(e.target.value);
250
+ };
251
+ return (
252
+ <Select
253
+ helperText="This is the helper text."
254
+ labelText="What is your favorite color?"
255
+ name="color"
256
+ onChange={onChange}
257
+ value={value}
258
+ >
259
+ <option value="red">Red</option>
260
+ <option value="green">Green</option>
261
+ <option value="blue">Blue</option>
262
+ <option value="black">Black</option>
263
+ <option value="white">White</option>
264
+ </Select>
265
+ );
266
+ }
226
267
  ```
227
268
 
269
+ export function SelectControlledExample() {
270
+ const [value, setValue] = React.useState();
271
+ const onChange = (e) => {
272
+ // This will return the value selected through the event object.
273
+ console.log("Controlled value:", e.target.value);
274
+ setValue(e.target.value);
275
+ };
276
+ return (
277
+ <Select
278
+ helperText="This is the helper text."
279
+ labelText="What is your favorite color?"
280
+ name="color"
281
+ onChange={onChange}
282
+ value={value}
283
+ >
284
+ <option value="red">Red</option>
285
+ <option value="green">Green</option>
286
+ <option value="blue">Blue</option>
287
+ <option value="black">Black</option>
288
+ <option value="white">White</option>
289
+ </Select>
290
+ );
291
+ }
292
+
293
+ <Canvas>
294
+ <DSProvider>
295
+ <SelectControlledExample />
296
+ </DSProvider>
297
+ </Canvas>
298
+
228
299
  ### Uncontrolled Component using `ref`s
229
300
 
230
301
  If your application uses uncontrolled components, you can pass a React `ref`
231
- prop to the DS Select component to get the selected value from the DOM.
302
+ prop to the DS Select component to get the selected value from the DOM. Note
303
+ that this example uses a `Form` and a `Button` to submit the form, only then
304
+ will the value be available.
232
305
 
233
- ```jsx
234
- const selectRef = React.createRef<HTMLSelectElement>();
235
- // ...
236
- <Select
237
- labelText="What is your favorite color?"
238
- helperText="This is the helper text."
239
- name="color"
240
- >
241
- <option value="red">Red</option>
242
- <option value="green">Green</option>
243
- <option value="blue">Blue</option>
244
- <option value="black">Black</option>
245
- <option value="white">White</option>
246
- </Select>
306
+ Try it out: open up the browser's console to see new values being logged on
307
+ each change.
247
308
 
248
- // ...
249
- // Get the value through:
250
- const onSubmit = () => {
251
- // ...
252
- const selectValue = selectRef.current.value;
253
- };
309
+ ```jsx
310
+ export function SelectUncontrolledExample() {
311
+ const selectRef = React.createRef();
312
+ const onSubmit = () => {
313
+ const selectValue = selectRef.current.value;
314
+ console.log("Using uncontrolled ref:", selectValue);
315
+ };
316
+ return (
317
+ <Form>
318
+ <Select
319
+ helperText="This is the helper text."
320
+ labelText="What is your favorite color?"
321
+ name="color"
322
+ ref={selectRef}
323
+ >
324
+ <option value="red">Red</option>
325
+ <option value="green">Green</option>
326
+ <option value="blue">Blue</option>
327
+ <option value="black">Black</option>
328
+ <option value="white">White</option>
329
+ </Select>
330
+ <Button onClick={onSubmit}>Submit</Button>
331
+ </Form>
332
+ );
333
+ }
254
334
  ```
335
+
336
+ export function SelectUncontrolledExample() {
337
+ const selectRef = React.createRef();
338
+ const onSubmit = () => {
339
+ const selectValue = selectRef.current.value;
340
+ console.log("Using uncontrolled ref:", selectValue);
341
+ };
342
+ return (
343
+ <Form>
344
+ <Select
345
+ helperText="This is the helper text."
346
+ labelText="What is your favorite color?"
347
+ name="color"
348
+ ref={selectRef}
349
+ >
350
+ <option value="red">Red</option>
351
+ <option value="green">Green</option>
352
+ <option value="blue">Blue</option>
353
+ <option value="black">Black</option>
354
+ <option value="white">White</option>
355
+ </Select>
356
+ <Button onClick={onSubmit}>Submit</Button>
357
+ </Form>
358
+ );
359
+ }
360
+
361
+ <Canvas>
362
+ <DSProvider>
363
+ <SelectUncontrolledExample />
364
+ </DSProvider>
365
+ </Canvas>
@@ -198,7 +198,7 @@ describe("Select", () => {
198
198
  });
199
199
 
200
200
  it("calls the onChange callback function", () => {
201
- let value = "red";
201
+ let value = "";
202
202
  const changeCallback = (e) => {
203
203
  value = e.target.value;
204
204
  };
@@ -208,7 +208,7 @@ describe("Select", () => {
208
208
  </Select>
209
209
  );
210
210
 
211
- expect(value).toEqual("red");
211
+ expect(value).toEqual("");
212
212
 
213
213
  fireEvent.change(screen.getByRole("combobox"), {
214
214
  target: { value: "blue" },
@@ -5,23 +5,25 @@ import {
5
5
  useMultiStyleConfig,
6
6
  } from "@chakra-ui/react";
7
7
 
8
- import Label from "../Label/Label";
9
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
10
- import generateUUID from "../../helpers/generateUUID";
11
- import { IconNames, IconSizes } from "../Icons/IconTypes";
8
+ import HelperErrorText, {
9
+ HelperErrorTextType,
10
+ } from "../HelperErrorText/HelperErrorText";
12
11
  import Icon from "../Icons/Icon";
12
+ import { IconNames, IconSizes } from "../Icons/IconTypes";
13
+ import Label from "../Label/Label";
13
14
  import { SelectTypes } from "./SelectTypes";
15
+ import generateUUID from "../../helpers/generateUUID";
14
16
 
15
17
  export interface SelectProps {
16
18
  /** A class name for the `div` parent element. */
17
19
  className?: string;
18
20
  /** Optional string to populate the `HelperErrorText` for the standard state. */
19
- helperText?: string;
21
+ helperText?: HelperErrorTextType;
20
22
  /** ID that other components can cross reference for accessibility purposes */
21
23
  id?: string;
22
24
  /** Optional string to populate the `HelperErrorText` for the error state
23
25
  * when `isInvalid` is true. */
24
- invalidText?: string;
26
+ invalidText?: HelperErrorTextType;
25
27
  /** Adds the `disabled` and `aria-disabled` attributes to the select when true */
26
28
  isDisabled?: boolean;
27
29
  /** Adds the `aria-invalid` attribute to the select when true. This also makes
@@ -38,6 +40,8 @@ export interface SelectProps {
38
40
  /** The callback function to get the selected value.
39
41
  * Should be passed along with `value` for controlled components. */
40
42
  onChange?: (event: React.FormEvent) => void;
43
+ /** Placeholder text in the select element. */
44
+ placeholder?: string;
41
45
  /** Offers the ability to hide the helper/invalid text. */
42
46
  showHelperInvalidText?: boolean;
43
47
  /** Offers the ability to show the select's label onscreen or hide it. Refer
@@ -72,11 +76,12 @@ const Select = React.forwardRef<
72
76
  labelText,
73
77
  name,
74
78
  onChange,
79
+ placeholder,
75
80
  showHelperInvalidText = true,
76
81
  showLabel = true,
77
82
  showOptReqLabel = true,
78
83
  type = SelectTypes.Default,
79
- value,
84
+ value = "",
80
85
  } = props;
81
86
  const ariaAttributes = {};
82
87
  const optReqFlag = isRequired ? "Required" : "Optional";
@@ -84,10 +89,12 @@ const Select = React.forwardRef<
84
89
  const finalInvalidText = invalidText
85
90
  ? invalidText
86
91
  : "There is an error related to this field.";
87
- const footnote = isInvalid ? finalInvalidText : helperText;
92
+ const footnote: HelperErrorTextType = isInvalid
93
+ ? finalInvalidText
94
+ : helperText;
88
95
  // To control the `Select` component, both `onChange` and `value`
89
96
  // must be passed.
90
- const controlledProps = onChange && value ? { onChange, value } : {};
97
+ const controlledProps = onChange ? { onChange, value } : {};
91
98
 
92
99
  if (!showLabel) {
93
100
  ariaAttributes["aria-label"] =
@@ -126,6 +133,7 @@ const Select = React.forwardRef<
126
133
  isDisabled={isDisabled}
127
134
  isInvalid={isInvalid}
128
135
  name={name}
136
+ placeholder={placeholder}
129
137
  ref={ref}
130
138
  {...controlledProps}
131
139
  {...ariaAttributes}
@@ -136,9 +144,11 @@ const Select = React.forwardRef<
136
144
  </ChakraSelect>
137
145
  {footnote && showHelperInvalidText && (
138
146
  <Box __css={styles.helper} aria-disabled={isDisabled}>
139
- <HelperErrorText isInvalid={isInvalid} id={id + `-helperText`}>
140
- {footnote}
141
- </HelperErrorText>
147
+ <HelperErrorText
148
+ id={`${id}-helperText`}
149
+ isInvalid={isInvalid}
150
+ text={footnote}
151
+ />
142
152
  </Box>
143
153
  )}
144
154
  </Box>
@@ -1,20 +1,30 @@
1
+ import { action } from "@storybook/addon-actions";
1
2
  import {
2
- Meta,
3
- Story,
4
- Canvas,
5
3
  ArgsTable,
4
+ Canvas,
6
5
  Description,
7
- } from "@storybook/addon-docs/blocks";
6
+ Meta,
7
+ Story,
8
+ } from "@storybook/addon-docs";
8
9
  import { withDesign } from "storybook-addon-designs";
9
- import { action } from "@storybook/addon-actions";
10
10
 
11
- import { getCategory } from "../../utils/componentCategories";
11
+ import SimpleGrid from "../Grid/SimpleGrid";
12
12
  import SkeletonLoader from "./SkeletonLoader";
13
13
  import {
14
- SkeletonLoaderLayouts,
15
14
  SkeletonLoaderImageRatios,
15
+ SkeletonLoaderLayouts,
16
16
  } from "./SkeletonLoaderTypes";
17
- import SimpleGrid from "../Grid/SimpleGrid";
17
+ import { getCategory } from "../../utils/componentCategories";
18
+ import { getStorybookEnumValues } from "../../utils/utils";
19
+
20
+ export const imageRatiosEnumValues = getStorybookEnumValues(
21
+ SkeletonLoaderImageRatios,
22
+ "SkeletonLoaderImageRatios"
23
+ );
24
+ export const layoutsEnumValues = getStorybookEnumValues(
25
+ SkeletonLoaderLayouts,
26
+ "SkeletonLoaderLayouts"
27
+ );
18
28
 
19
29
  <Meta
20
30
  title={getCategory("SkeletonLoader")}
@@ -23,17 +33,25 @@ import SimpleGrid from "../Grid/SimpleGrid";
23
33
  parameters={{
24
34
  design: {
25
35
  type: "figma",
26
- url:
27
- "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=17219%3A7",
36
+ url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=17219%3A7",
28
37
  },
29
38
  jest: ["SkeletonLoader.test.tsx"],
30
39
  }}
31
40
  argTypes={{
32
- className: { table: { disable: true } },
41
+ className: { control: false },
33
42
  contentSize: { table: { defaultValue: { summary: "3" } } },
34
43
  headingSize: { table: { defaultValue: { summary: "1" } } },
35
- imageAspectRatio: { table: { defaultValue: { summary: "square" } } },
36
- layout: { table: { defaultValue: { summary: "column" } } },
44
+ imageAspectRatio: {
45
+ control: { type: "select" },
46
+ table: {
47
+ defaultValue: { summary: "SkeletonLoaderImageRatios.Square" },
48
+ },
49
+ options: imageRatiosEnumValues.options,
50
+ },
51
+ layout: {
52
+ table: { defaultValue: { summary: "SkeletonLoaderLayouts.Column" } },
53
+ options: layoutsEnumValues.options,
54
+ },
37
55
  showButton: { table: { defaultValue: { summary: "false" } } },
38
56
  showContent: { table: { defaultValue: { summary: "true" } } },
39
57
  showHeading: { table: { defaultValue: { summary: "true" } } },
@@ -58,16 +76,32 @@ to better view the example. The default value is `100%`.
58
76
 
59
77
  <Canvas withToolbar>
60
78
  <Story
61
- name="Basic with Props"
79
+ name="SkeletonLoader with Controls"
62
80
  args={{
81
+ border: false,
82
+ className: undefined,
83
+ contentSize: 3,
84
+ headingSize: 1,
85
+ imageAspectRatio: "SkeletonLoaderImageRatios.Square",
86
+ layout: "SkeletonLoaderLayouts.Column",
87
+ showButton: false,
88
+ showContent: true,
89
+ showHeading: true,
90
+ showImage: true,
63
91
  width: "300px",
64
92
  }}
65
93
  >
66
- {(args) => <SkeletonLoader {...args} />}
94
+ {(args) => (
95
+ <SkeletonLoader
96
+ {...args}
97
+ imageAspectRatio={imageRatiosEnumValues.getValue(args.imageAspectRatio)}
98
+ layout={layoutsEnumValues.getValue(args.layout)}
99
+ />
100
+ )}
67
101
  </Story>
68
102
  </Canvas>
69
103
 
70
- <ArgsTable story="Basic with Props" />
104
+ <ArgsTable story="SkeletonLoader with Controls" />
71
105
 
72
106
  # Card Placeholders in a Grid
73
107
 
@@ -15,13 +15,17 @@ export interface SkeletonLoaderProps {
15
15
  border?: boolean;
16
16
  /** Additional class name for the Skeleton component. */
17
17
  className?: string;
18
- /** Optional numeric value to control the number of lines for content placeholder; default value is `3`. */
18
+ /** Optional numeric value to control the number of lines for content
19
+ * placeholder; default value is `3`. */
19
20
  contentSize?: number;
20
- /** Optional numeric value to control the number of lines for heading placeholder; default value is `1`. */
21
+ /** Optional numeric value to control the number of lines for heading
22
+ * placeholder; default value is `1`. */
21
23
  headingSize?: number;
22
- /** Optional value to control the aspect ratio of the image placeholder; default value is `square`. */
24
+ /** Optional value to control the aspect ratio of the image placeholder;
25
+ * default value is `SkeletonLoaderImageRatios.Square`. */
23
26
  imageAspectRatio?: SkeletonLoaderImageRatios;
24
- /** Optional value to control the position of the image placeholder; default value is `column`. */
27
+ /** Optional value to control the position of the image placeholder;
28
+ * default value is `SkeletonLoaderLayouts.Column`. */
25
29
  layout?: SkeletonLoaderLayouts;
26
30
  /** Optional boolean value to control visibility of button placeholder. */
27
31
  showButton?: boolean;