@nypl/design-system-react-components 0.25.8 → 0.25.11
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 +110 -1
- package/README.md +1 -1
- package/dist/components/Button/Button.d.ts +6 -6
- package/dist/components/Button/ButtonTypes.d.ts +0 -1
- package/dist/components/Card/Card.d.ts +6 -4
- package/dist/components/Checkbox/Checkbox.d.ts +3 -2
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
- package/dist/components/DatePicker/DatePicker.d.ts +4 -3
- package/dist/components/Fieldset/Fieldset.d.ts +1 -3
- package/dist/components/Form/Form.d.ts +15 -14
- package/dist/components/Form/FormTypes.d.ts +2 -2
- package/dist/components/Heading/Heading.d.ts +7 -3
- package/dist/components/Heading/HeadingTypes.d.ts +6 -6
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +3 -3
- package/dist/components/Icons/Icon.d.ts +4 -4
- package/dist/components/Icons/IconSvgs.d.ts +0 -21
- package/dist/components/Icons/IconTypes.d.ts +0 -23
- package/dist/components/Image/Image.d.ts +11 -3
- package/dist/components/List/List.d.ts +1 -1
- package/dist/components/Logo/Logo.d.ts +28 -0
- package/dist/components/Logo/LogoSvgs.d.ts +34 -0
- package/dist/components/Logo/LogoTypes.d.ts +46 -0
- package/dist/components/Modal/Modal.d.ts +0 -4
- package/dist/components/Notification/Notification.d.ts +4 -2
- package/dist/components/Placeholder/Placeholder.d.ts +3 -5
- package/dist/components/Radio/Radio.d.ts +6 -5
- package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
- package/dist/components/SearchBar/SearchBar.d.ts +15 -7
- package/dist/components/Select/Select.d.ts +7 -2
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
- package/dist/components/Slider/Slider.d.ts +3 -2
- package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
- package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
- package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
- package/dist/components/Table/Table.d.ts +29 -0
- package/dist/components/Template/Template.d.ts +30 -6
- package/dist/components/Text/Text.d.ts +2 -2
- package/dist/components/TextInput/TextInput.d.ts +4 -3
- package/dist/components/Toggle/Toggle.d.ts +3 -2
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
- package/dist/design-system-react-components.cjs.development.js +6721 -5777
- 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 +6774 -5839
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +10 -8
- package/dist/resources.scss +0 -2
- package/dist/styles.css +2 -2
- package/dist/theme/components/breadcrumb.d.ts +1 -1
- package/dist/theme/components/button.d.ts +0 -12
- package/dist/theme/components/card.d.ts +14 -2
- package/dist/theme/components/customTable.d.ts +56 -0
- package/dist/theme/components/fieldset.d.ts +2 -2
- package/dist/theme/components/global.d.ts +1 -1
- package/dist/theme/components/heading.d.ts +4 -0
- package/dist/theme/components/label.d.ts +1 -1
- package/dist/theme/components/link.d.ts +14 -1
- package/dist/theme/components/list.d.ts +0 -2
- package/dist/theme/components/logo.d.ts +4 -0
- package/dist/theme/components/notification.d.ts +13 -4
- package/dist/theme/components/searchBar.d.ts +9 -11
- package/dist/theme/components/select.d.ts +1 -0
- package/dist/theme/components/structuredContent.d.ts +33 -0
- package/dist/theme/components/template.d.ts +10 -10
- package/dist/theme/components/textInput.d.ts +4 -0
- package/dist/theme/components/toggle.d.ts +8 -5
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +40 -37
- package/src/__tests__/utils/utils.test.ts +23 -1
- package/src/components/Accordion/Accordion.stories.mdx +15 -13
- package/src/components/Accordion/Accordion.test.tsx +45 -1
- package/src/components/Accordion/Accordion.tsx +20 -8
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
- package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
- package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
- package/src/components/Autosuggest/_Autosuggest.scss +2 -6
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +15 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +5 -5
- package/src/components/Button/Button.stories.mdx +93 -48
- package/src/components/Button/Button.test.tsx +0 -12
- package/src/components/Button/Button.tsx +7 -7
- package/src/components/Button/ButtonTypes.tsx +0 -1
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
- package/src/components/Card/Card.stories.mdx +186 -71
- package/src/components/Card/Card.test.tsx +45 -22
- package/src/components/Card/Card.tsx +21 -6
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +9 -3
- package/src/components/Chakra/Box.stories.mdx +3 -3
- package/src/components/Chakra/Center.stories.mdx +5 -5
- package/src/components/Chakra/Flex.stories.mdx +113 -0
- package/src/components/Chakra/Grid.stories.mdx +3 -3
- package/src/components/Chakra/Stack.stories.mdx +2 -2
- package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
- package/src/components/Checkbox/Checkbox.tsx +13 -8
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
- package/src/components/DatePicker/DatePicker.test.tsx +6 -6
- package/src/components/DatePicker/DatePicker.tsx +17 -11
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +50 -24
- package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
- package/src/components/Fieldset/Fieldset.tsx +2 -4
- package/src/components/Form/Form.stories.mdx +75 -49
- package/src/components/Form/Form.test.tsx +92 -3
- package/src/components/Form/Form.tsx +28 -23
- package/src/components/Form/FormTypes.tsx +2 -2
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
- package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
- package/src/components/Heading/Heading.stories.mdx +59 -23
- package/src/components/Heading/Heading.test.tsx +82 -18
- package/src/components/Heading/Heading.tsx +31 -31
- package/src/components/Heading/HeadingTypes.tsx +6 -6
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
- package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
- package/src/components/Hero/Hero.stories.mdx +72 -53
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
- package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
- package/src/components/Icons/Icon.stories.mdx +78 -77
- package/src/components/Icons/Icon.test.tsx +1 -1
- package/src/components/Icons/Icon.tsx +5 -6
- package/src/components/Icons/IconSvgs.tsx +0 -42
- package/src/components/Icons/IconTypes.tsx +0 -24
- package/src/components/Image/Image.stories.mdx +66 -18
- package/src/components/Image/Image.tsx +21 -10
- package/src/components/Label/Label.stories.mdx +20 -19
- package/src/components/Link/Link.stories.mdx +102 -51
- package/src/components/Link/Link.test.tsx +38 -8
- package/src/components/Link/Link.tsx +19 -12
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
- package/src/components/List/List.stories.mdx +60 -29
- package/src/components/List/List.test.tsx +1 -1
- package/src/components/List/List.tsx +2 -2
- package/src/components/List/__snapshots__/List.test.tsx.snap +3 -1
- package/src/components/Logo/Logo.stories.mdx +222 -0
- package/src/components/Logo/Logo.test.tsx +98 -0
- package/src/components/Logo/Logo.tsx +97 -0
- package/src/components/Logo/LogoSvgs.tsx +66 -0
- package/src/components/Logo/LogoTypes.tsx +48 -0
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
- package/src/components/Modal/Modal.stories.mdx +20 -5
- package/src/components/Modal/Modal.tsx +2 -8
- package/src/components/Notification/Notification.stories.mdx +128 -38
- package/src/components/Notification/Notification.test.tsx +49 -1
- package/src/components/Notification/Notification.tsx +25 -12
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
- package/src/components/Pagination/Pagination.stories.mdx +18 -7
- package/src/components/Pagination/Pagination.tsx +3 -3
- package/src/components/Placeholder/Placeholder.tsx +7 -14
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
- package/src/components/Radio/Radio.stories.mdx +39 -19
- package/src/components/Radio/Radio.tsx +13 -9
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
- package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
- package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
- package/src/components/RadioGroup/RadioGroup.tsx +97 -94
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
- package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
- package/src/components/SearchBar/SearchBar.stories.mdx +115 -33
- package/src/components/SearchBar/SearchBar.tsx +72 -51
- package/src/components/Select/Select.stories.mdx +48 -14
- package/src/components/Select/Select.test.tsx +89 -0
- package/src/components/Select/Select.tsx +27 -12
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
- package/src/components/Slider/Slider.stories.mdx +72 -22
- package/src/components/Slider/Slider.tsx +15 -10
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
- package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
- package/src/components/StatusBadge/StatusBadge.tsx +2 -1
- package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
- package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
- package/src/components/StructuredContent/StructuredContent.tsx +153 -0
- package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
- package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
- package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
- package/src/components/StyleGuide/ColorCard.tsx +1 -2
- package/src/components/StyleGuide/Colors.stories.mdx +3 -11
- package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
- package/src/components/StyleGuide/Forms.stories.mdx +2 -10
- package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
- package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
- package/src/components/StyleGuide/Typography.stories.mdx +64 -76
- package/src/components/Table/Table.stories.mdx +165 -0
- package/src/components/Table/Table.test.tsx +137 -0
- package/src/components/Table/Table.tsx +126 -0
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
- package/src/components/Tabs/Tabs.stories.mdx +20 -14
- package/src/components/Tabs/Tabs.test.tsx +21 -5
- package/src/components/Tabs/Tabs.tsx +35 -20
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
- package/src/components/Template/Template.stories.mdx +132 -48
- package/src/components/Template/Template.test.tsx +128 -6
- package/src/components/Template/Template.tsx +93 -13
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
- package/src/components/Text/Text.stories.mdx +33 -11
- package/src/components/Text/Text.tsx +2 -2
- package/src/components/TextInput/TextInput.stories.mdx +84 -17
- package/src/components/TextInput/TextInput.test.tsx +96 -0
- package/src/components/TextInput/TextInput.tsx +12 -8
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
- package/src/components/Toggle/Toggle.stories.mdx +33 -9
- package/src/components/Toggle/Toggle.tsx +14 -9
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +4 -4
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
- package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
- package/src/docs/Chakra.stories.mdx +5 -8
- package/src/docs/Intro.stories.mdx +2 -2
- package/src/index.ts +13 -6
- package/src/styles/base/_03-base.scss +1 -1
- package/src/styles/base/_place-holder.scss +7 -7
- package/src/styles.scss +1 -5
- package/src/theme/components/breadcrumb.ts +4 -4
- package/src/theme/components/button.ts +5 -12
- package/src/theme/components/card.ts +5 -2
- package/src/theme/components/checkbox.ts +1 -1
- package/src/theme/components/customTable.ts +63 -0
- package/src/theme/components/datePicker.ts +1 -1
- package/src/theme/components/global.ts +7 -7
- package/src/theme/components/heading.ts +13 -11
- package/src/theme/components/helperErrorText.ts +1 -1
- package/src/theme/components/image.ts +1 -1
- package/src/theme/components/link.ts +17 -5
- package/src/theme/components/list.ts +3 -5
- package/src/theme/components/logo.ts +54 -0
- package/src/theme/components/notification.ts +19 -9
- package/src/theme/components/searchBar.ts +11 -13
- package/src/theme/components/select.ts +1 -0
- package/src/theme/components/statusBadge.ts +1 -1
- package/src/theme/components/structuredContent.ts +74 -0
- package/src/theme/components/template.ts +10 -10
- package/src/theme/components/text.ts +6 -6
- package/src/theme/components/textInput.ts +2 -0
- package/src/theme/components/toggle.ts +10 -6
- package/src/theme/components/videoPlayer.ts +0 -2
- package/src/theme/foundations/global.ts +2 -2
- package/src/theme/foundations/typography.ts +84 -12
- package/src/theme/index.ts +6 -0
- package/src/utils/componentCategories.ts +2 -1
- package/src/utils/utils.ts +17 -0
- package/dist/__tests__/utils/bem.test.d.ts +0 -1
- package/dist/components/CardEdition/CardEdition.d.ts +0 -21
- package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
- package/dist/components/Input/Input.d.ts +0 -36
- package/dist/components/Input/Input.stories.d.ts +0 -29
- package/dist/components/Input/InputTypes.d.ts +0 -6
- package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
- package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
- package/dist/helpers/getCSSVariable.d.ts +0 -1
- package/dist/interfaces.d.ts +0 -3
- package/dist/utils/bem.d.ts +0 -1
- package/src/__tests__/utils/bem.test.ts +0 -37
- package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
- package/src/components/CardEdition/CardEdition.test.tsx +0 -395
- package/src/components/CardEdition/CardEdition.tsx +0 -60
- package/src/components/CardEdition/_CardEdition.scss +0 -137
- package/src/components/Input/Input.stories.tsx +0 -133
- package/src/components/Input/Input.test.tsx +0 -266
- package/src/components/Input/Input.tsx +0 -81
- package/src/components/Input/InputTypes.tsx +0 -8
- package/src/components/Input/_Input.scss +0 -78
- package/src/components/StyleGuide/UIDocCard.tsx +0 -36
- package/src/helpers/CSSVariablesHelper.tsx +0 -34
- package/src/helpers/getCSSVariable.tsx +0 -5
- package/src/interfaces.ts +0 -3
- package/src/utils/bem.ts +0 -44
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import { Box, useMultiStyleConfig } from "@chakra-ui/react";
|
|
2
|
+
import * as React from "react";
|
|
3
3
|
|
|
4
|
-
import generateUUID from "../../helpers/generateUUID";
|
|
5
|
-
import Select from "../Select/Select";
|
|
6
|
-
import TextInput from "../TextInput/TextInput";
|
|
7
|
-
import { TextInputTypes, TextInputVariants } from "../TextInput/TextInputTypes";
|
|
8
4
|
import Button from "../Button/Button";
|
|
9
5
|
import { ButtonTypes } from "../Button/ButtonTypes";
|
|
6
|
+
import ComponentWrapper from "../ComponentWrapper/ComponentWrapper";
|
|
7
|
+
import { HelperErrorTextType } from "../HelperErrorText/HelperErrorText";
|
|
10
8
|
import Icon from "../Icons/Icon";
|
|
11
9
|
import { IconAlign, IconNames, IconSizes } from "../Icons/IconTypes";
|
|
12
|
-
import
|
|
10
|
+
import Select from "../Select/Select";
|
|
13
11
|
import { SelectTypes } from "../Select/SelectTypes";
|
|
12
|
+
import TextInput from "../TextInput/TextInput";
|
|
13
|
+
import { TextInputTypes, TextInputVariants } from "../TextInput/TextInputTypes";
|
|
14
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
interface SelectProps {
|
|
17
|
-
labelText: string;
|
|
18
|
-
name: string;
|
|
19
|
-
optionsData: string[];
|
|
20
|
-
}
|
|
21
|
-
interface TextInputProps {
|
|
16
|
+
interface BaseProps {
|
|
22
17
|
labelText: string;
|
|
23
18
|
name: string;
|
|
24
19
|
onChange?: (
|
|
@@ -26,6 +21,12 @@ interface TextInputProps {
|
|
|
26
21
|
| React.ChangeEvent<HTMLInputElement>
|
|
27
22
|
| React.ChangeEvent<HTMLTextAreaElement>
|
|
28
23
|
) => void;
|
|
24
|
+
}
|
|
25
|
+
// Internal interfaces that are used only for `SearchBar` props.
|
|
26
|
+
export interface SelectProps extends BaseProps {
|
|
27
|
+
optionsData: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface TextInputProps extends BaseProps {
|
|
29
30
|
placeholder: string;
|
|
30
31
|
value?: string;
|
|
31
32
|
}
|
|
@@ -37,13 +38,17 @@ export interface SearchBarProps {
|
|
|
37
38
|
buttonOnClick?: (event: React.MouseEvent | React.KeyboardEvent) => void;
|
|
38
39
|
/** A class name for the `form` element. */
|
|
39
40
|
className?: string;
|
|
41
|
+
/** Optional string for the SearchBar's description above the component. */
|
|
42
|
+
descriptionText?: string;
|
|
43
|
+
/** Optional string for the SearchBar's heading text above the component. */
|
|
44
|
+
headingText?: string;
|
|
40
45
|
/** The text to display below the form in a `HelperErrorText` component. */
|
|
41
|
-
|
|
46
|
+
helperText?: HelperErrorTextType;
|
|
42
47
|
/** ID that other components can cross reference for accessibility purposes */
|
|
43
48
|
id?: string;
|
|
44
49
|
/** Optional string to populate the `HelperErrorText` for the error state
|
|
45
50
|
* when `isInvalid` is true. */
|
|
46
|
-
invalidText?:
|
|
51
|
+
invalidText?: HelperErrorTextType;
|
|
47
52
|
/** Sets children form components in the disabled state. */
|
|
48
53
|
isDisabled?: boolean;
|
|
49
54
|
/** Sets children form components in the error state. */
|
|
@@ -54,6 +59,9 @@ export interface SearchBarProps {
|
|
|
54
59
|
labelText: string;
|
|
55
60
|
/** Adds 'method' property to the `form` element. */
|
|
56
61
|
method?: string;
|
|
62
|
+
/** Sets the `Button` variant type to `ButtonTypes.NoBrand` when true;
|
|
63
|
+
* false by default which sets the type to `ButtonTypes.Primary`. */
|
|
64
|
+
noBrandButtonType?: boolean;
|
|
57
65
|
/** Handler function when the form is submitted. */
|
|
58
66
|
onSubmit: (event: React.FormEvent) => void;
|
|
59
67
|
/** Required props to render a `Select` element. */
|
|
@@ -73,7 +81,9 @@ export default function SearchBar(props: SearchBarProps) {
|
|
|
73
81
|
action,
|
|
74
82
|
buttonOnClick = null,
|
|
75
83
|
className,
|
|
76
|
-
|
|
84
|
+
descriptionText,
|
|
85
|
+
headingText,
|
|
86
|
+
helperText,
|
|
77
87
|
id = generateUUID(),
|
|
78
88
|
invalidText,
|
|
79
89
|
isDisabled = false,
|
|
@@ -81,12 +91,13 @@ export default function SearchBar(props: SearchBarProps) {
|
|
|
81
91
|
isRequired = false,
|
|
82
92
|
labelText,
|
|
83
93
|
method,
|
|
94
|
+
noBrandButtonType = false,
|
|
84
95
|
onSubmit,
|
|
85
96
|
selectProps,
|
|
86
97
|
textInputElement,
|
|
87
98
|
textInputProps,
|
|
88
99
|
} = props;
|
|
89
|
-
const styles = useMultiStyleConfig("SearchBar", {
|
|
100
|
+
const styles = useMultiStyleConfig("SearchBar", {});
|
|
90
101
|
const stateProps = {
|
|
91
102
|
helperText: "",
|
|
92
103
|
isDisabled,
|
|
@@ -95,19 +106,28 @@ export default function SearchBar(props: SearchBarProps) {
|
|
|
95
106
|
showHelperInvalidText: false,
|
|
96
107
|
showLabel: false,
|
|
97
108
|
};
|
|
98
|
-
const
|
|
99
|
-
const ariaDescribedby = helperErrorTextID;
|
|
100
|
-
const footnote = isInvalid ? invalidText : helperErrorText;
|
|
109
|
+
const footnote = isInvalid ? invalidText : helperText;
|
|
101
110
|
const finalAriaLabel = footnote ? `${labelText} - ${footnote}` : labelText;
|
|
102
111
|
const textInputPlaceholder = `${textInputProps?.placeholder} ${
|
|
103
112
|
isRequired ? "(Required)" : ""
|
|
104
113
|
}`;
|
|
114
|
+
const buttonType = noBrandButtonType
|
|
115
|
+
? ButtonTypes.NoBrand
|
|
116
|
+
: ButtonTypes.Primary;
|
|
117
|
+
const searchBarButtonStyles = {
|
|
118
|
+
borderLeftRadius: "none",
|
|
119
|
+
borderRightRadius: { base: "none", md: "sm" },
|
|
120
|
+
lineHeight: "1.70",
|
|
121
|
+
marginBottom: "auto",
|
|
122
|
+
};
|
|
105
123
|
// Render the `Select` component.
|
|
106
124
|
const selectElem = selectProps && (
|
|
107
125
|
<Select
|
|
108
|
-
|
|
109
|
-
|
|
126
|
+
additionalStyles={styles.select}
|
|
127
|
+
id={`searchbar-select-${id}`}
|
|
110
128
|
labelText={selectProps?.labelText}
|
|
129
|
+
name={selectProps?.name}
|
|
130
|
+
onChange={selectProps?.onChange}
|
|
111
131
|
type={SelectTypes.SearchBar}
|
|
112
132
|
{...stateProps}
|
|
113
133
|
>
|
|
@@ -121,11 +141,11 @@ export default function SearchBar(props: SearchBarProps) {
|
|
|
121
141
|
// Render the `TextInput` component.
|
|
122
142
|
const textInputNative = textInputProps && (
|
|
123
143
|
<TextInput
|
|
124
|
-
id={
|
|
144
|
+
id={`searchbar-textinput-${id}`}
|
|
125
145
|
labelText={textInputProps?.labelText}
|
|
126
|
-
placeholder={textInputPlaceholder}
|
|
127
|
-
onChange={textInputProps?.onChange}
|
|
128
146
|
name={textInputProps?.name}
|
|
147
|
+
onChange={textInputProps?.onChange}
|
|
148
|
+
placeholder={textInputPlaceholder}
|
|
129
149
|
type={TextInputTypes.text}
|
|
130
150
|
variantType={
|
|
131
151
|
selectElem
|
|
@@ -139,49 +159,50 @@ export default function SearchBar(props: SearchBarProps) {
|
|
|
139
159
|
// Render the `Button` component.
|
|
140
160
|
const buttonElem = (
|
|
141
161
|
<Button
|
|
142
|
-
|
|
143
|
-
buttonType={
|
|
144
|
-
|
|
145
|
-
onClick={buttonOnClick}
|
|
162
|
+
additionalStyles={searchBarButtonStyles}
|
|
163
|
+
buttonType={buttonType}
|
|
164
|
+
id={`searchbar-button-${id}`}
|
|
146
165
|
isDisabled={isDisabled}
|
|
166
|
+
onClick={buttonOnClick}
|
|
167
|
+
type="submit"
|
|
147
168
|
>
|
|
148
169
|
<Icon
|
|
170
|
+
align={IconAlign.Left}
|
|
171
|
+
id={`searchbar-icon-${id}`}
|
|
149
172
|
name={IconNames.Search}
|
|
150
173
|
size={IconSizes.Small}
|
|
151
|
-
align={IconAlign.Left}
|
|
152
174
|
/>
|
|
153
175
|
Search
|
|
154
176
|
</Button>
|
|
155
177
|
);
|
|
156
|
-
//
|
|
157
|
-
|
|
158
|
-
<HelperErrorText id={helperErrorTextID} isInvalid={isInvalid}>
|
|
159
|
-
{footnote}
|
|
160
|
-
</HelperErrorText>
|
|
161
|
-
);
|
|
162
|
-
// If a custom input element was passed, use that instead of the
|
|
163
|
-
// `TextInput` component.
|
|
178
|
+
// If a custom input element was passed, use that element
|
|
179
|
+
// instead of the DS `TextInput` component.
|
|
164
180
|
const textInputElem = textInputElement || textInputNative;
|
|
165
181
|
|
|
166
182
|
return (
|
|
167
|
-
<
|
|
168
|
-
|
|
183
|
+
<ComponentWrapper
|
|
184
|
+
descriptionText={descriptionText}
|
|
185
|
+
headingText={headingText}
|
|
186
|
+
helperText={helperText}
|
|
169
187
|
id={id}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
aria-label={finalAriaLabel}
|
|
173
|
-
aria-describedby={ariaDescribedby}
|
|
174
|
-
onSubmit={onSubmit}
|
|
175
|
-
method={method}
|
|
176
|
-
action={action}
|
|
177
|
-
__css={styles}
|
|
188
|
+
invalidText={invalidText}
|
|
189
|
+
isInvalid={isInvalid}
|
|
178
190
|
>
|
|
179
|
-
<Box
|
|
191
|
+
<Box
|
|
192
|
+
as="form"
|
|
193
|
+
id={`searchbar-form-${id}`}
|
|
194
|
+
className={className}
|
|
195
|
+
role="search"
|
|
196
|
+
aria-label={finalAriaLabel}
|
|
197
|
+
onSubmit={onSubmit}
|
|
198
|
+
method={method}
|
|
199
|
+
action={action}
|
|
200
|
+
__css={styles}
|
|
201
|
+
>
|
|
180
202
|
{selectElem}
|
|
181
203
|
{textInputElem}
|
|
182
204
|
{buttonElem}
|
|
183
205
|
</Box>
|
|
184
|
-
|
|
185
|
-
</Box>
|
|
206
|
+
</ComponentWrapper>
|
|
186
207
|
);
|
|
187
208
|
}
|
|
@@ -1,18 +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
|
-
|
|
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 Select from "./Select";
|
|
12
|
-
import Form from "../Form/Form";
|
|
13
11
|
import Button from "../Button/Button";
|
|
12
|
+
import Form from "../Form/Form";
|
|
13
|
+
import Select from "./Select";
|
|
14
|
+
import { SelectTypes } from "./SelectTypes";
|
|
14
15
|
import { getCategory } from "../../utils/componentCategories";
|
|
15
16
|
import DSProvider from "../../theme/provider";
|
|
17
|
+
import { getStorybookEnumValues } from "../../utils/utils";
|
|
18
|
+
|
|
19
|
+
export const enumValues = getStorybookEnumValues(SelectTypes, "SelectTypes");
|
|
16
20
|
|
|
17
21
|
<Meta
|
|
18
22
|
title={getCategory("Select")}
|
|
@@ -27,10 +31,34 @@ import DSProvider from "../../theme/provider";
|
|
|
27
31
|
}}
|
|
28
32
|
argTypes={{
|
|
29
33
|
children: { table: { disable: true } },
|
|
30
|
-
id: {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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 },
|
|
34
62
|
}}
|
|
35
63
|
/>
|
|
36
64
|
|
|
@@ -39,7 +67,7 @@ import DSProvider from "../../theme/provider";
|
|
|
39
67
|
| Component Version | DS Version |
|
|
40
68
|
| ----------------- | ---------- |
|
|
41
69
|
| Added | `0.7.0` |
|
|
42
|
-
| Latest | `0.25.
|
|
70
|
+
| Latest | `0.25.11` |
|
|
43
71
|
|
|
44
72
|
<Description of={Select} />
|
|
45
73
|
|
|
@@ -64,17 +92,23 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
|
|
|
64
92
|
|
|
65
93
|
<Canvas withToolbar>
|
|
66
94
|
<Story
|
|
67
|
-
name="Select"
|
|
95
|
+
name="Select with Controls"
|
|
68
96
|
args={{
|
|
97
|
+
className: undefined,
|
|
69
98
|
helperText: "This is the helper text.",
|
|
99
|
+
id: "select-id",
|
|
70
100
|
invalidText: "This is the error text :(",
|
|
71
101
|
isDisabled: false,
|
|
72
102
|
isInvalid: false,
|
|
73
103
|
isRequired: false,
|
|
74
104
|
labelText: "What is your favorite color?",
|
|
75
105
|
name: "color",
|
|
106
|
+
onChange: undefined,
|
|
107
|
+
showHelperInvalidText: undefined,
|
|
76
108
|
showLabel: true,
|
|
77
109
|
showOptReqLabel: true,
|
|
110
|
+
type: SelectTypes.Default,
|
|
111
|
+
value: undefined,
|
|
78
112
|
}}
|
|
79
113
|
>
|
|
80
114
|
{(args) => (
|
|
@@ -89,7 +123,7 @@ elements, but the select options _need_ to be child `<option>` HTML elements.
|
|
|
89
123
|
</Story>
|
|
90
124
|
</Canvas>
|
|
91
125
|
|
|
92
|
-
<ArgsTable story="Select" />
|
|
126
|
+
<ArgsTable story="Select with Controls" />
|
|
93
127
|
|
|
94
128
|
## Labelling Variations
|
|
95
129
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { render, screen, fireEvent } from "@testing-library/react";
|
|
3
3
|
import { axe } from "jest-axe";
|
|
4
|
+
import renderer from "react-test-renderer";
|
|
4
5
|
|
|
5
6
|
import Select from "./Select";
|
|
6
7
|
|
|
@@ -255,4 +256,92 @@ describe("Select", () => {
|
|
|
255
256
|
"NYPL DS recommends that <select> fields have no more than 10 options; an auto-complete text input is a good alternative for 11 or more options."
|
|
256
257
|
);
|
|
257
258
|
});
|
|
259
|
+
|
|
260
|
+
it("Renders the UI snapshot correctly", () => {
|
|
261
|
+
const siblings = ["Kendall", "Shiv", "Connor", "Roman", "Tom"];
|
|
262
|
+
|
|
263
|
+
const options = siblings.map((sibling) => (
|
|
264
|
+
<option key={sibling}>{sibling}</option>
|
|
265
|
+
));
|
|
266
|
+
|
|
267
|
+
const primary = renderer
|
|
268
|
+
.create(
|
|
269
|
+
<Select
|
|
270
|
+
id="select"
|
|
271
|
+
labelText="Which Succession sibling are you?"
|
|
272
|
+
name="succession-sibling"
|
|
273
|
+
>
|
|
274
|
+
{options}
|
|
275
|
+
</Select>
|
|
276
|
+
)
|
|
277
|
+
.toJSON();
|
|
278
|
+
const disabled = renderer
|
|
279
|
+
.create(
|
|
280
|
+
<Select
|
|
281
|
+
id="select"
|
|
282
|
+
isDisabled
|
|
283
|
+
labelText="Which Succession sibling are you?"
|
|
284
|
+
name="succession-sibling"
|
|
285
|
+
>
|
|
286
|
+
{options}
|
|
287
|
+
</Select>
|
|
288
|
+
)
|
|
289
|
+
.toJSON();
|
|
290
|
+
const withInvalidText = renderer
|
|
291
|
+
.create(
|
|
292
|
+
<Select
|
|
293
|
+
id="select"
|
|
294
|
+
invalidText="Tom doesn't count as a sibling :(."
|
|
295
|
+
isInvalid
|
|
296
|
+
labelText="Which Succession sibling are you?"
|
|
297
|
+
name="succession-sibling"
|
|
298
|
+
>
|
|
299
|
+
{options}
|
|
300
|
+
</Select>
|
|
301
|
+
)
|
|
302
|
+
.toJSON();
|
|
303
|
+
const withHelperText = renderer
|
|
304
|
+
.create(
|
|
305
|
+
<Select
|
|
306
|
+
helperText="Remember, Logan will judge you no matter who you pick."
|
|
307
|
+
id="select"
|
|
308
|
+
labelText="Which Succession sibling are you?"
|
|
309
|
+
name="succession-sibling"
|
|
310
|
+
>
|
|
311
|
+
{options}
|
|
312
|
+
</Select>
|
|
313
|
+
)
|
|
314
|
+
.toJSON();
|
|
315
|
+
const required = renderer
|
|
316
|
+
.create(
|
|
317
|
+
<Select
|
|
318
|
+
id="select"
|
|
319
|
+
isRequired
|
|
320
|
+
labelText="Which Succession sibling are you?"
|
|
321
|
+
name="succession-sibling"
|
|
322
|
+
>
|
|
323
|
+
{options}
|
|
324
|
+
</Select>
|
|
325
|
+
)
|
|
326
|
+
.toJSON();
|
|
327
|
+
const hasOnChange = renderer
|
|
328
|
+
.create(
|
|
329
|
+
<Select
|
|
330
|
+
id="select"
|
|
331
|
+
labelText="Which Succession sibling are you?"
|
|
332
|
+
name="succession-sibling"
|
|
333
|
+
onChange={jest.fn()}
|
|
334
|
+
>
|
|
335
|
+
{options}
|
|
336
|
+
</Select>
|
|
337
|
+
)
|
|
338
|
+
.toJSON();
|
|
339
|
+
|
|
340
|
+
expect(primary).toMatchSnapshot();
|
|
341
|
+
expect(disabled).toMatchSnapshot();
|
|
342
|
+
expect(withInvalidText).toMatchSnapshot();
|
|
343
|
+
expect(withHelperText).toMatchSnapshot();
|
|
344
|
+
expect(required).toMatchSnapshot();
|
|
345
|
+
expect(hasOnChange).toMatchSnapshot();
|
|
346
|
+
});
|
|
258
347
|
});
|
|
@@ -5,23 +5,27 @@ import {
|
|
|
5
5
|
useMultiStyleConfig,
|
|
6
6
|
} from "@chakra-ui/react";
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
|
|
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 {
|
|
18
|
+
/** Optionally pass in additional Chakra-based styles. */
|
|
19
|
+
additionalStyles?: { [key: string]: any };
|
|
16
20
|
/** A class name for the `div` parent element. */
|
|
17
21
|
className?: string;
|
|
18
22
|
/** Optional string to populate the `HelperErrorText` for the standard state. */
|
|
19
|
-
helperText?:
|
|
23
|
+
helperText?: HelperErrorTextType;
|
|
20
24
|
/** ID that other components can cross reference for accessibility purposes */
|
|
21
25
|
id?: string;
|
|
22
26
|
/** Optional string to populate the `HelperErrorText` for the error state
|
|
23
27
|
* when `isInvalid` is true. */
|
|
24
|
-
invalidText?:
|
|
28
|
+
invalidText?: HelperErrorTextType;
|
|
25
29
|
/** Adds the `disabled` and `aria-disabled` attributes to the select when true */
|
|
26
30
|
isDisabled?: boolean;
|
|
27
31
|
/** Adds the `aria-invalid` attribute to the select when true. This also makes
|
|
@@ -63,6 +67,7 @@ const Select = React.forwardRef<
|
|
|
63
67
|
React.PropsWithChildren<SelectProps>
|
|
64
68
|
>((props: React.PropsWithChildren<SelectProps>, ref?) => {
|
|
65
69
|
const {
|
|
70
|
+
additionalStyles = {},
|
|
66
71
|
children,
|
|
67
72
|
className,
|
|
68
73
|
helperText,
|
|
@@ -87,7 +92,9 @@ const Select = React.forwardRef<
|
|
|
87
92
|
const finalInvalidText = invalidText
|
|
88
93
|
? invalidText
|
|
89
94
|
: "There is an error related to this field.";
|
|
90
|
-
const footnote = isInvalid
|
|
95
|
+
const footnote: HelperErrorTextType = isInvalid
|
|
96
|
+
? finalInvalidText
|
|
97
|
+
: helperText;
|
|
91
98
|
// To control the `Select` component, both `onChange` and `value`
|
|
92
99
|
// must be passed.
|
|
93
100
|
const controlledProps = onChange ? { onChange, value } : {};
|
|
@@ -112,7 +119,7 @@ const Select = React.forwardRef<
|
|
|
112
119
|
}
|
|
113
120
|
|
|
114
121
|
return (
|
|
115
|
-
<Box className={className} __css={styles}>
|
|
122
|
+
<Box className={className} __css={{ ...styles, ...additionalStyles }}>
|
|
116
123
|
{showLabel && (
|
|
117
124
|
<Label
|
|
118
125
|
id={`${id}-label`}
|
|
@@ -133,16 +140,24 @@ const Select = React.forwardRef<
|
|
|
133
140
|
ref={ref}
|
|
134
141
|
{...controlledProps}
|
|
135
142
|
{...ariaAttributes}
|
|
136
|
-
icon={
|
|
143
|
+
icon={
|
|
144
|
+
<Icon
|
|
145
|
+
id={`${id}-icon`}
|
|
146
|
+
name={IconNames.Arrow}
|
|
147
|
+
size={IconSizes.Medium}
|
|
148
|
+
/>
|
|
149
|
+
}
|
|
137
150
|
__css={styles.select}
|
|
138
151
|
>
|
|
139
152
|
{children}
|
|
140
153
|
</ChakraSelect>
|
|
141
154
|
{footnote && showHelperInvalidText && (
|
|
142
155
|
<Box __css={styles.helper} aria-disabled={isDisabled}>
|
|
143
|
-
<HelperErrorText
|
|
144
|
-
{
|
|
145
|
-
|
|
156
|
+
<HelperErrorText
|
|
157
|
+
id={`${id}-helperText`}
|
|
158
|
+
isInvalid={isInvalid}
|
|
159
|
+
text={footnote}
|
|
160
|
+
/>
|
|
146
161
|
</Box>
|
|
147
162
|
)}
|
|
148
163
|
</Box>
|