@edvisor/product-language 0.6.0 → 0.7.0-rc1

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 (360) hide show
  1. package/.babelrc +12 -0
  2. package/.eslintrc.json +147 -0
  3. package/.storybook/main.js +57 -0
  4. package/.storybook/manager.js +7 -0
  5. package/.storybook/preview.js +15 -0
  6. package/.storybook/tsconfig.json +30 -0
  7. package/jest.config.ts +15 -0
  8. package/jest.setup.ts +2 -0
  9. package/package.json +3 -12
  10. package/project.json +96 -0
  11. package/release-it.json +18 -0
  12. package/src/README.md +61 -0
  13. package/src/assets/svg/example_icon.svg +3 -0
  14. package/src/assets/svg/example_icon_white.svg +3 -0
  15. package/src/assets/svg/spinner.svg +3 -0
  16. package/src/assets/svg/spinner_white.svg +3 -0
  17. package/src/helpers/index.ts +4 -0
  18. package/src/helpers/playground.ts +26 -0
  19. package/src/helpers/talesOf.tsx +42 -0
  20. package/src/index.ts +2 -0
  21. package/src/lib/components/README.md +49 -0
  22. package/src/lib/components/alert-banner/alert-banner.tsx +34 -0
  23. package/src/lib/components/alert-banner/alert-level-flags.ts +77 -0
  24. package/src/lib/components/alert-banner/index.ts +1 -0
  25. package/src/lib/components/badge/badge-type-flags.ts +72 -0
  26. package/src/lib/components/badge/badge.test.tsx +29 -0
  27. package/src/lib/components/badge/badge.tsx +22 -0
  28. package/src/lib/components/badge/index.ts +1 -0
  29. package/src/lib/components/badge/stories/badge.stories.mdx +44 -0
  30. package/src/lib/components/badge/stories/components.tsx +49 -0
  31. package/{lib/components/card/atoms/card-frame.d.ts → src/lib/components/card/atoms/card-frame.tsx} +16 -7
  32. package/src/lib/components/card/atoms/index.ts +1 -0
  33. package/src/lib/components/card/card.test.tsx +162 -0
  34. package/src/lib/components/card/card.tsx +78 -0
  35. package/src/lib/components/card/components/card-alert-banner-slot.tsx +16 -0
  36. package/src/lib/components/card/components/card-controls-slot.tsx +19 -0
  37. package/src/lib/components/card/components/card-section-slot.tsx +51 -0
  38. package/src/lib/components/card/components/index.ts +3 -0
  39. package/src/lib/components/card/index.ts +3 -0
  40. package/src/lib/components/card/molecules/index.ts +1 -0
  41. package/src/lib/components/card/molecules/left-right-card.test.tsx +89 -0
  42. package/src/lib/components/card/molecules/left-right-card.tsx +63 -0
  43. package/src/lib/components/card/storybook/card.stories.mdx +100 -0
  44. package/src/lib/components/card/storybook/components.tsx +227 -0
  45. package/src/lib/components/checkbox/checkbox.test.tsx +39 -0
  46. package/src/lib/components/checkbox/checkbox.tsx +70 -0
  47. package/src/lib/components/checkbox/helpers.tsx +98 -0
  48. package/src/lib/components/checkbox/index.tsx +1 -0
  49. package/src/lib/components/checkbox/stories/checkbox.stories.mdx +57 -0
  50. package/src/lib/components/checkbox/stories/components.tsx +84 -0
  51. package/src/lib/components/date-picker/components/custom-calendar.tsx +193 -0
  52. package/src/lib/components/date-picker/components/index.ts +1 -0
  53. package/src/lib/components/date-picker/data-picker.test.tsx +220 -0
  54. package/src/lib/components/date-picker/date-picker.tsx +10 -0
  55. package/src/lib/components/date-picker/helpers/date-picker-factory.tsx +210 -0
  56. package/src/lib/components/date-picker/index.ts +1 -0
  57. package/src/lib/components/date-picker/storybook/components.tsx +259 -0
  58. package/src/lib/components/date-picker/storybook/date-picker.stories.mdx +133 -0
  59. package/src/lib/components/divider/divider-type-flags.tsx +37 -0
  60. package/src/lib/components/divider/divider.test.tsx +34 -0
  61. package/src/lib/components/divider/divider.tsx +37 -0
  62. package/src/lib/components/divider/index.tsx +1 -0
  63. package/src/lib/components/divider/stories/components.tsx +13 -0
  64. package/src/lib/components/divider/stories/divider.stories.mdx +44 -0
  65. package/src/lib/components/flag/flag-size-flags.tsx +55 -0
  66. package/src/lib/components/flag/flag.list.tsx +788 -0
  67. package/src/lib/components/flag/flag.test.tsx +65 -0
  68. package/src/lib/components/flag/flag.tsx +97 -0
  69. package/src/lib/components/flag/index.tsx +1 -0
  70. package/src/lib/components/flag/stories/components.tsx +403 -0
  71. package/src/lib/components/flag/stories/flag.stories.mdx +48 -0
  72. package/src/lib/components/flag/stories/playGround-select.tsx +145 -0
  73. package/src/lib/components/icon/icon-list.tsx +135 -0
  74. package/src/lib/components/icon/icon.test.tsx +47 -0
  75. package/src/lib/components/icon/icon.tsx +181 -0
  76. package/src/lib/components/icon/index.tsx +1 -0
  77. package/src/lib/components/icon/stories/components.tsx +282 -0
  78. package/src/lib/components/icon/stories/icon.stories.mdx +65 -0
  79. package/src/lib/components/index.ts +24 -0
  80. package/src/lib/components/input-field/components/index.ts +2 -0
  81. package/src/lib/components/input-field/components/labeled-input.tsx +57 -0
  82. package/src/lib/components/input-field/components/stepper.tsx +64 -0
  83. package/src/lib/components/input-field/index.ts +6 -0
  84. package/src/lib/components/input-field/input-field.test.tsx +107 -0
  85. package/src/lib/components/input-field/input-field.tsx +129 -0
  86. package/src/lib/components/input-field/input-number.tsx +41 -0
  87. package/src/lib/components/input-field/input-text.tsx +30 -0
  88. package/src/lib/components/input-field/storybook/components.tsx +339 -0
  89. package/src/lib/components/input-field/storybook/input-field.stories.mdx +113 -0
  90. package/src/lib/components/layout/flex.tsx +22 -0
  91. package/src/lib/components/layout/grid-layout.tsx +40 -0
  92. package/src/lib/components/layout/index.ts +3 -0
  93. package/src/lib/components/layout/left-right-layout.tsx +67 -0
  94. package/src/lib/components/link/index.ts +1 -0
  95. package/src/lib/components/link/link.test.tsx +29 -0
  96. package/src/lib/components/link/link.tsx +56 -0
  97. package/src/lib/components/link/storybook/link.stories.mdx +52 -0
  98. package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +55 -0
  99. package/src/lib/components/molecules/avatar/avatar.test.tsx +114 -0
  100. package/src/lib/components/molecules/avatar/avatar.tsx +80 -0
  101. package/src/lib/components/molecules/avatar/index.tsx +1 -0
  102. package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +52 -0
  103. package/src/lib/components/molecules/avatar/stories/components.tsx +36 -0
  104. package/src/lib/components/molecules/button/button-flags.tsx +340 -0
  105. package/src/lib/components/molecules/button/button.test.tsx +77 -0
  106. package/src/lib/components/molecules/button/button.tsx +209 -0
  107. package/src/lib/components/molecules/button/index.tsx +1 -0
  108. package/src/lib/components/molecules/button/stories/button.stories.mdx +105 -0
  109. package/src/lib/components/molecules/button/stories/components.tsx +90 -0
  110. package/src/lib/components/molecules/index.ts +3 -0
  111. package/src/lib/components/molecules/input-checkbox/index.tsx +1 -0
  112. package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +34 -0
  113. package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +50 -0
  114. package/src/lib/components/molecules/input-checkbox/stories/components.tsx +53 -0
  115. package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +49 -0
  116. package/src/lib/components/organisms/choice-list/choice-list.test.tsx +36 -0
  117. package/src/lib/components/organisms/choice-list/choice-list.tsx +72 -0
  118. package/src/lib/components/organisms/choice-list/index.tsx +1 -0
  119. package/src/lib/components/organisms/choice-list/stories/choice-list.stories.mdx +57 -0
  120. package/src/lib/components/organisms/choice-list/stories/components.tsx +45 -0
  121. package/src/lib/components/organisms/index.ts +2 -0
  122. package/src/lib/components/organisms/multi-choice-list/index.tsx +1 -0
  123. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +33 -0
  124. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +53 -0
  125. package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +124 -0
  126. package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +99 -0
  127. package/{lib/components/spinner/index.d.ts → src/lib/components/radio-button/index.tsx} +1 -1
  128. package/src/lib/components/radio-button/radio-button.tsx +135 -0
  129. package/src/lib/components/radio-button/radio.test.tsx +59 -0
  130. package/src/lib/components/radio-button/stories/components.tsx +36 -0
  131. package/src/lib/components/radio-button/stories/radio-button.stories.mdx +44 -0
  132. package/src/lib/components/range-slider/components/bar-chart.tsx +50 -0
  133. package/src/lib/components/range-slider/components/handle.tsx +58 -0
  134. package/src/lib/components/range-slider/components/rail.tsx +44 -0
  135. package/src/lib/components/range-slider/components/slider-component.tsx +92 -0
  136. package/src/lib/components/range-slider/components/slider-inputs.tsx +129 -0
  137. package/src/lib/components/range-slider/components/tick.tsx +51 -0
  138. package/src/lib/components/range-slider/components/track.tsx +67 -0
  139. package/src/lib/components/range-slider/index.tsx +2 -0
  140. package/src/lib/components/range-slider/range-slider.test.tsx +185 -0
  141. package/src/lib/components/range-slider/range-slider.tsx +131 -0
  142. package/src/lib/components/range-slider/slider.test.tsx +89 -0
  143. package/src/lib/components/range-slider/slider.tsx +80 -0
  144. package/src/lib/components/range-slider/stories/components.tsx +179 -0
  145. package/src/lib/components/range-slider/stories/range-slider.stories.mdx +84 -0
  146. package/src/lib/components/range-slider/types.ts +18 -0
  147. package/src/lib/components/select/components/menu-container.tsx +69 -0
  148. package/src/lib/components/select/components/menu-list.tsx +195 -0
  149. package/src/lib/components/select/components/menu-row.tsx +43 -0
  150. package/src/lib/components/select/components/menu.tsx +151 -0
  151. package/src/lib/components/select/components/option.tsx +91 -0
  152. package/src/lib/components/select/components/select-label.tsx +10 -0
  153. package/src/lib/components/select/components/value-component-multi.tsx +40 -0
  154. package/src/lib/components/select/components/value-component-single.tsx +27 -0
  155. package/src/lib/components/select/components/value.tsx +374 -0
  156. package/src/lib/components/select/index.tsx +3 -0
  157. package/src/lib/components/select/select.test.tsx +148 -0
  158. package/src/lib/components/select/select.tsx +337 -0
  159. package/src/lib/components/select/storybook/components.tsx +999 -0
  160. package/src/lib/components/select/storybook/radio-group.tsx +157 -0
  161. package/src/lib/components/select/storybook/select.stories.mdx +172 -0
  162. package/src/lib/components/select/types.ts +149 -0
  163. package/src/lib/components/select/utils.ts +101 -0
  164. package/src/lib/components/spinner/index.tsx +1 -0
  165. package/src/lib/components/spinner/spinner-size-flags.tsx +39 -0
  166. package/src/lib/components/spinner/spinner.test.tsx +31 -0
  167. package/src/lib/components/spinner/spinner.tsx +54 -0
  168. package/src/lib/components/spinner/stories/components.tsx +39 -0
  169. package/src/lib/components/spinner/stories/spinner.stories.mdx +35 -0
  170. package/src/lib/components/tabs/components/index.ts +1 -0
  171. package/src/lib/components/tabs/components/tab.tsx +62 -0
  172. package/src/lib/components/tabs/index.tsx +1 -0
  173. package/src/lib/components/tabs/storybook/components.tsx +282 -0
  174. package/src/lib/components/tabs/storybook/tabs.stories.mdx +97 -0
  175. package/src/lib/components/tabs/tabs.test.tsx +86 -0
  176. package/src/lib/components/tabs/tabs.tsx +101 -0
  177. package/src/lib/components/tag/components/close-button.tsx +85 -0
  178. package/src/lib/components/tag/components/index.ts +2 -0
  179. package/src/lib/components/tag/components/tag-label.tsx +45 -0
  180. package/src/lib/components/tag/index.tsx +1 -0
  181. package/src/lib/components/tag/stories/components.tsx +86 -0
  182. package/src/lib/components/tag/stories/tag.stories.mdx +42 -0
  183. package/src/lib/components/tag/tag.test.tsx +36 -0
  184. package/src/lib/components/tag/tag.tsx +33 -0
  185. package/src/lib/components/thumbnail/index.tsx +1 -0
  186. package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +44 -0
  187. package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +41 -0
  188. package/src/lib/components/thumbnail/thumbnail.test.tsx +51 -0
  189. package/src/lib/components/thumbnail/thumbnail.tsx +44 -0
  190. package/src/lib/components/tree-view/components/tree-node.tsx +203 -0
  191. package/src/lib/components/tree-view/helper.tsx +171 -0
  192. package/src/lib/components/tree-view/index.ts +2 -0
  193. package/src/lib/components/tree-view/stories/components.tsx +640 -0
  194. package/src/lib/components/tree-view/stories/tree-view.stories.mdx +127 -0
  195. package/src/lib/components/tree-view/tree-view.test.tsx +146 -0
  196. package/src/lib/components/tree-view/tree-view.tsx +168 -0
  197. package/src/lib/components/tree-view/types.tsx +70 -0
  198. package/src/lib/components/typography/index.ts +1 -0
  199. package/src/lib/components/typography/storybook/components.tsx +288 -0
  200. package/src/lib/components/typography/storybook/typography.stories.mdx +90 -0
  201. package/src/lib/components/typography/typography.test.tsx +97 -0
  202. package/src/lib/components/typography/typography.tsx +99 -0
  203. package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +123 -0
  204. package/src/lib/foundations/color-system/base-palette/base-palette.ts +93 -0
  205. package/src/lib/foundations/color-system/base-palette/index.ts +1 -0
  206. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +85 -0
  207. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +231 -0
  208. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +160 -0
  209. package/src/lib/foundations/color-system/color-guidelines/index.ts +1 -0
  210. package/src/lib/foundations/color-system/components/color-sample.tsx +99 -0
  211. package/src/lib/foundations/color-system/components/index.ts +1 -0
  212. package/src/lib/foundations/color-system/index.ts +1 -0
  213. package/src/lib/foundations/index.ts +4 -0
  214. package/src/lib/foundations/shadows/components.tsx +59 -0
  215. package/src/lib/foundations/shadows/index.ts +1 -0
  216. package/src/lib/foundations/shadows/shadows.stories.mdx +71 -0
  217. package/src/lib/foundations/shadows/shadows.tsx +47 -0
  218. package/src/lib/foundations/spacing/index.ts +1 -0
  219. package/src/lib/foundations/spacing/spacing-guidelines.ts +24 -0
  220. package/src/lib/foundations/spacing/spacing.stories.mdx +51 -0
  221. package/src/lib/foundations/spacing/spacing.ts +18 -0
  222. package/src/lib/foundations/typography/constants.ts +25 -0
  223. package/src/lib/foundations/typography/fonts.ts +205 -0
  224. package/src/lib/foundations/typography/index.tsx +1 -0
  225. package/src/lib/foundations/typography/text-aspect-flags.ts +61 -0
  226. package/src/lib/foundations/typography/typography.tsx +102 -0
  227. package/src/lib/helpers/generic-types.ts +44 -0
  228. package/src/lib/helpers/index.ts +8 -0
  229. package/src/lib/helpers/isReactElementOfType.test.tsx +108 -0
  230. package/src/lib/helpers/isReactElementOfType.ts +42 -0
  231. package/src/lib/helpers/nothing.tsx +22 -0
  232. package/{lib/helpers/numbers.d.ts → src/lib/helpers/numbers.ts} +67 -50
  233. package/src/lib/helpers/safe-navigation.ts +57 -0
  234. package/src/lib/helpers/slots.tsx +126 -0
  235. package/src/lib/helpers/strings.test.ts +47 -0
  236. package/src/lib/helpers/strings.ts +16 -0
  237. package/src/lib/helpers/useInputElementState.ts +56 -0
  238. package/tsconfig.json +35 -0
  239. package/tsconfig.lib.json +28 -0
  240. package/tsconfig.spec.json +21 -0
  241. package/index.d.ts +0 -2
  242. package/index.js +0 -9976
  243. package/lib/components/alert-banner/alert-banner.d.ts +0 -11
  244. package/lib/components/alert-banner/alert-level-flags.d.ts +0 -13
  245. package/lib/components/alert-banner/index.d.ts +0 -1
  246. package/lib/components/badge/badge-type-flags.d.ts +0 -18
  247. package/lib/components/badge/badge.d.ts +0 -5
  248. package/lib/components/badge/index.d.ts +0 -1
  249. package/lib/components/card/atoms/index.d.ts +0 -1
  250. package/lib/components/card/card.d.ts +0 -14
  251. package/lib/components/card/components/card-alert-banner-slot.d.ts +0 -6
  252. package/lib/components/card/components/card-controls-slot.d.ts +0 -5
  253. package/lib/components/card/components/card-section-slot.d.ts +0 -11
  254. package/lib/components/card/components/index.d.ts +0 -3
  255. package/lib/components/card/index.d.ts +0 -3
  256. package/lib/components/card/molecules/index.d.ts +0 -1
  257. package/lib/components/card/molecules/left-right-card.d.ts +0 -16
  258. package/lib/components/checkbox/checkbox.d.ts +0 -11
  259. package/lib/components/checkbox/helpers.d.ts +0 -12
  260. package/lib/components/checkbox/index.d.ts +0 -1
  261. package/lib/components/divider/divider-type-flags.d.ts +0 -9
  262. package/lib/components/divider/divider.d.ts +0 -7
  263. package/lib/components/divider/index.d.ts +0 -1
  264. package/lib/components/flag/flag-size-flags.d.ts +0 -12
  265. package/lib/components/flag/flag.d.ts +0 -9
  266. package/lib/components/flag/flag.list.d.ts +0 -782
  267. package/lib/components/flag/index.d.ts +0 -1
  268. package/lib/components/icon/icon-list.d.ts +0 -132
  269. package/lib/components/icon/icon.d.ts +0 -131
  270. package/lib/components/icon/index.d.ts +0 -1
  271. package/lib/components/index.d.ts +0 -20
  272. package/lib/components/input-field/components/index.d.ts +0 -2
  273. package/lib/components/input-field/components/labeled-input.d.ts +0 -10
  274. package/lib/components/input-field/components/stepper.d.ts +0 -7
  275. package/lib/components/input-field/index.d.ts +0 -3
  276. package/lib/components/input-field/input-field.d.ts +0 -25
  277. package/lib/components/input-field/input-number.d.ts +0 -18
  278. package/lib/components/input-field/input-text.d.ts +0 -14
  279. package/lib/components/layout/flex.d.ts +0 -16
  280. package/lib/components/layout/grid-layout.d.ts +0 -11
  281. package/lib/components/layout/index.d.ts +0 -3
  282. package/lib/components/layout/left-right-layout.d.ts +0 -34
  283. package/lib/components/link/index.d.ts +0 -1
  284. package/lib/components/link/link.d.ts +0 -14
  285. package/lib/components/molecules/avatar/avatar-size-flags.d.ts +0 -12
  286. package/lib/components/molecules/avatar/avatar.d.ts +0 -12
  287. package/lib/components/molecules/avatar/index.d.ts +0 -1
  288. package/lib/components/molecules/button/button-flags.d.ts +0 -44
  289. package/lib/components/molecules/button/button.d.ts +0 -12
  290. package/lib/components/molecules/button/index.d.ts +0 -1
  291. package/lib/components/molecules/index.d.ts +0 -3
  292. package/lib/components/molecules/input-checkbox/index.d.ts +0 -1
  293. package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +0 -8
  294. package/lib/components/organisms/choice-list/choice-list.d.ts +0 -9
  295. package/lib/components/organisms/choice-list/index.d.ts +0 -1
  296. package/lib/components/organisms/index.d.ts +0 -2
  297. package/lib/components/organisms/multi-choice-list/index.d.ts +0 -1
  298. package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +0 -11
  299. package/lib/components/radio-button/index.d.ts +0 -1
  300. package/lib/components/radio-button/radio-button.d.ts +0 -10
  301. package/lib/components/select/components/menu-container.d.ts +0 -3
  302. package/lib/components/select/components/menu-list.d.ts +0 -3
  303. package/lib/components/select/components/menu-row.d.ts +0 -9
  304. package/lib/components/select/components/menu.d.ts +0 -3
  305. package/lib/components/select/components/option.d.ts +0 -13
  306. package/lib/components/select/components/select-label.d.ts +0 -1
  307. package/lib/components/select/components/value-component-multi.d.ts +0 -4
  308. package/lib/components/select/components/value-component-single.d.ts +0 -4
  309. package/lib/components/select/components/value.d.ts +0 -4
  310. package/lib/components/select/index.d.ts +0 -3
  311. package/lib/components/select/select.d.ts +0 -10
  312. package/lib/components/select/types.d.ts +0 -133
  313. package/lib/components/select/utils.d.ts +0 -15
  314. package/lib/components/spinner/spinner-size-flags.d.ts +0 -10
  315. package/lib/components/spinner/spinner.d.ts +0 -9
  316. package/lib/components/tabs/components/index.d.ts +0 -1
  317. package/lib/components/tabs/components/tab.d.ts +0 -7
  318. package/lib/components/tabs/index.d.ts +0 -1
  319. package/lib/components/tabs/tabs.d.ts +0 -15
  320. package/lib/components/tag/components/close-button.d.ts +0 -8
  321. package/lib/components/tag/components/index.d.ts +0 -2
  322. package/lib/components/tag/components/tag-label.d.ts +0 -8
  323. package/lib/components/tag/index.d.ts +0 -1
  324. package/lib/components/tag/tag.d.ts +0 -10
  325. package/lib/components/thumbnail/index.d.ts +0 -1
  326. package/lib/components/thumbnail/thumbnail-size-flags.d.ts +0 -10
  327. package/lib/components/thumbnail/thumbnail.d.ts +0 -10
  328. package/lib/components/tree-view/components/tree-node.d.ts +0 -3
  329. package/lib/components/tree-view/helper.d.ts +0 -12
  330. package/lib/components/tree-view/index.d.ts +0 -2
  331. package/lib/components/tree-view/tree-view.d.ts +0 -3
  332. package/lib/components/tree-view/types.d.ts +0 -63
  333. package/lib/components/typography/index.d.ts +0 -1
  334. package/lib/components/typography/typography.d.ts +0 -24
  335. package/lib/foundations/color-system/base-palette/base-palette.d.ts +0 -76
  336. package/lib/foundations/color-system/base-palette/index.d.ts +0 -1
  337. package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +0 -132
  338. package/lib/foundations/color-system/color-guidelines/index.d.ts +0 -1
  339. package/lib/foundations/color-system/components/color-sample.d.ts +0 -17
  340. package/lib/foundations/color-system/components/index.d.ts +0 -1
  341. package/lib/foundations/color-system/index.d.ts +0 -1
  342. package/lib/foundations/index.d.ts +0 -4
  343. package/lib/foundations/shadows/components.d.ts +0 -8
  344. package/lib/foundations/shadows/index.d.ts +0 -1
  345. package/lib/foundations/shadows/shadows.d.ts +0 -8
  346. package/lib/foundations/spacing/index.d.ts +0 -1
  347. package/lib/foundations/spacing/spacing-guidelines.d.ts +0 -22
  348. package/lib/foundations/spacing/spacing.d.ts +0 -18
  349. package/lib/foundations/typography/constants.d.ts +0 -22
  350. package/lib/foundations/typography/fonts.d.ts +0 -1
  351. package/lib/foundations/typography/index.d.ts +0 -1
  352. package/lib/foundations/typography/text-aspect-flags.d.ts +0 -19
  353. package/lib/foundations/typography/typography.d.ts +0 -24
  354. package/lib/helpers/generic-types.d.ts +0 -21
  355. package/lib/helpers/index.d.ts +0 -7
  356. package/lib/helpers/isReactElementOfType.d.ts +0 -8
  357. package/lib/helpers/nothing.d.ts +0 -10
  358. package/lib/helpers/safe-navigation.d.ts +0 -15
  359. package/lib/helpers/slots.d.ts +0 -17
  360. package/lib/helpers/strings.d.ts +0 -1
@@ -0,0 +1,64 @@
1
+ import { Margin, Padding, Surface, Icons } from '@foundations'
2
+ import { FC } from '@helpers'
3
+ import { Center } from 'components/layout'
4
+ import styled from 'styled-components'
5
+
6
+ const Controls = styled.div`
7
+ height: 34px;
8
+ width: 26px;
9
+ padding: ${Padding.xxxs} ${Padding.xxxs};
10
+ box-sizing: border-box;
11
+
12
+ :hover {
13
+ cursor: pointer;
14
+ }
15
+ `
16
+
17
+ const Up = styled(Center)`
18
+ background: ${Surface.Neutral.Default};
19
+ width: 22px;
20
+ height: 14px;
21
+ border-radius: 3px;
22
+ margin-bottom: ${Margin.xxxs};
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ margin-top: ${Margin.xxs}; /* @TODO Check if keep Margin size4 or go back to last size8 one */
27
+ `
28
+
29
+ const TriangleUp = styled.div`
30
+ width: 0px;
31
+ height: 0px;
32
+ border-left: 3.5px solid transparent;
33
+ border-right: 3.5px solid transparent;
34
+ border-bottom: 3.5px solid ${Icons.Default};
35
+ `
36
+
37
+ const TriangleDown = styled.div`
38
+ width: 0px;
39
+ height: 0px;
40
+ border-left: 3.5px solid transparent;
41
+ border-right: 3.5px solid transparent;
42
+ border-top: 3.5px solid ${Icons.Default};
43
+ `
44
+
45
+ const Down = styled(Center)`
46
+ background: ${Surface.Neutral.Default};
47
+ width: 22px;
48
+ height: 14px;
49
+ border-radius: 3px;
50
+ `
51
+
52
+ interface IStepperProps {
53
+ onUpClick?: () => void
54
+ onDownClick?: () => void
55
+ }
56
+
57
+ export const Stepper: FC<IStepperProps> = (props: IStepperProps) => {
58
+ return (
59
+ <Controls>
60
+ <Up onClick={props.onUpClick}><TriangleUp /></Up>
61
+ <Down onClick={props.onDownClick}><TriangleDown /></Down>
62
+ </Controls>
63
+ )
64
+ }
@@ -0,0 +1,6 @@
1
+ // the html input
2
+ export * from './input-field'
3
+
4
+ // the simple inputs
5
+ export * from './input-number'
6
+ export * from './input-text'
@@ -0,0 +1,107 @@
1
+ import { render, screen } from '@testing-library/react'
2
+ import userEvent from '@testing-library/user-event'
3
+ import { InputField } from './index'
4
+
5
+ describe('InputField', () => {
6
+ describe('the inner input element', () => {
7
+ it('should receive nice html props', async () => {
8
+ render(
9
+ <InputField
10
+ value="value"
11
+ onChange={() => undefined}
12
+ type="text"
13
+ label="Label"
14
+ placeholder="placeholder"
15
+ />
16
+ )
17
+
18
+ expect(screen.getByRole('textbox')).toBeInTheDocument()
19
+ expect(screen.getByPlaceholderText('placeholder')).toBeInTheDocument()
20
+ expect(screen.getByDisplayValue('value')).toBeInTheDocument()
21
+ })
22
+
23
+ it('should call the onChange callback on change events', async () => {
24
+ const handleChange = jest.fn()
25
+
26
+ render(<InputField value="value" onChange={handleChange} />)
27
+
28
+ await userEvent.type(screen.getByRole('textbox'), 'hello')
29
+
30
+ expect(handleChange).toHaveBeenCalledTimes(5)
31
+ })
32
+ })
33
+
34
+ describe('Label', () => {
35
+ it('should render when given', async () => {
36
+ render(<InputField label="Label" />)
37
+
38
+ expect(screen.getByLabelText('Label')).toBeInTheDocument()
39
+ })
40
+
41
+ it('should not render when not given', async () => {
42
+ render(<InputField />)
43
+
44
+ expect(screen.queryByLabelText('Label')).not.toBeInTheDocument()
45
+ })
46
+ })
47
+
48
+ describe('Prefix', () => {
49
+ it('should render when given', async () => {
50
+ render(<InputField prefix="$" />)
51
+
52
+ expect(screen.getByText('$')).toBeInTheDocument()
53
+ })
54
+
55
+ it('should not render when not given', async () => {
56
+ render(<InputField />)
57
+
58
+ expect(screen.queryByText('$')).not.toBeInTheDocument()
59
+ })
60
+ })
61
+
62
+ describe('Suffix', () => {
63
+ it('should render when given', async () => {
64
+ render(<InputField suffix="%" />)
65
+
66
+ expect(screen.getByText('%')).toBeInTheDocument()
67
+ })
68
+
69
+ it('should not render when not given', async () => {
70
+ render(<InputField />)
71
+
72
+ expect(screen.queryByText('&')).not.toBeInTheDocument()
73
+ })
74
+ })
75
+
76
+ describe('Slots', () => {
77
+ it('should render the Icon slot', async () => {
78
+ render(
79
+ <InputField>
80
+ <InputField.Icon>Icon</InputField.Icon>
81
+ </InputField>
82
+ )
83
+
84
+ expect(screen.getByText('Icon')).toBeInTheDocument()
85
+ })
86
+
87
+ it('should render the Controls slot', async () => {
88
+ render(
89
+ <InputField>
90
+ <InputField.Controls>Controls</InputField.Controls>
91
+ </InputField>
92
+ )
93
+
94
+ expect(screen.getByText('Controls')).toBeInTheDocument()
95
+ })
96
+
97
+ it('should not render other kinds of children', () => {
98
+ render(
99
+ <InputField>
100
+ <div>Other Children</div>
101
+ </InputField>
102
+ )
103
+
104
+ expect(screen.queryByText('Other Children')).not.toBeInTheDocument()
105
+ })
106
+ })
107
+ })
@@ -0,0 +1,129 @@
1
+ import styled, { css } from 'styled-components'
2
+ import { InputHTMLAttributes } from 'react'
3
+
4
+ import { Borders, Focused, Margin, Padding, Surface, Typography, _Typography } from '@foundations'
5
+ import { getSlot, Slot, is, forwardRef, If } from '@helpers'
6
+ import { Flex, SpaceBetween } from '../layout'
7
+
8
+ import { LabeledInput } from './components'
9
+ import { Label } from 'components/typography'
10
+
11
+ const FancyBorder = styled(SpaceBetween)<{ invalid?: boolean }>`
12
+ background: ${({ invalid }) => is(invalid) ? Surface.Critical.Subdued : Surface.Default.Default };
13
+ border: 1px solid ${({ invalid }) => is(invalid) ? Borders.Critical.Default : Borders.Default.Default };
14
+ border-radius: 6px;
15
+ box-sizing: border-box;
16
+ padding-left: ${Padding.s};
17
+
18
+ user-select: none;
19
+ outline-offset: -2px;
20
+
21
+ ${({ invalid }) => !is(invalid) && css`
22
+ :focus, :focus-within, :active {
23
+ outline: 2px solid ${Focused.Default}
24
+ }
25
+ `}
26
+ }
27
+ `
28
+
29
+ const InputLayout = styled(Flex)`
30
+ width: 100%;
31
+ `
32
+
33
+ export const HTMLInput = styled.input`
34
+ all: unset;
35
+
36
+ cursor: auto;
37
+ padding: ${Padding.none} ${Padding.none} ${Padding.xs} ${Padding.none};
38
+
39
+ width: 100%;
40
+
41
+ ::-webkit-inner-spin-button {
42
+ -webkit-appearance: none;
43
+ margin: ${Margin.none};
44
+ }
45
+
46
+ ${Typography.Body}
47
+
48
+ ::placeholder {
49
+ ${_Typography.LightText}
50
+ }
51
+ `
52
+
53
+ const PrefixFrame = styled(Label)`
54
+ margin-right: ${Margin.xs};
55
+ `
56
+
57
+ const SuffixFrame = styled(Label)`
58
+ margin-right: ${Margin.xs};
59
+ `
60
+
61
+ class IconSlot extends Slot {}
62
+ class ControlsSlot extends Slot {}
63
+
64
+ export type InputFieldSlots = {
65
+ Icon: typeof IconSlot,
66
+ Controls: typeof ControlsSlot,
67
+ Label: typeof LabeledInput,
68
+ }
69
+
70
+ interface IInputFieldProps extends InputHTMLAttributes<HTMLInputElement> {
71
+ invalid?: boolean
72
+ prefix?: string
73
+ suffix?: string
74
+ label?: string
75
+ }
76
+
77
+ const InputFrame = styled.label`
78
+ width: 100%;
79
+ padding: ${Padding.xs} ${Padding.none} ${Padding.none} ${Padding.none};
80
+ flex-direction: column;
81
+ display: flex;
82
+ `
83
+
84
+ const ControlsFrame = styled(Flex)`
85
+ margin-right: ${Margin.s};
86
+ `
87
+
88
+ const InputLabel = styled(Label)`
89
+ margin-bottom: ${Margin.xxs};
90
+ `
91
+
92
+ export const InputField = forwardRef<
93
+ HTMLInputElement,
94
+ IInputFieldProps,
95
+ InputFieldSlots
96
+ >((props: IInputFieldProps, ref) => {
97
+ const { children, prefix, suffix, label, className, style, ...inputProps } = props
98
+ const icon = getSlot(IconSlot, children)
99
+ const controls = getSlot(ControlsSlot, children)
100
+ const required = is(props.required) ? '*' : ''
101
+
102
+ return (
103
+ <FancyBorder invalid={props.invalid} className={className} style={style}>
104
+ <InputFrame>
105
+ <If is={label}>
106
+ <InputLabel subtle subdued>
107
+ {label}
108
+ {required}
109
+ </InputLabel>
110
+ </If>
111
+ <InputLayout>
112
+ <If is={prefix}>
113
+ <PrefixFrame subtle subdued>{prefix}</PrefixFrame>
114
+ </If>
115
+ <HTMLInput ref={ref} {...inputProps} />
116
+ <If is={suffix}>
117
+ <SuffixFrame subtle subdued>{suffix}</SuffixFrame>
118
+ </If>
119
+ </InputLayout>
120
+ </InputFrame>
121
+ <If is={icon}><ControlsFrame center>{icon}</ControlsFrame></If>
122
+ <If is={controls}><ControlsFrame center>{controls}</ControlsFrame></If>
123
+ </FancyBorder>
124
+ )
125
+ })
126
+
127
+ InputField.Icon = IconSlot
128
+ InputField.Controls = ControlsSlot
129
+ InputField.Label = LabeledInput
@@ -0,0 +1,41 @@
1
+ import { FC, isNil } from '@helpers'
2
+ import { InputField, InputFieldSlots } from './input-field'
3
+ import { Stepper } from './components'
4
+
5
+ interface IInputNumberProps {
6
+ value?: number
7
+ onChange: (change?: number) => void
8
+
9
+ label?: string
10
+ placeholder?: string
11
+ invalid?: boolean
12
+ prefix?: string
13
+ suffix?: string
14
+ required?: boolean
15
+ }
16
+
17
+ type IInputNumberSlots = InputFieldSlots & {
18
+ Stepper: typeof Stepper
19
+ }
20
+
21
+ export const InputNumber: FC<IInputNumberProps, IInputNumberSlots> = (props) => {
22
+ const { onChange, value, ...inputFieldProps } = props
23
+
24
+ return (
25
+ <InputField
26
+ type='number'
27
+ value={isNil(value) || isNaN(value) ? '' : value}
28
+ onChange={(e) => {
29
+ const next = e.target.value === '' ? undefined : parseFloat(e.target.value)
30
+
31
+ onChange(next)
32
+ }}
33
+ {...inputFieldProps}
34
+ />
35
+ )
36
+ }
37
+
38
+ InputNumber.Icon = InputField.Icon
39
+ InputNumber.Controls = InputField.Controls
40
+ InputNumber.Label = InputField.Label
41
+ InputNumber.Stepper = Stepper
@@ -0,0 +1,30 @@
1
+ import { FC } from '@helpers'
2
+ import { InputField, InputFieldSlots } from './input-field'
3
+
4
+ interface IInputTextProps {
5
+ value: string
6
+ onChange: (change: string) => void
7
+
8
+ label?: string
9
+ invalid?: boolean
10
+ placeholder?: string
11
+ prefix?: string
12
+ suffix?: string
13
+ required?: boolean
14
+ }
15
+
16
+ export const InputText: FC<IInputTextProps, InputFieldSlots> = (props) => {
17
+ const { onChange, ...inputFieldProps } = props
18
+
19
+ return (
20
+ <InputField
21
+ type='text'
22
+ onChange={(e) => onChange(e.target.value)}
23
+ {...inputFieldProps}
24
+ />
25
+ )
26
+ }
27
+
28
+ InputText.Icon = InputField.Icon
29
+ InputText.Controls = InputField.Controls
30
+ InputText.Label = InputField.Label
@@ -0,0 +1,339 @@
1
+ import styled from 'styled-components'
2
+ import { useForm } from 'react-hook-form'
3
+
4
+ import { Margin } from '@foundations'
5
+ import { Playground } from '@stories'
6
+
7
+ import { SpaceBetween } from 'components/layout'
8
+ import { IconMinor } from 'components/icon'
9
+
10
+ import { InputField as InputFieldBase } from '../input-field'
11
+ import { InputNumber as InputNumberBase } from '../input-number'
12
+ import { InputText as InputTextBase } from '../input-text'
13
+
14
+ const InputField = styled(InputFieldBase)`
15
+ margin-bottom: ${Margin.xxs}
16
+ `
17
+
18
+ const InputNumber = styled(InputNumberBase)`
19
+ margin-bottom: ${Margin.xxs}
20
+ `
21
+
22
+ const InputText = styled(InputTextBase)`
23
+ margin-bottom: ${Margin.xxs}
24
+ `
25
+
26
+ export const PlainHTMLFormExample = () => (
27
+ <Playground
28
+ code={`
29
+ /* Edit this code sample! */
30
+ const [invalid, setInvalid] = useState(false);
31
+
32
+ <form onSubmit={(e) => e.preventDefault()}>
33
+ <label htmlFor="country_code">Country code*</label>
34
+ {/* try replacing this element with an <input /> */}
35
+ <InputField
36
+ // try setting the prefix, suffix, and invalid props
37
+ type="text"
38
+ placeholder="Enter a country code..."
39
+ id="country_code"
40
+ name="country_code"
41
+ pattern="[A-Za-z]{3}"
42
+ onInvalid={setInvalid}
43
+ invalid={invalid}
44
+ onChange={() => setInvalid(false)}
45
+ title="Three letter country code"
46
+ required
47
+ />
48
+ <input type="submit"/>
49
+ </form>
50
+ `}
51
+ providerProps={{
52
+ renderAsComponent: true,
53
+ scope: {
54
+ InputField,
55
+ },
56
+ }}
57
+ />
58
+ )
59
+
60
+ export const InnerLabelExample = () => (
61
+ <Playground
62
+ code={`
63
+ <InputField
64
+ type="text"
65
+ label="Country Code"
66
+ placeholder="Enter a country code..."
67
+ />
68
+ `}
69
+ providerProps={{
70
+ renderAsComponent: true,
71
+ scope: {
72
+ InputField,
73
+ },
74
+ }}
75
+ />
76
+ )
77
+
78
+ export const ReactFormHookExample = () => (
79
+ <Playground
80
+ code={`
81
+ const { register, formState: { errors }, handleSubmit } = useForm();
82
+ const onSubmit = data => alert(data);
83
+
84
+ <form onSubmit={handleSubmit(onSubmit)}>
85
+ <InputField
86
+ label="First name"
87
+ invalid={errors.firstName}
88
+ required
89
+ {...register("firstName", { required: true, maxLength: 20 })}
90
+ />
91
+ <InputField
92
+ label="Last name"
93
+ invalid={errors.lastName}
94
+ {...register("lastName", { pattern: /^[A-Za-z]+$/i })}
95
+ />
96
+ <InputField
97
+ label="Age"
98
+ type="number"
99
+ invalid={errors.age}
100
+ {...register("age", { min: 18, max: 99 })}
101
+ />
102
+ <input type="submit" />
103
+ </form>
104
+ `}
105
+ providerProps={{
106
+ renderAsComponent: true,
107
+ scope: {
108
+ InputField,
109
+ useForm,
110
+ },
111
+ }}
112
+ />
113
+ )
114
+
115
+ export const SimpleInputExample = () => (
116
+ <Playground
117
+ code={`
118
+ const [state, setState] = useState({
119
+ firstName: '',
120
+ lastName: '',
121
+ age: 18
122
+ });
123
+
124
+ const onChange = (change) => setState({
125
+ ...state,
126
+ ...change
127
+ });
128
+
129
+ <>
130
+ <InputText
131
+ label="First name"
132
+ value={state.firstName}
133
+ onChange={(firstName) => onChange({ firstName })}
134
+ />
135
+ <InputText
136
+ label="Last name"
137
+ value={state.lastName}
138
+ onChange={(lastName) => onChange({ lastName })}
139
+ />
140
+ <InputNumber
141
+ label="Age"
142
+ value={state.age}
143
+ onChange={(age) => onChange({ age })}
144
+ required
145
+ />
146
+ </>
147
+ `}
148
+ providerProps={{
149
+ renderAsComponent: true,
150
+ scope: {
151
+ InputNumber,
152
+ InputText,
153
+ },
154
+ }}
155
+ />
156
+ )
157
+
158
+ export const IconExample = () => (
159
+ <Playground
160
+ code={`
161
+ <InputField
162
+ label="Search"
163
+ type="text"
164
+ prefix="🍺"
165
+ >
166
+ <InputField.Icon>
167
+ <IconMinor.FolderOpen title="Icons render before the input" />
168
+ </InputField.Icon>
169
+ </InputField>
170
+ `}
171
+ providerProps={{
172
+ renderAsComponent: true,
173
+ scope: {
174
+ InputField,
175
+ IconMinor,
176
+ },
177
+ }}
178
+ />
179
+ )
180
+
181
+ export const ControlsExample = () => (
182
+ <Playground
183
+ code={`
184
+ const [likes, setLikes] = useState(0);
185
+
186
+ const onLike = () => setLikes(likes + 1);
187
+ const onDislike = () => setLikes(Math.max(likes - 1, 0));
188
+
189
+ <InputField
190
+ label="Do you like this storybook?"
191
+ value={likes}
192
+ onChange={() => undefined}
193
+ type="number"
194
+ suffix="🍺"
195
+ >
196
+ <InputField.Controls>
197
+ <SpaceBetween>
198
+ <div onClick={onLike}>️👍</div>
199
+ <div>/</div>
200
+ <div onClick={onDislike}>👎️</div>
201
+ </SpaceBetween>
202
+ </InputField.Controls>
203
+ </InputField>
204
+ `}
205
+ providerProps={{
206
+ renderAsComponent: true,
207
+ scope: {
208
+ InputField,
209
+ IconMinor,
210
+ styled,
211
+ SpaceBetween,
212
+ },
213
+ }}
214
+ />
215
+ )
216
+
217
+ export const OuterLabelExample = () => (
218
+ <Playground
219
+ code={`
220
+ const [value, setValue] = useState('');
221
+ const [errors, setErrors] = useState([]);
222
+
223
+ const handleChange = (change: string) => {
224
+ const errors = [];
225
+
226
+ if (!change) {
227
+ errors.push({ message: 'This field is required' });
228
+ }
229
+
230
+ if (!change.match(/[A-Za-z]{3}/)) {
231
+ errors.push({ message: 'Input was not a 3 letter country code' });
232
+ }
233
+
234
+ setValue(change);
235
+ setErrors(errors);
236
+ }
237
+
238
+ <InputText.Label
239
+ label="Country Code"
240
+ helpText="Please enter a 3 letter country code"
241
+ errors={errors}
242
+ >
243
+ <InputText
244
+ value={value}
245
+ invalid={errors.length > 0}
246
+ placeholder="e.g. AUD"
247
+ onChange={handleChange}
248
+ />
249
+ </InputText.Label>
250
+ `}
251
+ providerProps={{
252
+ renderAsComponent: true,
253
+ scope: {
254
+ InputText,
255
+ IconMinor,
256
+ },
257
+ }}
258
+ />
259
+ )
260
+
261
+ export const StepperExample = () => (
262
+ <Playground
263
+ code={`
264
+ const [age, setAge] = useState(0);
265
+ const onUp = () => setAge(Math.min(age + 1, 99));
266
+ const onDown = () => setAge(Math.max(age - 1, 0));
267
+ const errors = []
268
+
269
+ if (0 > age || age > 100) {
270
+ errors.push({ message: 'Please choose an age between 0 and 99' })
271
+ }
272
+
273
+ <form onSubmit={(e) => e.preventDefault()}>
274
+ <InputNumber.Label
275
+ helpText='Age should be a number between 0 and 99'
276
+ errors={errors}
277
+ >
278
+ <InputNumber
279
+ label='Age'
280
+ onChange={setAge}
281
+ value={age}
282
+ invalid={errors.length > 0}
283
+ placeholder="Enter your age..."
284
+ >
285
+ <InputNumber.Controls>
286
+ <InputNumber.Stepper onUpClick={onUp} onDownClick={onDown} />
287
+ </InputNumber.Controls>
288
+ </InputNumber>
289
+ </InputNumber.Label>
290
+ <input type="submit"/>
291
+ </form>
292
+ `}
293
+ providerProps={{
294
+ renderAsComponent: true,
295
+ scope: {
296
+ InputNumber,
297
+ styled,
298
+ },
299
+ }}
300
+ />
301
+ )
302
+
303
+ export const AllDressedExample = () => (
304
+ <Playground
305
+ code={`
306
+ <InputField.Label
307
+ label='Price'
308
+ helpText='Enter a price in AUD'
309
+ errors={[{ message: 'Too many UI decorations!' }]}
310
+ >
311
+ <InputField
312
+ type="number"
313
+ label='Price'
314
+ // prefix and suffix render immediately
315
+ // before and after the input field
316
+ prefix="$"
317
+ suffix="AUD"
318
+ step={0.01}
319
+ min={0.00}
320
+ placeholder="Enter an amount..."
321
+ >
322
+ <InputField.Icon>
323
+ <IconMinor.CircleDollar title="Icons render before the input" />
324
+ </InputField.Icon>
325
+ <InputField.Controls>
326
+ <IconMinor.FolderOpen title="Controls render after the input" />
327
+ </InputField.Controls>
328
+ </InputField>
329
+ </InputField.Label>
330
+ `}
331
+ providerProps={{
332
+ renderAsComponent: true,
333
+ scope: {
334
+ InputField,
335
+ IconMinor,
336
+ },
337
+ }}
338
+ />
339
+ )