@nypl/design-system-react-components 0.25.0 → 0.25.1
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 +30 -0
- package/dist/components/Accordion/Accordion.d.ts +14 -14
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
- package/dist/components/Button/ButtonTypes.d.ts +2 -1
- package/dist/components/Card/Card.d.ts +1 -1
- package/dist/components/Card/CardTypes.d.ts +2 -2
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
- package/dist/components/DatePicker/DatePicker.d.ts +3 -3
- package/dist/components/Form/Form.d.ts +13 -8
- package/dist/components/Form/FormTypes.d.ts +2 -8
- package/dist/components/Grid/GridTypes.d.ts +9 -0
- package/dist/components/Grid/SimpleGrid.d.ts +14 -0
- package/dist/components/Heading/Heading.d.ts +4 -4
- package/dist/components/Hero/Hero.d.ts +19 -14
- package/dist/components/Hero/HeroTypes.d.ts +10 -5
- package/dist/components/Icons/Icon.d.ts +13 -16
- package/dist/components/Icons/IconTypes.d.ts +78 -64
- package/dist/components/Label/Label.d.ts +5 -17
- package/dist/components/Link/Link.d.ts +8 -12
- package/dist/components/SearchBar/SearchBar.d.ts +45 -27
- package/dist/components/Select/Select.d.ts +32 -35
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
- package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
- package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
- package/dist/components/Template/Template.d.ts +91 -0
- package/dist/components/Text/Text.d.ts +16 -0
- package/dist/components/Text/TextTypes.d.ts +6 -0
- package/dist/components/TextInput/TextInput.d.ts +32 -31
- package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
- package/dist/design-system-react-components.cjs.development.js +2597 -1170
- 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 +2580 -1173
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +25 -0
- package/dist/theme/components/breadcrumb.d.ts +90 -0
- package/dist/theme/components/button.d.ts +17 -7
- package/dist/theme/components/checkbox.d.ts +7 -7
- package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
- package/dist/theme/components/customRadioGroup.d.ts +4 -3
- package/dist/theme/components/global.d.ts +55 -0
- package/dist/theme/components/globalMixins.d.ts +15 -0
- package/dist/theme/components/heading.d.ts +50 -20
- package/dist/theme/components/hero.d.ts +492 -0
- package/dist/theme/components/icon.d.ts +13 -0
- package/dist/theme/components/label.d.ts +16 -0
- package/dist/theme/components/link.d.ts +45 -0
- package/dist/theme/components/radio.d.ts +8 -7
- package/dist/theme/components/searchBar.d.ts +20 -0
- package/dist/theme/components/select.d.ts +58 -0
- package/dist/theme/components/statusBadge.d.ts +25 -0
- package/dist/theme/components/tabs.d.ts +9 -9
- package/dist/theme/components/template.d.ts +105 -0
- package/dist/theme/components/text.d.ts +20 -0
- package/dist/theme/components/textInput.d.ts +105 -0
- package/dist/theme/foundations/global.d.ts +3 -0
- package/dist/theme/foundations/shadows.d.ts +4 -0
- package/dist/utils/utils.d.ts +6 -0
- package/package.json +3 -2
- package/src/components/Accordion/Accordion.stories.mdx +227 -33
- package/src/components/Accordion/Accordion.test.tsx +135 -19
- package/src/components/Accordion/Accordion.tsx +81 -56
- package/src/components/Autosuggest/Autosuggest.stories.mdx +1 -1
- package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
- package/src/components/Autosuggest/_Autosuggest.scss +2 -2
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +46 -52
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
- package/src/components/Button/Button.stories.mdx +31 -27
- package/src/components/Button/Button.test.tsx +17 -5
- package/src/components/Button/ButtonTypes.tsx +1 -0
- package/src/components/Button/_Button.scss +3 -27
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +11 -0
- package/src/components/Card/Card.stories.mdx +24 -20
- package/src/components/Card/Card.test.tsx +13 -19
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/Card/CardTypes.tsx +2 -2
- package/src/components/Card/_Card.scss +1 -1
- package/src/components/CardEdition/CardEdition.stories.tsx +11 -6
- package/src/components/CardEdition/CardEdition.test.tsx +23 -31
- package/src/components/CardEdition/_CardEdition.scss +2 -2
- package/src/components/Chakra/Center.stories.mdx +31 -14
- package/src/components/Chakra/Grid.stories.mdx +79 -0
- package/src/components/Chakra/Stack.stories.mdx +4 -4
- package/src/components/Checkbox/Checkbox.tsx +9 -12
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +2 -5
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
- package/src/components/DatePicker/DatePicker.test.tsx +4 -4
- package/src/components/DatePicker/DatePicker.tsx +13 -13
- package/src/components/DatePicker/_DatePicker.scss +1 -0
- package/src/components/Form/Form.stories.mdx +46 -21
- package/src/components/Form/Form.test.tsx +58 -45
- package/src/components/Form/Form.tsx +49 -21
- package/src/components/Form/FormTypes.tsx +3 -8
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
- package/src/components/Grid/GridTypes.tsx +9 -0
- package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
- package/src/components/Grid/SimpleGrid.test.tsx +66 -0
- package/src/components/Grid/SimpleGrid.tsx +37 -0
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
- package/src/components/Heading/Heading.stories.mdx +1 -0
- package/src/components/Heading/Heading.tsx +12 -6
- package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
- package/src/components/Hero/Hero.stories.mdx +188 -121
- package/src/components/Hero/Hero.test.tsx +537 -107
- package/src/components/Hero/Hero.tsx +79 -92
- package/src/components/Hero/HeroTypes.tsx +17 -5
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
- package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
- package/src/components/Icons/Icon.stories.mdx +83 -74
- package/src/components/Icons/Icon.test.tsx +30 -22
- package/src/components/Icons/Icon.tsx +63 -61
- package/src/components/Icons/IconTypes.tsx +80 -64
- package/src/components/Input/_Input.scss +2 -2
- package/src/components/Label/Label.stories.mdx +28 -7
- package/src/components/Label/Label.test.tsx +43 -12
- package/src/components/Label/Label.tsx +21 -34
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
- package/src/components/Link/Link.stories.mdx +41 -41
- package/src/components/Link/Link.test.tsx +33 -44
- package/src/components/Link/Link.tsx +114 -100
- package/src/components/List/List.stories.mdx +0 -2
- package/src/components/List/List.stories.tsx +5 -5
- package/src/components/List/_List.scss +3 -3
- package/src/components/Modal/_Modal.scss +1 -1
- package/src/components/Notification/Notification.stories.mdx +12 -1
- package/src/components/Notification/Notification.test.tsx +3 -16
- package/src/components/Notification/Notification.tsx +9 -10
- package/src/components/Notification/_Notification.scss +4 -4
- package/src/components/Pagination/Pagination.test.tsx +16 -10
- package/src/components/RadioGroup/RadioGroup.stories.mdx +1 -1
- package/src/components/RadioGroup/RadioGroup.tsx +2 -10
- package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
- package/src/components/SearchBar/SearchBar.stories.mdx +189 -219
- package/src/components/SearchBar/SearchBar.tsx +151 -46
- package/src/components/Select/Select.stories.mdx +188 -170
- package/src/components/Select/Select.test.tsx +125 -380
- package/src/components/Select/Select.tsx +118 -165
- package/src/components/Select/SelectTypes.tsx +4 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +13 -25
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
- package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
- package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
- package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
- package/src/components/StatusBadge/StatusBadge.tsx +24 -25
- package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +16 -16
- package/src/components/StyleGuide/Buttons.stories.mdx +15 -15
- package/src/components/StyleGuide/Colors.stories.mdx +336 -0
- package/src/components/StyleGuide/Iconography.stories.mdx +88 -90
- package/src/components/StyleGuide/UIDocCard.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +7 -9
- package/src/components/Template/Template.stories.mdx +574 -0
- package/src/components/Template/Template.test.tsx +124 -0
- package/src/components/Template/Template.tsx +226 -0
- package/src/components/Text/Text.stories.mdx +70 -0
- package/src/components/Text/Text.test.tsx +63 -0
- package/src/components/Text/Text.tsx +55 -0
- package/src/components/Text/TextTypes.tsx +6 -0
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
- package/src/components/TextInput/TextInput.stories.mdx +89 -90
- package/src/components/TextInput/TextInput.test.tsx +65 -86
- package/src/components/TextInput/TextInput.tsx +101 -95
- package/src/components/TextInput/TextInputTypes.tsx +6 -0
- package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
- package/src/docs/Chakra.stories.mdx +4 -4
- package/src/docs/Intro.stories.mdx +15 -13
- package/src/index.ts +20 -0
- package/src/styles/01-colors/_colors-brand.scss +6 -0
- package/src/styles/01-colors/_colors-utility.scss +14 -12
- package/src/styles/base/_04-base.scss +2 -1
- package/src/styles/base/_place-holder.scss +1 -1
- package/src/styles.scss +10 -12
- package/src/theme/components/accordion.ts +30 -0
- package/src/theme/components/breadcrumb.ts +77 -0
- package/src/theme/components/button.ts +77 -63
- package/src/theme/components/checkbox.ts +15 -27
- package/src/theme/components/customCheckboxGroup.ts +12 -0
- package/src/theme/components/customRadioGroup.ts +4 -10
- package/src/theme/components/global.ts +71 -0
- package/src/theme/components/globalMixins.ts +16 -0
- package/src/theme/components/heading.ts +15 -8
- package/src/theme/components/hero.ts +239 -0
- package/src/theme/components/icon.ts +79 -0
- package/src/theme/components/label.ts +17 -0
- package/src/theme/components/link.ts +47 -0
- package/src/theme/components/radio.ts +20 -31
- package/src/theme/components/searchBar.ts +21 -0
- package/src/theme/components/select.ts +50 -0
- package/src/theme/components/statusBadge.ts +27 -0
- package/src/theme/components/tabs.ts +72 -69
- package/src/theme/components/template.ts +114 -0
- package/src/theme/components/text.ts +31 -0
- package/src/theme/components/textInput.ts +61 -0
- package/src/theme/foundations/colors.ts +29 -13
- package/src/theme/foundations/global.ts +3 -0
- package/src/theme/foundations/shadows.ts +5 -0
- package/src/theme/index.ts +37 -7
- package/src/utils/componentCategories.ts +8 -2
- package/src/utils/utils.ts +13 -0
- package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
- package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
- package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
- package/dist/components/Template/Template.stories.d.ts +0 -30
- package/src/components/Accordion/Accordion.stories.tsx +0 -66
- package/src/components/Accordion/_Accordion.scss +0 -81
- package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
- package/src/components/Form/_Form.scss +0 -67
- package/src/components/Hero/_Hero.scss +0 -256
- package/src/components/Icons/_Icons.scss +0 -116
- package/src/components/Label/_Label.scss +0 -22
- package/src/components/Link/_Link.scss +0 -73
- package/src/components/SearchBar/_SearchBar.scss +0 -16
- package/src/components/Select/_Select.scss +0 -82
- package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
- package/src/components/StatusBadge/_StatusBadge.scss +0 -23
- package/src/components/StyleGuide/Colors.stories.tsx +0 -289
- package/src/components/Template/Template.stories.tsx +0 -86
- package/src/components/Template/_Template.scss +0 -63
- package/src/components/TextInput/_TextInput.scss +0 -59
|
@@ -1,76 +1,92 @@
|
|
|
1
1
|
/* eslint-disable camelcase */
|
|
2
|
-
export enum
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
rotate270 = "rotate-270",
|
|
2
|
+
export enum IconAlign {
|
|
3
|
+
Left = "left",
|
|
4
|
+
Right = "right",
|
|
5
|
+
None = "none",
|
|
7
6
|
}
|
|
8
7
|
|
|
9
|
-
export enum
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
arrow = "arrow",
|
|
13
|
-
check = "check",
|
|
14
|
-
clock = "clock",
|
|
15
|
-
close = "close",
|
|
16
|
-
download = "download",
|
|
17
|
-
error_filled = "error_filled",
|
|
18
|
-
error_outline = "error_outline",
|
|
19
|
-
headset = "headset",
|
|
20
|
-
minus = "minus",
|
|
21
|
-
plus = "plus",
|
|
22
|
-
search = "search",
|
|
23
|
-
speaker_notes = "speaker_notes",
|
|
24
|
-
utility_account_filled = "utility_account_filled",
|
|
25
|
-
utility_account_unfilled = "utility_account_unfilled",
|
|
26
|
-
utility_hamburger = "utility_hamburger",
|
|
27
|
-
utility_search = "utility_search",
|
|
8
|
+
export enum IconTypes {
|
|
9
|
+
Default = "default",
|
|
10
|
+
Breadcrumbs = "breadcrumbs",
|
|
28
11
|
}
|
|
29
12
|
|
|
30
|
-
export enum
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
logo_queens = "logo_queens",
|
|
36
|
-
lpa_negative = "lpa_negative",
|
|
37
|
-
lpa_positive = "lpa_positive",
|
|
38
|
-
nypl_circle_negative = "nypl_circle_negative",
|
|
39
|
-
nypl_circle_positive = "nypl_circle_positive",
|
|
40
|
-
nypl_full_lock_up_negative = "nypl_full_lock_up_negative",
|
|
41
|
-
nypl_full_lock_up = "nypl_full_lock_up",
|
|
42
|
-
nypl_no_lion_negative = "nypl_no_lion_negative",
|
|
43
|
-
nypl_no_lion_positive = "nypl_no_lion_positive",
|
|
44
|
-
queens_long = "queens_long",
|
|
45
|
-
queens_stacked = "queens_stacked",
|
|
46
|
-
schomburg_circle = "schomburg_circle",
|
|
47
|
-
schomburg_positive = "schomburg_positive",
|
|
48
|
-
simplye_black = "simplye_black",
|
|
49
|
-
simplye_color = "simplye_color",
|
|
50
|
-
snfl_negative = "snfl_negative",
|
|
51
|
-
snfl_positive = "snfl_positive",
|
|
13
|
+
export enum IconRotationTypes {
|
|
14
|
+
Rotate0 = "rotate0",
|
|
15
|
+
Rotate90 = "rotate90",
|
|
16
|
+
Rotate180 = "rotate180",
|
|
17
|
+
Rotate270 = "rotate270",
|
|
52
18
|
}
|
|
53
19
|
|
|
54
20
|
export enum IconColors {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
21
|
+
UiBlack = "ui.black",
|
|
22
|
+
UiWhite = "ui.white",
|
|
23
|
+
BrandPrimary = "brand.primary",
|
|
24
|
+
BrandSecondary = "brand.secondary",
|
|
25
|
+
SectionWhatsOnPrimary = "section.whats-on.primary",
|
|
26
|
+
SectionWhatsOnSecondary = "section.whats-on.secondary",
|
|
27
|
+
SectionBooksAndMorePrimary = "section.books-and-more.primary",
|
|
28
|
+
SectionBooksAndMoreSecondary = "section.books-and-more.secondary",
|
|
29
|
+
SectionResearchPrimary = "section.research.primary",
|
|
30
|
+
SectionResearchSecondary = "section.research.secondary",
|
|
31
|
+
SectionLocationsPrimary = "section.locations.primary",
|
|
32
|
+
SectionLocationsSecondary = "section.locations.secondary",
|
|
33
|
+
SectionBlogsPrimary = "section.blogs.primary",
|
|
34
|
+
SectionBlogsSecondary = "section.blogs.secondary",
|
|
35
|
+
SectionResearchLibraryLpa = "section.research-library.lpa",
|
|
36
|
+
SectionResearchLibrarySchomburg = "section.research-library.schomburg",
|
|
37
|
+
SectionResearchLibrarySchwartzman = "section.research-library.schwartzman",
|
|
67
38
|
}
|
|
68
39
|
|
|
69
40
|
export enum IconSizes {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
41
|
+
Small = "small",
|
|
42
|
+
Medium = "medium",
|
|
43
|
+
Large = "large",
|
|
44
|
+
ExtraLarge = "xlarge",
|
|
45
|
+
ExtraExtraLarge = "xxlarge",
|
|
46
|
+
ExtraExtraExtraLarge = "xxxlarge",
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export enum IconNames {
|
|
50
|
+
AccessibilityFull = "accessibility_full",
|
|
51
|
+
AccessibilityPartial = "accessibility_partial",
|
|
52
|
+
Arrow = "arrow",
|
|
53
|
+
Check = "check",
|
|
54
|
+
Clock = "clock",
|
|
55
|
+
Close = "close",
|
|
56
|
+
Download = "download",
|
|
57
|
+
ErrorFilled = "error_filled",
|
|
58
|
+
ErrorOutline = "error_outline",
|
|
59
|
+
Headset = "headset",
|
|
60
|
+
Minus = "minus",
|
|
61
|
+
Plus = "plus",
|
|
62
|
+
Search = "search",
|
|
63
|
+
SpeakerNotes = "speaker_notes",
|
|
64
|
+
UtilityAccountFilled = "utility_account_filled",
|
|
65
|
+
UtilityAccountUnfilled = "utility_account_unfilled",
|
|
66
|
+
UtilityHamburger = "utility_hamburger",
|
|
67
|
+
UtilitySearch = "utility_search",
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export enum LogoNames {
|
|
71
|
+
Brooklyn = "brooklyn",
|
|
72
|
+
LogoBrooklyn = "logo_brooklyn",
|
|
73
|
+
LogoNypl = "logo_nypl",
|
|
74
|
+
LogoNyplNegative = "logo_nypl_negative",
|
|
75
|
+
LogoQueens = "logo_queens",
|
|
76
|
+
LpaNegative = "lpa_negative",
|
|
77
|
+
LpaPositive = "lpa_positive",
|
|
78
|
+
NyplCircleNegative = "nypl_circle_negative",
|
|
79
|
+
NyplCirclePositive = "nypl_circle_positive",
|
|
80
|
+
NyplFullLockUpNegative = "nypl_full_lock_up_negative",
|
|
81
|
+
NyplFullLockUp = "nypl_full_lock_up",
|
|
82
|
+
NyplNoLionNegative = "nypl_no_lion_negative",
|
|
83
|
+
NyplNoLionPositive = "nypl_no_lion_positive",
|
|
84
|
+
QueensLong = "queens_long",
|
|
85
|
+
QueensStacked = "queens_stacked",
|
|
86
|
+
SchomburgCircle = "schomburg_circle",
|
|
87
|
+
SchomburgPositive = "schomburg_positive",
|
|
88
|
+
SimplyeBlack = "simplye_black",
|
|
89
|
+
SimplyeColor = "simplye_color",
|
|
90
|
+
SnflNegative = "snfl_negative",
|
|
91
|
+
SnflPositive = "snfl_positive",
|
|
76
92
|
}
|
|
@@ -38,7 +38,7 @@ $break-input-mobile: 400px;
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
&:disabled {
|
|
41
|
-
background-color: var(--ui-gray-
|
|
41
|
+
background-color: var(--ui-gray-xx-light-cool);
|
|
42
42
|
color: var(--ui-gray-xdark);
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -53,7 +53,7 @@ $break-input-mobile: 400px;
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
&--error {
|
|
56
|
-
border: 1px solid var(--ui-error);
|
|
56
|
+
border: 1px solid var(--ui-error-primary);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
ArgsTable,
|
|
6
6
|
Description,
|
|
7
7
|
} from "@storybook/addon-docs/blocks";
|
|
8
|
+
import { Box } from "@chakra-ui/react";
|
|
8
9
|
|
|
9
10
|
import Label from "./Label";
|
|
10
11
|
import { getCategory } from "../../utils/componentCategories";
|
|
@@ -16,7 +17,8 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
16
17
|
jest: ["Label.test.tsx"],
|
|
17
18
|
}}
|
|
18
19
|
argTypes={{
|
|
19
|
-
|
|
20
|
+
className: { table: { disable: true } },
|
|
21
|
+
id: { table: { disable: true } },
|
|
20
22
|
}}
|
|
21
23
|
/>
|
|
22
24
|
|
|
@@ -25,7 +27,7 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
25
27
|
| Component Version | DS Version |
|
|
26
28
|
| ----------------- | ---------- |
|
|
27
29
|
| Added | `0.0.10` |
|
|
28
|
-
| Latest | `0.
|
|
30
|
+
| Latest | `0.25.1` |
|
|
29
31
|
|
|
30
32
|
<Description of={Label} />
|
|
31
33
|
|
|
@@ -35,6 +37,7 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
35
37
|
args={{
|
|
36
38
|
text: "A label for a villager.",
|
|
37
39
|
optReqFlag: "Required",
|
|
40
|
+
htmlFor: "id-of-input-element",
|
|
38
41
|
}}
|
|
39
42
|
argTypes={{
|
|
40
43
|
optReqFlag: {
|
|
@@ -45,12 +48,30 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
45
48
|
},
|
|
46
49
|
}}
|
|
47
50
|
>
|
|
48
|
-
{(args) =>
|
|
49
|
-
<Label htmlFor="some-input-element" id="label" {...args}>
|
|
50
|
-
{args.text}
|
|
51
|
-
</Label>
|
|
52
|
-
)}
|
|
51
|
+
{(args) => <Label {...args}>{args.text}</Label>}
|
|
53
52
|
</Story>
|
|
54
53
|
</Canvas>
|
|
55
54
|
|
|
56
55
|
<ArgsTable story="Label" />
|
|
56
|
+
|
|
57
|
+
## Required/Optional helper text
|
|
58
|
+
|
|
59
|
+
An optional helper string can be rendered at the end of the `Label` text through
|
|
60
|
+
the `optReqFlag` prop. Pass in either `"Required"`, `"Optional"`, or `""`. The
|
|
61
|
+
default value is undefined for no helper text to appear.
|
|
62
|
+
|
|
63
|
+
<Canvas>
|
|
64
|
+
<Story name="Required/Optional helper text">
|
|
65
|
+
<Box width="300px">
|
|
66
|
+
<Label htmlFor="some-id1" optReqFlag="">
|
|
67
|
+
No text
|
|
68
|
+
</Label>
|
|
69
|
+
<Label htmlFor="some-id2" optReqFlag="Required">
|
|
70
|
+
Required helper text
|
|
71
|
+
</Label>
|
|
72
|
+
<Label htmlFor="some-id3" optReqFlag="Optional">
|
|
73
|
+
Optional helper text
|
|
74
|
+
</Label>
|
|
75
|
+
</Box>
|
|
76
|
+
</Story>
|
|
77
|
+
</Canvas>
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { render, screen } from "@testing-library/react";
|
|
3
3
|
import { axe } from "jest-axe";
|
|
4
|
+
import renderer from "react-test-renderer";
|
|
4
5
|
|
|
5
6
|
import Label from "./Label";
|
|
6
7
|
|
|
7
8
|
describe("Label Accessibility", () => {
|
|
8
9
|
it("passes axe accessibility test", async () => {
|
|
9
10
|
const { container } = render(
|
|
10
|
-
<Label id="label" htmlFor="
|
|
11
|
+
<Label id="label" htmlFor="some-input-id">
|
|
11
12
|
Cupcakes
|
|
12
13
|
</Label>
|
|
13
14
|
);
|
|
@@ -16,45 +17,75 @@ describe("Label Accessibility", () => {
|
|
|
16
17
|
});
|
|
17
18
|
|
|
18
19
|
describe("Label", () => {
|
|
19
|
-
it("
|
|
20
|
+
it("renders a label element when passed text as children", () => {
|
|
20
21
|
render(
|
|
21
|
-
<Label id="label" htmlFor="
|
|
22
|
+
<Label id="label" htmlFor="some-input-id">
|
|
22
23
|
Cupcakes
|
|
23
24
|
</Label>
|
|
24
25
|
);
|
|
25
26
|
expect(screen.getByText("Cupcakes")).toBeInTheDocument();
|
|
26
27
|
});
|
|
27
28
|
|
|
28
|
-
it("
|
|
29
|
+
it("renders a label element when passed element as children", () => {
|
|
29
30
|
render(
|
|
30
|
-
<Label id="label" htmlFor="
|
|
31
|
+
<Label id="label" htmlFor="some-input-id">
|
|
31
32
|
<span>Cupcakes</span>
|
|
32
33
|
</Label>
|
|
33
34
|
);
|
|
34
35
|
expect(screen.getByText("Cupcakes")).toBeInTheDocument();
|
|
35
36
|
});
|
|
36
37
|
|
|
37
|
-
it("
|
|
38
|
-
const
|
|
39
|
-
<Label id="label" htmlFor="
|
|
38
|
+
it("renders the optional or required helper text", () => {
|
|
39
|
+
const { rerender } = render(
|
|
40
|
+
<Label id="label" htmlFor="some-input-id">
|
|
40
41
|
<span>Cupcakes</span>
|
|
41
42
|
</Label>
|
|
42
43
|
);
|
|
43
44
|
expect(screen.queryByText("Optional")).not.toBeInTheDocument();
|
|
45
|
+
expect(screen.queryByText("Required")).not.toBeInTheDocument();
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
<Label id="
|
|
47
|
+
rerender(
|
|
48
|
+
<Label id="label2" htmlFor="some-input-id" optReqFlag="Optional">
|
|
47
49
|
<span>Cupcakes</span>
|
|
48
50
|
</Label>
|
|
49
51
|
);
|
|
50
52
|
expect(screen.getByText("Optional")).toBeInTheDocument();
|
|
53
|
+
expect(screen.queryByText("Required")).not.toBeInTheDocument();
|
|
51
54
|
|
|
52
|
-
|
|
53
|
-
<Label id="
|
|
55
|
+
rerender(
|
|
56
|
+
<Label id="label3" htmlFor="some-input-id" optReqFlag="Required">
|
|
54
57
|
<span>Cupcakes</span>
|
|
55
58
|
</Label>
|
|
56
59
|
);
|
|
57
60
|
expect(screen.queryByText("Optional")).not.toBeInTheDocument();
|
|
58
61
|
expect(screen.getByText("Required")).toBeInTheDocument();
|
|
59
62
|
});
|
|
63
|
+
|
|
64
|
+
it("Renders the UI snapshot correctly", () => {
|
|
65
|
+
const simple = renderer
|
|
66
|
+
.create(
|
|
67
|
+
<Label id="label" htmlFor="some-input-id">
|
|
68
|
+
Cupcakes
|
|
69
|
+
</Label>
|
|
70
|
+
)
|
|
71
|
+
.toJSON();
|
|
72
|
+
const optional = renderer
|
|
73
|
+
.create(
|
|
74
|
+
<Label id="label2" htmlFor="some-input-id" optReqFlag="Optional">
|
|
75
|
+
Cupcakes
|
|
76
|
+
</Label>
|
|
77
|
+
)
|
|
78
|
+
.toJSON();
|
|
79
|
+
const required = renderer
|
|
80
|
+
.create(
|
|
81
|
+
<Label id="label3" htmlFor="some-input-id" optReqFlag="Required">
|
|
82
|
+
Cupcakes
|
|
83
|
+
</Label>
|
|
84
|
+
)
|
|
85
|
+
.toJSON();
|
|
86
|
+
|
|
87
|
+
expect(simple).toMatchSnapshot();
|
|
88
|
+
expect(optional).toMatchSnapshot();
|
|
89
|
+
expect(required).toMatchSnapshot();
|
|
90
|
+
});
|
|
60
91
|
});
|
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { Box, useMultiStyleConfig } from "@chakra-ui/react";
|
|
2
3
|
|
|
3
|
-
import
|
|
4
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
4
5
|
|
|
5
6
|
type optReqFlagType = "Required" | "Optional" | "" | undefined;
|
|
6
7
|
|
|
7
8
|
interface LabelProps {
|
|
8
|
-
/** Additional
|
|
9
|
-
attributes?: { [key: string]: any };
|
|
10
|
-
/** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
|
|
11
|
-
blockName?: string;
|
|
12
|
-
/** className that appears in addition to "label" */
|
|
9
|
+
/** Additional CSS class name to render in the `label` element. */
|
|
13
10
|
className?: string;
|
|
14
|
-
/** The id of the html element that this `Label` is describing */
|
|
15
|
-
htmlFor
|
|
11
|
+
/** The id of the html element that this `Label` is describing. */
|
|
12
|
+
htmlFor: string;
|
|
16
13
|
/** ID that other components can cross reference for accessibility purposes */
|
|
17
14
|
id?: string;
|
|
18
|
-
/** Modifiers for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
|
|
19
|
-
modifiers?: string[];
|
|
20
15
|
/** Displays "Required" or "Optional" string alongside the label */
|
|
21
16
|
optReqFlag?: optReqFlagType;
|
|
22
17
|
}
|
|
@@ -24,36 +19,28 @@ interface LabelProps {
|
|
|
24
19
|
/**
|
|
25
20
|
* A label for form inputs. It should never be used alone.
|
|
26
21
|
*/
|
|
27
|
-
|
|
22
|
+
function Label(props: React.PropsWithChildren<LabelProps>) {
|
|
28
23
|
const {
|
|
29
|
-
attributes,
|
|
30
|
-
blockName,
|
|
31
24
|
children,
|
|
32
25
|
className,
|
|
33
26
|
htmlFor,
|
|
34
|
-
id,
|
|
35
|
-
modifiers = [],
|
|
27
|
+
id = generateUUID(),
|
|
36
28
|
optReqFlag,
|
|
37
29
|
} = props;
|
|
38
|
-
const
|
|
39
|
-
const labelAttributes = {
|
|
40
|
-
className: bem(baseClass, modifiers, blockName, [className]),
|
|
41
|
-
htmlFor,
|
|
42
|
-
id,
|
|
43
|
-
};
|
|
44
|
-
let helperString;
|
|
45
|
-
|
|
46
|
-
if (optReqFlag) {
|
|
47
|
-
helperString = (
|
|
48
|
-
<div className={bem("required-helper", [], baseClass)}>{optReqFlag}</div>
|
|
49
|
-
);
|
|
50
|
-
}
|
|
30
|
+
const styles = useMultiStyleConfig("Label", {});
|
|
51
31
|
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
32
|
+
return (
|
|
33
|
+
<Box
|
|
34
|
+
as="label"
|
|
35
|
+
id={id}
|
|
36
|
+
className={className}
|
|
37
|
+
htmlFor={htmlFor}
|
|
38
|
+
__css={styles}
|
|
39
|
+
>
|
|
40
|
+
{children}
|
|
41
|
+
{optReqFlag && <Box __css={styles.helper}>{optReqFlag}</Box>}
|
|
42
|
+
</Box>
|
|
58
43
|
);
|
|
59
44
|
}
|
|
45
|
+
|
|
46
|
+
export default Label;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`Label Renders the UI snapshot correctly 1`] = `
|
|
4
|
+
<label
|
|
5
|
+
className="css-0"
|
|
6
|
+
htmlFor="some-input-id"
|
|
7
|
+
id="label"
|
|
8
|
+
>
|
|
9
|
+
Cupcakes
|
|
10
|
+
</label>
|
|
11
|
+
`;
|
|
12
|
+
|
|
13
|
+
exports[`Label Renders the UI snapshot correctly 2`] = `
|
|
14
|
+
<label
|
|
15
|
+
className="css-0"
|
|
16
|
+
htmlFor="some-input-id"
|
|
17
|
+
id="label2"
|
|
18
|
+
>
|
|
19
|
+
Cupcakes
|
|
20
|
+
<div
|
|
21
|
+
className="css-0"
|
|
22
|
+
>
|
|
23
|
+
Optional
|
|
24
|
+
</div>
|
|
25
|
+
</label>
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
exports[`Label Renders the UI snapshot correctly 3`] = `
|
|
29
|
+
<label
|
|
30
|
+
className="css-0"
|
|
31
|
+
htmlFor="some-input-id"
|
|
32
|
+
id="label3"
|
|
33
|
+
>
|
|
34
|
+
Cupcakes
|
|
35
|
+
<div
|
|
36
|
+
className="css-0"
|
|
37
|
+
>
|
|
38
|
+
Required
|
|
39
|
+
</div>
|
|
40
|
+
</label>
|
|
41
|
+
`;
|
|
@@ -3,18 +3,21 @@ import {
|
|
|
3
3
|
Story,
|
|
4
4
|
Canvas,
|
|
5
5
|
ArgsTable,
|
|
6
|
-
Preview,
|
|
7
6
|
Description,
|
|
8
7
|
} from "@storybook/addon-docs/blocks";
|
|
9
8
|
import { withDesign } from "storybook-addon-designs";
|
|
10
|
-
import Link from "./Link";
|
|
11
9
|
import {
|
|
12
10
|
BrowserRouter as Router,
|
|
13
11
|
Link as ReactRouterLink,
|
|
14
12
|
} from "react-router-dom";
|
|
13
|
+
import { VStack } from "@chakra-ui/react";
|
|
14
|
+
|
|
15
|
+
import Link from "./Link";
|
|
15
16
|
import { LinkTypes } from "./LinkTypes";
|
|
16
17
|
import Icon from "../Icons/Icon";
|
|
18
|
+
import { IconAlign, IconSizes } from "../Icons/IconTypes";
|
|
17
19
|
import { getCategory } from "../../utils/componentCategories";
|
|
20
|
+
import DSProvider from "../../theme/provider";
|
|
18
21
|
|
|
19
22
|
<Meta
|
|
20
23
|
title={getCategory("Link")}
|
|
@@ -24,18 +27,18 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
24
27
|
design: {
|
|
25
28
|
type: "figma",
|
|
26
29
|
url:
|
|
27
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/
|
|
30
|
+
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36854%3A24387",
|
|
28
31
|
},
|
|
29
32
|
jest: ["Link.test.tsx"],
|
|
30
33
|
}}
|
|
31
34
|
argTypes={{
|
|
32
|
-
|
|
33
|
-
modifiers: { table: { disable: true } },
|
|
35
|
+
attributes: { table: { disable: true } },
|
|
34
36
|
children: { table: { disable: true } },
|
|
35
37
|
type: {
|
|
36
38
|
control: {
|
|
37
39
|
type: "select",
|
|
38
40
|
},
|
|
41
|
+
options: LinkTypes,
|
|
39
42
|
},
|
|
40
43
|
}}
|
|
41
44
|
/>
|
|
@@ -45,11 +48,11 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
45
48
|
| Component Version | DS Version |
|
|
46
49
|
| ----------------- | ---------- |
|
|
47
50
|
| Added | `0.0.4` |
|
|
48
|
-
| Latest | `0.
|
|
51
|
+
| Latest | `0.25.1` |
|
|
49
52
|
|
|
50
53
|
<Description of={Link} />
|
|
51
54
|
|
|
52
|
-
<
|
|
55
|
+
<Canvas withToolbar>
|
|
53
56
|
<Story
|
|
54
57
|
name="Basic"
|
|
55
58
|
args={{
|
|
@@ -65,7 +68,7 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
65
68
|
>
|
|
66
69
|
{(args) => <Link {...args}>Link</Link>}
|
|
67
70
|
</Story>
|
|
68
|
-
</
|
|
71
|
+
</Canvas>
|
|
69
72
|
|
|
70
73
|
<ArgsTable story="Basic" />
|
|
71
74
|
|
|
@@ -75,42 +78,35 @@ To render an `Icon` as part of the link, make sure that the `Link` component
|
|
|
75
78
|
wraps the `Icon`. Use `type={LinkTypes.Action}` to apply appropriate styling to
|
|
76
79
|
links with icons. Icons can be rendered to the left or right of the link text.
|
|
77
80
|
|
|
78
|
-
<
|
|
81
|
+
<Canvas>
|
|
79
82
|
<Story name="With Icons">
|
|
80
|
-
|
|
83
|
+
<VStack spacing="xs" align="flex-start">
|
|
81
84
|
<Link type={LinkTypes.Action} href="#passed-in-link">
|
|
82
|
-
<Icon
|
|
83
|
-
name={"headset"}
|
|
84
|
-
modifiers={["left", "small"]}
|
|
85
|
-
decorative={true}
|
|
86
|
-
/>
|
|
85
|
+
<Icon name="headset" align={IconAlign.Left} size={IconSizes.Small} />
|
|
87
86
|
Headset Link
|
|
88
87
|
</Link>
|
|
89
|
-
<br />
|
|
90
88
|
<Link type={LinkTypes.Action} href="#passed-in-link">
|
|
91
|
-
<Icon name=
|
|
89
|
+
<Icon name="clock" align={IconAlign.Left} size={IconSizes.Small} />
|
|
92
90
|
Clock Link
|
|
93
91
|
</Link>
|
|
94
|
-
<br />
|
|
95
92
|
<Link type={LinkTypes.Action} href="#passed-in-link">
|
|
96
|
-
<Icon name=
|
|
93
|
+
<Icon name="check" align={IconAlign.Left} size={IconSizes.Small} />
|
|
97
94
|
Check Link
|
|
98
95
|
</Link>
|
|
99
|
-
<br />
|
|
100
96
|
<Link type={LinkTypes.Action} href="#passed-in-link-right">
|
|
101
97
|
Check Link Right
|
|
102
|
-
<Icon name=
|
|
98
|
+
<Icon name="check" align={IconAlign.Right} size={IconSizes.Small} />
|
|
103
99
|
</Link>
|
|
104
|
-
|
|
100
|
+
</VStack>
|
|
105
101
|
</Story>
|
|
106
|
-
</
|
|
102
|
+
</Canvas>
|
|
107
103
|
|
|
108
104
|
## Anchor Element Rendering
|
|
109
105
|
|
|
110
106
|
`Link` can wrap an existing `<a>` tag or it can use the `href` prop to generate
|
|
111
107
|
an `<a>` tag.
|
|
112
108
|
|
|
113
|
-
<
|
|
109
|
+
<Canvas>
|
|
114
110
|
<Story name="Anchor Element Rendering">
|
|
115
111
|
<>
|
|
116
112
|
This is a{" "}
|
|
@@ -124,11 +120,11 @@ an `<a>` tag.
|
|
|
124
120
|
where the Link component uses the `href` prop and has a string-only child.
|
|
125
121
|
</>
|
|
126
122
|
</Story>
|
|
127
|
-
</
|
|
123
|
+
</Canvas>
|
|
128
124
|
|
|
129
125
|
## Link with Routers
|
|
130
126
|
|
|
131
|
-
<
|
|
127
|
+
<Canvas>
|
|
132
128
|
<Story name="Link with Routers">
|
|
133
129
|
<div>With React Router</div>
|
|
134
130
|
<Router>
|
|
@@ -143,7 +139,7 @@ an `<a>` tag.
|
|
|
143
139
|
<Link type={LinkTypes.Action}>Next Page</Link>
|
|
144
140
|
</NextJsLink>
|
|
145
141
|
</Story>
|
|
146
|
-
</
|
|
142
|
+
</Canvas>
|
|
147
143
|
|
|
148
144
|
### React Router
|
|
149
145
|
|
|
@@ -151,7 +147,7 @@ The Design System's `Link` component should wrap around `react-router`'s own
|
|
|
151
147
|
`Link` component. To avoid name conflicts, rename either the Design System's
|
|
152
148
|
or `react-router`'s `Link` component.
|
|
153
149
|
|
|
154
|
-
```
|
|
150
|
+
```jsx
|
|
155
151
|
import {
|
|
156
152
|
BrowserRouter as Router,
|
|
157
153
|
Link as ReactRouterLink,
|
|
@@ -184,13 +180,15 @@ import DS from "@nypl/design-system-react-components";
|
|
|
184
180
|
</DS.Link>;
|
|
185
181
|
```
|
|
186
182
|
|
|
187
|
-
<
|
|
188
|
-
<
|
|
189
|
-
<
|
|
190
|
-
<
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
</
|
|
183
|
+
<Canvas>
|
|
184
|
+
<DSProvider>
|
|
185
|
+
<Router>
|
|
186
|
+
<Link type={LinkTypes.Action}>
|
|
187
|
+
<ReactRouterLink to="#">Next Page</ReactRouterLink>
|
|
188
|
+
</Link>
|
|
189
|
+
</Router>
|
|
190
|
+
</DSProvider>
|
|
191
|
+
</Canvas>
|
|
194
192
|
|
|
195
193
|
### NextJS
|
|
196
194
|
|
|
@@ -200,7 +198,7 @@ These props, along with an implicit `ref` from NextJS and the Design System's
|
|
|
200
198
|
`Link` component `forwardRef` implementation, handle correctly routing between
|
|
201
199
|
pages in a NextJS app.
|
|
202
200
|
|
|
203
|
-
```
|
|
201
|
+
```jsx
|
|
204
202
|
import { Link, LinkTypes } from "@nypl/design-system-react-components";
|
|
205
203
|
|
|
206
204
|
/* This is just an example wrapper that works similarly to NextJS' `Link`
|
|
@@ -232,8 +230,10 @@ export const NextJsLink = (props) => (
|
|
|
232
230
|
</div>
|
|
233
231
|
);
|
|
234
232
|
|
|
235
|
-
<
|
|
236
|
-
<
|
|
237
|
-
<
|
|
238
|
-
|
|
239
|
-
</
|
|
233
|
+
<Canvas>
|
|
234
|
+
<DSProvider>
|
|
235
|
+
<NextJsLink href="#" passHref>
|
|
236
|
+
<Link type={LinkTypes.Action}>Next Page</Link>
|
|
237
|
+
</NextJsLink>
|
|
238
|
+
</DSProvider>
|
|
239
|
+
</Canvas>
|