@nypl/design-system-react-components 1.0.0 → 1.0.3-beta
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/README.md +3 -5
- package/dist/components/Checkbox/Checkbox.d.ts +0 -1
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -0
- package/dist/components/Heading/Heading.d.ts +2 -0
- package/dist/components/Logo/Logo.d.ts +1 -1
- package/dist/components/Logo/LogoSvgs.d.ts +4 -0
- package/dist/components/Slider/Slider.d.ts +1 -2
- package/dist/components/TextInput/TextInput.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +1038 -674
- 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 +1039 -675
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/{tests → __tests__}/useCarouselStyles.test.d.ts +0 -0
- package/dist/theme/components/button.d.ts +1 -0
- package/dist/theme/components/card.d.ts +98 -13
- package/dist/theme/components/checkboxGroup.d.ts +1 -1
- package/dist/theme/components/global.d.ts +2 -2
- package/dist/theme/components/heading.d.ts +4 -16
- package/dist/theme/components/image.d.ts +6 -0
- package/dist/theme/components/radio.d.ts +8 -0
- package/dist/theme/components/radioGroup.d.ts +1 -1
- package/dist/theme/components/skipNavigation.d.ts +3 -0
- package/dist/theme/components/structuredContent.d.ts +0 -5
- package/dist/theme/components/template.d.ts +4 -1
- package/dist/utils/utils.d.ts +15 -0
- package/package.json +6 -7
- package/CHANGELOG.md +0 -1399
- package/src/__tests__/fileMock.ts +0 -6
- package/src/__tests__/setup.ts +0 -27
- package/src/__tests__/utils/utils.test.ts +0 -18
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +0 -42
- package/src/components/Accordion/Accordion.stories.mdx +0 -361
- package/src/components/Accordion/Accordion.test.tsx +0 -237
- package/src/components/Accordion/Accordion.tsx +0 -136
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +0 -734
- package/src/components/Autosuggest/Autosuggest.stories.mdx +0 -75
- package/src/components/Autosuggest/Autosuggest.stories.tsx +0 -211
- package/src/components/Autosuggest/_Autosuggest.scss +0 -51
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +0 -231
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -144
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -98
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +0 -695
- package/src/components/Button/Button.stories.mdx +0 -320
- package/src/components/Button/Button.test.tsx +0 -184
- package/src/components/Button/Button.tsx +0 -95
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -106
- package/src/components/ButtonGroup/ButtonGroup.stories.mdx +0 -147
- package/src/components/ButtonGroup/ButtonGroup.test.tsx +0 -141
- package/src/components/ButtonGroup/ButtonGroup.tsx +0 -99
- package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +0 -117
- package/src/components/Card/Card.stories.mdx +0 -1043
- package/src/components/Card/Card.test.tsx +0 -388
- package/src/components/Card/Card.tsx +0 -345
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +0 -568
- package/src/components/Chakra/Box.stories.mdx +0 -52
- package/src/components/Chakra/Center.stories.mdx +0 -96
- package/src/components/Chakra/Flex.stories.mdx +0 -111
- package/src/components/Chakra/Grid.stories.mdx +0 -89
- package/src/components/Chakra/Stack.stories.mdx +0 -109
- package/src/components/Checkbox/Checkbox.stories.mdx +0 -243
- package/src/components/Checkbox/Checkbox.test.tsx +0 -319
- package/src/components/Checkbox/Checkbox.tsx +0 -166
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +0 -616
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +0 -462
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +0 -492
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +0 -173
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +0 -1722
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +0 -163
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +0 -67
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +0 -98
- package/src/components/DatePicker/DatePicker.stories.mdx +0 -452
- package/src/components/DatePicker/DatePicker.test.tsx +0 -940
- package/src/components/DatePicker/DatePicker.tsx +0 -450
- package/src/components/DatePicker/_DatePicker.scss +0 -100
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -889
- package/src/components/Fieldset/Fieldset.stories.mdx +0 -96
- package/src/components/Fieldset/Fieldset.test.tsx +0 -155
- package/src/components/Fieldset/Fieldset.tsx +0 -55
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +0 -89
- package/src/components/Form/Form.stories.mdx +0 -426
- package/src/components/Form/Form.test.tsx +0 -234
- package/src/components/Form/Form.tsx +0 -124
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -115
- package/src/components/Grid/SimpleGrid.stories.mdx +0 -338
- package/src/components/Grid/SimpleGrid.test.tsx +0 -79
- package/src/components/Grid/SimpleGrid.tsx +0 -49
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +0 -23
- package/src/components/Heading/Heading.stories.mdx +0 -184
- package/src/components/Heading/Heading.test.tsx +0 -171
- package/src/components/Heading/Heading.tsx +0 -101
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +0 -90
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +0 -172
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +0 -114
- package/src/components/HelperErrorText/HelperErrorText.tsx +0 -62
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +0 -93
- package/src/components/Hero/Hero.stories.mdx +0 -378
- package/src/components/Hero/Hero.test.tsx +0 -611
- package/src/components/Hero/Hero.tsx +0 -203
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +0 -379
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +0 -73
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +0 -54
- package/src/components/HorizontalRule/HorizontalRule.tsx +0 -27
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +0 -44
- package/src/components/Icons/Icon.stories.mdx +0 -413
- package/src/components/Icons/Icon.test.tsx +0 -120
- package/src/components/Icons/Icon.tsx +0 -187
- package/src/components/Icons/IconSvgs.tsx +0 -64
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +0 -129
- package/src/components/Image/Image.stories.mdx +0 -332
- package/src/components/Image/Image.test.tsx +0 -155
- package/src/components/Image/Image.tsx +0 -171
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +0 -269
- package/src/components/Label/Label.stories.mdx +0 -100
- package/src/components/Label/Label.test.tsx +0 -116
- package/src/components/Label/Label.tsx +0 -55
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +0 -45
- package/src/components/Link/Link.stories.mdx +0 -249
- package/src/components/Link/Link.test.tsx +0 -224
- package/src/components/Link/Link.tsx +0 -178
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +0 -286
- package/src/components/List/List.stories.mdx +0 -393
- package/src/components/List/List.test.tsx +0 -265
- package/src/components/List/List.tsx +0 -156
- package/src/components/List/__snapshots__/List.test.tsx.snap +0 -213
- package/src/components/Logo/Logo.stories.mdx +0 -290
- package/src/components/Logo/Logo.test.tsx +0 -116
- package/src/components/Logo/Logo.tsx +0 -147
- package/src/components/Logo/LogoSvgs.tsx +0 -82
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +0 -142
- package/src/components/Modal/Modal.stories.mdx +0 -301
- package/src/components/Modal/Modal.test.tsx +0 -157
- package/src/components/Modal/Modal.tsx +0 -154
- package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +0 -25
- package/src/components/Notification/Notification.stories.mdx +0 -358
- package/src/components/Notification/Notification.test.tsx +0 -279
- package/src/components/Notification/Notification.tsx +0 -224
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +0 -525
- package/src/components/Pagination/Pagination.stories.mdx +0 -184
- package/src/components/Pagination/Pagination.test.tsx +0 -419
- package/src/components/Pagination/Pagination.tsx +0 -269
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -544
- package/src/components/Placeholder/Placeholder.tsx +0 -19
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +0 -360
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +0 -298
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +0 -132
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +0 -434
- package/src/components/Radio/Radio.stories.mdx +0 -216
- package/src/components/Radio/Radio.test.tsx +0 -247
- package/src/components/Radio/Radio.tsx +0 -128
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +0 -411
- package/src/components/RadioGroup/RadioGroup.stories.mdx +0 -478
- package/src/components/RadioGroup/RadioGroup.test.tsx +0 -471
- package/src/components/RadioGroup/RadioGroup.tsx +0 -170
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +0 -1430
- package/src/components/SearchBar/SearchBar.stories.mdx +0 -518
- package/src/components/SearchBar/SearchBar.test.tsx +0 -435
- package/src/components/SearchBar/SearchBar.tsx +0 -210
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +0 -1027
- package/src/components/Select/Select.stories.mdx +0 -439
- package/src/components/Select/Select.test.tsx +0 -358
- package/src/components/Select/Select.tsx +0 -181
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +0 -885
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +0 -142
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +0 -116
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +0 -123
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +0 -898
- package/src/components/SkipNavigation/SkipNavigation.stories.mdx +0 -90
- package/src/components/SkipNavigation/SkipNavigation.test.tsx +0 -63
- package/src/components/SkipNavigation/SkipNavigation.tsx +0 -51
- package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +0 -130
- package/src/components/Slider/Slider.stories.mdx +0 -628
- package/src/components/Slider/Slider.test.tsx +0 -736
- package/src/components/Slider/Slider.tsx +0 -322
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +0 -2153
- package/src/components/StatusBadge/StatusBadge.stories.mdx +0 -109
- package/src/components/StatusBadge/StatusBadge.test.tsx +0 -70
- package/src/components/StatusBadge/StatusBadge.tsx +0 -35
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +0 -47
- package/src/components/StructuredContent/StructuredContent.stories.mdx +0 -567
- package/src/components/StructuredContent/StructuredContent.test.tsx +0 -435
- package/src/components/StructuredContent/StructuredContent.tsx +0 -139
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +0 -368
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +0 -206
- package/src/components/StyleGuide/Breakpoints.stories.mdx +0 -55
- package/src/components/StyleGuide/Buttons.stories.mdx +0 -194
- package/src/components/StyleGuide/ColorCard.tsx +0 -43
- package/src/components/StyleGuide/Colors.stories.mdx +0 -201
- package/src/components/StyleGuide/DesignTokens.stories.mdx +0 -193
- package/src/components/StyleGuide/Forms.stories.mdx +0 -94
- package/src/components/StyleGuide/Iconography.stories.mdx +0 -142
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -116
- package/src/components/StyleGuide/Typography.stories.mdx +0 -419
- package/src/components/Table/Table.stories.mdx +0 -276
- package/src/components/Table/Table.test.tsx +0 -208
- package/src/components/Table/Table.tsx +0 -131
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +0 -1703
- package/src/components/Tabs/Tabs.stories.mdx +0 -338
- package/src/components/Tabs/Tabs.test.tsx +0 -298
- package/src/components/Tabs/Tabs.tsx +0 -264
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +0 -584
- package/src/components/Template/Template.stories.mdx +0 -691
- package/src/components/Template/Template.test.tsx +0 -309
- package/src/components/Template/Template.tsx +0 -326
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +0 -342
- package/src/components/Text/Text.stories.mdx +0 -103
- package/src/components/Text/Text.test.tsx +0 -63
- package/src/components/Text/Text.tsx +0 -50
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +0 -50
- package/src/components/TextInput/TextInput.stories.mdx +0 -268
- package/src/components/TextInput/TextInput.test.tsx +0 -451
- package/src/components/TextInput/TextInput.tsx +0 -240
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +0 -264
- package/src/components/Toggle/Toggle.stories.mdx +0 -237
- package/src/components/Toggle/Toggle.test.tsx +0 -170
- package/src/components/Toggle/Toggle.tsx +0 -126
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +0 -442
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +0 -211
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +0 -308
- package/src/components/VideoPlayer/VideoPlayer.tsx +0 -188
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +0 -187
- package/src/docs/Chakra.stories.mdx +0 -563
- package/src/docs/Welcome.stories.mdx +0 -148
- package/src/helpers/types.ts +0 -1
- package/src/hooks/tests/useCarouselStyles.test.ts +0 -140
- package/src/hooks/tests/useNYPLTheme.test.tsx +0 -36
- package/src/hooks/useCarouselStyles.stories.mdx +0 -30
- package/src/hooks/useCarouselStyles.ts +0 -35
- package/src/hooks/useNYPLTheme.stories.mdx +0 -98
- package/src/hooks/useNYPLTheme.ts +0 -91
- package/src/hooks/useWindowSize.stories.mdx +0 -23
- package/src/hooks/useWindowSize.ts +0 -40
- package/src/index.ts +0 -136
- package/src/resources.scss +0 -6
- package/src/styles/base/_01-breakpoints.scss +0 -27
- package/src/styles/base/_02-mixins.scss +0 -103
- package/src/styles/base/_place-holder.scss +0 -33
- package/src/styles/space/_space-inline.scss +0 -79
- package/src/styles/space/_space-inset.scss +0 -57
- package/src/styles/space/_space-stack.scss +0 -116
- package/src/styles.scss +0 -23
- package/src/theme/components/accordion.ts +0 -25
- package/src/theme/components/breadcrumb.ts +0 -94
- package/src/theme/components/button.ts +0 -132
- package/src/theme/components/buttonGroup.ts +0 -10
- package/src/theme/components/card.ts +0 -231
- package/src/theme/components/checkbox.ts +0 -110
- package/src/theme/components/checkboxGroup.ts +0 -10
- package/src/theme/components/componentWrapper.ts +0 -14
- package/src/theme/components/customTable.ts +0 -77
- package/src/theme/components/datePicker.ts +0 -17
- package/src/theme/components/fieldset.ts +0 -23
- package/src/theme/components/global.ts +0 -91
- package/src/theme/components/globalMixins.ts +0 -24
- package/src/theme/components/heading.ts +0 -79
- package/src/theme/components/helperErrorText.ts +0 -14
- package/src/theme/components/hero.ts +0 -238
- package/src/theme/components/horizontalRule.ts +0 -17
- package/src/theme/components/icon.ts +0 -88
- package/src/theme/components/image.ts +0 -135
- package/src/theme/components/label.ts +0 -15
- package/src/theme/components/link.ts +0 -63
- package/src/theme/components/list.ts +0 -88
- package/src/theme/components/logo.ts +0 -58
- package/src/theme/components/notification.ts +0 -132
- package/src/theme/components/pagination.ts +0 -17
- package/src/theme/components/progressIndicator.ts +0 -67
- package/src/theme/components/radio.ts +0 -103
- package/src/theme/components/radioGroup.ts +0 -10
- package/src/theme/components/searchBar.ts +0 -19
- package/src/theme/components/select.ts +0 -72
- package/src/theme/components/skeletonLoader.ts +0 -113
- package/src/theme/components/skipNavigation.ts +0 -26
- package/src/theme/components/slider.ts +0 -95
- package/src/theme/components/statusBadge.ts +0 -26
- package/src/theme/components/structuredContent.ts +0 -149
- package/src/theme/components/tabs.ts +0 -109
- package/src/theme/components/template.ts +0 -114
- package/src/theme/components/text.ts +0 -38
- package/src/theme/components/textInput.ts +0 -65
- package/src/theme/components/toggle.ts +0 -109
- package/src/theme/components/videoPlayer.ts +0 -47
- package/src/theme/foundations/breakpoints.ts +0 -24
- package/src/theme/foundations/colors.ts +0 -212
- package/src/theme/foundations/global.ts +0 -43
- package/src/theme/foundations/radii.ts +0 -7
- package/src/theme/foundations/shadows.ts +0 -5
- package/src/theme/foundations/spacing.ts +0 -136
- package/src/theme/foundations/typography.ts +0 -107
- package/src/theme/index.ts +0 -131
- package/src/theme/provider.tsx +0 -9
- package/src/theme/types.ts +0 -1
- package/src/utils/componentCategories.ts +0 -152
- package/src/utils/interfaces.ts +0 -5
- package/src/utils/utils.ts +0 -44
|
@@ -1,518 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ArgsTable,
|
|
3
|
-
Canvas,
|
|
4
|
-
Description,
|
|
5
|
-
Meta,
|
|
6
|
-
Story,
|
|
7
|
-
} from "@storybook/addon-docs";
|
|
8
|
-
import { withDesign } from "storybook-addon-designs";
|
|
9
|
-
|
|
10
|
-
import SearchBar from "./SearchBar";
|
|
11
|
-
import * as stories from "../Autosuggest/Autosuggest.stories.tsx";
|
|
12
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
13
|
-
import DSProvider from "../../theme/provider";
|
|
14
|
-
|
|
15
|
-
<Meta
|
|
16
|
-
title={getCategory("SearchBar")}
|
|
17
|
-
component={SearchBar}
|
|
18
|
-
decorators={[withDesign]}
|
|
19
|
-
parameters={{
|
|
20
|
-
design: {
|
|
21
|
-
type: "figma",
|
|
22
|
-
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11689%3A423",
|
|
23
|
-
},
|
|
24
|
-
jest: ["SearchBar.test.tsx"],
|
|
25
|
-
}}
|
|
26
|
-
argTypes={{
|
|
27
|
-
action: { control: false },
|
|
28
|
-
ariaLabel: { control: false },
|
|
29
|
-
buttonOnClick: {
|
|
30
|
-
control: false,
|
|
31
|
-
table: { defaultValue: { summary: "null" } },
|
|
32
|
-
},
|
|
33
|
-
className: { control: false },
|
|
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
|
-
method: { control: false },
|
|
45
|
-
onSubmit: { control: false },
|
|
46
|
-
selectProps: { control: false },
|
|
47
|
-
showHelperText: {
|
|
48
|
-
description: "Only used for Storybook",
|
|
49
|
-
},
|
|
50
|
-
showSelect: {
|
|
51
|
-
description: "Only used for Storybook",
|
|
52
|
-
},
|
|
53
|
-
textInputElement: { control: false },
|
|
54
|
-
textInputProps: { control: false },
|
|
55
|
-
}}
|
|
56
|
-
/>
|
|
57
|
-
|
|
58
|
-
# SearchBar
|
|
59
|
-
|
|
60
|
-
| Component Version | DS Version |
|
|
61
|
-
| ----------------- | ---------- |
|
|
62
|
-
| Added | `0.0.4` |
|
|
63
|
-
| Latest | `0.28.0` |
|
|
64
|
-
|
|
65
|
-
## Table of Contents
|
|
66
|
-
|
|
67
|
-
- [Overview](#overview)
|
|
68
|
-
- [Component Props](#component-props)
|
|
69
|
-
- [Accessibility](#accessibility)
|
|
70
|
-
- [Form Components](#form-components)
|
|
71
|
-
- [Search Autocomplete](#search-autocomplete)
|
|
72
|
-
- [Form States](#form-states)
|
|
73
|
-
- [With Heading and Description Text](#with-heading-and-description-text)
|
|
74
|
-
- [TextInput and onSubmit Values](#textinput-and-onsubmit-values)
|
|
75
|
-
|
|
76
|
-
## Overview
|
|
77
|
-
|
|
78
|
-
<Description of={SearchBar} />
|
|
79
|
-
|
|
80
|
-
The main wrapper element that is rendered is a `<form>` DOM element. All the
|
|
81
|
-
props passed to `SearchBar` will apply to the `<form>` element and its children.
|
|
82
|
-
The `SearchBar` component will render a `Select` component (optional),
|
|
83
|
-
`TextInput` component, `Button` component, and `HelperErrorText` component
|
|
84
|
-
based on the required props.
|
|
85
|
-
|
|
86
|
-
The `Select` dropdown narrows the search within a specific category, typically
|
|
87
|
-
title or author. Toggle the `Select` through the Controls.
|
|
88
|
-
|
|
89
|
-
Note: The labels for the `Select` and `TextInput` components are not visible but
|
|
90
|
-
aria-labels are used to make these children components accessible.
|
|
91
|
-
|
|
92
|
-
export const optionsGroup = [
|
|
93
|
-
"Art",
|
|
94
|
-
"Bushes",
|
|
95
|
-
"Clothing",
|
|
96
|
-
"Flowers",
|
|
97
|
-
"Fossils",
|
|
98
|
-
"Fruits",
|
|
99
|
-
"Furniture",
|
|
100
|
-
"Songs",
|
|
101
|
-
"Tools",
|
|
102
|
-
"Villagers",
|
|
103
|
-
];
|
|
104
|
-
|
|
105
|
-
## Component Props
|
|
106
|
-
|
|
107
|
-
<Canvas withToolbar>
|
|
108
|
-
<Story
|
|
109
|
-
name="SearchBar with Controls"
|
|
110
|
-
args={{
|
|
111
|
-
action: undefined,
|
|
112
|
-
buttonOnClick: undefined,
|
|
113
|
-
className: undefined,
|
|
114
|
-
helperText: "Search for items in Animal Crossing New Horizons",
|
|
115
|
-
id: "searchBar-id",
|
|
116
|
-
invalidText: "Could not find the item :(",
|
|
117
|
-
isDisabled: false,
|
|
118
|
-
isInvalid: false,
|
|
119
|
-
isRequired: false,
|
|
120
|
-
labelText: "SearchBar Label",
|
|
121
|
-
method: undefined,
|
|
122
|
-
noBrandButtonType: false,
|
|
123
|
-
onSubmit: () => {},
|
|
124
|
-
selectProps: undefined,
|
|
125
|
-
showHelperText: true,
|
|
126
|
-
showSelect: true,
|
|
127
|
-
textInputElement: undefined,
|
|
128
|
-
textInputProps: undefined,
|
|
129
|
-
}}
|
|
130
|
-
>
|
|
131
|
-
{(args) => {
|
|
132
|
-
const { helperText, showHelperText, showSelect, ...rest } = args;
|
|
133
|
-
return (
|
|
134
|
-
<SearchBar
|
|
135
|
-
{...rest}
|
|
136
|
-
selectProps={
|
|
137
|
-
showSelect && {
|
|
138
|
-
labelText: "Select a category",
|
|
139
|
-
name: "selectName",
|
|
140
|
-
optionsData: optionsGroup,
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
textInputProps={{
|
|
144
|
-
labelText: "Item Search",
|
|
145
|
-
name: "textInputName",
|
|
146
|
-
placeholder: "Item Search",
|
|
147
|
-
}}
|
|
148
|
-
helperText={showHelperText && helperText}
|
|
149
|
-
/>
|
|
150
|
-
);
|
|
151
|
-
}}
|
|
152
|
-
</Story>
|
|
153
|
-
</Canvas>
|
|
154
|
-
|
|
155
|
-
<ArgsTable story="SearchBar with Controls" />
|
|
156
|
-
|
|
157
|
-
## Accessibility
|
|
158
|
-
|
|
159
|
-
The `SearchBar` component is implemented with Reservoir `Select`, `TextInput`,
|
|
160
|
-
and `Button` accessible components. This a "complete" component that renders an
|
|
161
|
-
HTML `<form>` element that is submitted with a `<button>` element of `type="submit"`.
|
|
162
|
-
The `<form>` element also has a `role="search"` attribute that allows
|
|
163
|
-
screenreaders to pick up this entire search form.
|
|
164
|
-
|
|
165
|
-
Resources:
|
|
166
|
-
|
|
167
|
-
- [Reservoir Select](https://nypl.github.io/nypl-design-system/reservoir/v1/?path=/docs/components-form-elements-select--select-with-controls)
|
|
168
|
-
- [Reservoir TextInput](https://nypl.github.io/nypl-design-system/reservoir/v1/?path=/docs/components-form-elements-textinput--text-input-with-controls)
|
|
169
|
-
- [a11ymatters Accessible Search Form](https://www.a11ymatters.com/pattern/accessible-search/)
|
|
170
|
-
- [MDN ARIA: search role](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/search_role)
|
|
171
|
-
|
|
172
|
-
## Form Components
|
|
173
|
-
|
|
174
|
-
### Select Component
|
|
175
|
-
|
|
176
|
-
To render an optional `Select` component, an object must be passed to the
|
|
177
|
-
`selectProps` prop. It _must_ include `name`, `labelText`, and `optionsData`
|
|
178
|
-
properties. The `onChange` and `value` properties are optional. The `labelText`
|
|
179
|
-
value won't be rendered but will be used for its `aria-label` attribute.
|
|
180
|
-
|
|
181
|
-
If you want to control the `Select` component, you **must** pass the `onChange`
|
|
182
|
-
and `value` props to the `selectProps` prop object. You must then control the
|
|
183
|
-
state of the selected value in your application. See the example at end of this
|
|
184
|
-
page for a full demonstration.
|
|
185
|
-
|
|
186
|
-
```
|
|
187
|
-
const selectProps = {
|
|
188
|
-
labelText: "Select a category",
|
|
189
|
-
name: "select-form-name",
|
|
190
|
-
onChange: (event) => {
|
|
191
|
-
console.log(event.target.value);
|
|
192
|
-
},
|
|
193
|
-
optionsData: optionsGroup,
|
|
194
|
-
value: "Art",
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
// ...
|
|
198
|
-
<SearchBar
|
|
199
|
-
id="searchBar"
|
|
200
|
-
onSubmit={() => {}}
|
|
201
|
-
selectProps={selectProps}
|
|
202
|
-
// ...
|
|
203
|
-
/>
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
### TextInput Component
|
|
207
|
-
|
|
208
|
-
To render the `TextInput` component, an object must be passed to the
|
|
209
|
-
`textInputProps` prop. It _must_ include `labelText` and `name` properties. The
|
|
210
|
-
`labelText` value won't be rendered but will be used for its `aria-label`
|
|
211
|
-
attribute. Optional properties to pass include `onChange`, `placeholder`, and `value`.
|
|
212
|
-
|
|
213
|
-
```
|
|
214
|
-
const textInputProps = {
|
|
215
|
-
labelText: "Item Search",
|
|
216
|
-
name: "textInputName",
|
|
217
|
-
onChange: (event) => {
|
|
218
|
-
console.log(event.target.value);
|
|
219
|
-
},
|
|
220
|
-
placeholder: "Item Search",
|
|
221
|
-
value: "Horizon"
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
// ...
|
|
225
|
-
<SearchBar
|
|
226
|
-
id="searchBar"
|
|
227
|
-
onSubmit={() => {}}
|
|
228
|
-
textInputProps={textInputProps}
|
|
229
|
-
// ...
|
|
230
|
-
/>
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Custom Input Component
|
|
234
|
-
|
|
235
|
-
To render a custom input component, pass the component to the `textInputElement`
|
|
236
|
-
prop. This will render your custom input component such as an `Autocomplete`
|
|
237
|
-
component. Check the "Search Autocomplete" example for more details.
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
const textInputElement = <CustomInput {...props} />;
|
|
241
|
-
|
|
242
|
-
// ...
|
|
243
|
-
<SearchBar
|
|
244
|
-
id="searchBar"
|
|
245
|
-
onSubmit={() => {}}
|
|
246
|
-
textInputElement={textInputElement}
|
|
247
|
-
// ...
|
|
248
|
-
/>
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Button Component
|
|
252
|
-
|
|
253
|
-
A `Button` component will automatically be rendered for the `SearchBar`
|
|
254
|
-
component. If you want to pass a callback function to the `Button`, use the
|
|
255
|
-
`buttonOnClick` prop.
|
|
256
|
-
|
|
257
|
-
It's also possible to render the `ButtonType.NoBrand` variant style when the
|
|
258
|
-
`noBrandButtonType` prop is set to `true`. The `ButtonType.Primary` variant
|
|
259
|
-
style is used by default.
|
|
260
|
-
|
|
261
|
-
### HelperErrorText Component
|
|
262
|
-
|
|
263
|
-
To render the `HelperErrorText` component, pass a string or HTML to the
|
|
264
|
-
`helperText` prop. For the invalid state when `isInvalid` is true, pass the
|
|
265
|
-
error string or HTML in the `invalidText` prop.
|
|
266
|
-
|
|
267
|
-
```
|
|
268
|
-
const helperText = "";
|
|
269
|
-
|
|
270
|
-
// ...
|
|
271
|
-
<SearchBar
|
|
272
|
-
id="searchBar"
|
|
273
|
-
onSubmit={() => {}}
|
|
274
|
-
helperText="Search for items in <b>Animal Crossing New Horizons</b>."
|
|
275
|
-
// ...
|
|
276
|
-
/>
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
<Canvas>
|
|
280
|
-
<DSProvider>
|
|
281
|
-
<SearchBar
|
|
282
|
-
descriptionText="The helper text below contains HTML in a string."
|
|
283
|
-
helperText="Search for items in <b>Animal Crossing New Horizons</b>."
|
|
284
|
-
id="helper-text"
|
|
285
|
-
onSubmit={() => {}}
|
|
286
|
-
textInputProps={{
|
|
287
|
-
labelText: "Item Search",
|
|
288
|
-
name: "textInputName",
|
|
289
|
-
placeholder: "Item Search",
|
|
290
|
-
}}
|
|
291
|
-
/>
|
|
292
|
-
<br />
|
|
293
|
-
<SearchBar
|
|
294
|
-
descriptionText="The invalid text below contains HTML in a string."
|
|
295
|
-
id="invalid-text"
|
|
296
|
-
isInvalid
|
|
297
|
-
invalidText="Could <b>not</b> find the item <b>:(</b>"
|
|
298
|
-
onSubmit={() => {}}
|
|
299
|
-
textInputProps={{
|
|
300
|
-
labelText: "Item Search",
|
|
301
|
-
name: "textInputName",
|
|
302
|
-
placeholder: "Item Search",
|
|
303
|
-
}}
|
|
304
|
-
/>
|
|
305
|
-
</DSProvider>
|
|
306
|
-
</Canvas>
|
|
307
|
-
|
|
308
|
-
## Search Autocomplete
|
|
309
|
-
|
|
310
|
-
While the Design System does not implement an `Autosuggest` or `Autocomplete`
|
|
311
|
-
component, it does show a pattern for using the `react-autosuggest` package.
|
|
312
|
-
In this example, we're using the `react-autosuggest` example found in the
|
|
313
|
-
[Basic Autosuggest story](https://nypl.github.io/nypl-design-system/reservoir/v1/?path=/docs/development-guide-autosuggest--autosuggest-library)
|
|
314
|
-
as the main component inside the `SearchBar` component.
|
|
315
|
-
|
|
316
|
-
In order to render this custom input element in the `SearchBar` component, pass
|
|
317
|
-
it in the `textInputElement` prop. Do not pass an object to the `textInputProps`
|
|
318
|
-
prop since the custom input component passed in `textInputElement` will take
|
|
319
|
-
precedence.
|
|
320
|
-
|
|
321
|
-
<Canvas withToolbar>
|
|
322
|
-
<Story
|
|
323
|
-
name="Search Autocomplete"
|
|
324
|
-
args={{
|
|
325
|
-
id: "autocomplete",
|
|
326
|
-
isDisabled: false,
|
|
327
|
-
isInvalid: false,
|
|
328
|
-
isRequired: false,
|
|
329
|
-
}}
|
|
330
|
-
>
|
|
331
|
-
{(args) => (
|
|
332
|
-
<div style={{ minHeight: "150px" }}>
|
|
333
|
-
<SearchBar
|
|
334
|
-
onSubmit={() => {}}
|
|
335
|
-
textInputElement={stories.SearchBarExample()}
|
|
336
|
-
helperText="Select your home library. Start by typing the name of the library. Try 'ba'."
|
|
337
|
-
{...args}
|
|
338
|
-
/>
|
|
339
|
-
</div>
|
|
340
|
-
)}
|
|
341
|
-
</Story>
|
|
342
|
-
</Canvas>
|
|
343
|
-
|
|
344
|
-
## Form States
|
|
345
|
-
|
|
346
|
-
Use the Controls in the `Basic` example to see different states in real time.
|
|
347
|
-
Here are the same possible states of the `SearchBar` component in static examples.
|
|
348
|
-
|
|
349
|
-
### Error State
|
|
350
|
-
|
|
351
|
-
For the error state, set the `isInvalid` prop to `true`. This will update the
|
|
352
|
-
state for all its children. If you passed a custom input element, you must
|
|
353
|
-
handle the error state yourself.
|
|
354
|
-
|
|
355
|
-
<Canvas>
|
|
356
|
-
<DSProvider>
|
|
357
|
-
<SearchBar
|
|
358
|
-
helperText="This is the helper text!"
|
|
359
|
-
id="error-state"
|
|
360
|
-
invalidText="Could not find the item :("
|
|
361
|
-
isInvalid
|
|
362
|
-
onSubmit={() => {}}
|
|
363
|
-
textInputProps={{
|
|
364
|
-
labelText: "Item Search",
|
|
365
|
-
name: "textInputName",
|
|
366
|
-
placeholder: "Item Search",
|
|
367
|
-
}}
|
|
368
|
-
/>
|
|
369
|
-
</DSProvider>
|
|
370
|
-
</Canvas>
|
|
371
|
-
|
|
372
|
-
### Disabled State
|
|
373
|
-
|
|
374
|
-
For the disabled state, set the `isDisabled` prop to `true`. This will update
|
|
375
|
-
the state for all its children. If you passed a custom input element, you must
|
|
376
|
-
handle the disabled state yourself.
|
|
377
|
-
|
|
378
|
-
<Canvas>
|
|
379
|
-
<DSProvider>
|
|
380
|
-
<SearchBar
|
|
381
|
-
helperText="Reason for disabled state."
|
|
382
|
-
id="disabled-state"
|
|
383
|
-
isDisabled
|
|
384
|
-
onSubmit={() => {}}
|
|
385
|
-
textInputProps={{
|
|
386
|
-
labelText: "Item Search",
|
|
387
|
-
name: "textInputName",
|
|
388
|
-
placeholder: "Item Search",
|
|
389
|
-
}}
|
|
390
|
-
/>
|
|
391
|
-
</DSProvider>
|
|
392
|
-
</Canvas>
|
|
393
|
-
|
|
394
|
-
## With Heading and Description Text
|
|
395
|
-
|
|
396
|
-
Use the `descriptionText` and `headingText` props to render a heading and
|
|
397
|
-
description above the main `SearchBar` form component.
|
|
398
|
-
|
|
399
|
-
<Canvas>
|
|
400
|
-
<DSProvider>
|
|
401
|
-
<SearchBar
|
|
402
|
-
descriptionText="This is the description for this `SearchBar` instance."
|
|
403
|
-
headingText="Heading for this `SearchBar`"
|
|
404
|
-
id="heading-and-description"
|
|
405
|
-
onSubmit={() => {}}
|
|
406
|
-
textInputProps={{
|
|
407
|
-
labelText: "Item Search",
|
|
408
|
-
name: "textInputName",
|
|
409
|
-
placeholder: "Item Search",
|
|
410
|
-
}}
|
|
411
|
-
/>
|
|
412
|
-
</DSProvider>
|
|
413
|
-
</Canvas>
|
|
414
|
-
|
|
415
|
-
## TextInput and onSubmit Values
|
|
416
|
-
|
|
417
|
-
_NOTE: open the browser console to see the values logged in the example below._
|
|
418
|
-
|
|
419
|
-
It is possible to get certain values from the `SearchBar` component by passing
|
|
420
|
-
callback functions as props.
|
|
421
|
-
|
|
422
|
-
The keyword value in the `TextInput` component can be accessed by passing a
|
|
423
|
-
function to the `onChange` property in the `textInputProp` prop. This is useful
|
|
424
|
-
for validating the keyword the user entered.
|
|
425
|
-
|
|
426
|
-
To get values when the form is submitted, you must:
|
|
427
|
-
|
|
428
|
-
- pass values for the `name` property in the `selectProps` and `textInputProps`
|
|
429
|
-
prop objects.
|
|
430
|
-
- get the values returned in the `onSubmit` callback function.
|
|
431
|
-
|
|
432
|
-
In the following example, the `name` for the `Select` is "selectName" and the
|
|
433
|
-
`name` for the `TextInput` is "textInputName". The `onSubmit` function can get
|
|
434
|
-
the submitted values through the `event` object. In the example below, the
|
|
435
|
-
values can be retrieved as `event.target.selectName.value` and
|
|
436
|
-
`event.target.textInputName.value`.
|
|
437
|
-
|
|
438
|
-
```tsx
|
|
439
|
-
export function SearchBarValueExample() {
|
|
440
|
-
const [selectValue, setSelectValue] = React.useState("Tools");
|
|
441
|
-
const selectOnChange = (event) => {
|
|
442
|
-
console.log(`onChange Select value: ${event.target.value}`);
|
|
443
|
-
setSelectValue(event.target.value);
|
|
444
|
-
};
|
|
445
|
-
const textInputOnChange = (event) => {
|
|
446
|
-
console.log(`onChange TextInput value: ${event.target.value}`);
|
|
447
|
-
};
|
|
448
|
-
const onSubmit = (event) => {
|
|
449
|
-
event.preventDefault();
|
|
450
|
-
console.log(`onSubmit Select value: ${event.target.selectName.value}`);
|
|
451
|
-
console.log(`onSubmit TextInput value ${event.target.textInputName.value}`);
|
|
452
|
-
};
|
|
453
|
-
return (
|
|
454
|
-
<SearchBar
|
|
455
|
-
helperText="Search for an item"
|
|
456
|
-
invalidText="Could not find the item :("
|
|
457
|
-
id="example-1"
|
|
458
|
-
onSubmit={onSubmit}
|
|
459
|
-
selectProps={{
|
|
460
|
-
labelText: "Select a category",
|
|
461
|
-
name: "selectName",
|
|
462
|
-
onChange: selectOnChange,
|
|
463
|
-
optionsData: optionsGroup,
|
|
464
|
-
value: selectValue,
|
|
465
|
-
}}
|
|
466
|
-
textInputProps={{
|
|
467
|
-
labelText: "Item Search",
|
|
468
|
-
name: "textInputName",
|
|
469
|
-
onChange: textInputOnChange,
|
|
470
|
-
placeholder: "Item Search",
|
|
471
|
-
}}
|
|
472
|
-
/>
|
|
473
|
-
);
|
|
474
|
-
}
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
export function SearchBarValueExample() {
|
|
478
|
-
const [selectValue, setSelectValue] = React.useState("Tools");
|
|
479
|
-
const selectOnChange = (event) => {
|
|
480
|
-
console.log(`onChange Select value: ${event.target.value}`);
|
|
481
|
-
setSelectValue(event.target.value);
|
|
482
|
-
};
|
|
483
|
-
const textInputOnChange = (event) => {
|
|
484
|
-
console.log(`onChange TextInput value: ${event.target.value}`);
|
|
485
|
-
};
|
|
486
|
-
const onSubmit = (event) => {
|
|
487
|
-
event.preventDefault();
|
|
488
|
-
console.log(`onSubmit Select value: ${event.target.selectName.value}`);
|
|
489
|
-
console.log(`onSubmit TextInput value ${event.target.textInputName.value}`);
|
|
490
|
-
};
|
|
491
|
-
return (
|
|
492
|
-
<SearchBar
|
|
493
|
-
helperText="Search for an item"
|
|
494
|
-
invalidText="Could not find the item :("
|
|
495
|
-
id="example-1"
|
|
496
|
-
onSubmit={onSubmit}
|
|
497
|
-
selectProps={{
|
|
498
|
-
labelText: "Select a category",
|
|
499
|
-
name: "selectName",
|
|
500
|
-
onChange: selectOnChange,
|
|
501
|
-
optionsData: optionsGroup,
|
|
502
|
-
value: selectValue,
|
|
503
|
-
}}
|
|
504
|
-
textInputProps={{
|
|
505
|
-
labelText: "Item Search",
|
|
506
|
-
name: "textInputName",
|
|
507
|
-
onChange: textInputOnChange,
|
|
508
|
-
placeholder: "Item Search",
|
|
509
|
-
}}
|
|
510
|
-
/>
|
|
511
|
-
);
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
<Canvas>
|
|
515
|
-
<DSProvider>
|
|
516
|
-
<SearchBarValueExample />
|
|
517
|
-
</DSProvider>
|
|
518
|
-
</Canvas>
|