@hyphen/hyphen-components 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/package.json +138 -0
  4. package/src/components/Alert/Alert.constants.ts +19 -0
  5. package/src/components/Alert/Alert.mdx +29 -0
  6. package/src/components/Alert/Alert.module.scss +74 -0
  7. package/src/components/Alert/Alert.stories.tsx +102 -0
  8. package/src/components/Alert/Alert.test.tsx +187 -0
  9. package/src/components/Alert/Alert.tsx +157 -0
  10. package/src/components/Alert/Alert.types.ts +14 -0
  11. package/src/components/Badge/Badge.mdx +28 -0
  12. package/src/components/Badge/Badge.module.scss +155 -0
  13. package/src/components/Badge/Badge.stories.tsx +52 -0
  14. package/src/components/Badge/Badge.test.tsx +74 -0
  15. package/src/components/Badge/Badge.tsx +70 -0
  16. package/src/components/Box/Box.mdx +259 -0
  17. package/src/components/Box/Box.module.scss +16 -0
  18. package/src/components/Box/Box.stories.tsx +1679 -0
  19. package/src/components/Box/Box.test.tsx +478 -0
  20. package/src/components/Box/Box.tsx +636 -0
  21. package/src/components/Button/Button.constants.ts +10 -0
  22. package/src/components/Button/Button.mdx +71 -0
  23. package/src/components/Button/Button.module.scss +312 -0
  24. package/src/components/Button/Button.stories.tsx +117 -0
  25. package/src/components/Button/Button.test.tsx +460 -0
  26. package/src/components/Button/Button.tsx +241 -0
  27. package/src/components/Card/Card.mdx +46 -0
  28. package/src/components/Card/Card.module.scss +6 -0
  29. package/src/components/Card/Card.stories.tsx +101 -0
  30. package/src/components/Card/Card.test.tsx +11 -0
  31. package/src/components/Card/Card.tsx +61 -0
  32. package/src/components/Card/components/CardFooter/CardFooter.test.tsx +11 -0
  33. package/src/components/Card/components/CardFooter/CardFooter.tsx +35 -0
  34. package/src/components/Card/components/CardHeader/CardHeader.test.tsx +23 -0
  35. package/src/components/Card/components/CardHeader/CardHeader.tsx +54 -0
  36. package/src/components/Card/components/CardSection/CardSection.test.tsx +28 -0
  37. package/src/components/Card/components/CardSection/CardSection.tsx +102 -0
  38. package/src/components/Card/components/index.ts +3 -0
  39. package/src/components/CheckboxInput/CheckboxInput.mdx +98 -0
  40. package/src/components/CheckboxInput/CheckboxInput.stories.tsx +254 -0
  41. package/src/components/CheckboxInput/CheckboxInput.test.tsx +436 -0
  42. package/src/components/CheckboxInput/CheckboxInput.tsx +171 -0
  43. package/src/components/CheckboxInput/components/Checkbox.module.scss +174 -0
  44. package/src/components/CheckboxInput/components/Checkbox.test.tsx +201 -0
  45. package/src/components/CheckboxInput/components/Checkbox.tsx +176 -0
  46. package/src/components/CheckboxInput/components/CheckboxIcon.tsx +71 -0
  47. package/src/components/DateInput/DateInput.mdx +61 -0
  48. package/src/components/DateInput/DateInput.stories.tsx +168 -0
  49. package/src/components/DateInput/DateInput.test.tsx +258 -0
  50. package/src/components/DateInput/DateInput.tsx +189 -0
  51. package/src/components/DatePicker/DatePicker.mdx +52 -0
  52. package/src/components/DatePicker/DatePicker.module.scss +603 -0
  53. package/src/components/DatePicker/DatePicker.stories.tsx +199 -0
  54. package/src/components/DatePicker/DatePicker.test.tsx +26 -0
  55. package/src/components/DatePicker/DatePicker.tsx +138 -0
  56. package/src/components/Details/Details.mdx +30 -0
  57. package/src/components/Details/Details.module.scss +32 -0
  58. package/src/components/Details/Details.stories.tsx +38 -0
  59. package/src/components/Details/Details.test.tsx +189 -0
  60. package/src/components/Details/Details.tsx +51 -0
  61. package/src/components/Details/DetailsSummary.tsx +65 -0
  62. package/src/components/Drawer/Drawer.mdx +117 -0
  63. package/src/components/Drawer/Drawer.module.scss +96 -0
  64. package/src/components/Drawer/Drawer.stories.tsx +380 -0
  65. package/src/components/Drawer/Drawer.test.tsx +90 -0
  66. package/src/components/Drawer/Drawer.tsx +249 -0
  67. package/src/components/FormControl/FormControl.tsx +78 -0
  68. package/src/components/FormLabel/FormLabel.mdx +24 -0
  69. package/src/components/FormLabel/FormLabel.module.scss +19 -0
  70. package/src/components/FormLabel/FormLabel.stories.tsx +20 -0
  71. package/src/components/FormLabel/FormLabel.test.tsx +35 -0
  72. package/src/components/FormLabel/FormLabel.tsx +96 -0
  73. package/src/components/Formik/Formik.mdx +10 -0
  74. package/src/components/Formik/Formik.stories.tsx +307 -0
  75. package/src/components/Formik/FormikCheckboxInput/FormikCheckboxInput.test.tsx +172 -0
  76. package/src/components/Formik/FormikCheckboxInput/FormikCheckboxInput.tsx +41 -0
  77. package/src/components/Formik/FormikRadioGroup/FormikRadioGroup.test.tsx +205 -0
  78. package/src/components/Formik/FormikRadioGroup/FormikRadioGroup.tsx +37 -0
  79. package/src/components/Formik/FormikSelectInput/FormikSelectInput.test.tsx +210 -0
  80. package/src/components/Formik/FormikSelectInput/FormikSelectInput.tsx +41 -0
  81. package/src/components/Formik/FormikSelectInputInset/FormikSelectInputInset.test.tsx +153 -0
  82. package/src/components/Formik/FormikSelectInputInset/FormikSelectInputInset.tsx +44 -0
  83. package/src/components/Formik/FormikSelectInputNative/FormikSelectInputNative.test.tsx +161 -0
  84. package/src/components/Formik/FormikSelectInputNative/FormikSelectInputNative.tsx +46 -0
  85. package/src/components/Formik/FormikTextInput/FormikTextInput.test.tsx +176 -0
  86. package/src/components/Formik/FormikTextInput/FormikTextInput.tsx +38 -0
  87. package/src/components/Formik/FormikTextInputInset/FormikTextInputInset.test.tsx +170 -0
  88. package/src/components/Formik/FormikTextInputInset/FormikTextInputInset.tsx +42 -0
  89. package/src/components/Formik/FormikTextareaInput/FormikTextareaInput.test.tsx +186 -0
  90. package/src/components/Formik/FormikTextareaInput/FormikTextareaInput.tsx +42 -0
  91. package/src/components/Formik/FormikTextareaInputInset/FormikTextareaInputInset.test.tsx +179 -0
  92. package/src/components/Formik/FormikTextareaInputInset/FormikTextareaInputInset.tsx +42 -0
  93. package/src/components/Formik/FormikTimePicker/FormikTimePicker.test.tsx +224 -0
  94. package/src/components/Formik/FormikTimePicker/FormikTimePicker.tsx +37 -0
  95. package/src/components/Formik/FormikTimePickerNative/FormikTimePickerNative.test.tsx +175 -0
  96. package/src/components/Formik/FormikTimePickerNative/FormikTimePickerNative.tsx +38 -0
  97. package/src/components/Formik/FormikToggle/FormikToggle.test.tsx +172 -0
  98. package/src/components/Formik/FormikToggle/FormikToggle.tsx +38 -0
  99. package/src/components/Heading/Heading.constants.ts +19 -0
  100. package/src/components/Heading/Heading.mdx +35 -0
  101. package/src/components/Heading/Heading.module.scss +5 -0
  102. package/src/components/Heading/Heading.stories.tsx +90 -0
  103. package/src/components/Heading/Heading.test.tsx +67 -0
  104. package/src/components/Heading/Heading.tsx +67 -0
  105. package/src/components/HelpText/HelpText.module.scss +14 -0
  106. package/src/components/HelpText/HelpText.tsx +33 -0
  107. package/src/components/Icon/Icon.mdx +40 -0
  108. package/src/components/Icon/Icon.stories.tsx +72 -0
  109. package/src/components/Icon/Icon.test.tsx +30 -0
  110. package/src/components/Icon/Icon.tsx +61 -0
  111. package/src/components/InputValidationMessage/InputValidationMessage.module.scss +3 -0
  112. package/src/components/InputValidationMessage/InputValidationMessage.tsx +27 -0
  113. package/src/components/Modal/Modal.mdx +60 -0
  114. package/src/components/Modal/Modal.module.scss +135 -0
  115. package/src/components/Modal/Modal.stories.tsx +194 -0
  116. package/src/components/Modal/Modal.test.tsx +81 -0
  117. package/src/components/Modal/Modal.tsx +174 -0
  118. package/src/components/Modal/components/ModalBody/ModalBody.test.tsx +20 -0
  119. package/src/components/Modal/components/ModalBody/ModalBody.tsx +24 -0
  120. package/src/components/Modal/components/ModalFooter/ModalFooter.test.tsx +32 -0
  121. package/src/components/Modal/components/ModalFooter/ModalFooter.tsx +37 -0
  122. package/src/components/Modal/components/ModalHeader/ModalHeader.test.tsx +29 -0
  123. package/src/components/Modal/components/ModalHeader/ModalHeader.tsx +58 -0
  124. package/src/components/Modal/components/index.ts +5 -0
  125. package/src/components/Pagination/Pagination.mdx +26 -0
  126. package/src/components/Pagination/Pagination.stories.tsx +55 -0
  127. package/src/components/Pagination/Pagination.test.tsx +225 -0
  128. package/src/components/Pagination/Pagination.tsx +162 -0
  129. package/src/components/Pagination/Pagination.utilities.test.ts +133 -0
  130. package/src/components/Pagination/Pagination.utilities.ts +101 -0
  131. package/src/components/Popover/Popover.mdx +104 -0
  132. package/src/components/Popover/Popover.module.scss +74 -0
  133. package/src/components/Popover/Popover.stories.tsx +471 -0
  134. package/src/components/Popover/Popover.test.tsx +128 -0
  135. package/src/components/Popover/Popover.tsx +277 -0
  136. package/src/components/RadioGroup/RadioGroup.mdx +81 -0
  137. package/src/components/RadioGroup/RadioGroup.module.scss +23 -0
  138. package/src/components/RadioGroup/RadioGroup.stories.tsx +375 -0
  139. package/src/components/RadioGroup/RadioGroup.test.tsx +282 -0
  140. package/src/components/RadioGroup/RadioGroup.tsx +145 -0
  141. package/src/components/RadioGroup/RadioInput/RadioInput.module.scss +114 -0
  142. package/src/components/RadioGroup/RadioInput/RadioInput.test.tsx +156 -0
  143. package/src/components/RadioGroup/RadioInput/RadioInput.tsx +148 -0
  144. package/src/components/RadioGroup/RadioInput/RadioInputIcon.tsx +59 -0
  145. package/src/components/ResponsiveProvider/ResponsiveProvider.mdx +36 -0
  146. package/src/components/ResponsiveProvider/ResponsiveProvider.stories.tsx +54 -0
  147. package/src/components/ResponsiveProvider/ResponsiveProvider.test.tsx +70 -0
  148. package/src/components/ResponsiveProvider/ResponsiveProvider.tsx +73 -0
  149. package/src/components/SelectInput/SelectInput.mdx +115 -0
  150. package/src/components/SelectInput/SelectInput.module.scss +357 -0
  151. package/src/components/SelectInput/SelectInput.stories.tsx +373 -0
  152. package/src/components/SelectInput/SelectInput.test.tsx +403 -0
  153. package/src/components/SelectInput/SelectInput.tsx +245 -0
  154. package/src/components/SelectInputInset/SelectInputInset.mdx +56 -0
  155. package/src/components/SelectInputInset/SelectInputInset.module.scss +397 -0
  156. package/src/components/SelectInputInset/SelectInputInset.stories.tsx +189 -0
  157. package/src/components/SelectInputInset/SelectInputInset.test.tsx +305 -0
  158. package/src/components/SelectInputInset/SelectInputInset.tsx +235 -0
  159. package/src/components/SelectInputNative/SelectInputNative.mdx +87 -0
  160. package/src/components/SelectInputNative/SelectInputNative.module.scss +356 -0
  161. package/src/components/SelectInputNative/SelectInputNative.stories.tsx +282 -0
  162. package/src/components/SelectInputNative/SelectInputNative.test.tsx +341 -0
  163. package/src/components/SelectInputNative/SelectInputNative.tsx +121 -0
  164. package/src/components/Spinner/Spinner.mdx +29 -0
  165. package/src/components/Spinner/Spinner.module.scss +16 -0
  166. package/src/components/Spinner/Spinner.stories.tsx +48 -0
  167. package/src/components/Spinner/Spinner.test.tsx +47 -0
  168. package/src/components/Spinner/Spinner.tsx +116 -0
  169. package/src/components/Table/Table.mdx +216 -0
  170. package/src/components/Table/Table.module.scss +61 -0
  171. package/src/components/Table/Table.stories.tsx +884 -0
  172. package/src/components/Table/Table.test.tsx +437 -0
  173. package/src/components/Table/Table.tsx +171 -0
  174. package/src/components/Table/TableBody/TableBody.module.scss +19 -0
  175. package/src/components/Table/TableBody/TableBody.test.tsx +38 -0
  176. package/src/components/Table/TableBody/TableBody.tsx +96 -0
  177. package/src/components/Table/TableBody/TableBodyCell/TableBodyCell.module.scss +47 -0
  178. package/src/components/Table/TableBody/TableBodyCell/TableBodyCell.test.tsx +81 -0
  179. package/src/components/Table/TableBody/TableBodyCell/TableBodyCell.tsx +94 -0
  180. package/src/components/Table/TableHead/TableHead.test.tsx +20 -0
  181. package/src/components/Table/TableHead/TableHead.tsx +78 -0
  182. package/src/components/Table/TableHead/TableHeaderCell/TableHeaderCell.module.scss +72 -0
  183. package/src/components/Table/TableHead/TableHeaderCell/TableHeaderCell.test.tsx +187 -0
  184. package/src/components/Table/TableHead/TableHeaderCell/TableHeaderCell.tsx +192 -0
  185. package/src/components/Table/common/TableRow/TableRow.module.scss +5 -0
  186. package/src/components/Table/common/TableRow/TableRow.test.tsx +52 -0
  187. package/src/components/Table/common/TableRow/TableRow.tsx +155 -0
  188. package/src/components/TextInput/TextInput.mdx +96 -0
  189. package/src/components/TextInput/TextInput.module.scss +405 -0
  190. package/src/components/TextInput/TextInput.stories.tsx +268 -0
  191. package/src/components/TextInput/TextInput.test.tsx +231 -0
  192. package/src/components/TextInput/TextInput.tsx +263 -0
  193. package/src/components/TextInputInset/TextInputInset.mdx +62 -0
  194. package/src/components/TextInputInset/TextInputInset.module.scss +418 -0
  195. package/src/components/TextInputInset/TextInputInset.stories.tsx +213 -0
  196. package/src/components/TextInputInset/TextInputInset.test.tsx +222 -0
  197. package/src/components/TextInputInset/TextInputInset.tsx +261 -0
  198. package/src/components/TextareaInput/TextareaInput.mdx +117 -0
  199. package/src/components/TextareaInput/TextareaInput.module.scss +275 -0
  200. package/src/components/TextareaInput/TextareaInput.stories.tsx +293 -0
  201. package/src/components/TextareaInput/TextareaInput.test.tsx +195 -0
  202. package/src/components/TextareaInput/TextareaInput.tsx +182 -0
  203. package/src/components/TextareaInputInset/TextareaInputInset.mdx +55 -0
  204. package/src/components/TextareaInputInset/TextareaInputInset.module.scss +337 -0
  205. package/src/components/TextareaInputInset/TextareaInputInset.stories.tsx +160 -0
  206. package/src/components/TextareaInputInset/TextareaInputInset.test.tsx +199 -0
  207. package/src/components/TextareaInputInset/TextareaInputInset.tsx +213 -0
  208. package/src/components/ThemeProvider/ThemeProvider.mdx +11 -0
  209. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +56 -0
  210. package/src/components/ThemeProvider/ThemeProvider.tsx +75 -0
  211. package/src/components/TimePicker/TimePicker.mdx +75 -0
  212. package/src/components/TimePicker/TimePicker.stories.tsx +149 -0
  213. package/src/components/TimePicker/TimePicker.test.tsx +97 -0
  214. package/src/components/TimePicker/TimePicker.tsx +83 -0
  215. package/src/components/TimePickerNative/TimePickerNative.mdx +67 -0
  216. package/src/components/TimePickerNative/TimePickerNative.stories.tsx +151 -0
  217. package/src/components/TimePickerNative/TimePickerNative.test.tsx +117 -0
  218. package/src/components/TimePickerNative/TimePickerNative.tsx +93 -0
  219. package/src/components/Toast/Toast.mdx +134 -0
  220. package/src/components/Toast/Toast.store.ts +280 -0
  221. package/src/components/Toast/Toast.stories.tsx +283 -0
  222. package/src/components/Toast/Toast.test.tsx +784 -0
  223. package/src/components/Toast/Toast.types.ts +98 -0
  224. package/src/components/Toast/ToastContainer.tsx +170 -0
  225. package/src/components/Toast/ToastNotification.module.scss +63 -0
  226. package/src/components/Toast/ToastNotification.tsx +176 -0
  227. package/src/components/Toast/index.ts +4 -0
  228. package/src/components/Toast/toast.ts +102 -0
  229. package/src/components/Toast/useToasts.ts +102 -0
  230. package/src/components/Toggle/Toggle.mdx +51 -0
  231. package/src/components/Toggle/Toggle.module.scss +294 -0
  232. package/src/components/Toggle/Toggle.stories.tsx +128 -0
  233. package/src/components/Toggle/Toggle.test.tsx +308 -0
  234. package/src/components/Toggle/Toggle.tsx +184 -0
  235. package/src/constants/keyCodes.ts +2 -0
  236. package/src/docs/Brands.mdx +153 -0
  237. package/src/docs/Colors.mdx +158 -0
  238. package/src/docs/DesignTokens.mdx +415 -0
  239. package/src/docs/GetStarted.mdx +47 -0
  240. package/src/docs/intro.mdx +12 -0
  241. package/src/fonts/AvenirBold.otf +0 -0
  242. package/src/fonts/AvenirBold.woff +0 -0
  243. package/src/fonts/AvenirBold.woff2 +0 -0
  244. package/src/fonts/AvenirLight.otf +0 -0
  245. package/src/fonts/AvenirLight.woff +0 -0
  246. package/src/fonts/AvenirLight.woff2 +0 -0
  247. package/src/fonts/AvenirRegular.otf +0 -0
  248. package/src/fonts/AvenirRegular.woff +0 -0
  249. package/src/fonts/AvenirRegular.woff2 +0 -0
  250. package/src/fonts/Geist-Bold.otf +0 -0
  251. package/src/fonts/Geist-Bold.woff +0 -0
  252. package/src/fonts/Geist-Bold.woff2 +0 -0
  253. package/src/fonts/Geist-Medium.otf +0 -0
  254. package/src/fonts/Geist-Medium.woff +0 -0
  255. package/src/fonts/Geist-Medium.woff2 +0 -0
  256. package/src/fonts/Geist-Regular.otf +0 -0
  257. package/src/fonts/Geist-Regular.woff +0 -0
  258. package/src/fonts/Geist-Regular.woff2 +0 -0
  259. package/src/fonts/Geist-SemiBold.otf +0 -0
  260. package/src/fonts/Geist-SemiBold.woff +0 -0
  261. package/src/fonts/Geist-SemiBold.woff2 +0 -0
  262. package/src/fonts/GeistMono-Regular.otf +0 -0
  263. package/src/fonts/GeistMono-Regular.woff +0 -0
  264. package/src/fonts/GeistMono-Regular.woff2 +0 -0
  265. package/src/hooks/index.ts +4 -0
  266. package/src/hooks/useBreakpoint/useBreakpoint.mdx +26 -0
  267. package/src/hooks/useBreakpoint/useBreakpoint.stories.tsx +30 -0
  268. package/src/hooks/useBreakpoint/useBreakpoint.test.tsx +19 -0
  269. package/src/hooks/useBreakpoint/useBreakpoint.ts +50 -0
  270. package/src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayouEffect.ts +5 -0
  271. package/src/hooks/useOpenClose/useOpenClose.mdx +15 -0
  272. package/src/hooks/useOpenClose/useOpenClose.stories.tsx +41 -0
  273. package/src/hooks/useOpenClose/useOpenClose.test.tsx +119 -0
  274. package/src/hooks/useOpenClose/useOpenClose.tsx +95 -0
  275. package/src/hooks/useWindowSize/useWindowSize.mdx +25 -0
  276. package/src/hooks/useWindowSize/useWindowSize.stories.tsx +35 -0
  277. package/src/hooks/useWindowSize/useWindowSize.ts +24 -0
  278. package/src/index.ts +48 -0
  279. package/src/lib/cssShorthandToClasses.test.ts +149 -0
  280. package/src/lib/cssShorthandToClasses.ts +133 -0
  281. package/src/lib/doesStringIncludeCssUnit.ts +6 -0
  282. package/src/lib/generateResponsiveClasses.test.ts +24 -0
  283. package/src/lib/generateResponsiveClasses.ts +30 -0
  284. package/src/lib/getAutoCompleteValue.test.ts +27 -0
  285. package/src/lib/getAutoCompleteValue.ts +12 -0
  286. package/src/lib/getColumnKeys.ts +27 -0
  287. package/src/lib/getDimensionCss.test.ts +148 -0
  288. package/src/lib/getDimensionCss.ts +73 -0
  289. package/src/lib/getElementType.test.tsx +42 -0
  290. package/src/lib/getElementType.ts +42 -0
  291. package/src/lib/getFlexCss.test.ts +122 -0
  292. package/src/lib/getFlexCss.ts +67 -0
  293. package/src/lib/index.ts +15 -0
  294. package/src/lib/isFunction.ts +6 -0
  295. package/src/lib/mergeRefs.ts +15 -0
  296. package/src/lib/prefersReducedMotion.ts +12 -0
  297. package/src/lib/react-children-utilities/filter.ts +12 -0
  298. package/src/lib/react-children-utilities/index.ts +1 -0
  299. package/src/lib/reactRouterClickHandler.ts +37 -0
  300. package/src/lib/resolveValue.ts +7 -0
  301. package/src/lib/tokens.ts +139 -0
  302. package/src/modes.ts +8 -0
  303. package/src/styles/animation.scss +152 -0
  304. package/src/styles/cursor.scss +43 -0
  305. package/src/styles/display.scss +119 -0
  306. package/src/styles/flex.scss +453 -0
  307. package/src/styles/fonts.scss +44 -0
  308. package/src/styles/globals/utilities.scss +4 -0
  309. package/src/styles/mixins.scss +14 -0
  310. package/src/styles/overflow.scss +41 -0
  311. package/src/styles/position.scss +45 -0
  312. package/src/styles/reset.scss +108 -0
  313. package/src/styles/text-align.scss +21 -0
  314. package/src/styles/utilities.scss +9 -0
  315. package/src/styles/variables/forms.scss +71 -0
  316. package/src/styles/variables/index.scss +3 -0
  317. package/src/styles/white-space.scss +21 -0
  318. package/src/types/index.ts +201 -0
  319. package/src/types/lib.types.ts +3 -0
@@ -0,0 +1,418 @@
1
+ @import '@hyphen/hyphen-design-tokens/build/scss/variables';
2
+
3
+ @mixin floating-label-minimize-md {
4
+ opacity: 0.75;
5
+ transform: scale(0.6875) translateY(-0.25rem) translateX(0.15rem);
6
+ }
7
+
8
+ @mixin floating-label-minimize-lg {
9
+ opacity: 0.75;
10
+ transform: scale(0.75) translateY(-0.25rem) translateX(0.15rem);
11
+ }
12
+
13
+ @mixin size-md {
14
+ border-radius: var(
15
+ --form-control-size-md-border-radius,
16
+ var(--INTERNAL_form-control-size-md-border-radius)
17
+ );
18
+ font-size: var(
19
+ --form-control-size-md-font-size,
20
+ var(--INTERNAL_form-control-size-md-font-size)
21
+ );
22
+
23
+ .text-input-label {
24
+ padding: calc(
25
+ var(
26
+ --form-control-size-md-padding,
27
+ var(--INTERNAL_form-control-size-md-padding)
28
+ ) + 1px
29
+ );
30
+ }
31
+
32
+ input {
33
+ padding: calc(
34
+ var(
35
+ --form-control-size-lg-padding,
36
+ var(--INTERNAL_form-control-size-lg-padding)
37
+ ) + 12px
38
+ )
39
+ var(
40
+ --form-control-size-md-padding,
41
+ var(--INTERNAL_form-control-size-md-padding)
42
+ )
43
+ calc(
44
+ var(
45
+ --form-control-size-md-padding,
46
+ var(--INTERNAL_form-control-size-md-padding)
47
+ ) - 6px
48
+ )
49
+ var(
50
+ --form-control-size-md-padding,
51
+ var(--INTERNAL_form-control-size-md-padding)
52
+ );
53
+ border-radius: var(
54
+ --form-control-size-md-border-radius,
55
+ var(--INTERNAL_form-control-size-md-border-radius)
56
+ );
57
+
58
+ &:focus {
59
+ + .text-input-label {
60
+ @include floating-label-minimize-md;
61
+ }
62
+ }
63
+
64
+ &:not(:placeholder-shown) ~ label {
65
+ @include floating-label-minimize-md;
66
+ }
67
+ }
68
+
69
+ .prefix {
70
+ padding: var(
71
+ --form-control-size-lg-padding,
72
+ var(--INTERNAL_form-control-size-md-padding)
73
+ );
74
+ }
75
+
76
+ .suffix {
77
+ padding: var(
78
+ --form-control-size-md-padding,
79
+ var(--INTERNAL_form-control-size-md-padding)
80
+ );
81
+ }
82
+
83
+ .clear-button {
84
+ padding: var(
85
+ --form-control-size-md-padding,
86
+ var(--INTERNAL_form-control-size-md-padding)
87
+ );
88
+ }
89
+ }
90
+
91
+ %size-md {
92
+ @include size-md;
93
+ }
94
+
95
+ .size-md {
96
+ @extend %size-md;
97
+ }
98
+
99
+ @mixin size-lg {
100
+ border-radius: var(
101
+ --form-control-size-lg-border-radius,
102
+ var(--INTERNAL_form-control-size-lg-border-radius)
103
+ );
104
+ font-size: var(
105
+ --form-control-size-lg-font-size,
106
+ var(--INTERNAL_form-control-size-lg-font-size)
107
+ );
108
+
109
+ .text-input-label {
110
+ padding: calc(
111
+ var(
112
+ --form-control-size-lg-padding,
113
+ var(--INTERNAL_form-control-size-lg-padding)
114
+ ) + 4px
115
+ );
116
+ }
117
+
118
+ input {
119
+ padding: calc(
120
+ var(
121
+ --form-control-size-lg-padding,
122
+ var(--INTERNAL_form-control-size-lg-padding)
123
+ ) + 16px
124
+ )
125
+ var(
126
+ --form-control-size-lg-padding,
127
+ var(--INTERNAL_form-control-size-lg-padding)
128
+ )
129
+ calc(
130
+ var(
131
+ --form-control-size-lg-padding,
132
+ var(--INTERNAL_form-control-size-lg-padding)
133
+ ) - 6px
134
+ )
135
+ var(
136
+ --form-control-size-lg-padding,
137
+ var(--INTERNAL_form-control-size-lg-padding)
138
+ );
139
+ border-radius: var(
140
+ --form-control-size-lg-border-radius,
141
+ var(--INTERNAL_form-control-size-lg-border-radius)
142
+ );
143
+
144
+ &:focus {
145
+ + .text-input-label {
146
+ @include floating-label-minimize-lg;
147
+ }
148
+ }
149
+
150
+ &:not(:placeholder-shown) ~ label {
151
+ @include floating-label-minimize-lg;
152
+ }
153
+ }
154
+
155
+ .prefix {
156
+ padding: var(
157
+ --form-control-size-lg-padding,
158
+ var(--INTERNAL_form-control-size-lg-padding)
159
+ );
160
+ }
161
+
162
+ .suffix {
163
+ padding: var(
164
+ --form-control-size-lg-padding,
165
+ var(--INTERNAL_form-control-size-lg-padding)
166
+ );
167
+ }
168
+
169
+ .clear-button {
170
+ padding: var(
171
+ --form-control-size-lg-padding,
172
+ var(--INTERNAL_form-control-size-lg-padding)
173
+ )
174
+ var(
175
+ --form-control-size-lg-padding,
176
+ var(--INTERNAL_form-control-size-lg-padding)
177
+ )
178
+ var(
179
+ --form-control-size-lg-padding,
180
+ var(--INTERNAL_form-control-size-lg-padding)
181
+ )
182
+ 0;
183
+ }
184
+ }
185
+
186
+ %size-lg {
187
+ @include size-lg;
188
+ }
189
+
190
+ .size-lg {
191
+ @extend %size-lg;
192
+ }
193
+
194
+ // https://stackoverflow.com/questions/262158/disabled-input-text-color-on-ios
195
+ %disabled-base {
196
+ background-color: var(
197
+ --form-control-background-color-disabled,
198
+ var(--INTERNAL_form-control-background-color-disabled)
199
+ );
200
+ color: var(
201
+ --form-control-font-color-disabled,
202
+ var(--INTERNAL_form-control-font-color-disabled)
203
+ );
204
+ -webkit-text-fill-color: var(
205
+ --form-control-font-color-disabled,
206
+ var(--INTERNAL_form-control-font-color-disabled)
207
+ );
208
+ opacity: 1;
209
+
210
+ &:hover {
211
+ cursor: not-allowed;
212
+ }
213
+ }
214
+
215
+ .text-input-label {
216
+ position: absolute;
217
+ top: 0;
218
+ font-size: 1rem;
219
+ transform-origin: 0 0;
220
+ transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
221
+ font-weight: --form-control-label-font-weight,
222
+ var(--INTERNAL_form-control-label-font-weigh);
223
+ color: --form-control-label-font-color,
224
+ var(--INTERNAL_form-control-label-font-color);
225
+ cursor: text;
226
+ white-space: nowrap;
227
+ }
228
+
229
+ .prefix {
230
+ border-top-left-radius: var(
231
+ --form-control-size-md-border-radius,
232
+ var(--INTERNAL_form-control-size-md-border-radius)
233
+ );
234
+ border-bottom-left-radius: var(
235
+ --form-control-size-md-border-radius,
236
+ var(--INTERNAL_form-control-size-md-border-radius)
237
+ );
238
+ }
239
+
240
+ .suffix {
241
+ border-top-right-radius: var(
242
+ --form-control-size-md-border-radius,
243
+ var(--INTERNAL_form-control-size-md-border-radius)
244
+ );
245
+ border-bottom-right-radius: var(
246
+ --form-control-size-md-border-radius,
247
+ var(--INTERNAL_form-control-size-md-border-radius)
248
+ );
249
+ }
250
+
251
+ .text-input-wrapper {
252
+ border: 1px solid
253
+ var(--form-control-border-color, var(--INTERNAL_form-control-border-color));
254
+ font-family: var(
255
+ --form-control-font-family,
256
+ var(--INTERNAL_form-control-font-family)
257
+ );
258
+ position: relative;
259
+ background-color: var(
260
+ --form-control-background-color,
261
+ var(--INTERNAL_form-control-background-color)
262
+ );
263
+
264
+ &.size-md {
265
+ .label-input-wrapper {
266
+ @extend %size-md;
267
+ }
268
+ }
269
+
270
+ &.size-lg {
271
+ .label-input-wrapper {
272
+ @extend %size-lg;
273
+ }
274
+ }
275
+
276
+ @media (min-width: $size-breakpoint-tablet) {
277
+ &.size-md-tablet {
278
+ @include size-md;
279
+ }
280
+
281
+ &.size-lg-tablet {
282
+ @include size-lg;
283
+ }
284
+ }
285
+
286
+ @media (min-width: $size-breakpoint-desktop) {
287
+ &.size-md-desktop {
288
+ @include size-md;
289
+ }
290
+
291
+ &.size-lg-desktop {
292
+ @include size-lg;
293
+ }
294
+ }
295
+
296
+ @media (min-width: $size-breakpoint-hd) {
297
+ &.size-md-hd {
298
+ @include size-md;
299
+ }
300
+
301
+ &.size-lg-hd {
302
+ @include size-lg;
303
+ }
304
+ }
305
+
306
+ // border and background is set on the text-input-wrapper
307
+ input {
308
+ border: none;
309
+ box-sizing: border-box;
310
+ display: flex;
311
+ transition-duration: 300ms;
312
+ transition-property: border, background-color;
313
+ transition-timing-function: cubic-bezier(0.2, 0.8, 0.4, 1);
314
+ background-color: transparent;
315
+ width: 100%;
316
+ line-height: var(
317
+ --form-control-line-height,
318
+ var(--INTERNAL_form-control-line-height)
319
+ );
320
+ color: var(
321
+ --form-control-font-color,
322
+ var(--INTERNAL_form-control-font-color)
323
+ );
324
+
325
+ &::placeholder {
326
+ color: transparent;
327
+ }
328
+
329
+ &:focus {
330
+ outline: none;
331
+ border-color: var(
332
+ --form-control-border-color-focus,
333
+ var(--INTERNAL_form-control-border-color-focus)
334
+ );
335
+ }
336
+
337
+ &:disabled {
338
+ @extend %disabled-base;
339
+
340
+ background-color: transparent;
341
+
342
+ + .text-input-label {
343
+ cursor: not-allowed;
344
+ }
345
+ }
346
+ }
347
+
348
+ &.error {
349
+ background-color: var(
350
+ --form-control-background-color-error,
351
+ var(--INTERNAL_form-control-background-color-error)
352
+ );
353
+
354
+ &:focus-within {
355
+ background-color: var(
356
+ --form-control-background-color,
357
+ var(--INTERNAL_form-control-background-color)
358
+ );
359
+ }
360
+
361
+ input:focus {
362
+ outline: none;
363
+ background-color: transparent;
364
+ }
365
+ }
366
+
367
+ //Necessary so that inset shadow that we use for border does not get covered by child elements.
368
+ &:not(.error) {
369
+ > * {
370
+ &:focus,
371
+ &.disabled {
372
+ &:not(input) {
373
+ box-shadow: inset 0 1px 0 0
374
+ var(
375
+ --form-control-box-shadow-focus,
376
+ var(--INTERNAL_form-control-box-shadow-focus)
377
+ ),
378
+ inset 0 -1px 0 0 var(--form-control-border-color-focus, var(--INTERNAL_form-control-border-color-focus));
379
+ }
380
+ }
381
+ }
382
+ }
383
+
384
+ &:focus-within {
385
+ outline: none;
386
+ border: 1px solid var(--color-border-active);
387
+ box-shadow: var(
388
+ --form-control-box-shadow-focus,
389
+ var(--INTERNAL_form-control-box-shadow-focus)
390
+ );
391
+ }
392
+
393
+ &.disabled {
394
+ @extend %disabled-base;
395
+ }
396
+
397
+ // Reset default button styles
398
+ .clear-button {
399
+ transition-duration: 0.2s;
400
+ transition-property: color;
401
+ border: 0;
402
+ border-radius: 0;
403
+ background: none;
404
+ cursor: pointer;
405
+ color: var(
406
+ --form-control-icon-color,
407
+ var(--INTERNAL_form-control-icon-color)
408
+ );
409
+ font-style: inherit;
410
+
411
+ &:hover {
412
+ color: var(
413
+ --form-control-icon-hover-color,
414
+ var(--INTERNAL_form-control-icon-hover-color)
415
+ );
416
+ }
417
+ }
418
+ }
@@ -0,0 +1,213 @@
1
+ import React, { useState } from 'react';
2
+ import { TextInputInset } from './TextInputInset';
3
+ import type { Meta } from '@storybook/react';
4
+ import { Box } from '../Box/Box';
5
+ import { Icon } from '../Icon/Icon';
6
+
7
+ const meta: Meta<typeof TextInputInset> = {
8
+ title: 'Components/TextInputInset',
9
+ component: TextInputInset,
10
+ parameters: {
11
+ controls: { hideNoControlsWarning: true },
12
+ },
13
+ };
14
+
15
+ export default meta;
16
+
17
+ export const Default = () => {
18
+ const [value, setValue] = useState('');
19
+ const [valuePw, setValuePw] = useState('');
20
+ return (
21
+ <Box gap="md">
22
+ <TextInputInset
23
+ id="emailInput"
24
+ value={value}
25
+ label="Email"
26
+ placeholder="Enter your email address"
27
+ onChange={(event) => setValue(event.target.value)}
28
+ />
29
+ <TextInputInset
30
+ id="passwordInput"
31
+ value={valuePw}
32
+ label="Password"
33
+ type="password"
34
+ placeholder="Enter your password"
35
+ onChange={(event) => setValuePw(event.target.value)}
36
+ helpText="Password must be at least 8 characters long"
37
+ />
38
+ </Box>
39
+ );
40
+ };
41
+
42
+ export const Required = () => {
43
+ const [value, setValue] = useState('');
44
+ return (
45
+ <Box gap="md">
46
+ <TextInputInset
47
+ id="requiredInput"
48
+ value={value}
49
+ label="Required Input"
50
+ placeholder="Enter your email address"
51
+ onChange={(event) => setValue(event.target.value)}
52
+ isRequired
53
+ />
54
+ <TextInputInset
55
+ id="customRequiredInput"
56
+ value={value}
57
+ label="Required Input"
58
+ onChange={(event) => setValue(event.target.value)}
59
+ isRequired
60
+ requiredIndicator=" (required)"
61
+ />
62
+ </Box>
63
+ );
64
+ };
65
+
66
+ export const HelpText = () => {
67
+ const [value, setValue] = useState('');
68
+ return (
69
+ <TextInputInset
70
+ id="helpTextStory"
71
+ value={value}
72
+ label="Inverter Manufacturer"
73
+ onChange={(event) => setValue(event.target.value)}
74
+ helpText="Must be from the approved vendor list"
75
+ />
76
+ );
77
+ };
78
+
79
+ export const ValidationError = () => {
80
+ const [value, setValue] = useState('');
81
+ const [value2, setValue2] = useState('Invalid Value');
82
+ return (
83
+ <Box gap="md">
84
+ <TextInputInset
85
+ id="error1"
86
+ value={value}
87
+ label="email"
88
+ error="Required Input"
89
+ onChange={(event) => setValue(event.target.value)}
90
+ isRequired
91
+ />
92
+ <TextInputInset
93
+ id="error2"
94
+ value={value2}
95
+ label="email"
96
+ error="Must be a valid email address"
97
+ helpText="e.g. name@email.com"
98
+ onChange={(event) => setValue2(event.target.value)}
99
+ />
100
+ </Box>
101
+ );
102
+ };
103
+
104
+ export const Disabled = () => {
105
+ const [value, setValue] = useState('');
106
+ const [value2, setValue2] = useState('Value');
107
+ return (
108
+ <Box gap="md">
109
+ <TextInputInset
110
+ id="disabled"
111
+ value={value}
112
+ label="email"
113
+ onChange={(event) => setValue(event.target.value)}
114
+ isDisabled
115
+ />
116
+ <TextInputInset
117
+ id="disabledValue"
118
+ value={value2}
119
+ label="Disabled with Value"
120
+ onChange={(event) => setValue2(event.target.value)}
121
+ isDisabled
122
+ />
123
+ </Box>
124
+ );
125
+ };
126
+
127
+ export const Clearable = () => {
128
+ const [value, setValue] = useState('clear me');
129
+ return (
130
+ <TextInputInset
131
+ id="clearableTextInput"
132
+ value={value}
133
+ label="Clearable Input"
134
+ onChange={(event) => setValue(event.target.value)}
135
+ onClear={() => setValue('')}
136
+ isRequired
137
+ />
138
+ );
139
+ };
140
+
141
+ export const PrefixAndSuffix = () => {
142
+ const [prefixValue0, setPrefixValue0] = useState('');
143
+ const [prefixValue1, setPrefixValue1] = useState('hyphen');
144
+ const [prefixValue2, setPrefixValue2] = useState('2.51');
145
+ const [prefixValue3, setPrefixValue3] = useState('');
146
+ const [prefixValue4, setPrefixValue4] = useState('Pre-populated Value');
147
+ return (
148
+ <Box gap="md">
149
+ <TextInputInset
150
+ id="prefixSuffix0"
151
+ value={prefixValue0}
152
+ label="website address"
153
+ onChange={(event) => setPrefixValue0(event.target.value)}
154
+ prefix="https://"
155
+ placeholder="Enter your website address"
156
+ />
157
+ <TextInputInset
158
+ id="prefixSuffix1"
159
+ value={prefixValue1}
160
+ label="Social Media Handle"
161
+ onChange={(event) => setPrefixValue1(event.target.value)}
162
+ prefix="@"
163
+ />
164
+ <TextInputInset
165
+ id="prefixSuffix2"
166
+ value={prefixValue2}
167
+ label="Price Per Watt"
168
+ onChange={(event) => setPrefixValue2(event.target.value)}
169
+ prefix="$"
170
+ suffix="/watt"
171
+ />
172
+ <TextInputInset
173
+ id="prefixSuffix3"
174
+ value={prefixValue3}
175
+ label="Suffix Without Value"
176
+ onChange={(event) => setPrefixValue3(event.target.value)}
177
+ suffix={<Icon name="user" />}
178
+ />
179
+ <TextInputInset
180
+ id="prefixSuffix4"
181
+ value={prefixValue4}
182
+ label="Suffix with Clear"
183
+ placeholder="Contact name"
184
+ onChange={(event) => setPrefixValue4(event.target.value)}
185
+ onClear={() => setPrefixValue4('')}
186
+ suffix={<Icon name="search" />}
187
+ />
188
+ </Box>
189
+ );
190
+ };
191
+
192
+ export const Sizes = () => {
193
+ const [value1, setValue1] = useState('');
194
+ const [value2, setValue2] = useState('');
195
+ return (
196
+ <Box gap="md">
197
+ <TextInputInset
198
+ id="mdTextInput"
199
+ value={value1}
200
+ label="Medium Input"
201
+ size="md"
202
+ onChange={(event) => setValue1(event.target.value)}
203
+ />
204
+ <TextInputInset
205
+ id="lgTextInput"
206
+ value={value2}
207
+ label="Large Input"
208
+ size="lg"
209
+ onChange={(event) => setValue2(event.target.value)}
210
+ />
211
+ </Box>
212
+ );
213
+ };