@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.
Files changed (236) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/components/Accordion/Accordion.d.ts +14 -14
  3. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
  4. package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
  5. package/dist/components/Button/ButtonTypes.d.ts +2 -1
  6. package/dist/components/Card/Card.d.ts +1 -1
  7. package/dist/components/Card/CardTypes.d.ts +2 -2
  8. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
  9. package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
  10. package/dist/components/DatePicker/DatePicker.d.ts +3 -3
  11. package/dist/components/Form/Form.d.ts +13 -8
  12. package/dist/components/Form/FormTypes.d.ts +2 -8
  13. package/dist/components/Grid/GridTypes.d.ts +9 -0
  14. package/dist/components/Grid/SimpleGrid.d.ts +14 -0
  15. package/dist/components/Heading/Heading.d.ts +4 -4
  16. package/dist/components/Hero/Hero.d.ts +19 -14
  17. package/dist/components/Hero/HeroTypes.d.ts +10 -5
  18. package/dist/components/Icons/Icon.d.ts +13 -16
  19. package/dist/components/Icons/IconTypes.d.ts +78 -64
  20. package/dist/components/Label/Label.d.ts +5 -17
  21. package/dist/components/Link/Link.d.ts +8 -12
  22. package/dist/components/SearchBar/SearchBar.d.ts +45 -27
  23. package/dist/components/Select/Select.d.ts +32 -35
  24. package/dist/components/Select/SelectTypes.d.ts +4 -0
  25. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
  26. package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
  27. package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
  28. package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
  29. package/dist/components/Template/Template.d.ts +91 -0
  30. package/dist/components/Text/Text.d.ts +16 -0
  31. package/dist/components/Text/TextTypes.d.ts +6 -0
  32. package/dist/components/TextInput/TextInput.d.ts +32 -31
  33. package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
  34. package/dist/design-system-react-components.cjs.development.js +2597 -1170
  35. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  36. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  37. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  38. package/dist/design-system-react-components.esm.js +2580 -1173
  39. package/dist/design-system-react-components.esm.js.map +1 -1
  40. package/dist/index.d.ts +8 -1
  41. package/dist/styles.css +1 -1
  42. package/dist/theme/components/accordion.d.ts +25 -0
  43. package/dist/theme/components/breadcrumb.d.ts +90 -0
  44. package/dist/theme/components/button.d.ts +17 -7
  45. package/dist/theme/components/checkbox.d.ts +7 -7
  46. package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
  47. package/dist/theme/components/customRadioGroup.d.ts +4 -3
  48. package/dist/theme/components/global.d.ts +55 -0
  49. package/dist/theme/components/globalMixins.d.ts +15 -0
  50. package/dist/theme/components/heading.d.ts +50 -20
  51. package/dist/theme/components/hero.d.ts +492 -0
  52. package/dist/theme/components/icon.d.ts +13 -0
  53. package/dist/theme/components/label.d.ts +16 -0
  54. package/dist/theme/components/link.d.ts +45 -0
  55. package/dist/theme/components/radio.d.ts +8 -7
  56. package/dist/theme/components/searchBar.d.ts +20 -0
  57. package/dist/theme/components/select.d.ts +58 -0
  58. package/dist/theme/components/statusBadge.d.ts +25 -0
  59. package/dist/theme/components/tabs.d.ts +9 -9
  60. package/dist/theme/components/template.d.ts +105 -0
  61. package/dist/theme/components/text.d.ts +20 -0
  62. package/dist/theme/components/textInput.d.ts +105 -0
  63. package/dist/theme/foundations/global.d.ts +3 -0
  64. package/dist/theme/foundations/shadows.d.ts +4 -0
  65. package/dist/utils/utils.d.ts +6 -0
  66. package/package.json +3 -2
  67. package/src/components/Accordion/Accordion.stories.mdx +227 -33
  68. package/src/components/Accordion/Accordion.test.tsx +135 -19
  69. package/src/components/Accordion/Accordion.tsx +81 -56
  70. package/src/components/Autosuggest/Autosuggest.stories.mdx +1 -1
  71. package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
  72. package/src/components/Autosuggest/_Autosuggest.scss +2 -2
  73. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +46 -52
  74. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
  75. package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
  76. package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
  77. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
  78. package/src/components/Button/Button.stories.mdx +31 -27
  79. package/src/components/Button/Button.test.tsx +17 -5
  80. package/src/components/Button/ButtonTypes.tsx +1 -0
  81. package/src/components/Button/_Button.scss +3 -27
  82. package/src/components/Button/__snapshots__/Button.test.tsx.snap +11 -0
  83. package/src/components/Card/Card.stories.mdx +24 -20
  84. package/src/components/Card/Card.test.tsx +13 -19
  85. package/src/components/Card/Card.tsx +1 -1
  86. package/src/components/Card/CardTypes.tsx +2 -2
  87. package/src/components/Card/_Card.scss +1 -1
  88. package/src/components/CardEdition/CardEdition.stories.tsx +11 -6
  89. package/src/components/CardEdition/CardEdition.test.tsx +23 -31
  90. package/src/components/CardEdition/_CardEdition.scss +2 -2
  91. package/src/components/Chakra/Center.stories.mdx +31 -14
  92. package/src/components/Chakra/Grid.stories.mdx +79 -0
  93. package/src/components/Chakra/Stack.stories.mdx +4 -4
  94. package/src/components/Checkbox/Checkbox.tsx +9 -12
  95. package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +2 -5
  96. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
  97. package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
  98. package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
  99. package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
  100. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
  101. package/src/components/DatePicker/DatePicker.test.tsx +4 -4
  102. package/src/components/DatePicker/DatePicker.tsx +13 -13
  103. package/src/components/DatePicker/_DatePicker.scss +1 -0
  104. package/src/components/Form/Form.stories.mdx +46 -21
  105. package/src/components/Form/Form.test.tsx +58 -45
  106. package/src/components/Form/Form.tsx +49 -21
  107. package/src/components/Form/FormTypes.tsx +3 -8
  108. package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
  109. package/src/components/Grid/GridTypes.tsx +9 -0
  110. package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
  111. package/src/components/Grid/SimpleGrid.test.tsx +66 -0
  112. package/src/components/Grid/SimpleGrid.tsx +37 -0
  113. package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
  114. package/src/components/Heading/Heading.stories.mdx +1 -0
  115. package/src/components/Heading/Heading.tsx +12 -6
  116. package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
  117. package/src/components/Hero/Hero.stories.mdx +188 -121
  118. package/src/components/Hero/Hero.test.tsx +537 -107
  119. package/src/components/Hero/Hero.tsx +79 -92
  120. package/src/components/Hero/HeroTypes.tsx +17 -5
  121. package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
  122. package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
  123. package/src/components/Icons/Icon.stories.mdx +83 -74
  124. package/src/components/Icons/Icon.test.tsx +30 -22
  125. package/src/components/Icons/Icon.tsx +63 -61
  126. package/src/components/Icons/IconTypes.tsx +80 -64
  127. package/src/components/Input/_Input.scss +2 -2
  128. package/src/components/Label/Label.stories.mdx +28 -7
  129. package/src/components/Label/Label.test.tsx +43 -12
  130. package/src/components/Label/Label.tsx +21 -34
  131. package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
  132. package/src/components/Link/Link.stories.mdx +41 -41
  133. package/src/components/Link/Link.test.tsx +33 -44
  134. package/src/components/Link/Link.tsx +114 -100
  135. package/src/components/List/List.stories.mdx +0 -2
  136. package/src/components/List/List.stories.tsx +5 -5
  137. package/src/components/List/_List.scss +3 -3
  138. package/src/components/Modal/_Modal.scss +1 -1
  139. package/src/components/Notification/Notification.stories.mdx +12 -1
  140. package/src/components/Notification/Notification.test.tsx +3 -16
  141. package/src/components/Notification/Notification.tsx +9 -10
  142. package/src/components/Notification/_Notification.scss +4 -4
  143. package/src/components/Pagination/Pagination.test.tsx +16 -10
  144. package/src/components/RadioGroup/RadioGroup.stories.mdx +1 -1
  145. package/src/components/RadioGroup/RadioGroup.tsx +2 -10
  146. package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
  147. package/src/components/SearchBar/SearchBar.stories.mdx +189 -219
  148. package/src/components/SearchBar/SearchBar.tsx +151 -46
  149. package/src/components/Select/Select.stories.mdx +188 -170
  150. package/src/components/Select/Select.test.tsx +125 -380
  151. package/src/components/Select/Select.tsx +118 -165
  152. package/src/components/Select/SelectTypes.tsx +4 -0
  153. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +13 -25
  154. package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
  155. package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
  156. package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
  157. package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
  158. package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
  159. package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
  160. package/src/components/StatusBadge/StatusBadge.tsx +24 -25
  161. package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
  162. package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
  163. package/src/components/StyleGuide/Bidirectionality.stories.mdx +16 -16
  164. package/src/components/StyleGuide/Buttons.stories.mdx +15 -15
  165. package/src/components/StyleGuide/Colors.stories.mdx +336 -0
  166. package/src/components/StyleGuide/Iconography.stories.mdx +88 -90
  167. package/src/components/StyleGuide/UIDocCard.tsx +1 -1
  168. package/src/components/Tabs/Tabs.tsx +7 -9
  169. package/src/components/Template/Template.stories.mdx +574 -0
  170. package/src/components/Template/Template.test.tsx +124 -0
  171. package/src/components/Template/Template.tsx +226 -0
  172. package/src/components/Text/Text.stories.mdx +70 -0
  173. package/src/components/Text/Text.test.tsx +63 -0
  174. package/src/components/Text/Text.tsx +55 -0
  175. package/src/components/Text/TextTypes.tsx +6 -0
  176. package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
  177. package/src/components/TextInput/TextInput.stories.mdx +89 -90
  178. package/src/components/TextInput/TextInput.test.tsx +65 -86
  179. package/src/components/TextInput/TextInput.tsx +101 -95
  180. package/src/components/TextInput/TextInputTypes.tsx +6 -0
  181. package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
  182. package/src/docs/Chakra.stories.mdx +4 -4
  183. package/src/docs/Intro.stories.mdx +15 -13
  184. package/src/index.ts +20 -0
  185. package/src/styles/01-colors/_colors-brand.scss +6 -0
  186. package/src/styles/01-colors/_colors-utility.scss +14 -12
  187. package/src/styles/base/_04-base.scss +2 -1
  188. package/src/styles/base/_place-holder.scss +1 -1
  189. package/src/styles.scss +10 -12
  190. package/src/theme/components/accordion.ts +30 -0
  191. package/src/theme/components/breadcrumb.ts +77 -0
  192. package/src/theme/components/button.ts +77 -63
  193. package/src/theme/components/checkbox.ts +15 -27
  194. package/src/theme/components/customCheckboxGroup.ts +12 -0
  195. package/src/theme/components/customRadioGroup.ts +4 -10
  196. package/src/theme/components/global.ts +71 -0
  197. package/src/theme/components/globalMixins.ts +16 -0
  198. package/src/theme/components/heading.ts +15 -8
  199. package/src/theme/components/hero.ts +239 -0
  200. package/src/theme/components/icon.ts +79 -0
  201. package/src/theme/components/label.ts +17 -0
  202. package/src/theme/components/link.ts +47 -0
  203. package/src/theme/components/radio.ts +20 -31
  204. package/src/theme/components/searchBar.ts +21 -0
  205. package/src/theme/components/select.ts +50 -0
  206. package/src/theme/components/statusBadge.ts +27 -0
  207. package/src/theme/components/tabs.ts +72 -69
  208. package/src/theme/components/template.ts +114 -0
  209. package/src/theme/components/text.ts +31 -0
  210. package/src/theme/components/textInput.ts +61 -0
  211. package/src/theme/foundations/colors.ts +29 -13
  212. package/src/theme/foundations/global.ts +3 -0
  213. package/src/theme/foundations/shadows.ts +5 -0
  214. package/src/theme/index.ts +37 -7
  215. package/src/utils/componentCategories.ts +8 -2
  216. package/src/utils/utils.ts +13 -0
  217. package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
  218. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
  219. package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
  220. package/dist/components/Template/Template.stories.d.ts +0 -30
  221. package/src/components/Accordion/Accordion.stories.tsx +0 -66
  222. package/src/components/Accordion/_Accordion.scss +0 -81
  223. package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
  224. package/src/components/Form/_Form.scss +0 -67
  225. package/src/components/Hero/_Hero.scss +0 -256
  226. package/src/components/Icons/_Icons.scss +0 -116
  227. package/src/components/Label/_Label.scss +0 -22
  228. package/src/components/Link/_Link.scss +0 -73
  229. package/src/components/SearchBar/_SearchBar.scss +0 -16
  230. package/src/components/Select/_Select.scss +0 -82
  231. package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
  232. package/src/components/StatusBadge/_StatusBadge.scss +0 -23
  233. package/src/components/StyleGuide/Colors.stories.tsx +0 -289
  234. package/src/components/Template/Template.stories.tsx +0 -86
  235. package/src/components/Template/_Template.scss +0 -63
  236. package/src/components/TextInput/_TextInput.scss +0 -59
@@ -1,76 +1,92 @@
1
1
  /* eslint-disable camelcase */
2
- export enum IconRotationTypes {
3
- rotate0 = "rotate-0",
4
- rotate90 = "rotate-90",
5
- rotate180 = "rotate-180",
6
- rotate270 = "rotate-270",
2
+ export enum IconAlign {
3
+ Left = "left",
4
+ Right = "right",
5
+ None = "none",
7
6
  }
8
7
 
9
- export enum IconNames {
10
- accessibility_full = "accessibility_full",
11
- accessibility_partial = "accessibility_partial",
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 LogoNames {
31
- brooklyn = "brooklyn",
32
- logo_brooklyn = "logo_brooklyn",
33
- logo_nypl = "logo_nypl",
34
- logo_nypl_negative = "logo_nypl_negative",
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
- ui_black = "ui-black",
56
- ui_white = "ui-white",
57
- brand_primary = "brand-primary",
58
- brand_secondary = "brand-secondary",
59
- section_whats_on_primary = "section-whats-on-primary",
60
- section_books_and_more_primary = "section-books-and-more-primary",
61
- section_research_primary = "section-research-primary",
62
- section_research_secondary = "section-research-secondary",
63
- section_locations_primary = "section-locations-primary",
64
- section_research_library_lpa = "section-research-library-lpa",
65
- section_research_library_schomburg = "section-research-library-schomburg",
66
- section_research_library_schwartzman = "section-research-library-schwartzman",
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
- small = "small",
71
- medium = "medium",
72
- large = "large",
73
- xlarge = "xlarge",
74
- xxlarge = "xxlarge",
75
- xxxlarge = "xxxlarge",
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-xxlight);
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
- attributes: { table: { disable: true } },
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.24.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="so-lonely">
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("Renders a <label> when passed text as children", () => {
20
+ it("renders a label element when passed text as children", () => {
20
21
  render(
21
- <Label id="label" htmlFor="so-lonely">
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("Renders a <label> when passed element as children", () => {
29
+ it("renders a label element when passed element as children", () => {
29
30
  render(
30
- <Label id="label" htmlFor="so-lonely">
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("Renders the optional or required helper text", () => {
38
- const utils = render(
39
- <Label id="label" htmlFor="so-lonely">
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
- utils.rerender(
46
- <Label id="label" htmlFor="so-lonely" optReqFlag="Optional">
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
- utils.rerender(
53
- <Label id="label" htmlFor="so-lonely" optReqFlag="Required">
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 bem from "../../utils/bem";
4
+ import generateUUID from "../../helpers/generateUUID";
4
5
 
5
6
  type optReqFlagType = "Required" | "Optional" | "" | undefined;
6
7
 
7
8
  interface LabelProps {
8
- /** Additional attributes to pass to the <label> tag */
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?: string;
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
- export default function Label(props: React.PropsWithChildren<LabelProps>) {
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 baseClass = "label";
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 React.createElement(
53
- "label",
54
- labelAttributes,
55
- attributes,
56
- children,
57
- helperString
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/Master?node-id=16115%3A407",
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
- blockName: { table: { disable: true } },
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.20.2` |
51
+ | Latest | `0.25.1` |
49
52
 
50
53
  <Description of={Link} />
51
54
 
52
- <Preview withToolbar>
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
- </Preview>
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
- <Preview>
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={"clock"} modifiers={["left", "small"]} decorative={true} />
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={"check"} modifiers={["left", "small"]} decorative={true} />
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={"check"} modifiers={["right", "small"]} decorative={true} />
98
+ <Icon name="check" align={IconAlign.Right} size={IconSizes.Small} />
103
99
  </Link>
104
- </>
100
+ </VStack>
105
101
  </Story>
106
- </Preview>
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
- <Preview>
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
- </Preview>
123
+ </Canvas>
128
124
 
129
125
  ## Link with Routers
130
126
 
131
- <Preview>
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
- </Preview>
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
- ```js
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
- <Preview>
188
- <Router>
189
- <Link type={LinkTypes.Action}>
190
- <ReactRouterLink to="#">Next Page</ReactRouterLink>
191
- </Link>
192
- </Router>
193
- </Preview>
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
- ```js
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
- <Preview>
236
- <NextJsLink href="#" passHref>
237
- <Link type={LinkTypes.Action}>Next Page</Link>
238
- </NextJsLink>
239
- </Preview>
233
+ <Canvas>
234
+ <DSProvider>
235
+ <NextJsLink href="#" passHref>
236
+ <Link type={LinkTypes.Action}>Next Page</Link>
237
+ </NextJsLink>
238
+ </DSProvider>
239
+ </Canvas>