@nypl/design-system-react-components 0.26.0 → 0.28.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 +56 -0
- package/dist/components/Accordion/Accordion.d.ts +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +1 -5
- package/dist/components/Button/Button.d.ts +2 -10
- package/dist/components/ButtonGroup/ButtonGroup.d.ts +22 -0
- package/dist/components/Card/Card.d.ts +2 -2
- package/dist/components/Checkbox/Checkbox.d.ts +10 -8
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/components/Form/Form.d.ts +2 -2
- package/dist/components/Grid/SimpleGrid.d.ts +6 -3
- package/dist/components/Heading/Heading.d.ts +2 -5
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +1 -5
- package/dist/components/Hero/Hero.d.ts +13 -9
- package/dist/components/Icons/Icon.d.ts +6 -5
- package/dist/components/Icons/IconSvgs.d.ts +21 -21
- package/dist/components/Image/Image.d.ts +8 -5
- package/dist/components/Link/Link.d.ts +1 -9
- package/dist/components/List/List.d.ts +7 -11
- package/dist/components/Logo/Logo.d.ts +2 -5
- package/dist/components/Logo/LogoSvgs.d.ts +39 -39
- package/dist/components/Modal/Modal.d.ts +28 -8
- package/dist/components/Notification/Notification.d.ts +1 -1
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +2 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts +1 -1
- package/dist/components/SearchBar/SearchBar.d.ts +3 -2
- package/dist/components/Select/Select.d.ts +2 -5
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +4 -4
- package/dist/components/SkipNavigation/SkipNavigation.d.ts +17 -0
- package/dist/components/StatusBadge/StatusBadge.d.ts +2 -3
- package/dist/components/StructuredContent/StructuredContent.d.ts +2 -2
- package/dist/components/Table/Table.d.ts +1 -1
- package/dist/components/Template/Template.d.ts +2 -0
- package/dist/components/Text/Text.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +21 -9
- package/dist/components/Toggle/Toggle.d.ts +1 -5
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +977 -1213
- 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 +976 -1276
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/helpers/types.d.ts +1 -0
- package/dist/index.d.ts +27 -48
- package/dist/styles.css +1 -1
- package/dist/theme/components/buttonGroup.d.ts +11 -0
- package/dist/theme/components/card.d.ts +104 -8
- package/dist/theme/components/componentWrapper.d.ts +4 -3
- package/dist/theme/components/customTable.d.ts +11 -14
- package/dist/theme/components/fieldset.d.ts +4 -3
- package/dist/theme/components/helperErrorText.d.ts +4 -3
- package/dist/theme/components/hero.d.ts +1 -1
- package/dist/theme/components/horizontalRule.d.ts +4 -3
- package/dist/theme/components/icon.d.ts +47743 -1
- package/dist/theme/components/image.d.ts +563 -10
- package/dist/theme/components/label.d.ts +4 -3
- package/dist/theme/components/list.d.ts +6 -7
- package/dist/theme/components/logo.d.ts +474 -1
- package/dist/theme/components/notification.d.ts +20 -16
- package/dist/theme/components/progressIndicator.d.ts +6 -4
- package/dist/theme/components/select.d.ts +4 -10
- package/dist/theme/components/skeletonLoader.d.ts +14 -10
- package/dist/theme/components/skipNavigation.d.ts +22 -0
- package/dist/theme/components/slider.d.ts +7 -6
- package/dist/theme/components/structuredContent.d.ts +10 -9
- package/dist/theme/components/text.d.ts +7 -1
- package/dist/theme/components/toggle.d.ts +6 -4
- package/dist/theme/provider.d.ts +2 -4
- package/dist/utils/componentCategories.d.ts +1 -1
- package/dist/utils/interfaces.d.ts +5 -0
- package/dist/utils/utils.d.ts +2 -18
- package/package.json +15 -16
- package/src/__tests__/setup.ts +3 -3
- package/src/__tests__/utils/utils.test.ts +1 -23
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +22 -14
- package/src/components/Accordion/Accordion.stories.mdx +43 -44
- package/src/components/Accordion/Accordion.test.tsx +5 -13
- package/src/components/Accordion/Accordion.tsx +14 -18
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +6 -6
- package/src/components/Autosuggest/Autosuggest.stories.mdx +1 -1
- package/src/components/Autosuggest/Autosuggest.stories.tsx +23 -25
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +21 -37
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +4 -17
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +18 -21
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +1 -100
- package/src/components/Button/Button.stories.mdx +89 -126
- package/src/components/Button/Button.test.tsx +16 -30
- package/src/components/Button/Button.tsx +14 -20
- package/src/components/ButtonGroup/ButtonGroup.stories.mdx +147 -0
- package/src/components/ButtonGroup/ButtonGroup.test.tsx +141 -0
- package/src/components/ButtonGroup/ButtonGroup.tsx +99 -0
- package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +117 -0
- package/src/components/Card/Card.stories.mdx +143 -177
- package/src/components/Card/Card.test.tsx +36 -97
- package/src/components/Card/Card.tsx +78 -74
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +1 -1
- package/src/components/Chakra/Box.stories.mdx +2 -6
- package/src/components/Chakra/Center.stories.mdx +5 -23
- package/src/components/Chakra/Flex.stories.mdx +4 -6
- package/src/components/Chakra/Stack.stories.mdx +9 -10
- package/src/components/Checkbox/Checkbox.stories.mdx +1 -1
- package/src/components/Checkbox/Checkbox.test.tsx +2 -2
- package/src/components/Checkbox/Checkbox.tsx +20 -13
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +9 -9
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +6 -17
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +1 -7
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +33 -29
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +24 -35
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +3 -10
- package/src/components/DatePicker/DatePicker.stories.mdx +23 -37
- package/src/components/DatePicker/DatePicker.test.tsx +21 -19
- package/src/components/DatePicker/DatePicker.tsx +57 -49
- package/src/components/Form/Form.stories.mdx +46 -31
- package/src/components/Form/Form.test.tsx +1 -18
- package/src/components/Form/Form.tsx +7 -7
- package/src/components/Grid/SimpleGrid.stories.mdx +73 -49
- package/src/components/Grid/SimpleGrid.test.tsx +7 -9
- package/src/components/Grid/SimpleGrid.tsx +14 -11
- package/src/components/Heading/Heading.stories.mdx +27 -72
- package/src/components/Heading/Heading.test.tsx +18 -44
- package/src/components/Heading/Heading.tsx +7 -10
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +1 -3
- package/src/components/HelperErrorText/HelperErrorText.tsx +1 -5
- package/src/components/Hero/Hero.stories.mdx +219 -216
- package/src/components/Hero/Hero.test.tsx +107 -223
- package/src/components/Hero/Hero.tsx +63 -61
- package/src/components/Icons/Icon.stories.mdx +172 -118
- package/src/components/Icons/Icon.test.tsx +8 -16
- package/src/components/Icons/Icon.tsx +75 -29
- package/src/components/Icons/IconSvgs.tsx +42 -42
- package/src/components/Image/Image.stories.mdx +45 -132
- package/src/components/Image/Image.test.tsx +16 -31
- package/src/components/Image/Image.tsx +28 -12
- package/src/components/Link/Link.stories.mdx +30 -94
- package/src/components/Link/Link.test.tsx +25 -75
- package/src/components/Link/Link.tsx +43 -56
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +1 -2
- package/src/components/List/List.stories.mdx +20 -31
- package/src/components/List/List.test.tsx +24 -43
- package/src/components/List/List.tsx +25 -36
- package/src/components/Logo/Logo.stories.mdx +94 -50
- package/src/components/Logo/Logo.test.tsx +10 -19
- package/src/components/Logo/Logo.tsx +50 -17
- package/src/components/Logo/LogoSvgs.tsx +78 -78
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +4 -4
- package/src/components/Modal/Modal.stories.mdx +245 -139
- package/src/components/Modal/Modal.test.tsx +147 -10
- 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 +10 -28
- package/src/components/Notification/Notification.test.tsx +9 -12
- package/src/components/Notification/Notification.tsx +34 -37
- package/src/components/Pagination/Pagination.stories.mdx +3 -4
- package/src/components/Pagination/Pagination.tsx +15 -10
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +27 -53
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +9 -10
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +17 -21
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +0 -10
- package/src/components/Radio/Radio.stories.mdx +1 -1
- package/src/components/Radio/Radio.tsx +9 -6
- package/src/components/RadioGroup/RadioGroup.stories.mdx +15 -16
- package/src/components/RadioGroup/RadioGroup.test.tsx +2 -8
- package/src/components/RadioGroup/RadioGroup.tsx +28 -24
- package/src/components/SearchBar/SearchBar.stories.mdx +1 -1
- package/src/components/SearchBar/SearchBar.test.tsx +1 -1
- package/src/components/SearchBar/SearchBar.tsx +14 -22
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1 -13
- package/src/components/Select/Select.stories.mdx +10 -25
- package/src/components/Select/Select.test.tsx +6 -7
- package/src/components/Select/Select.tsx +28 -35
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +24 -24
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +17 -56
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -21
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +9 -8
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +33 -33
- package/src/components/SkipNavigation/SkipNavigation.stories.mdx +90 -0
- package/src/components/SkipNavigation/SkipNavigation.test.tsx +63 -0
- package/src/components/SkipNavigation/SkipNavigation.tsx +51 -0
- package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +130 -0
- package/src/components/Slider/Slider.stories.mdx +19 -53
- package/src/components/Slider/Slider.test.tsx +2 -2
- package/src/components/Slider/Slider.tsx +10 -12
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +2 -9
- package/src/components/StatusBadge/StatusBadge.stories.mdx +6 -21
- package/src/components/StatusBadge/StatusBadge.test.tsx +2 -3
- package/src/components/StatusBadge/StatusBadge.tsx +3 -10
- package/src/components/StructuredContent/StructuredContent.stories.mdx +30 -58
- package/src/components/StructuredContent/StructuredContent.test.tsx +42 -44
- package/src/components/StructuredContent/StructuredContent.tsx +9 -18
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +9 -23
- package/src/components/StyleGuide/Buttons.stories.mdx +62 -62
- package/src/components/StyleGuide/ColorCard.tsx +2 -4
- package/src/components/StyleGuide/Colors.stories.mdx +7 -8
- package/src/components/StyleGuide/DesignTokens.stories.mdx +5 -7
- package/src/components/StyleGuide/Forms.stories.mdx +0 -1
- package/src/components/StyleGuide/Iconography.stories.mdx +59 -77
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -1
- package/src/components/StyleGuide/Typography.stories.mdx +15 -18
- package/src/components/Table/Table.stories.mdx +85 -1
- package/src/components/Table/Table.test.tsx +57 -1
- package/src/components/Table/Table.tsx +7 -4
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +121 -0
- package/src/components/Tabs/Tabs.stories.mdx +1 -1
- package/src/components/Tabs/Tabs.test.tsx +2 -2
- package/src/components/Tabs/Tabs.tsx +26 -27
- package/src/components/Template/Template.stories.mdx +49 -54
- package/src/components/Template/Template.tsx +9 -3
- package/src/components/Text/Text.stories.mdx +5 -11
- package/src/components/Text/Text.test.tsx +3 -6
- package/src/components/Text/Text.tsx +3 -5
- package/src/components/TextInput/TextInput.stories.mdx +10 -22
- package/src/components/TextInput/TextInput.test.tsx +32 -62
- package/src/components/TextInput/TextInput.tsx +61 -30
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +1 -0
- package/src/components/Toggle/Toggle.stories.mdx +5 -16
- package/src/components/Toggle/Toggle.test.tsx +2 -3
- package/src/components/Toggle/Toggle.tsx +9 -10
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +13 -29
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +18 -23
- package/src/components/VideoPlayer/VideoPlayer.tsx +13 -10
- package/src/docs/Chakra.stories.mdx +14 -11
- package/src/docs/Welcome.stories.mdx +23 -43
- package/src/helpers/types.ts +1 -0
- package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
- package/src/hooks/useNYPLTheme.stories.mdx +3 -6
- package/src/index.ts +52 -46
- package/src/styles.scss +0 -1
- package/src/theme/components/buttonGroup.ts +10 -0
- package/src/theme/components/card.ts +50 -15
- package/src/theme/components/componentWrapper.ts +5 -1
- package/src/theme/components/customTable.ts +8 -2
- package/src/theme/components/fieldset.ts +5 -1
- package/src/theme/components/helperErrorText.ts +5 -1
- package/src/theme/components/hero.ts +2 -2
- package/src/theme/components/horizontalRule.ts +5 -1
- package/src/theme/components/icon.ts +7 -1
- package/src/theme/components/image.ts +14 -3
- package/src/theme/components/label.ts +5 -1
- package/src/theme/components/list.ts +8 -2
- package/src/theme/components/logo.ts +5 -1
- package/src/theme/components/notification.ts +38 -14
- package/src/theme/components/progressIndicator.ts +10 -5
- package/src/theme/components/select.ts +5 -6
- package/src/theme/components/skeletonLoader.ts +8 -2
- package/src/theme/components/skipNavigation.ts +26 -0
- package/src/theme/components/slider.ts +13 -1
- package/src/theme/components/structuredContent.ts +11 -1
- package/src/theme/components/text.ts +12 -5
- package/src/theme/components/toggle.ts +9 -3
- package/src/theme/index.ts +4 -0
- package/src/theme/provider.tsx +1 -1
- package/src/utils/componentCategories.ts +13 -5
- package/src/utils/interfaces.ts +5 -0
- package/src/utils/utils.ts +2 -32
- package/dist/components/Accordion/AccordionTypes.d.ts +0 -5
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +0 -8
- package/dist/components/Button/ButtonTypes.d.ts +0 -8
- package/dist/components/DatePicker/DatePickerTypes.d.ts +0 -5
- package/dist/components/Form/FormTypes.d.ts +0 -2
- package/dist/components/Grid/GridTypes.d.ts +0 -9
- package/dist/components/Heading/HeadingTypes.d.ts +0 -14
- package/dist/components/Hero/HeroTypes.d.ts +0 -12
- package/dist/components/Icons/IconTypes.d.ts +0 -77
- package/dist/components/Image/ImageTypes.d.ts +0 -22
- package/dist/components/Link/LinkTypes.d.ts +0 -8
- package/dist/components/List/ListTypes.d.ts +0 -5
- package/dist/components/Logo/LogoTypes.d.ts +0 -54
- package/dist/components/Notification/NotificationTypes.d.ts +0 -5
- package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +0 -8
- package/dist/components/Select/SelectTypes.d.ts +0 -8
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +0 -5
- package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +0 -5
- package/dist/components/StructuredContent/StructuredContentTypes.d.ts +0 -5
- package/dist/components/Text/TextTypes.d.ts +0 -6
- package/dist/components/TextInput/TextInputTypes.d.ts +0 -25
- package/dist/components/Toggle/ToggleTypes.d.ts +0 -4
- package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +0 -9
- package/dist/helpers/enums.d.ts +0 -4
- package/dist/utils/siteSections.d.ts +0 -2
- package/src/components/Accordion/AccordionTypes.tsx +0 -5
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +0 -8
- package/src/components/Button/ButtonTypes.tsx +0 -8
- package/src/components/DatePicker/DatePickerTypes.tsx +0 -5
- package/src/components/Form/FormTypes.tsx +0 -3
- package/src/components/Grid/GridTypes.tsx +0 -9
- package/src/components/Heading/HeadingTypes.tsx +0 -15
- package/src/components/Hero/HeroTypes.tsx +0 -20
- package/src/components/Icons/IconTypes.tsx +0 -83
- package/src/components/Image/ImageTypes.ts +0 -24
- package/src/components/Link/LinkTypes.tsx +0 -8
- package/src/components/List/ListTypes.tsx +0 -5
- package/src/components/Logo/LogoTypes.tsx +0 -56
- package/src/components/Modal/_Modal.scss +0 -18
- package/src/components/Notification/NotificationTypes.tsx +0 -5
- package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +0 -8
- package/src/components/Select/SelectTypes.tsx +0 -10
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
- package/src/components/StatusBadge/StatusBadgeTypes.tsx +0 -5
- package/src/components/StructuredContent/StructuredContentTypes.tsx +0 -5
- package/src/components/Text/TextTypes.tsx +0 -6
- package/src/components/TextInput/TextInputTypes.tsx +0 -48
- package/src/components/Toggle/ToggleTypes.tsx +0 -4
- package/src/components/VideoPlayer/VideoPlayerTypes.tsx +0 -10
- package/src/helpers/enums.ts +0 -4
- package/src/utils/siteSections.ts +0 -10
|
@@ -2,10 +2,8 @@ import { chakra, useMultiStyleConfig } from "@chakra-ui/react";
|
|
|
2
2
|
import React, { useState, forwardRef } from "react";
|
|
3
3
|
import ReactDatePicker from "react-datepicker";
|
|
4
4
|
|
|
5
|
-
import { DatePickerTypes } from "./DatePickerTypes";
|
|
6
5
|
import Fieldset from "../Fieldset/Fieldset";
|
|
7
6
|
import { FormRow, FormField } from "../Form/Form";
|
|
8
|
-
import { FormGaps } from "../Form/FormTypes";
|
|
9
7
|
import HelperErrorText, {
|
|
10
8
|
HelperErrorTextType,
|
|
11
9
|
} from "../HelperErrorText/HelperErrorText";
|
|
@@ -14,6 +12,19 @@ import TextInput, {
|
|
|
14
12
|
TextInputRefType,
|
|
15
13
|
} from "../TextInput/TextInput";
|
|
16
14
|
|
|
15
|
+
interface ReactDatePickerAttrs {
|
|
16
|
+
popperClassName: string;
|
|
17
|
+
popperPlacement: string;
|
|
18
|
+
popperModifiers: any[];
|
|
19
|
+
minDate: Date | null;
|
|
20
|
+
maxDate: Date | null;
|
|
21
|
+
dateFormat: string;
|
|
22
|
+
showMonthYearPicker?: boolean;
|
|
23
|
+
showYearPicker?: boolean;
|
|
24
|
+
yearItemNumber?: number;
|
|
25
|
+
}
|
|
26
|
+
export type DatePickerTypes = "full" | "month" | "year";
|
|
27
|
+
|
|
17
28
|
// The object shape for the DatePicker's start and end date state values.
|
|
18
29
|
export interface FullDateType {
|
|
19
30
|
/** Date object that gets returned for the onChange
|
|
@@ -50,9 +61,6 @@ interface DatePickerWrapperProps extends DateRangeRowProps {
|
|
|
50
61
|
// Interface used by the internal DS `TextInput` component as a custom
|
|
51
62
|
// component for the ReactDatePicker plugin component. Internal use only.
|
|
52
63
|
interface CustomTextInputProps extends Partial<InputProps> {
|
|
53
|
-
/** The ReactDatePicker plugin has its own `id` prop so we use this to pass the
|
|
54
|
-
* value from the parent `DatePicker` component. */
|
|
55
|
-
dsId: string;
|
|
56
64
|
/** The ReactDatePicker plugin manipulates the ref value so we declare our
|
|
57
65
|
* own for some cases. */
|
|
58
66
|
dsRef?: React.Ref<TextInputRefType>;
|
|
@@ -124,16 +132,15 @@ export interface DatePickerProps extends DatePickerWrapperProps {
|
|
|
124
132
|
const CustomTextInput = forwardRef<TextInputRefType, CustomTextInputProps>(
|
|
125
133
|
(
|
|
126
134
|
{
|
|
127
|
-
additionalStyles = {},
|
|
128
|
-
attributes,
|
|
129
|
-
dsId,
|
|
130
135
|
dsRef,
|
|
131
136
|
helperText,
|
|
137
|
+
id,
|
|
132
138
|
invalidText,
|
|
133
139
|
isDisabled,
|
|
134
140
|
isInvalid,
|
|
135
141
|
isRequired,
|
|
136
142
|
labelText,
|
|
143
|
+
name,
|
|
137
144
|
onChange,
|
|
138
145
|
onClick,
|
|
139
146
|
showLabel,
|
|
@@ -142,28 +149,30 @@ const CustomTextInput = forwardRef<TextInputRefType, CustomTextInputProps>(
|
|
|
142
149
|
value,
|
|
143
150
|
},
|
|
144
151
|
ref: React.Ref<TextInputRefType>
|
|
145
|
-
) =>
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
152
|
+
) => {
|
|
153
|
+
return (
|
|
154
|
+
<TextInput
|
|
155
|
+
helperText={helperText}
|
|
156
|
+
id={id}
|
|
157
|
+
invalidText={invalidText}
|
|
158
|
+
isDisabled={isDisabled}
|
|
159
|
+
isInvalid={isInvalid}
|
|
160
|
+
isRequired={isRequired}
|
|
161
|
+
labelText={labelText}
|
|
162
|
+
name={name}
|
|
163
|
+
onChange={onChange}
|
|
164
|
+
onClick={onClick}
|
|
165
|
+
showHelperInvalidText={showHelperInvalidText}
|
|
166
|
+
showLabel={showLabel}
|
|
167
|
+
showRequiredLabel={showRequiredLabel}
|
|
168
|
+
value={value}
|
|
169
|
+
// Use either the specific prop-based or the `forwardRef` value.
|
|
170
|
+
// `react-datepicker` manipulates the `ref` value so when we
|
|
171
|
+
// want a specific ref, use the `dsRef` prop.
|
|
172
|
+
ref={dsRef || ref}
|
|
173
|
+
/>
|
|
174
|
+
);
|
|
175
|
+
}
|
|
167
176
|
);
|
|
168
177
|
|
|
169
178
|
/**
|
|
@@ -216,7 +225,7 @@ const DateRangeRow: React.FC<DateRangeRowProps> = ({
|
|
|
216
225
|
children,
|
|
217
226
|
}) =>
|
|
218
227
|
isDateRange ? (
|
|
219
|
-
<FormRow id={`${id}-form-row`} gap=
|
|
228
|
+
<FormRow id={`${id}-form-row`} gap="grid.xs">
|
|
220
229
|
{children}
|
|
221
230
|
</FormRow>
|
|
222
231
|
) : (
|
|
@@ -231,7 +240,7 @@ export const DatePicker = chakra(
|
|
|
231
240
|
const {
|
|
232
241
|
className,
|
|
233
242
|
dateFormat = "yyyy-MM-dd",
|
|
234
|
-
dateType =
|
|
243
|
+
dateType = "full",
|
|
235
244
|
helperText,
|
|
236
245
|
helperTextFrom,
|
|
237
246
|
helperTextTo,
|
|
@@ -268,14 +277,14 @@ export const DatePicker = chakra(
|
|
|
268
277
|
// This updates the internal state for the start and end date values,
|
|
269
278
|
// and also calls the `onChange` prop if it was passed to return the
|
|
270
279
|
// date value to the parent.
|
|
271
|
-
const onChangeDefault = (date, value) => {
|
|
280
|
+
const onChangeDefault = (date: Date, value: string) => {
|
|
272
281
|
setFullDate({ ...fullDate, [value]: date });
|
|
273
282
|
onChange && onChange({ ...fullDate, [value]: date });
|
|
274
283
|
};
|
|
275
|
-
// How many years to display in the
|
|
284
|
+
// How many years to display in the "year" option.
|
|
276
285
|
const yearsToDisplay = 12;
|
|
277
286
|
// Both `ReactDatePicker` components share some props.
|
|
278
|
-
let baseDatePickerAttrs = {
|
|
287
|
+
let baseDatePickerAttrs: ReactDatePickerAttrs = {
|
|
279
288
|
popperClassName: "date-picker-calendar",
|
|
280
289
|
popperPlacement: "bottom-start",
|
|
281
290
|
popperModifiers: [
|
|
@@ -292,7 +301,6 @@ export const DatePicker = chakra(
|
|
|
292
301
|
};
|
|
293
302
|
// Both custom `TextInput` components share some props.
|
|
294
303
|
let baseCustomTextInputAttrs = {
|
|
295
|
-
dsId: `${id}-start`,
|
|
296
304
|
isRequired,
|
|
297
305
|
// In the date range type, don't display the "(Required)" text in
|
|
298
306
|
// individual input labels. It'll display in the legend element.
|
|
@@ -305,7 +313,7 @@ export const DatePicker = chakra(
|
|
|
305
313
|
helperText: isDateRange ? helperTextFrom : helperText,
|
|
306
314
|
showHelperInvalidText,
|
|
307
315
|
invalidText,
|
|
308
|
-
|
|
316
|
+
__css: finalStyles.subLabels,
|
|
309
317
|
};
|
|
310
318
|
// These are attribute objects for the `react-datepicker` package component.
|
|
311
319
|
let startDatePickerAttrs = {};
|
|
@@ -316,10 +324,10 @@ export const DatePicker = chakra(
|
|
|
316
324
|
let startLabelText = labelText;
|
|
317
325
|
|
|
318
326
|
// Update the appropriate props for the selected date type to render.
|
|
319
|
-
if (dateType ===
|
|
327
|
+
if (dateType === "month") {
|
|
320
328
|
baseDatePickerAttrs["showMonthYearPicker"] = true;
|
|
321
329
|
baseDatePickerAttrs.dateFormat = "MM-yyyy";
|
|
322
|
-
} else if (dateType ===
|
|
330
|
+
} else if (dateType === "year") {
|
|
323
331
|
baseDatePickerAttrs["showYearPicker"] = true;
|
|
324
332
|
baseDatePickerAttrs["yearItemNumber"] = yearsToDisplay;
|
|
325
333
|
baseDatePickerAttrs.dateFormat = "yyyy";
|
|
@@ -354,7 +362,6 @@ export const DatePicker = chakra(
|
|
|
354
362
|
if (isDateRange) {
|
|
355
363
|
const endCustomTextInputAttrs = {
|
|
356
364
|
...baseCustomTextInputAttrs,
|
|
357
|
-
dsId: `${id}-end`,
|
|
358
365
|
helperText: helperTextTo,
|
|
359
366
|
};
|
|
360
367
|
// These props are used to follow the pattern recommended by
|
|
@@ -375,33 +382,34 @@ export const DatePicker = chakra(
|
|
|
375
382
|
startLabelText = "From";
|
|
376
383
|
endDatePickerElement = (
|
|
377
384
|
<ReactDatePicker
|
|
378
|
-
selected={fullDate.endDate}
|
|
379
|
-
onChange={(date) => onChangeDefault(date, "endDate")}
|
|
380
385
|
customInput={
|
|
381
386
|
<CustomTextInput
|
|
382
|
-
labelText="To"
|
|
383
387
|
dsRef={refTo}
|
|
384
|
-
|
|
388
|
+
labelText="To"
|
|
385
389
|
{...endCustomTextInputAttrs}
|
|
386
390
|
/>
|
|
387
391
|
}
|
|
392
|
+
id={`${id}-end`}
|
|
393
|
+
name={nameTo}
|
|
394
|
+
onChange={(date: Date) => onChangeDefault(date, "endDate")}
|
|
395
|
+
selected={fullDate.endDate}
|
|
388
396
|
{...endDatePickerAttrs}
|
|
389
397
|
/>
|
|
390
398
|
);
|
|
391
399
|
}
|
|
392
|
-
|
|
393
400
|
const startDatePickerElement = (
|
|
394
401
|
<ReactDatePicker
|
|
395
|
-
selected={fullDate.startDate}
|
|
396
|
-
onChange={(date) => onChangeDefault(date, "startDate")}
|
|
397
402
|
customInput={
|
|
398
403
|
<CustomTextInput
|
|
399
|
-
labelText={startLabelText}
|
|
400
404
|
dsRef={ref}
|
|
401
|
-
|
|
405
|
+
labelText={startLabelText}
|
|
402
406
|
{...baseCustomTextInputAttrs}
|
|
403
407
|
/>
|
|
404
408
|
}
|
|
409
|
+
id={`${id}-start`}
|
|
410
|
+
name={nameFrom}
|
|
411
|
+
onChange={(date: Date) => onChangeDefault(date, "startDate")}
|
|
412
|
+
selected={fullDate.startDate}
|
|
405
413
|
{...startDatePickerAttrs}
|
|
406
414
|
/>
|
|
407
415
|
);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Flex, Spacer } from "@chakra-ui/react";
|
|
2
2
|
import { action } from "@storybook/addon-actions";
|
|
3
3
|
import {
|
|
4
4
|
ArgsTable,
|
|
@@ -10,25 +10,20 @@ import {
|
|
|
10
10
|
import { withDesign } from "storybook-addon-designs";
|
|
11
11
|
|
|
12
12
|
import Button from "../Button/Button";
|
|
13
|
+
import ButtonGroup from "../ButtonGroup/ButtonGroup";
|
|
13
14
|
import Checkbox from "../Checkbox/Checkbox";
|
|
14
15
|
import CheckboxGroup from "../CheckboxGroup/CheckboxGroup";
|
|
15
16
|
import DatePicker from "../DatePicker/DatePicker";
|
|
16
|
-
import { DatePickerTypes } from "../DatePicker/DatePickerTypes";
|
|
17
17
|
import Form, { FormRow, FormField } from "./Form";
|
|
18
|
-
import { FormGaps } from "./FormTypes";
|
|
19
18
|
import Heading from "../Heading/Heading";
|
|
20
|
-
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
21
19
|
import HorizontalRule from "../HorizontalRule/HorizontalRule";
|
|
22
20
|
import Label from "../Label/Label";
|
|
23
21
|
import Radio from "../Radio/Radio";
|
|
24
22
|
import RadioGroup from "../RadioGroup/RadioGroup";
|
|
25
23
|
import Select from "../Select/Select";
|
|
24
|
+
import SimpleGrid from "../Grid/SimpleGrid";
|
|
26
25
|
import TextInput from "../TextInput/TextInput";
|
|
27
26
|
import { getCategory } from "../../utils/componentCategories";
|
|
28
|
-
import SimpleGrid from "../Grid/SimpleGrid";
|
|
29
|
-
import { getStorybookEnumValues } from "../../utils/utils";
|
|
30
|
-
|
|
31
|
-
export const enumValues = getStorybookEnumValues(FormGaps, "FormGaps");
|
|
32
27
|
|
|
33
28
|
<Meta
|
|
34
29
|
title={getCategory("Form")}
|
|
@@ -50,8 +45,16 @@ export const enumValues = getStorybookEnumValues(FormGaps, "FormGaps");
|
|
|
50
45
|
},
|
|
51
46
|
gap: {
|
|
52
47
|
control: { type: "select" },
|
|
53
|
-
table: { defaultValue: { summary: "
|
|
54
|
-
options:
|
|
48
|
+
table: { defaultValue: { summary: "grid.l" } },
|
|
49
|
+
options: [
|
|
50
|
+
"grid.xxs",
|
|
51
|
+
"grid.xs",
|
|
52
|
+
"grid.s",
|
|
53
|
+
"grid.m",
|
|
54
|
+
"grid.l",
|
|
55
|
+
"grid.xl",
|
|
56
|
+
"grid.xxl",
|
|
57
|
+
],
|
|
55
58
|
},
|
|
56
59
|
}}
|
|
57
60
|
/>
|
|
@@ -61,7 +64,7 @@ export const enumValues = getStorybookEnumValues(FormGaps, "FormGaps");
|
|
|
61
64
|
| Component Version | DS Version |
|
|
62
65
|
| ----------------- | ---------- |
|
|
63
66
|
| Added | `0.23.2` |
|
|
64
|
-
| Latest | `0.
|
|
67
|
+
| Latest | `0.28.0` |
|
|
65
68
|
|
|
66
69
|
## Table of Contents
|
|
67
70
|
|
|
@@ -91,10 +94,10 @@ fields as needed.
|
|
|
91
94
|
</Form>
|
|
92
95
|
```
|
|
93
96
|
|
|
94
|
-
`FormField` should be used as a parent for all input components from the
|
|
97
|
+
`FormField` should be used as a parent for all input components from the
|
|
95
98
|
Reservoir Design System (DS) (`Button`, `Select`, `TextInput`, etc.).
|
|
96
99
|
|
|
97
|
-
`FormRow` should be used as a parent of multiple `FormField` components when
|
|
100
|
+
`FormRow` should be used as a parent of multiple `FormField` components when
|
|
98
101
|
you need to render multiple input components in a horizontal row.
|
|
99
102
|
|
|
100
103
|
## Component Props
|
|
@@ -107,11 +110,11 @@ you need to render multiple input components in a horizontal row.
|
|
|
107
110
|
className: undefined,
|
|
108
111
|
id: "form-id",
|
|
109
112
|
method: "get",
|
|
110
|
-
gap: "
|
|
113
|
+
gap: "grid.l",
|
|
111
114
|
}}
|
|
112
115
|
>
|
|
113
116
|
{(args) => (
|
|
114
|
-
<Form {...args}
|
|
117
|
+
<Form {...args} id="form-id">
|
|
115
118
|
<FormRow>
|
|
116
119
|
<FormField>
|
|
117
120
|
<TextInput
|
|
@@ -131,7 +134,7 @@ you need to render multiple input components in a horizontal row.
|
|
|
131
134
|
</FormField>
|
|
132
135
|
<FormField>
|
|
133
136
|
<DatePicker
|
|
134
|
-
dateType=
|
|
137
|
+
dateType="full"
|
|
135
138
|
dateFormat="yyyy-MM-dd"
|
|
136
139
|
helperTextFrom="From this date."
|
|
137
140
|
helperTextTo="To this date."
|
|
@@ -293,17 +296,17 @@ Resources:
|
|
|
293
296
|
|
|
294
297
|
## Spacing Variants
|
|
295
298
|
|
|
296
|
-
export const formRow = (
|
|
297
|
-
const labelText = `Size: ${
|
|
299
|
+
export const formRow = (gapValue) => {
|
|
300
|
+
const labelText = `Size: ${gapValue}`;
|
|
298
301
|
return (
|
|
299
|
-
<li key={
|
|
300
|
-
<Heading level=
|
|
301
|
-
<Form gap={
|
|
302
|
+
<li key={gapValue}>
|
|
303
|
+
<Heading level="three">{labelText}</Heading>
|
|
304
|
+
<Form gap={gapValue} id={`form-spacing-${gapValue}`}>
|
|
302
305
|
<FormRow>
|
|
303
306
|
<FormField>
|
|
304
307
|
<Select
|
|
305
308
|
helperText="The select field helper text."
|
|
306
|
-
id={`select-spacing-${
|
|
309
|
+
id={`select-spacing-${gapValue}-1`}
|
|
307
310
|
labelText="Select Field"
|
|
308
311
|
showLabel={true}
|
|
309
312
|
>
|
|
@@ -316,7 +319,7 @@ export const formRow = (nameString, size) => {
|
|
|
316
319
|
<FormField>
|
|
317
320
|
<Select
|
|
318
321
|
helperText="The select field helper text."
|
|
319
|
-
id={`select-spacing-${
|
|
322
|
+
id={`select-spacing-${gapValue}-2`}
|
|
320
323
|
labelText="Select Field"
|
|
321
324
|
showLabel={true}
|
|
322
325
|
>
|
|
@@ -329,7 +332,7 @@ export const formRow = (nameString, size) => {
|
|
|
329
332
|
<FormField>
|
|
330
333
|
<Select
|
|
331
334
|
helperText="The select field helper text."
|
|
332
|
-
id={`select-spacing-${
|
|
335
|
+
id={`select-spacing-${gapValue}-3`}
|
|
333
336
|
labelText="Select Field"
|
|
334
337
|
showLabel={true}
|
|
335
338
|
>
|
|
@@ -346,18 +349,30 @@ export const formRow = (nameString, size) => {
|
|
|
346
349
|
);
|
|
347
350
|
};
|
|
348
351
|
export const sizes = [];
|
|
349
|
-
|
|
350
|
-
|
|
352
|
+
export const gapValues = [
|
|
353
|
+
"grid.xxs",
|
|
354
|
+
"grid.xs",
|
|
355
|
+
"grid.s",
|
|
356
|
+
"grid.m",
|
|
357
|
+
"grid.l",
|
|
358
|
+
"grid.xl",
|
|
359
|
+
"grid.xxl",
|
|
360
|
+
];
|
|
361
|
+
for (const gap in gapValues) {
|
|
362
|
+
sizes.push(formRow(gapValues[gap]));
|
|
351
363
|
}
|
|
352
364
|
export const getForms = (list) => <ul style={{ listStyle: "none" }}>{list}</ul>;
|
|
353
365
|
|
|
354
366
|
By default, the `Form` component will handle the NYPL spacing around form input
|
|
355
|
-
elements. The default spacing value is `
|
|
356
|
-
variable `--nypl-space-l` (2rem / 32px).
|
|
367
|
+
elements. The default spacing value is large `grid.l`, which corresponds to the
|
|
368
|
+
CSS variable `--nypl-space-l` (2rem / 32px).
|
|
357
369
|
|
|
358
|
-
**IMPORTANT:** The default spacing should not be overwritten without a very
|
|
370
|
+
**IMPORTANT:** The default spacing should not be overwritten without a very
|
|
371
|
+
good reason.
|
|
359
372
|
|
|
360
|
-
Below are the spacing
|
|
373
|
+
Below are examples of the spacing values available to use in the `gap` prop of
|
|
374
|
+
the `Form` component: `"grid.xxs"`, `"grid.xs"`, `"grid.s"`, `"grid.m"`,
|
|
375
|
+
`"grid.l"`, `"grid.xl"`, `"grid.xxl"`.
|
|
361
376
|
|
|
362
377
|
<Canvas>
|
|
363
378
|
<Story name="Spacing Variants">{getForms(sizes)}</Story>
|
|
@@ -366,7 +381,7 @@ Below are the spacing variants available with the `FormGaps` enum.
|
|
|
366
381
|
## Example Code
|
|
367
382
|
|
|
368
383
|
```jsx
|
|
369
|
-
<Form action="/end/point" method="get" gap=
|
|
384
|
+
<Form action="/end/point" method="get" gap="grid.l" id="example-form">
|
|
370
385
|
<FormField>
|
|
371
386
|
<TextInput
|
|
372
387
|
labelText="Username"
|
|
@@ -4,7 +4,6 @@ import { axe } from "jest-axe";
|
|
|
4
4
|
import renderer from "react-test-renderer";
|
|
5
5
|
|
|
6
6
|
import Form, { FormRow, FormField } from "./Form";
|
|
7
|
-
// import { FormGaps } from "./FormTypes";
|
|
8
7
|
import TextInput from "../TextInput/TextInput";
|
|
9
8
|
|
|
10
9
|
describe("Form Accessibility", () => {
|
|
@@ -117,7 +116,7 @@ describe("Form", () => {
|
|
|
117
116
|
);
|
|
118
117
|
const form = screen.getByRole("form");
|
|
119
118
|
const formRow = form.firstChild;
|
|
120
|
-
const formField = formRow
|
|
119
|
+
const formField = formRow?.firstChild;
|
|
121
120
|
const textInput = screen.getByRole("textbox");
|
|
122
121
|
expect(form).toBeInTheDocument();
|
|
123
122
|
expect(formRow).toBeInTheDocument();
|
|
@@ -232,20 +231,4 @@ describe("Form", () => {
|
|
|
232
231
|
"NYPL Reservoir Form: This component's required `id` prop was not passed."
|
|
233
232
|
);
|
|
234
233
|
});
|
|
235
|
-
|
|
236
|
-
// TO DO: There's somethign weird about checking for the "grid-gap" style.
|
|
237
|
-
// Other styles can be validated, but "grid-gap" is being ellusive.
|
|
238
|
-
// it("Renders a <form> element with spacing variant applied", () => {
|
|
239
|
-
// render(
|
|
240
|
-
// <Form gap={FormGaps.ExtraSmall}>
|
|
241
|
-
// <FormRow />
|
|
242
|
-
// </Form>
|
|
243
|
-
// );
|
|
244
|
-
// const form = screen.getByRole("form");
|
|
245
|
-
// const formRow = form.firstChild;
|
|
246
|
-
// expect(form).toBeInTheDocument();
|
|
247
|
-
// expect(formRow).toHaveStyle({
|
|
248
|
-
// "grid-gap": "var(--nypl-space-xs)",
|
|
249
|
-
// });
|
|
250
|
-
// });
|
|
251
234
|
});
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { chakra } from "@chakra-ui/react";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import SimpleGrid from "../Grid/SimpleGrid";
|
|
4
|
+
import SimpleGrid, { GridGaps } from "../Grid/SimpleGrid";
|
|
6
5
|
|
|
7
6
|
interface FormBaseProps {
|
|
8
7
|
/** className to be applied to FormRow, FormField, and Form */
|
|
@@ -10,7 +9,7 @@ interface FormBaseProps {
|
|
|
10
9
|
/** Optional spacing size; if omitted, the default `large` (2rem / 32px)
|
|
11
10
|
* spacing will be used; ```IMPORTANT: for general form layout, this prop
|
|
12
11
|
* should not be used``` */
|
|
13
|
-
gap?:
|
|
12
|
+
gap?: GridGaps;
|
|
14
13
|
/** ID that other components can cross reference (internal use) */
|
|
15
14
|
id: string;
|
|
16
15
|
}
|
|
@@ -32,7 +31,7 @@ export const FormRow = chakra(
|
|
|
32
31
|
const { children, className, gap, id, ...rest } = props;
|
|
33
32
|
const count = React.Children.count(children);
|
|
34
33
|
const alteredChildren = React.Children.map(
|
|
35
|
-
children,
|
|
34
|
+
children as JSX.Element,
|
|
36
35
|
(child: React.ReactElement, i) => {
|
|
37
36
|
if (!child) return null;
|
|
38
37
|
if (child.type === FormField || child.props.mdxType === "FormField") {
|
|
@@ -77,7 +76,7 @@ export const Form = chakra(
|
|
|
77
76
|
action,
|
|
78
77
|
children,
|
|
79
78
|
className,
|
|
80
|
-
gap =
|
|
79
|
+
gap = "grid.l",
|
|
81
80
|
id,
|
|
82
81
|
method,
|
|
83
82
|
onSubmit,
|
|
@@ -89,7 +88,8 @@ export const Form = chakra(
|
|
|
89
88
|
"NYPL Reservoir Form: This component's required `id` prop was not passed."
|
|
90
89
|
);
|
|
91
90
|
}
|
|
92
|
-
|
|
91
|
+
|
|
92
|
+
const attributes: Partial<FormProps> = {};
|
|
93
93
|
action && (attributes["action"] = action);
|
|
94
94
|
|
|
95
95
|
method &&
|
|
@@ -97,7 +97,7 @@ export const Form = chakra(
|
|
|
97
97
|
(attributes["method"] = method);
|
|
98
98
|
|
|
99
99
|
const alteredChildren = React.Children.map(
|
|
100
|
-
children,
|
|
100
|
+
children as JSX.Element,
|
|
101
101
|
(child: React.ReactElement, i) => {
|
|
102
102
|
return React.cloneElement(child, { gap, id: `${id}-child${i}` });
|
|
103
103
|
}
|