@nypl/design-system-react-components 0.25.7 → 0.25.10

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 (293) hide show
  1. package/CHANGELOG.md +119 -1
  2. package/README.md +1 -1
  3. package/dist/components/Button/Button.d.ts +6 -6
  4. package/dist/components/Button/ButtonTypes.d.ts +0 -1
  5. package/dist/components/Card/Card.d.ts +6 -4
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -2
  7. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
  8. package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
  9. package/dist/components/DatePicker/DatePicker.d.ts +4 -3
  10. package/dist/components/Fieldset/Fieldset.d.ts +1 -3
  11. package/dist/components/Form/Form.d.ts +15 -14
  12. package/dist/components/Form/FormTypes.d.ts +2 -2
  13. package/dist/components/Heading/Heading.d.ts +7 -3
  14. package/dist/components/Heading/HeadingTypes.d.ts +6 -6
  15. package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
  16. package/dist/components/HorizontalRule/HorizontalRule.d.ts +3 -3
  17. package/dist/components/Icons/Icon.d.ts +4 -4
  18. package/dist/components/Icons/IconSvgs.d.ts +1 -21
  19. package/dist/components/Icons/IconTypes.d.ts +1 -23
  20. package/dist/components/Image/Image.d.ts +11 -3
  21. package/dist/components/Image/ImageTypes.d.ts +3 -1
  22. package/dist/components/Link/LinkTypes.d.ts +1 -0
  23. package/dist/components/Logo/Logo.d.ts +28 -0
  24. package/dist/components/Logo/LogoSvgs.d.ts +18 -0
  25. package/dist/components/Logo/LogoTypes.d.ts +30 -0
  26. package/dist/components/Modal/Modal.d.ts +0 -4
  27. package/dist/components/Notification/Notification.d.ts +4 -2
  28. package/dist/components/Placeholder/Placeholder.d.ts +3 -5
  29. package/dist/components/Radio/Radio.d.ts +6 -5
  30. package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
  31. package/dist/components/SearchBar/SearchBar.d.ts +15 -7
  32. package/dist/components/Select/Select.d.ts +5 -2
  33. package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
  34. package/dist/components/Slider/Slider.d.ts +3 -2
  35. package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
  36. package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
  37. package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
  38. package/dist/components/Table/Table.d.ts +29 -0
  39. package/dist/components/Template/Template.d.ts +30 -6
  40. package/dist/components/Text/Text.d.ts +2 -2
  41. package/dist/components/TextInput/TextInput.d.ts +4 -3
  42. package/dist/components/Toggle/Toggle.d.ts +48 -0
  43. package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
  44. package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
  45. package/dist/design-system-react-components.cjs.development.js +4698 -4405
  46. package/dist/design-system-react-components.cjs.development.js.map +1 -1
  47. package/dist/design-system-react-components.cjs.production.min.js +1 -1
  48. package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
  49. package/dist/design-system-react-components.esm.js +5862 -5573
  50. package/dist/design-system-react-components.esm.js.map +1 -1
  51. package/dist/index.d.ts +13 -8
  52. package/dist/resources.scss +0 -2
  53. package/dist/styles.css +2 -2
  54. package/dist/theme/components/breadcrumb.d.ts +1 -1
  55. package/dist/theme/components/button.d.ts +0 -12
  56. package/dist/theme/components/card.d.ts +14 -2
  57. package/dist/theme/components/customTable.d.ts +56 -0
  58. package/dist/theme/components/fieldset.d.ts +2 -2
  59. package/dist/theme/components/global.d.ts +1 -1
  60. package/dist/theme/components/heading.d.ts +4 -0
  61. package/dist/theme/components/label.d.ts +1 -1
  62. package/dist/theme/components/link.d.ts +14 -1
  63. package/dist/theme/components/list.d.ts +0 -2
  64. package/dist/theme/components/logo.d.ts +4 -0
  65. package/dist/theme/components/notification.d.ts +8 -4
  66. package/dist/theme/components/searchBar.d.ts +7 -13
  67. package/dist/theme/components/select.d.ts +1 -0
  68. package/dist/theme/components/structuredContent.d.ts +33 -0
  69. package/dist/theme/components/template.d.ts +10 -10
  70. package/dist/theme/components/textInput.d.ts +2 -0
  71. package/dist/theme/components/toggle.d.ts +71 -0
  72. package/dist/theme/foundations/spacing.d.ts +2 -0
  73. package/dist/utils/utils.d.ts +10 -0
  74. package/package.json +40 -37
  75. package/src/__tests__/utils/utils.test.ts +23 -1
  76. package/src/components/Accordion/Accordion.stories.mdx +16 -15
  77. package/src/components/Accordion/Accordion.test.tsx +45 -1
  78. package/src/components/Accordion/Accordion.tsx +20 -8
  79. package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
  80. package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
  81. package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
  82. package/src/components/Autosuggest/_Autosuggest.scss +2 -6
  83. package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
  84. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +25 -0
  85. package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
  86. package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +103 -4
  87. package/src/components/Button/Button.stories.mdx +93 -48
  88. package/src/components/Button/Button.test.tsx +0 -12
  89. package/src/components/Button/Button.tsx +7 -8
  90. package/src/components/Button/ButtonTypes.tsx +0 -1
  91. package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
  92. package/src/components/Card/Card.stories.mdx +246 -64
  93. package/src/components/Card/Card.test.tsx +45 -22
  94. package/src/components/Card/Card.tsx +30 -14
  95. package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
  96. package/src/components/Chakra/Box.stories.mdx +3 -3
  97. package/src/components/Chakra/Center.stories.mdx +5 -5
  98. package/src/components/Chakra/Flex.stories.mdx +113 -0
  99. package/src/components/Chakra/Grid.stories.mdx +14 -17
  100. package/src/components/Chakra/Stack.stories.mdx +2 -2
  101. package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
  102. package/src/components/Checkbox/Checkbox.tsx +13 -8
  103. package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
  104. package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
  105. package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
  106. package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
  107. package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
  108. package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
  109. package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
  110. package/src/components/DatePicker/DatePicker.test.tsx +14 -12
  111. package/src/components/DatePicker/DatePicker.tsx +13 -10
  112. package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
  113. package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
  114. package/src/components/Fieldset/Fieldset.tsx +2 -4
  115. package/src/components/Form/Form.stories.mdx +75 -49
  116. package/src/components/Form/Form.test.tsx +92 -3
  117. package/src/components/Form/Form.tsx +28 -23
  118. package/src/components/Form/FormTypes.tsx +2 -2
  119. package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
  120. package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
  121. package/src/components/Heading/Heading.stories.mdx +59 -23
  122. package/src/components/Heading/Heading.test.tsx +82 -18
  123. package/src/components/Heading/Heading.tsx +31 -31
  124. package/src/components/Heading/HeadingTypes.tsx +6 -6
  125. package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
  126. package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
  127. package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
  128. package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
  129. package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
  130. package/src/components/Hero/Hero.stories.mdx +72 -53
  131. package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
  132. package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
  133. package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
  134. package/src/components/Icons/Icon.stories.mdx +77 -75
  135. package/src/components/Icons/Icon.tsx +4 -5
  136. package/src/components/Icons/IconSvgs.tsx +2 -42
  137. package/src/components/Icons/IconTypes.tsx +1 -24
  138. package/src/components/Image/Image.stories.mdx +214 -104
  139. package/src/components/Image/Image.test.tsx +10 -0
  140. package/src/components/Image/Image.tsx +21 -10
  141. package/src/components/Image/ImageTypes.ts +2 -0
  142. package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
  143. package/src/components/Label/Label.stories.mdx +21 -20
  144. package/src/components/Link/Link.stories.mdx +103 -53
  145. package/src/components/Link/Link.test.tsx +108 -7
  146. package/src/components/Link/Link.tsx +58 -19
  147. package/src/components/Link/LinkTypes.tsx +1 -0
  148. package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
  149. package/src/components/List/List.stories.mdx +37 -25
  150. package/src/components/List/List.tsx +1 -1
  151. package/src/components/Logo/Logo.stories.mdx +220 -0
  152. package/src/components/Logo/Logo.test.tsx +98 -0
  153. package/src/components/Logo/Logo.tsx +97 -0
  154. package/src/components/Logo/LogoSvgs.tsx +34 -0
  155. package/src/components/Logo/LogoTypes.tsx +32 -0
  156. package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
  157. package/src/components/Modal/Modal.stories.mdx +20 -5
  158. package/src/components/Modal/Modal.tsx +2 -8
  159. package/src/components/Notification/Notification.stories.mdx +96 -40
  160. package/src/components/Notification/Notification.test.tsx +62 -16
  161. package/src/components/Notification/Notification.tsx +26 -9
  162. package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
  163. package/src/components/Pagination/Pagination.stories.mdx +19 -9
  164. package/src/components/Pagination/Pagination.tsx +3 -3
  165. package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
  166. package/src/components/Placeholder/Placeholder.tsx +7 -14
  167. package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
  168. package/src/components/Radio/Radio.stories.mdx +39 -19
  169. package/src/components/Radio/Radio.tsx +13 -9
  170. package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
  171. package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
  172. package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
  173. package/src/components/RadioGroup/RadioGroup.tsx +97 -94
  174. package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
  175. package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
  176. package/src/components/SearchBar/SearchBar.stories.mdx +116 -34
  177. package/src/components/SearchBar/SearchBar.tsx +70 -50
  178. package/src/components/Select/Select.stories.mdx +177 -66
  179. package/src/components/Select/Select.test.tsx +91 -2
  180. package/src/components/Select/Select.tsx +29 -13
  181. package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
  182. package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
  183. package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
  184. package/src/components/Slider/Slider.stories.mdx +74 -23
  185. package/src/components/Slider/Slider.test.tsx +35 -0
  186. package/src/components/Slider/Slider.tsx +22 -11
  187. package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
  188. package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
  189. package/src/components/StatusBadge/StatusBadge.tsx +2 -1
  190. package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
  191. package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
  192. package/src/components/StructuredContent/StructuredContent.tsx +153 -0
  193. package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
  194. package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
  195. package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
  196. package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
  197. package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
  198. package/src/components/StyleGuide/ColorCard.tsx +1 -2
  199. package/src/components/StyleGuide/Colors.stories.mdx +3 -11
  200. package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
  201. package/src/components/StyleGuide/Forms.stories.mdx +2 -10
  202. package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
  203. package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
  204. package/src/components/StyleGuide/Typography.stories.mdx +64 -76
  205. package/src/components/Table/Table.stories.mdx +165 -0
  206. package/src/components/Table/Table.test.tsx +137 -0
  207. package/src/components/Table/Table.tsx +126 -0
  208. package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
  209. package/src/components/Tabs/Tabs.stories.mdx +20 -14
  210. package/src/components/Tabs/Tabs.test.tsx +21 -5
  211. package/src/components/Tabs/Tabs.tsx +33 -18
  212. package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
  213. package/src/components/Template/Template.stories.mdx +132 -49
  214. package/src/components/Template/Template.test.tsx +128 -6
  215. package/src/components/Template/Template.tsx +93 -13
  216. package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
  217. package/src/components/Text/Text.stories.mdx +33 -11
  218. package/src/components/Text/Text.tsx +2 -2
  219. package/src/components/TextInput/TextInput.stories.mdx +84 -17
  220. package/src/components/TextInput/TextInput.test.tsx +96 -0
  221. package/src/components/TextInput/TextInput.tsx +12 -8
  222. package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
  223. package/src/components/Toggle/Toggle.stories.mdx +200 -0
  224. package/src/components/Toggle/Toggle.test.tsx +140 -0
  225. package/src/components/Toggle/Toggle.tsx +123 -0
  226. package/src/components/Toggle/ToggleSizes.tsx +4 -0
  227. package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
  228. package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
  229. package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
  230. package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
  231. package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
  232. package/src/docs/Chakra.stories.mdx +5 -8
  233. package/src/docs/Intro.stories.mdx +2 -2
  234. package/src/index.ts +19 -6
  235. package/src/styles/base/_03-base.scss +1 -1
  236. package/src/styles/base/_place-holder.scss +7 -7
  237. package/src/styles.scss +1 -5
  238. package/src/theme/components/breadcrumb.ts +5 -5
  239. package/src/theme/components/button.ts +5 -12
  240. package/src/theme/components/card.ts +9 -7
  241. package/src/theme/components/checkbox.ts +1 -1
  242. package/src/theme/components/customTable.ts +63 -0
  243. package/src/theme/components/datePicker.ts +1 -1
  244. package/src/theme/components/global.ts +7 -7
  245. package/src/theme/components/heading.ts +13 -11
  246. package/src/theme/components/helperErrorText.ts +1 -1
  247. package/src/theme/components/icon.ts +2 -2
  248. package/src/theme/components/image.ts +9 -1
  249. package/src/theme/components/link.ts +17 -5
  250. package/src/theme/components/list.ts +1 -3
  251. package/src/theme/components/logo.ts +54 -0
  252. package/src/theme/components/notification.ts +9 -7
  253. package/src/theme/components/searchBar.ts +7 -13
  254. package/src/theme/components/select.ts +1 -0
  255. package/src/theme/components/statusBadge.ts +1 -1
  256. package/src/theme/components/structuredContent.ts +54 -0
  257. package/src/theme/components/template.ts +10 -10
  258. package/src/theme/components/text.ts +6 -6
  259. package/src/theme/components/textInput.ts +1 -0
  260. package/src/theme/components/toggle.ts +69 -0
  261. package/src/theme/components/videoPlayer.ts +0 -2
  262. package/src/theme/foundations/global.ts +2 -2
  263. package/src/theme/foundations/spacing.ts +3 -0
  264. package/src/theme/foundations/typography.ts +84 -12
  265. package/src/theme/index.ts +8 -0
  266. package/src/utils/componentCategories.ts +5 -2
  267. package/src/utils/utils.ts +17 -0
  268. package/dist/__tests__/utils/bem.test.d.ts +0 -1
  269. package/dist/components/CardEdition/CardEdition.d.ts +0 -21
  270. package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
  271. package/dist/components/Input/Input.d.ts +0 -36
  272. package/dist/components/Input/Input.stories.d.ts +0 -29
  273. package/dist/components/Input/InputTypes.d.ts +0 -6
  274. package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
  275. package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
  276. package/dist/helpers/getCSSVariable.d.ts +0 -1
  277. package/dist/interfaces.d.ts +0 -3
  278. package/dist/utils/bem.d.ts +0 -1
  279. package/src/__tests__/utils/bem.test.ts +0 -37
  280. package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
  281. package/src/components/CardEdition/CardEdition.test.tsx +0 -395
  282. package/src/components/CardEdition/CardEdition.tsx +0 -60
  283. package/src/components/CardEdition/_CardEdition.scss +0 -137
  284. package/src/components/Input/Input.stories.tsx +0 -133
  285. package/src/components/Input/Input.test.tsx +0 -266
  286. package/src/components/Input/Input.tsx +0 -81
  287. package/src/components/Input/InputTypes.tsx +0 -8
  288. package/src/components/Input/_Input.scss +0 -78
  289. package/src/components/StyleGuide/UIDocCard.tsx +0 -36
  290. package/src/helpers/CSSVariablesHelper.tsx +0 -34
  291. package/src/helpers/getCSSVariable.tsx +0 -5
  292. package/src/interfaces.ts +0 -3
  293. package/src/utils/bem.ts +0 -44
@@ -1,133 +0,0 @@
1
- import React from "react";
2
-
3
- import Input from "./Input";
4
- import { InputTypes } from "./InputTypes";
5
- import Label from "../Label/Label";
6
- import Button from "../Button/Button";
7
- import { ButtonTypes } from "../Button/ButtonTypes";
8
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
9
- import { action } from "@storybook/addon-actions";
10
- import { getCategory } from "../../utils/componentCategories";
11
-
12
- export default {
13
- title: getCategory("Input"),
14
- component: Input,
15
- };
16
-
17
- export const input = () => (
18
- <>
19
- <Label htmlFor="inputID" optReqFlag="Required" id={"label"}>
20
- Choose your islander name:
21
- </Label>
22
- <Input
23
- id="inputID"
24
- ariaLabel="Input Label"
25
- ariaLabelledBy={"helperText"}
26
- required={false}
27
- placeholder="CoolPerson99"
28
- type={InputTypes.text}
29
- disabled={false}
30
- ></Input>
31
- <HelperErrorText isInvalid={false} id={"helperText"}>
32
- Once you pick a name for your islander it cannot be changed, so choose
33
- wisely!
34
- </HelperErrorText>
35
- </>
36
- );
37
-
38
- input.storyName = "Input";
39
- input.parameters = {
40
- design: {
41
- type: "figma",
42
- url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
43
- },
44
- jest: ["Input.test.tsx"],
45
- };
46
-
47
- let groupErrored;
48
-
49
- export const inputGroup = () => (
50
- <fieldset className="fieldset">
51
- <legend className="legend">Construction Time Request Form:</legend>
52
- <div className="input-group">
53
- <div style={{ flex: "1" }}>
54
- <Label htmlFor="input1" id={"label1"}>
55
- From
56
- </Label>
57
- <Input
58
- id="input1"
59
- ariaLabelledBy="helperText1 sharedHelperText label1"
60
- errored={groupErrored ? true : false}
61
- required={true}
62
- type={InputTypes.text}
63
- ></Input>
64
- <HelperErrorText isInvalid={false} id={"helperText1"}>
65
- "E.g., 10am"
66
- </HelperErrorText>
67
- </div>
68
-
69
- <div style={{ flex: "1" }}>
70
- <Label htmlFor="input2" id={"label2"}>
71
- To
72
- </Label>
73
- <Input
74
- id="input2"
75
- ariaLabelledBy={
76
- groupErrored
77
- ? "helperText2 sharedHelperText label2"
78
- : "helperText2 label2"
79
- }
80
- errored={false}
81
- required={true}
82
- type={InputTypes.text}
83
- ></Input>
84
- <HelperErrorText isInvalid={false} id={"helperText2"}>
85
- E.g., 11am
86
- </HelperErrorText>
87
- </div>
88
- </div>
89
- <Button
90
- onClick={action("clicked")}
91
- id="button"
92
- buttonType={ButtonTypes.Primary}
93
- type="submit"
94
- >
95
- Apply
96
- </Button>
97
- </fieldset>
98
- );
99
-
100
- inputGroup.storyName = "Input Group";
101
- inputGroup.parameters = {
102
- design: {
103
- type: "figma",
104
- url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=11895%3A547",
105
- },
106
- jest: ["Input.test.tsx"],
107
- };
108
-
109
- export const inputAttributes = () => (
110
- <>
111
- <Label htmlFor="inputID-attrs" optReqFlag={"Required"} id={"label"}>
112
- Choose your islander name:
113
- </Label>
114
- <Input
115
- id="inputID-attrs"
116
- ariaLabel="Input Label"
117
- ariaLabelledBy="helperText-attrs"
118
- required={false}
119
- placeholder={"CoolPerson42"}
120
- type={InputTypes.text}
121
- attributes={{
122
- onBlur: action("onBlur"),
123
- onChange: action("onChange"),
124
- maxLength: 10,
125
- tabIndex: 0,
126
- }}
127
- ></Input>
128
- <HelperErrorText isInvalid={false} id="helperText-attrs">
129
- {"Change the max length for 'text' input as an example! And note " +
130
- "the actions being called for the passed object in the `attributes` props."}
131
- </HelperErrorText>
132
- </>
133
- );
@@ -1,266 +0,0 @@
1
- import * as React from "react";
2
- import { render, screen, fireEvent } from "@testing-library/react";
3
- import { axe } from "jest-axe";
4
- import userEvent from "@testing-library/user-event";
5
-
6
- import Label from "../Label/Label";
7
- import HelperErrorText from "../HelperErrorText/HelperErrorText";
8
- import Input from "./Input";
9
- import { InputTypes } from "./InputTypes";
10
-
11
- describe("Input Accessibility", () => {
12
- it("passes axe accessibility test", async () => {
13
- const { container } = render(
14
- <Input
15
- id="inputID"
16
- ariaLabel="Input Label"
17
- ariaLabelledBy={"helperText"}
18
- required={true}
19
- placeholder={"Input Placeholder"}
20
- type={InputTypes.text}
21
- attributes={{ onClick: jest.fn() }}
22
- onChange={jest.fn()}
23
- />
24
- );
25
- expect(await axe(container)).toHaveNoViolations();
26
- });
27
- });
28
-
29
- describe("Input", () => {
30
- let changeHandler;
31
- let clickHander;
32
-
33
- beforeEach(() => {
34
- clickHander = jest.fn();
35
- changeHandler = jest.fn();
36
- render(
37
- <Input
38
- id="inputID"
39
- ariaLabel="Input Label"
40
- ariaLabelledBy="helperText"
41
- required={true}
42
- placeholder="Input Placeholder"
43
- type={InputTypes.text}
44
- attributes={{ onClick: clickHander }}
45
- onChange={changeHandler}
46
- ></Input>
47
- );
48
- });
49
-
50
- it("Renders Input", () => {
51
- expect(screen.getByLabelText("Input Label")).toBeInTheDocument();
52
- });
53
-
54
- it("Renders aria-label", () => {
55
- expect(screen.getByLabelText("Input Label")).toHaveAttribute(
56
- "aria-label",
57
- "Input Label"
58
- );
59
- });
60
-
61
- it("Renders placeholder text", () => {
62
- expect(
63
- screen.getByPlaceholderText("Input Placeholder")
64
- ).toBeInTheDocument();
65
- });
66
-
67
- it("Adds aria-required prop if input is required", () => {
68
- expect(screen.getByLabelText("Input Label")).toHaveAttribute("aria-label");
69
- });
70
-
71
- it("Allows user to pass in additional attributes", () => {
72
- expect(clickHander).toHaveBeenCalledTimes(0);
73
- userEvent.click(screen.getByLabelText("Input Label"));
74
- expect(clickHander).toHaveBeenCalledTimes(1);
75
- });
76
-
77
- it("Changing the value calls the onChange handler", () => {
78
- expect(changeHandler).toHaveBeenCalledTimes(0);
79
- fireEvent.change(screen.getByLabelText("Input Label"), {
80
- target: { value: "Hello" },
81
- });
82
- expect(changeHandler).toHaveBeenCalledTimes(1);
83
- });
84
- });
85
-
86
- describe("Input with Label", () => {
87
- beforeEach(() => {
88
- render(
89
- <>
90
- <Label htmlFor="inputID" id="label">
91
- Input Label
92
- </Label>
93
- <Input
94
- id="inputID"
95
- ariaLabelledBy="label helperText"
96
- ariaLabel="Input Label"
97
- required={true}
98
- placeholder="Input Placeholder"
99
- type={InputTypes.text}
100
- />
101
- <HelperErrorText isInvalid={false} id="helperText">
102
- Helper Text Content
103
- </HelperErrorText>
104
- </>
105
- );
106
- });
107
-
108
- it("Renders Input", () => {
109
- expect(screen.getByText("Input Label")).toBeInTheDocument();
110
- });
111
-
112
- it("Renders aria-label", () => {
113
- expect(screen.getByLabelText("Input Label")).toHaveAttribute(
114
- "aria-label",
115
- "Input Label"
116
- );
117
- });
118
-
119
- it("Renders aria-labelledby for inputId and ariaLabelledBy", () => {
120
- expect(screen.getByLabelText("Input Label")).toHaveAttribute(
121
- "aria-labelledby",
122
- "label helperText"
123
- );
124
- });
125
- });
126
-
127
- describe("Input Group", () => {
128
- beforeEach(() => {
129
- render(
130
- <fieldset>
131
- <legend>Input Group Label Legend</legend>
132
- <>
133
- <>
134
- <Label htmlFor="input1" id={"label1"}>
135
- From
136
- </Label>
137
- <Input
138
- id="input1"
139
- ariaLabelledBy="label1 helperText1 sharedHelperText"
140
- required={true}
141
- type={InputTypes.text}
142
- ></Input>
143
- <HelperErrorText isInvalid={false} id={"helperText1"}>
144
- Input 1 Helper Text
145
- </HelperErrorText>
146
- </>
147
-
148
- <>
149
- <Label htmlFor="input2" id={"label2"}>
150
- To
151
- </Label>
152
- <Input
153
- id="input2"
154
- ariaLabelledBy={"label2 helperText2 sharedHelperText"}
155
- required={true}
156
- type={InputTypes.text}
157
- ></Input>
158
- <HelperErrorText isInvalid={false} id={"helperText2"}>
159
- Input 2 Helper Text
160
- </HelperErrorText>
161
- </>
162
- </>
163
- <HelperErrorText isInvalid={true} id={"sharedHelperText"}>
164
- Additional Error Text
165
- </HelperErrorText>
166
- </fieldset>
167
- );
168
- });
169
- it("Renders legend", () => {
170
- expect(screen.getByText("Input Group Label Legend")).toBeInTheDocument();
171
- });
172
-
173
- it("Renders two inputs", () => {
174
- expect(screen.getByText("From")).toBeInTheDocument();
175
- expect(screen.getByText("To")).toBeInTheDocument();
176
- });
177
- });
178
-
179
- describe("Renders HTML attributes passed through the `attributes` prop", () => {
180
- const onChangeSpy = jest.fn();
181
- const onBlurSpy = jest.fn();
182
- beforeEach(() => {
183
- render(
184
- <Input
185
- id="inputID-attributes"
186
- ariaLabel="Input Label"
187
- ariaLabelledBy="helperText-attributes"
188
- placeholder="Input Placeholder"
189
- type={InputTypes.text}
190
- attributes={{
191
- onChange: onChangeSpy,
192
- onBlur: onBlurSpy,
193
- maxLength: 10,
194
- tabIndex: 0,
195
- }}
196
- />
197
- );
198
- });
199
-
200
- it("Has a maxlength for the input element", () => {
201
- expect(screen.getByLabelText("Input Label")).toHaveAttribute(
202
- "maxLength",
203
- "10"
204
- );
205
- });
206
-
207
- it("Has a tabIndex", () => {
208
- expect(screen.getByLabelText("Input Label")).toHaveAttribute(
209
- "tabIndex",
210
- "0"
211
- );
212
- });
213
-
214
- it("Calls the onChange function", () => {
215
- expect(onChangeSpy).toHaveBeenCalledTimes(0);
216
- fireEvent.change(screen.getByLabelText("Input Label"), {
217
- target: { value: "Hello" },
218
- });
219
- expect(onChangeSpy).toHaveBeenCalledTimes(1);
220
- });
221
-
222
- it("Calls the onBlur function", () => {
223
- expect(onBlurSpy).toHaveBeenCalledTimes(0);
224
- fireEvent.blur(screen.getByLabelText("Input Label"));
225
- expect(onBlurSpy).toHaveBeenCalledTimes(1);
226
- });
227
- });
228
-
229
- // TODO:
230
- // describe("Forwarding refs", () => {
231
- // it("Passes the ref to the input element", () => {
232
- // const ref = React.createRef<HTMLInputElement>();
233
- // const container = render(
234
- // <Input
235
- // id="inputID-attributes"
236
- // ariaLabel="Input Label"
237
- // ariaLabelledBy={"helperText-attributes"}
238
- // placeholder={"Input Placeholder"}
239
- // type={InputTypes.text}
240
- // ref={ref}
241
- // ></Input>
242
- // );
243
- // expect(container.find("input").instance()).toEqual(ref.current);
244
- // });
245
- // });
246
-
247
- describe("Hidden input", () => {
248
- it("Renders a hidden type input", () => {
249
- render(
250
- <Input
251
- id="inputID-hidden"
252
- ariaLabel="Hidden Input Label"
253
- type={InputTypes.hidden}
254
- value="hidden"
255
- />
256
- );
257
-
258
- expect(screen.getByLabelText("Hidden Input Label")).toHaveAttribute(
259
- "aria-hidden"
260
- );
261
- expect(screen.getByLabelText("Hidden Input Label")).toHaveAttribute(
262
- "value",
263
- "hidden"
264
- );
265
- });
266
- });
@@ -1,81 +0,0 @@
1
- import * as React from "react";
2
- import bem from "../../utils/bem";
3
- import { InputTypes } from "./InputTypes";
4
-
5
- export interface InputProps {
6
- /** Additional attributes to pass to the <input> tag */
7
- attributes?: { [key: string]: any };
8
- /** Populates the aria-label on the input */
9
- ariaLabel?: string;
10
- /** Populates the aria-labelledby on the input */
11
- ariaLabelledBy?: string;
12
- /** BlockName for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
13
- blockName?: string;
14
- /** className you can add in addition to 'input' */
15
- className?: string;
16
- /** ID that other components can cross reference for accessibility purposes */
17
- id?: string;
18
- /** Adds the 'disabled' prop to the input when true */
19
- disabled?: boolean;
20
- /** Helper for modifiers array; adds 'errored' styling */
21
- errored?: boolean;
22
- /** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
23
- modifiers?: string[];
24
- /** Populates the placeholder of the input */
25
- placeholder?: string;
26
- /** Will add 'aria-required: true' to input */
27
- required?: boolean;
28
- /** HTML Input types as defined by MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input */
29
- type?: InputTypes;
30
- /** Populates the value of the input */
31
- value?: string | number;
32
- /** The action to perform on the `<input>`'s onChange function */
33
- onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
34
- }
35
-
36
- const Input = React.forwardRef<HTMLInputElement, InputProps>((props, ref?) => {
37
- const {
38
- ariaLabel,
39
- ariaLabelledBy,
40
- attributes,
41
- blockName,
42
- className,
43
- disabled,
44
- errored,
45
- id,
46
- placeholder,
47
- required,
48
- type = "text",
49
- value,
50
- onChange,
51
- } = props;
52
-
53
- const modifiers = props.modifiers ? props.modifiers : [];
54
-
55
- if (errored) {
56
- modifiers.push("error");
57
- }
58
- const transformedInput = (
59
- <input
60
- id={id}
61
- className={bem("input", modifiers, blockName, [className])}
62
- type={type}
63
- value={value}
64
- aria-label={ariaLabel}
65
- aria-labelledby={ariaLabelledBy}
66
- aria-required={required}
67
- aria-hidden={type === InputTypes.hidden}
68
- disabled={disabled}
69
- placeholder={placeholder}
70
- onChange={onChange}
71
- ref={ref}
72
- {...attributes}
73
- />
74
- );
75
-
76
- return transformedInput;
77
- });
78
-
79
- Input.displayName = "Input";
80
-
81
- export default Input;
@@ -1,8 +0,0 @@
1
- // HTML Input types as defined by MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input
2
- export enum InputTypes {
3
- // eslint-disable-next-line id-blacklist
4
- number = "number",
5
- password = "password",
6
- text = "text",
7
- hidden = "hidden",
8
- }
@@ -1,78 +0,0 @@
1
- $break-input-mobile: 400px;
2
-
3
- .input {
4
- padding: var(--nypl-space-xs);
5
- margin-bottom: var(--nypl-space-xs);
6
-
7
- border: 1px solid var(--nypl-colors-ui-gray-medium);
8
-
9
- &[type="text"],
10
- &[type="number"],
11
- &[type="password"] {
12
- width: 100%;
13
- }
14
-
15
- &[type="radio"] {
16
- width: unset;
17
-
18
- + .label {
19
- display: unset;
20
- margin-left: var(--nypl-space-s);
21
- }
22
- }
23
-
24
- &::-webkit-input-placeholder {
25
- color: var(--nypl-colors-ui-gray-dark);
26
- }
27
-
28
- &:-moz-placeholder {
29
- color: var(--nypl-colors-ui-gray-dark);
30
- }
31
-
32
- &:-ms-input-placeholder {
33
- color: var(--nypl-colors-ui-gray-dark);
34
- }
35
-
36
- &:hover {
37
- border-color: var(--nypl-colors-ui-gray-dark);
38
- }
39
-
40
- &:disabled {
41
- background-color: var(--nypl-colors-ui-gray-xx-light-cool);
42
- color: var(--nypl-colors-ui-gray-xdark);
43
- }
44
-
45
- &:active,
46
- &:focus,
47
- &:active:hover,
48
- &:focus:hover {
49
- border: 1px solid var(--nypl-colors-ui-focus);
50
- box-shadow: 0;
51
- outline: 1px solid var(--nypl-colors-ui-focus);
52
- z-index: 9999;
53
- }
54
-
55
- &--error {
56
- border: 1px solid var(--nypl-colors-ui-error-primary);
57
- }
58
- }
59
-
60
- .input-group {
61
- @include breakpoint($break-input-mobile) {
62
- display: flex;
63
- justify-content: space-between;
64
-
65
- > *:not(:last-child) {
66
- margin-right: var(--nypl-space-m);
67
- }
68
- }
69
- }
70
-
71
- // Used in `Input.stories.tsx`
72
- .fieldset {
73
- @include fieldset-reset;
74
- }
75
- .legend {
76
- border: 0;
77
- font-weight: 500;
78
- }
@@ -1,36 +0,0 @@
1
- import * as React from "react";
2
- import CardEdition from "../CardEdition/CardEdition";
3
-
4
- interface UIDocCardProps {
5
- /** backgroundColor of the doc card */
6
- backgroundColor: string;
7
- }
8
-
9
- /**
10
- * UIDocCard
11
- * Component only used for Storybook.
12
- */
13
- export default function UIDocCard(
14
- props: React.PropsWithChildren<UIDocCardProps>
15
- ) {
16
- const { backgroundColor, children } = props;
17
-
18
- return (
19
- <CardEdition className="var-docs">
20
- <div
21
- style={{
22
- alignItems: "center",
23
- backgroundColor: backgroundColor,
24
- borderBottom: "1px solid var(--nypl-colors-ui-gray-light-cool)",
25
- color: "white",
26
- display: "flex",
27
- height: "100px",
28
- justifyContent: "center",
29
- marginBottom: "15px",
30
- width: "100%",
31
- }}
32
- ></div>
33
- {children}
34
- </CardEdition>
35
- );
36
- }
@@ -1,34 +0,0 @@
1
- import { CSSVariablesInterface } from "../interfaces";
2
-
3
- const cssVariables: CSSVariablesInterface = {};
4
-
5
- const buildCSSObject = function (_: any, cssRule) {
6
- // All of our global variables are applied to :root
7
- if (cssRule.selectorText === ":root") {
8
- let css = cssRule.cssText.split("{");
9
- css = css[1].replace("}", "").split(";");
10
- for (let i = 0; i < css.length; i++) {
11
- const prop = css[i].split(":");
12
- if (
13
- // if a valid CSS variable, i.e. --[whatever]
14
- prop.length === 2 &&
15
- prop[0].indexOf("--") === 1
16
- ) {
17
- cssVariables[prop[0]] = prop[1];
18
- }
19
- }
20
- }
21
- };
22
-
23
- [].slice.call(document.styleSheets).reduce(function (prev, styleSheet) {
24
- if (styleSheet.cssRules) {
25
- return (
26
- prev +
27
- [].slice.call(styleSheet.cssRules).reduce(function (prev, cssRule) {
28
- buildCSSObject(prev, cssRule);
29
- }, "")
30
- );
31
- }
32
- }, "");
33
-
34
- export default cssVariables;
@@ -1,5 +0,0 @@
1
- export default function getCSSVariable(name: string) {
2
- const propertyValue =
3
- getComputedStyle(document.documentElement).getPropertyValue(name) || "";
4
- return propertyValue;
5
- }
package/src/interfaces.ts DELETED
@@ -1,3 +0,0 @@
1
- export interface CSSVariablesInterface {
2
- key?: string;
3
- }
package/src/utils/bem.ts DELETED
@@ -1,44 +0,0 @@
1
- // Re-written in TS from https://github.com/drupal-pattern-lab/bem-twig-extension
2
-
3
- export default function bem(
4
- baseClass: string,
5
- modifiers?: string[],
6
- blockName?: string,
7
- extra?: string[]
8
- ) {
9
- const classes = [];
10
- // If using a blockname to override default class.
11
- if (blockName) {
12
- classes.push(blockName.concat("__").concat(baseClass));
13
-
14
- // Set blockname--modifier classes for each modifier.
15
- if (modifiers?.length > 0) {
16
- modifiers.forEach((modifier) => {
17
- classes.push(
18
- blockName.concat("__").concat(baseClass).concat("--").concat(modifier)
19
- );
20
- });
21
- }
22
- }
23
- // If not overriding base class.
24
- else {
25
- // Set base class.
26
- classes.push(baseClass);
27
-
28
- if (modifiers?.length > 0) {
29
- modifiers.forEach((modifier) => {
30
- classes.push(baseClass.concat("--").concat(modifier));
31
- });
32
- }
33
- }
34
-
35
- // If extra non-BEM classes are added.
36
- if (extra?.length > 0) {
37
- extra.forEach((extraClass) => {
38
- classes.push(extraClass);
39
- });
40
- }
41
-
42
- const attributes = classes.join(" ");
43
- return attributes;
44
- }