@nypl/design-system-react-components 0.25.13 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -0
- package/README.md +10 -10
- package/dist/components/Accordion/Accordion.d.ts +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
- package/dist/components/Button/Button.d.ts +2 -2
- package/dist/components/Card/Card.d.ts +11 -9
- package/dist/components/Checkbox/Checkbox.d.ts +2 -2
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +5 -4
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +5 -6
- package/dist/components/Fieldset/Fieldset.d.ts +5 -6
- package/dist/components/Form/Form.d.ts +6 -6
- package/dist/components/Grid/GridTypes.d.ts +7 -7
- package/dist/components/Grid/SimpleGrid.d.ts +1 -1
- package/dist/components/Heading/Heading.d.ts +1 -1
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
- package/dist/components/Hero/Hero.d.ts +2 -1
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
- package/dist/components/Icons/Icon.d.ts +2 -1
- package/dist/components/Image/Image.d.ts +2 -2
- package/dist/components/Label/Label.d.ts +7 -4
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/List/List.d.ts +11 -11
- package/dist/components/List/ListTypes.d.ts +1 -1
- package/dist/components/Logo/Logo.d.ts +2 -1
- package/dist/components/Logo/LogoSvgs.d.ts +2 -0
- package/dist/components/Logo/LogoTypes.d.ts +2 -0
- package/dist/components/Modal/Modal.d.ts +28 -8
- package/dist/components/Notification/Notification.d.ts +4 -4
- package/dist/components/Pagination/Pagination.d.ts +2 -2
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
- package/dist/components/Radio/Radio.d.ts +4 -6
- package/dist/components/RadioGroup/RadioGroup.d.ts +12 -6
- package/dist/components/SearchBar/SearchBar.d.ts +4 -4
- package/dist/components/Select/Select.d.ts +10 -6
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +4 -3
- package/dist/components/Slider/Slider.d.ts +6 -4
- package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
- package/dist/components/StructuredContent/StructuredContent.d.ts +2 -2
- package/dist/components/Table/Table.d.ts +1 -1
- package/dist/components/Tabs/Tabs.d.ts +4 -3
- package/dist/components/Template/Template.d.ts +4 -3
- package/dist/components/Text/Text.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +5 -5
- package/dist/components/Toggle/Toggle.d.ts +3 -4
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +1767 -1180
- package/dist/design-system-react-components.cjs.development.js.map +1 -1
- package/dist/design-system-react-components.cjs.production.min.js +1 -1
- package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
- package/dist/design-system-react-components.esm.js +1774 -1188
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/useCarouselStyles.d.ts +3 -2
- package/dist/hooks/useNYPLTheme.d.ts +12 -0
- package/dist/index.d.ts +5 -2
- package/dist/styles.css +1 -1
- package/dist/theme/components/button.d.ts +10 -2
- package/dist/theme/components/card.d.ts +42 -22
- package/dist/theme/components/checkbox.d.ts +5 -4
- package/dist/theme/components/checkboxGroup.d.ts +1 -1
- package/dist/theme/components/componentWrapper.d.ts +2 -2
- package/dist/theme/components/customTable.d.ts +84 -1
- package/dist/theme/components/fieldset.d.ts +4 -14
- package/dist/theme/components/global.d.ts +23 -17
- package/dist/theme/components/heading.d.ts +53 -0
- package/dist/theme/components/helperErrorText.d.ts +1 -0
- package/dist/theme/components/hero.d.ts +20 -14
- package/dist/theme/components/label.d.ts +9 -10
- package/dist/theme/components/list.d.ts +99 -9
- package/dist/theme/components/radio.d.ts +6 -4
- package/dist/theme/components/radioGroup.d.ts +1 -1
- package/dist/theme/components/select.d.ts +28 -5
- package/dist/theme/components/skeletonLoader.d.ts +2 -2
- package/dist/theme/components/slider.d.ts +6 -3
- package/dist/theme/components/structuredContent.d.ts +197 -0
- package/dist/theme/components/textInput.d.ts +18 -6
- package/dist/theme/components/toggle.d.ts +7 -4
- package/dist/theme/foundations/global.d.ts +2 -0
- package/dist/theme/foundations/radii.d.ts +1 -0
- package/dist/theme/foundations/spacing.d.ts +46 -43
- package/package.json +17 -19
- package/src/components/Accordion/Accordion.stories.mdx +9 -9
- package/src/components/Accordion/Accordion.test.tsx +21 -0
- package/src/components/Accordion/Accordion.tsx +13 -9
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +276 -27
- package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +21 -5
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +52 -31
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +8 -7
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
- package/src/components/Button/Button.stories.mdx +87 -23
- package/src/components/Button/Button.test.tsx +25 -0
- package/src/components/Button/Button.tsx +18 -7
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
- package/src/components/Card/Card.stories.mdx +287 -194
- package/src/components/Card/Card.test.tsx +102 -0
- package/src/components/Card/Card.tsx +73 -32
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +196 -36
- package/src/components/Chakra/Grid.stories.mdx +4 -4
- package/src/components/Checkbox/Checkbox.stories.mdx +62 -10
- package/src/components/Checkbox/Checkbox.test.tsx +32 -9
- package/src/components/Checkbox/Checkbox.tsx +20 -15
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +134 -7
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +65 -17
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +137 -81
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +31 -21
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +332 -97
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
- package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
- package/src/components/DatePicker/DatePicker.test.tsx +89 -13
- package/src/components/DatePicker/DatePicker.tsx +62 -56
- package/src/components/DatePicker/_DatePicker.scss +71 -13
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
- package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
- package/src/components/Fieldset/Fieldset.test.tsx +58 -28
- package/src/components/Fieldset/Fieldset.tsx +35 -30
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
- package/src/components/Form/Form.stories.mdx +72 -39
- package/src/components/Form/Form.test.tsx +58 -15
- package/src/components/Form/Form.tsx +89 -67
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
- package/src/components/Grid/GridTypes.tsx +7 -7
- package/src/components/Grid/SimpleGrid.stories.mdx +34 -6
- package/src/components/Grid/SimpleGrid.test.tsx +9 -0
- package/src/components/Grid/SimpleGrid.tsx +29 -20
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
- package/src/components/Heading/Heading.stories.mdx +36 -3
- package/src/components/Heading/Heading.test.tsx +10 -0
- package/src/components/Heading/Heading.tsx +56 -50
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +26 -7
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
- package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
- package/src/components/Hero/Hero.stories.mdx +125 -95
- package/src/components/Hero/Hero.test.tsx +33 -0
- package/src/components/Hero/Hero.tsx +135 -126
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -19
- package/src/components/HorizontalRule/HorizontalRule.tsx +9 -26
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
- package/src/components/Icons/Icon.stories.mdx +31 -6
- package/src/components/Icons/Icon.test.tsx +38 -0
- package/src/components/Icons/Icon.tsx +93 -76
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
- package/src/components/Image/Image.stories.mdx +29 -5
- package/src/components/Image/Image.test.tsx +8 -0
- package/src/components/Image/Image.tsx +38 -26
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
- package/src/components/Label/Label.stories.mdx +42 -20
- package/src/components/Label/Label.test.tsx +42 -17
- package/src/components/Label/Label.tsx +22 -13
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
- package/src/components/Link/Link.stories.mdx +25 -15
- package/src/components/Link/Link.test.tsx +21 -22
- package/src/components/Link/Link.tsx +8 -8
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
- package/src/components/List/List.stories.mdx +75 -40
- package/src/components/List/List.test.tsx +67 -19
- package/src/components/List/List.tsx +38 -25
- package/src/components/List/ListTypes.tsx +1 -1
- package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
- package/src/components/Logo/Logo.stories.mdx +30 -6
- package/src/components/Logo/Logo.test.tsx +17 -0
- package/src/components/Logo/Logo.tsx +18 -6
- package/src/components/Logo/LogoSvgs.tsx +4 -0
- package/src/components/Logo/LogoTypes.tsx +2 -0
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
- package/src/components/Modal/Modal.stories.mdx +256 -136
- package/src/components/Modal/Modal.test.tsx +151 -9
- package/src/components/Modal/Modal.tsx +140 -20
- package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +25 -0
- package/src/components/Notification/Notification.stories.mdx +25 -1
- package/src/components/Notification/Notification.test.tsx +23 -0
- package/src/components/Notification/Notification.tsx +46 -44
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
- package/src/components/Pagination/Pagination.stories.mdx +25 -6
- package/src/components/Pagination/Pagination.test.tsx +25 -0
- package/src/components/Pagination/Pagination.tsx +6 -6
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
- package/src/components/Placeholder/Placeholder.tsx +3 -1
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +81 -11
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +17 -9
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
- package/src/components/Radio/Radio.stories.mdx +64 -12
- package/src/components/Radio/Radio.test.tsx +28 -8
- package/src/components/Radio/Radio.tsx +66 -63
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +103 -6
- package/src/components/RadioGroup/RadioGroup.stories.mdx +224 -89
- package/src/components/RadioGroup/RadioGroup.test.tsx +122 -62
- package/src/components/RadioGroup/RadioGroup.tsx +106 -100
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1236 -1020
- package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
- package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
- package/src/components/SearchBar/SearchBar.tsx +17 -8
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
- package/src/components/Select/Select.stories.mdx +128 -49
- package/src/components/Select/Select.test.tsx +63 -16
- package/src/components/Select/Select.tsx +131 -92
- package/src/components/Select/SelectTypes.tsx +5 -0
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +765 -425
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +42 -10
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +8 -0
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +76 -72
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
- package/src/components/Slider/Slider.stories.mdx +91 -42
- package/src/components/Slider/Slider.test.tsx +65 -17
- package/src/components/Slider/Slider.tsx +26 -19
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
- package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
- package/src/components/StatusBadge/StatusBadge.test.tsx +16 -0
- package/src/components/StatusBadge/StatusBadge.tsx +25 -20
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
- package/src/components/StructuredContent/StructuredContent.stories.mdx +131 -12
- package/src/components/StructuredContent/StructuredContent.test.tsx +34 -0
- package/src/components/StructuredContent/StructuredContent.tsx +80 -75
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
- package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
- package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
- package/src/components/StyleGuide/ColorCard.tsx +1 -1
- package/src/components/StyleGuide/Colors.stories.mdx +1 -2
- package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
- package/src/components/StyleGuide/Forms.stories.mdx +27 -12
- package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
- package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
- package/src/components/StyleGuide/Typography.stories.mdx +30 -21
- package/src/components/Table/Table.stories.mdx +38 -11
- package/src/components/Table/Table.test.tsx +15 -0
- package/src/components/Table/Table.tsx +7 -7
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
- package/src/components/Tabs/Tabs.stories.mdx +52 -3
- package/src/components/Tabs/Tabs.test.tsx +16 -0
- package/src/components/Tabs/Tabs.tsx +10 -6
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
- package/src/components/Template/Template.stories.mdx +47 -43
- package/src/components/Template/Template.test.tsx +33 -0
- package/src/components/Template/Template.tsx +65 -60
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +191 -20
- package/src/components/Text/Text.stories.mdx +20 -1
- package/src/components/Text/Text.test.tsx +12 -0
- package/src/components/Text/Text.tsx +6 -4
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
- package/src/components/TextInput/TextInput.stories.mdx +65 -19
- package/src/components/TextInput/TextInput.test.tsx +42 -28
- package/src/components/TextInput/TextInput.tsx +121 -113
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
- package/src/components/Toggle/Toggle.stories.mdx +80 -22
- package/src/components/Toggle/Toggle.test.tsx +27 -9
- package/src/components/Toggle/Toggle.tsx +22 -18
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +128 -5
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +23 -0
- package/src/components/VideoPlayer/VideoPlayer.tsx +133 -126
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
- package/src/docs/Chakra.stories.mdx +50 -9
- package/src/docs/Welcome.stories.mdx +160 -41
- package/src/hooks/useCarouselStyles.stories.mdx +22 -2
- package/src/hooks/useCarouselStyles.ts +3 -2
- package/src/hooks/useNYPLTheme.stories.mdx +101 -0
- package/src/hooks/useNYPLTheme.ts +30 -6
- package/src/hooks/useWindowSize.stories.mdx +23 -0
- package/src/index.ts +5 -2
- package/src/styles/base/_place-holder.scss +1 -1
- package/src/styles.scss +0 -1
- package/src/theme/components/button.ts +15 -7
- package/src/theme/components/card.ts +30 -19
- package/src/theme/components/checkbox.ts +10 -8
- package/src/theme/components/checkboxGroup.ts +1 -1
- package/src/theme/components/componentWrapper.ts +2 -2
- package/src/theme/components/customTable.ts +39 -31
- package/src/theme/components/fieldset.ts +1 -2
- package/src/theme/components/global.ts +25 -20
- package/src/theme/components/heading.ts +1 -1
- package/src/theme/components/helperErrorText.ts +1 -0
- package/src/theme/components/hero.ts +13 -15
- package/src/theme/components/label.ts +4 -3
- package/src/theme/components/list.ts +73 -66
- package/src/theme/components/notification.ts +2 -2
- package/src/theme/components/radio.ts +9 -9
- package/src/theme/components/radioGroup.ts +1 -1
- package/src/theme/components/select.ts +31 -22
- package/src/theme/components/skeletonLoader.ts +3 -3
- package/src/theme/components/slider.ts +8 -7
- package/src/theme/components/statusBadge.ts +2 -2
- package/src/theme/components/structuredContent.ts +66 -1
- package/src/theme/components/tabs.ts +2 -2
- package/src/theme/components/template.ts +9 -9
- package/src/theme/components/textInput.ts +13 -12
- package/src/theme/components/toggle.ts +17 -10
- package/src/theme/components/videoPlayer.ts +1 -1
- package/src/theme/foundations/colors.ts +1 -1
- package/src/theme/foundations/radii.ts +1 -0
- package/src/theme/foundations/spacing.ts +70 -22
- package/src/theme/foundations/typography.ts +2 -2
- package/src/utils/componentCategories.ts +1 -2
- package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
- package/dist/helpers/generateUUID.d.ts +0 -1
- package/src/components/Modal/_Modal.scss +0 -18
- package/src/helpers/generateUUID.tsx +0 -5
|
@@ -9,14 +9,21 @@ import {
|
|
|
9
9
|
import { withDesign } from "storybook-addon-designs";
|
|
10
10
|
|
|
11
11
|
import Button from "../Button/Button";
|
|
12
|
-
import Form from "../Form/Form";
|
|
12
|
+
import Form, { FormField } from "../Form/Form";
|
|
13
13
|
import Select from "./Select";
|
|
14
|
-
import { SelectTypes } from "./SelectTypes";
|
|
14
|
+
import { SelectTypes, LabelPositions } from "./SelectTypes";
|
|
15
15
|
import { getCategory } from "../../utils/componentCategories";
|
|
16
16
|
import DSProvider from "../../theme/provider";
|
|
17
17
|
import { getStorybookEnumValues } from "../../utils/utils";
|
|
18
18
|
|
|
19
|
-
export const
|
|
19
|
+
export const selectTypesEnumValues = getStorybookEnumValues(
|
|
20
|
+
SelectTypes,
|
|
21
|
+
"SelectTypes"
|
|
22
|
+
);
|
|
23
|
+
export const labelPositionsEnumValues = getStorybookEnumValues(
|
|
24
|
+
LabelPositions,
|
|
25
|
+
"LabelPositions"
|
|
26
|
+
);
|
|
20
27
|
|
|
21
28
|
<Meta
|
|
22
29
|
title={getCategory("Select")}
|
|
@@ -41,6 +48,11 @@ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
|
|
|
41
48
|
isRequired: {
|
|
42
49
|
table: { defaultValue: { summary: false } },
|
|
43
50
|
},
|
|
51
|
+
labelPosition: {
|
|
52
|
+
control: { type: "select" },
|
|
53
|
+
table: { defaultValue: { summary: "LabelPositions.Default" } },
|
|
54
|
+
options: labelPositionsEnumValues.options,
|
|
55
|
+
},
|
|
44
56
|
name: { control: false },
|
|
45
57
|
key: { table: { disable: true } },
|
|
46
58
|
onChange: { control: false },
|
|
@@ -51,7 +63,7 @@ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
|
|
|
51
63
|
showLabel: {
|
|
52
64
|
table: { defaultValue: { summary: true } },
|
|
53
65
|
},
|
|
54
|
-
|
|
66
|
+
showRequiredLabel: {
|
|
55
67
|
table: { defaultValue: { summary: true } },
|
|
56
68
|
},
|
|
57
69
|
selectType: {
|
|
@@ -67,7 +79,20 @@ export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
|
|
|
67
79
|
| Component Version | DS Version |
|
|
68
80
|
| ----------------- | ---------- |
|
|
69
81
|
| Added | `0.7.0` |
|
|
70
|
-
| Latest | `0.
|
|
82
|
+
| Latest | `0.27.0` |
|
|
83
|
+
|
|
84
|
+
## Table of Contents
|
|
85
|
+
|
|
86
|
+
- [Overview](#overview)
|
|
87
|
+
- [Component Props](#component-props)
|
|
88
|
+
- [Accessibility](#accessibility)
|
|
89
|
+
- [Option Elements](#option-elements)
|
|
90
|
+
- [Labelling Variations](#labelling-variations)
|
|
91
|
+
- [Errored](#errored)
|
|
92
|
+
- [Disabled](#disabled)
|
|
93
|
+
- [Getting Select Input Value](#getting-select-input-value)
|
|
94
|
+
|
|
95
|
+
## Overview
|
|
71
96
|
|
|
72
97
|
<Description of={Select} />
|
|
73
98
|
|
|
@@ -77,6 +102,8 @@ prop, regardless of the label visibility. Additionally, while the `id` prop is
|
|
|
77
102
|
optional, a unique `id` attribute is necessary for accessibility. If the prop
|
|
78
103
|
is left blank, a value will be generated for you.
|
|
79
104
|
|
|
105
|
+
## Component Props
|
|
106
|
+
|
|
80
107
|
<Canvas withToolbar>
|
|
81
108
|
<Story
|
|
82
109
|
name="Select with Controls"
|
|
@@ -88,18 +115,22 @@ is left blank, a value will be generated for you.
|
|
|
88
115
|
isDisabled: false,
|
|
89
116
|
isInvalid: false,
|
|
90
117
|
isRequired: false,
|
|
118
|
+
labelPosition: "LabelPositions.Default",
|
|
91
119
|
labelText: "What is your favorite color?",
|
|
92
120
|
name: "color",
|
|
93
121
|
onChange: undefined,
|
|
94
122
|
showHelperInvalidText: undefined,
|
|
95
123
|
showLabel: true,
|
|
96
|
-
|
|
124
|
+
showRequiredLabel: true,
|
|
97
125
|
selectType: SelectTypes.Default,
|
|
98
126
|
value: undefined,
|
|
99
127
|
}}
|
|
100
128
|
>
|
|
101
129
|
{(args) => (
|
|
102
|
-
<Select
|
|
130
|
+
<Select
|
|
131
|
+
{...args}
|
|
132
|
+
labelPosition={labelPositionsEnumValues.getValue(args.labelPosition)}
|
|
133
|
+
>
|
|
103
134
|
<option value="red">Red</option>
|
|
104
135
|
<option value="green">Green</option>
|
|
105
136
|
<option value="blue">Blue</option>
|
|
@@ -112,13 +143,28 @@ is left blank, a value will be generated for you.
|
|
|
112
143
|
|
|
113
144
|
<ArgsTable story="Select with Controls" />
|
|
114
145
|
|
|
146
|
+
## Accessibility
|
|
147
|
+
|
|
148
|
+
The `Select` component renders an HTML `<select>` element which is accessible.
|
|
149
|
+
It's the developer's responsibility to ensure that the appropriate `<option>`
|
|
150
|
+
elements are provided as children. Internally, a `Label` is associated with the
|
|
151
|
+
`<select>` element.
|
|
152
|
+
|
|
153
|
+
When `showLabel` is set to false, the `labelText` value will be set to the
|
|
154
|
+
`<select>`'s `aria-label` attribute.
|
|
155
|
+
|
|
156
|
+
Resources:
|
|
157
|
+
|
|
158
|
+
- [MDN select: The HTML Select element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select)
|
|
159
|
+
- [Chakra UI Select](https://chakra-ui.com/docs/components/form/select)
|
|
160
|
+
|
|
115
161
|
## Option Elements
|
|
116
162
|
|
|
117
163
|
The `Select` component renders all the necessary wrapping and associated text
|
|
118
164
|
elements, but the select options _need_ to be child `<option>` HTML elements.
|
|
119
165
|
|
|
120
166
|
```jsx
|
|
121
|
-
<Select labelText="What is your favorite color?" name="color">
|
|
167
|
+
<Select id="select" labelText="What is your favorite color?" name="color">
|
|
122
168
|
<option value="red">Red</option>
|
|
123
169
|
<option value="green">Green</option>
|
|
124
170
|
<option value="blue">Blue</option>
|
|
@@ -137,17 +183,20 @@ and `option` HTML elements:
|
|
|
137
183
|
|
|
138
184
|
## Labelling Variations
|
|
139
185
|
|
|
140
|
-
A Select can be rendered with or without a visible label.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
186
|
+
A Select can be rendered with or without a visible label. If the label is visible,
|
|
187
|
+
it can be displayed above (the default) or inline with the select input using the
|
|
188
|
+
`labelPosition` prop. Note that the label will only display inline when the device
|
|
189
|
+
width exceeds the `--nypl-breakpoint-medium` breakpoint, or 600px. When `showLabel`
|
|
190
|
+
is set to `false`, an `aria-label` attribute is added to the select input to maintain
|
|
191
|
+
accessibility. If the component needs to be required, the `showRequiredLabel` prop
|
|
192
|
+
can be used to show or hide the "Required" text within the `label` element.
|
|
145
193
|
|
|
146
194
|
<Canvas>
|
|
147
195
|
<Story name="Labelling Variations">
|
|
148
196
|
<VStack align="stretch" spacing={8}>
|
|
149
197
|
<Select
|
|
150
198
|
helperText="Display the label"
|
|
199
|
+
id="label-example1"
|
|
151
200
|
labelText="What is your favorite color?"
|
|
152
201
|
name="color"
|
|
153
202
|
>
|
|
@@ -159,6 +208,7 @@ text within the `label` element.
|
|
|
159
208
|
</Select>
|
|
160
209
|
<Select
|
|
161
210
|
helperText="Do not display the label"
|
|
211
|
+
id="label-example2"
|
|
162
212
|
labelText="What is your favorite color?"
|
|
163
213
|
name="color"
|
|
164
214
|
showLabel={false}
|
|
@@ -170,7 +220,8 @@ text within the `label` element.
|
|
|
170
220
|
<option value="white">White</option>
|
|
171
221
|
</Select>
|
|
172
222
|
<Select
|
|
173
|
-
helperText="Display the Required
|
|
223
|
+
helperText="Display the Required text"
|
|
224
|
+
id="label-example3"
|
|
174
225
|
isRequired
|
|
175
226
|
labelText="What is your favorite color?"
|
|
176
227
|
name="color"
|
|
@@ -182,11 +233,25 @@ text within the `label` element.
|
|
|
182
233
|
<option value="white">White</option>
|
|
183
234
|
</Select>
|
|
184
235
|
<Select
|
|
185
|
-
helperText="Do not display the Required
|
|
236
|
+
helperText="Do not display the Required text"
|
|
237
|
+
id="label-example4"
|
|
186
238
|
isRequired
|
|
187
239
|
labelText="What is your favorite color?"
|
|
188
240
|
name="color"
|
|
189
|
-
|
|
241
|
+
showRequiredLabel={false}
|
|
242
|
+
>
|
|
243
|
+
<option value="red">Red</option>
|
|
244
|
+
<option value="green">Green</option>
|
|
245
|
+
<option value="blue">Blue</option>
|
|
246
|
+
<option value="black">Black</option>
|
|
247
|
+
<option value="white">White</option>
|
|
248
|
+
</Select>
|
|
249
|
+
<Select
|
|
250
|
+
helperText="Display the label inline"
|
|
251
|
+
isRequired
|
|
252
|
+
labelText="What is your favorite color?"
|
|
253
|
+
name="color"
|
|
254
|
+
labelPosition={LabelPositions.Inline}
|
|
190
255
|
>
|
|
191
256
|
<option value="red">Red</option>
|
|
192
257
|
<option value="green">Green</option>
|
|
@@ -204,6 +269,7 @@ text within the `label` element.
|
|
|
204
269
|
<DSProvider>
|
|
205
270
|
<Select
|
|
206
271
|
helperText="This is the helper text."
|
|
272
|
+
id="errored"
|
|
207
273
|
invalidText="This is the error text :("
|
|
208
274
|
isInvalid
|
|
209
275
|
labelText="What is your favorite color?"
|
|
@@ -224,6 +290,7 @@ text within the `label` element.
|
|
|
224
290
|
<DSProvider>
|
|
225
291
|
<Select
|
|
226
292
|
helperText="This is the helper text."
|
|
293
|
+
id="disabled"
|
|
227
294
|
invalidText="This is the error text :("
|
|
228
295
|
isDisabled
|
|
229
296
|
labelText="What is your favorite color?"
|
|
@@ -238,14 +305,14 @@ text within the `label` element.
|
|
|
238
305
|
</DSProvider>
|
|
239
306
|
</Canvas>
|
|
240
307
|
|
|
241
|
-
## Getting Select
|
|
308
|
+
## Getting Select Input Value
|
|
242
309
|
|
|
243
310
|
### Controlled Component using `value` and `onChange` props
|
|
244
311
|
|
|
245
|
-
If your application uses controlled React components and the
|
|
246
|
-
component must be controlled, you can pass and extract the
|
|
247
|
-
`value` and `onChange` props. This will be called every time
|
|
248
|
-
value is selected.
|
|
312
|
+
If your application uses controlled React components and the Reservoir Design
|
|
313
|
+
System (DS) `Select` component must be controlled, you can pass and extract the
|
|
314
|
+
value through the `value` and `onChange` props. This will be called every time
|
|
315
|
+
a new `option` value is selected.
|
|
249
316
|
|
|
250
317
|
Try it out: open up the browser's console to see new values being logged on
|
|
251
318
|
each change.
|
|
@@ -261,6 +328,7 @@ export function SelectControlledExample() {
|
|
|
261
328
|
return (
|
|
262
329
|
<Select
|
|
263
330
|
helperText="This is the helper text."
|
|
331
|
+
id="example-1"
|
|
264
332
|
labelText="What is your favorite color?"
|
|
265
333
|
name="color"
|
|
266
334
|
onChange={onChange}
|
|
@@ -286,6 +354,7 @@ export function SelectControlledExample() {
|
|
|
286
354
|
return (
|
|
287
355
|
<Select
|
|
288
356
|
helperText="This is the helper text."
|
|
357
|
+
id="example-1"
|
|
289
358
|
labelText="What is your favorite color?"
|
|
290
359
|
name="color"
|
|
291
360
|
onChange={onChange}
|
|
@@ -324,20 +393,25 @@ export function SelectUncontrolledExample() {
|
|
|
324
393
|
console.log("Using uncontrolled ref:", selectValue);
|
|
325
394
|
};
|
|
326
395
|
return (
|
|
327
|
-
<Form>
|
|
328
|
-
<
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
396
|
+
<Form id="form">
|
|
397
|
+
<FormField>
|
|
398
|
+
<Select
|
|
399
|
+
helperText="This is the helper text."
|
|
400
|
+
id="example-2"
|
|
401
|
+
labelText="What is your favorite color?"
|
|
402
|
+
name="color"
|
|
403
|
+
ref={selectRef}
|
|
404
|
+
>
|
|
405
|
+
<option value="red">Red</option>
|
|
406
|
+
<option value="green">Green</option>
|
|
407
|
+
<option value="blue">Blue</option>
|
|
408
|
+
<option value="black">Black</option>
|
|
409
|
+
<option value="white">White</option>
|
|
410
|
+
</Select>
|
|
411
|
+
<Button id="submit" onClick={onSubmit}>
|
|
412
|
+
Submit
|
|
413
|
+
</Button>
|
|
414
|
+
</FormField>
|
|
341
415
|
</Form>
|
|
342
416
|
);
|
|
343
417
|
}
|
|
@@ -350,20 +424,25 @@ export function SelectUncontrolledExample() {
|
|
|
350
424
|
console.log("Using uncontrolled ref:", selectValue);
|
|
351
425
|
};
|
|
352
426
|
return (
|
|
353
|
-
<Form>
|
|
354
|
-
<
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
427
|
+
<Form id="form">
|
|
428
|
+
<FormField>
|
|
429
|
+
<Select
|
|
430
|
+
helperText="This is the helper text."
|
|
431
|
+
id="example-2"
|
|
432
|
+
labelText="What is your favorite color?"
|
|
433
|
+
name="color"
|
|
434
|
+
ref={selectRef}
|
|
435
|
+
>
|
|
436
|
+
<option value="red">Red</option>
|
|
437
|
+
<option value="green">Green</option>
|
|
438
|
+
<option value="blue">Blue</option>
|
|
439
|
+
<option value="black">Black</option>
|
|
440
|
+
<option value="white">White</option>
|
|
441
|
+
</Select>
|
|
442
|
+
<Button id="submit" onClick={onSubmit}>
|
|
443
|
+
Submit
|
|
444
|
+
</Button>
|
|
445
|
+
</FormField>
|
|
367
446
|
</Form>
|
|
368
447
|
);
|
|
369
448
|
}
|
|
@@ -4,9 +4,11 @@ import { axe } from "jest-axe";
|
|
|
4
4
|
import renderer from "react-test-renderer";
|
|
5
5
|
|
|
6
6
|
import Select from "./Select";
|
|
7
|
+
import { LabelPositions } from "./SelectTypes";
|
|
7
8
|
|
|
8
9
|
const baseProps = {
|
|
9
10
|
helperText: "This is the helper text.",
|
|
11
|
+
id: "select",
|
|
10
12
|
labelText: "What is your favorite color?",
|
|
11
13
|
name: "color",
|
|
12
14
|
};
|
|
@@ -79,26 +81,17 @@ describe("Select", () => {
|
|
|
79
81
|
).toHaveAttribute("aria-describedby", `${id}-helperText`);
|
|
80
82
|
});
|
|
81
83
|
|
|
82
|
-
it("renders
|
|
83
|
-
const { rerender } = render(
|
|
84
|
-
expect(screen.getByText(/Optional/i)).toBeInTheDocument();
|
|
85
|
-
|
|
86
|
-
rerender(
|
|
84
|
+
it("renders '(Required)' text in the label", () => {
|
|
85
|
+
const { rerender } = render(
|
|
87
86
|
<Select {...baseProps} isRequired>
|
|
88
87
|
{baseOptions}
|
|
89
88
|
</Select>
|
|
90
89
|
);
|
|
91
|
-
expect(screen.getByText(/Required/i)).toBeInTheDocument();
|
|
92
90
|
|
|
93
|
-
|
|
94
|
-
<Select {...baseProps} showOptReqLabel={false}>
|
|
95
|
-
{baseOptions}
|
|
96
|
-
</Select>
|
|
97
|
-
);
|
|
98
|
-
expect(screen.queryByText(/Optional/i)).not.toBeInTheDocument();
|
|
91
|
+
expect(screen.getByText(/Required/i)).toBeInTheDocument();
|
|
99
92
|
|
|
100
93
|
rerender(
|
|
101
|
-
<Select {...baseProps} isRequired
|
|
94
|
+
<Select {...baseProps} isRequired showRequiredLabel={false}>
|
|
102
95
|
{baseOptions}
|
|
103
96
|
</Select>
|
|
104
97
|
);
|
|
@@ -120,9 +113,9 @@ describe("Select", () => {
|
|
|
120
113
|
).toHaveAttribute("required");
|
|
121
114
|
});
|
|
122
115
|
|
|
123
|
-
it("should not render a required label if '
|
|
116
|
+
it("should not render a required label if 'showRequiredLabel' flag is false, but still render the label", () => {
|
|
124
117
|
render(
|
|
125
|
-
<Select {...baseProps} isRequired
|
|
118
|
+
<Select {...baseProps} isRequired showRequiredLabel={false}>
|
|
126
119
|
{baseOptions}
|
|
127
120
|
</Select>
|
|
128
121
|
);
|
|
@@ -222,9 +215,22 @@ describe("Select", () => {
|
|
|
222
215
|
expect(value).toEqual("white");
|
|
223
216
|
});
|
|
224
217
|
|
|
218
|
+
it("logs a warning when there is no `id` passed", () => {
|
|
219
|
+
const warn = jest.spyOn(console, "warn");
|
|
220
|
+
render(
|
|
221
|
+
// @ts-ignore: Typescript complains when a required prop is not passed, but
|
|
222
|
+
// here we don't want to pass the required prop to make sure the warning appears.
|
|
223
|
+
<Select labelText="What is your favorite color?" name="color">
|
|
224
|
+
{baseOptions}
|
|
225
|
+
</Select>
|
|
226
|
+
);
|
|
227
|
+
expect(warn).toHaveBeenCalledWith(
|
|
228
|
+
"NYPL Reservoir Select: This component's required `id` prop was not passed."
|
|
229
|
+
);
|
|
230
|
+
});
|
|
231
|
+
|
|
225
232
|
it("Renders the UI snapshot correctly", () => {
|
|
226
233
|
const siblings = ["Kendall", "Shiv", "Connor", "Roman", "Tom"];
|
|
227
|
-
|
|
228
234
|
const options = siblings.map((sibling) => (
|
|
229
235
|
<option key={sibling}>{sibling}</option>
|
|
230
236
|
));
|
|
@@ -289,6 +295,19 @@ describe("Select", () => {
|
|
|
289
295
|
</Select>
|
|
290
296
|
)
|
|
291
297
|
.toJSON();
|
|
298
|
+
const withLabelInline = renderer
|
|
299
|
+
.create(
|
|
300
|
+
<Select
|
|
301
|
+
id="select"
|
|
302
|
+
isRequired
|
|
303
|
+
labelPosition={LabelPositions.Inline}
|
|
304
|
+
labelText="Which Succession sibling are you?"
|
|
305
|
+
name="succession-sibling"
|
|
306
|
+
>
|
|
307
|
+
{options}
|
|
308
|
+
</Select>
|
|
309
|
+
)
|
|
310
|
+
.toJSON();
|
|
292
311
|
const hasOnChange = renderer
|
|
293
312
|
.create(
|
|
294
313
|
<Select
|
|
@@ -301,12 +320,40 @@ describe("Select", () => {
|
|
|
301
320
|
</Select>
|
|
302
321
|
)
|
|
303
322
|
.toJSON();
|
|
323
|
+
const withChakraProps = renderer
|
|
324
|
+
.create(
|
|
325
|
+
<Select
|
|
326
|
+
id="chakra"
|
|
327
|
+
labelText="Which Succession sibling are you?"
|
|
328
|
+
name="succession-sibling"
|
|
329
|
+
p="20px"
|
|
330
|
+
color="ui.error.primary"
|
|
331
|
+
>
|
|
332
|
+
{options}
|
|
333
|
+
</Select>
|
|
334
|
+
)
|
|
335
|
+
.toJSON();
|
|
336
|
+
const withOtherProps = renderer
|
|
337
|
+
.create(
|
|
338
|
+
<Select
|
|
339
|
+
id="props"
|
|
340
|
+
labelText="Which Succession sibling are you?"
|
|
341
|
+
name="succession-sibling"
|
|
342
|
+
data-testid="props"
|
|
343
|
+
>
|
|
344
|
+
{options}
|
|
345
|
+
</Select>
|
|
346
|
+
)
|
|
347
|
+
.toJSON();
|
|
304
348
|
|
|
305
349
|
expect(primary).toMatchSnapshot();
|
|
306
350
|
expect(disabled).toMatchSnapshot();
|
|
307
351
|
expect(withInvalidText).toMatchSnapshot();
|
|
308
352
|
expect(withHelperText).toMatchSnapshot();
|
|
309
353
|
expect(required).toMatchSnapshot();
|
|
354
|
+
expect(withLabelInline).toMatchSnapshot();
|
|
310
355
|
expect(hasOnChange).toMatchSnapshot();
|
|
356
|
+
expect(withChakraProps).toMatchSnapshot();
|
|
357
|
+
expect(withOtherProps).toMatchSnapshot();
|
|
311
358
|
});
|
|
312
359
|
});
|