@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,54 @@
1
+ import { getValuesBySize, SpinnerProps } from './spinner-size-flags'
2
+ import { FC, is } from '@helpers'
3
+ import styled, { keyframes } from 'styled-components'
4
+ import { Icons } from '@foundations'
5
+ import { IconMinor } from 'components/icon'
6
+
7
+ const spinAnimation = keyframes`
8
+ 0% {
9
+ transform: rotate(0deg);
10
+ stroke-dashoffset: 25;
11
+ }
12
+ 50% {
13
+ transform: rotate(720deg);
14
+ stroke-dashoffset: 125;
15
+ }
16
+ 100% {
17
+ transform: rotate(1080deg);
18
+ stroke-dashoffset: 25;
19
+ }
20
+ `
21
+
22
+ const Spin = styled.div<{ $size: string, $onPrimary: boolean, $onCritical: boolean }>`
23
+ svg {
24
+ width: ${({ $size }) => $size};
25
+ height: ${({ $size }) => $size};
26
+ position: unset;
27
+ path {
28
+ fill: ${({ $onPrimary, $onCritical }) => ($onPrimary || $onCritical) ? Icons.OnPrimary : Icons.Default};
29
+ }
30
+ animation: ${spinAnimation} infinite 2s linear;
31
+ }
32
+ `
33
+
34
+ type IProps = SpinnerProps & {
35
+ onPrimary?: boolean
36
+ onCritical?: boolean
37
+ className?: string
38
+ }
39
+
40
+ export const Spinner : FC<IProps> = (props) => {
41
+ const size = getValuesBySize(props)
42
+
43
+ return (
44
+ <Spin
45
+ $onPrimary={is(props.onPrimary)}
46
+ $onCritical={is(props.onCritical)}
47
+ $size={size}
48
+ className={props.className}
49
+ >
50
+ <IconMinor.Spinner />
51
+ </Spin>
52
+ )
53
+ }
54
+
@@ -0,0 +1,39 @@
1
+ import styled from 'styled-components'
2
+ import { Padding, Surface } from '@foundations'
3
+ import { Playground } from 'storybook-addon-jarle-monaco'
4
+ import { Button } from 'components/molecules'
5
+ import { Spinner } from '../spinner'
6
+
7
+ export const Div = styled.div`
8
+ padding: ${Padding.s};
9
+ background: ${Surface.Default.Default};
10
+ display: flex;
11
+ gap: 20px;
12
+ `
13
+
14
+ export const SpinnerCodeExample = () => (
15
+ <Playground
16
+ code={`
17
+ // Try replacing the Button types.
18
+ <Div>
19
+ <Button primary>
20
+ <Spinner onPrimary />
21
+ </Button>
22
+ <Button destructive primary>
23
+ <Spinner onCritical />
24
+ </Button>
25
+ <Button destructive>
26
+ <Spinner onCritical />
27
+ </Button>
28
+ </Div>
29
+ `}
30
+ providerProps={{
31
+ renderAsComponent: true,
32
+ scope: {
33
+ Button,
34
+ Spinner,
35
+ Div,
36
+ },
37
+ }}
38
+ />
39
+ )
@@ -0,0 +1,35 @@
1
+ import { Canvas, Meta, Story, ArgsTable } from '@storybook/addon-docs';
2
+ import { StoryComponent, talesOf, StorybookFrame } from '@stories'
3
+ import { Spinner } from '../index'
4
+ import { Button } from 'components/molecules/button'
5
+
6
+ import { SpinnerCodeExample } from './components'
7
+
8
+ <Meta title="Components/Spinner" />
9
+
10
+ # Spinner
11
+
12
+ Spinners are used to notify users that their action is being processed.
13
+
14
+ For more details, check out the guidelines on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=734%3A7380)
15
+
16
+ ## How to Use
17
+
18
+ ```tsx
19
+ import { Spinner } from './index'
20
+
21
+ <Spinner />
22
+ ```
23
+
24
+ ### Size
25
+
26
+ <Canvas>
27
+ <Spinner small/>
28
+ <Spinner />
29
+ </Canvas>
30
+
31
+ ### On primary
32
+
33
+ When rendering the spinner on a primary or critical surface, use onPrimary or onCritical.
34
+
35
+ <SpinnerCodeExample/>
@@ -0,0 +1 @@
1
+ export * from './tab'
@@ -0,0 +1,62 @@
1
+ import { CSSProperties, HTMLAttributes, useEffect, useRef } from 'react'
2
+ import { FC, isDefined, Nothing, PropsWithChildren } from '@helpers'
3
+ import { Borders, Margin, Padding } from '@foundations'
4
+ import { Label } from 'components/typography'
5
+
6
+ const styles: (props: { selected: boolean }) => CSSProperties = ({ selected }) => ({
7
+ display: 'flex',
8
+ padding: Padding.m,
9
+ cursor: 'pointer',
10
+ outline: 'none',
11
+ borderBottom: selected ? `3px solid ${Borders.Highlight.Default}` : '',
12
+ ':focus': {
13
+ borderBottom: `3px solid ${Borders.Highlight.Default}`
14
+ },
15
+ })
16
+
17
+ export interface ITabProps extends PropsWithChildren, HTMLAttributes<HTMLDivElement> {
18
+ Prefix?: FC<HTMLAttributes<HTMLElement>>
19
+ selected?: boolean
20
+ }
21
+
22
+ export const Tab: FC<ITabProps> = (props) => {
23
+ const {
24
+ Prefix,
25
+ selected = false,
26
+ ...rest
27
+ } = props
28
+
29
+ // eslint-disable-next-line no-null/no-null
30
+ const ref = useRef<HTMLDivElement>(null)
31
+
32
+ useEffect(() => {
33
+ selected ? ref.current?.focus() : ref.current?.blur()
34
+ }, [selected])
35
+
36
+ /**
37
+ * @TODO this is a hack to be able to use the ref in react-web-client
38
+ * RWC uses styled-components < v4 and expects the ref to be passes as
39
+ * "innerRef" not just "ref", but product-language uses > v4 and wants
40
+ * to use ref. So for some components that need a ref, like this one
41
+ * we will have to use a div and style it the old fashioned way until
42
+ * we upgrade rwc's styled-components or drop rwc
43
+ */
44
+ return (
45
+ <div
46
+ {...rest}
47
+ tabIndex={0}
48
+ onClick={() => {
49
+ ref.current?.focus()
50
+ }}
51
+ role={'tab'}
52
+ aria-selected={selected}
53
+ ref={ref}
54
+ style={styles({ selected })}
55
+ >
56
+ {isDefined(Prefix) ? <Prefix style={{ marginRight: Margin.xs}} /> : <Nothing />}
57
+ <Label strong subdued={!selected}>
58
+ {props.children}
59
+ </Label>
60
+ </div>
61
+ )
62
+ }
@@ -0,0 +1 @@
1
+ export * from './tabs'
@@ -0,0 +1,282 @@
1
+ import styled from 'styled-components'
2
+
3
+ import { Padding, Margin } from '@foundations'
4
+ import { CardPlayground, Playground } from '@stories'
5
+
6
+ import { CardFrame } from 'components/card/atoms'
7
+ import { Tab, Tabs } from '../tabs'
8
+ import { InputField as InputFieldBase } from 'components/input-field'
9
+ import { Button } from 'components/molecules'
10
+ import { Flex } from 'components/layout'
11
+ import { Label } from 'components/typography'
12
+ import { FC, Nothing } from '@helpers'
13
+ import { Card } from 'components/card'
14
+ import { IconMinor as Icon } from 'components/icon'
15
+
16
+ const ContentFrame = styled(Tabs.Content)`
17
+ padding: ${Padding.l};
18
+ `
19
+
20
+ export const AdditionalControlsExample = () => (
21
+ <Playground
22
+ code={`
23
+ const [selected, setSelected] = useState(0);
24
+
25
+ <Tabs selected={selected} onChange={setSelected}>
26
+ <Tabs.TabList>
27
+ <div>This is not a tab.</div>
28
+ <Tab>No Icon</Tab>
29
+ <Tab Prefix={Icon.Comment}>With Icon</Tab>
30
+ <div>This is also not a tab.</div>
31
+ </Tabs.TabList>
32
+ <ContentFrame>
33
+ One
34
+ </ContentFrame>
35
+ <ContentFrame>
36
+ Two
37
+ </ContentFrame>
38
+ </Tabs>
39
+ `}
40
+ providerProps={{
41
+ renderAsComponent: true,
42
+ scope: {
43
+ Tabs,
44
+ Tab,
45
+ ContentFrame,
46
+ Icon,
47
+ Card,
48
+ },
49
+ }}
50
+ />
51
+ )
52
+
53
+ export const CrazyTabsExample = () => (
54
+ <Playground
55
+ code={`
56
+ const [selected, setSelected] = useState(0);
57
+
58
+ <Tabs selected={selected} onChange={setSelected}>
59
+ <ContentFrame>
60
+ One
61
+ </ContentFrame>
62
+ <ContentFrame>
63
+ Two
64
+ </ContentFrame>
65
+ <div>This message will render on every tab</div>
66
+ <Tabs.TabList>
67
+ <Tab>No Icon</Tab>
68
+ <Tab Prefix={Icon.Comment}>With Icon</Tab>
69
+ </Tabs.TabList>
70
+ </Tabs>
71
+ `}
72
+ providerProps={{
73
+ renderAsComponent: true,
74
+ scope: {
75
+ Tabs,
76
+ Tab,
77
+ ContentFrame,
78
+ Icon,
79
+ Card,
80
+ },
81
+ }}
82
+ />
83
+ )
84
+
85
+ export const TabsWithIconsExample = () => (
86
+ <Playground
87
+ code={`
88
+ const [selected, setSelected] = useState(0);
89
+
90
+ <Tabs selected={selected} onChange={setSelected}>
91
+ <Tabs.TabList>
92
+ <Tab>No Icon</Tab>
93
+ <Tab Prefix={Icon.Comment}>With Icon</Tab>
94
+ </Tabs.TabList>
95
+ <ContentFrame>
96
+ One
97
+ </ContentFrame>
98
+ <ContentFrame>
99
+ Two
100
+ </ContentFrame>
101
+ </Tabs>
102
+ `}
103
+ providerProps={{
104
+ renderAsComponent: true,
105
+ scope: {
106
+ Tabs,
107
+ Tab,
108
+ ContentFrame,
109
+ Icon,
110
+ Card,
111
+ },
112
+ }}
113
+ />
114
+ )
115
+
116
+ export const RenderingContentExample = () => (
117
+ <Playground
118
+ code={`
119
+ const [selected, setSelected] = useState(0);
120
+
121
+ <Tabs selected={selected} onChange={setSelected}>
122
+ <Tabs.TabList>
123
+ <Tab Prefix={Icon.Comment}>Style Directly</Tab>
124
+ <Tab Prefix={Icon.GraduationCap}>Use sub-components</Tab>
125
+ </Tabs.TabList>
126
+ <ContentFrame>
127
+ This was styled directly.
128
+ </ContentFrame>
129
+ <Tabs.Content>
130
+ <Card>This is in a Card.</Card>
131
+ </Tabs.Content>
132
+ </Tabs>
133
+ `}
134
+ providerProps={{
135
+ renderAsComponent: true,
136
+ scope: {
137
+ Tabs,
138
+ Tab,
139
+ ContentFrame,
140
+ Icon,
141
+ Card,
142
+ },
143
+ }}
144
+ />
145
+ )
146
+
147
+ const InputField = styled(InputFieldBase)`
148
+ margin-right: ${Margin.s};
149
+ flex-grow: 1;
150
+ `
151
+
152
+ const Controls = styled(Flex)`
153
+ width: 100%;
154
+ justify-content: end;
155
+ align-items: center;
156
+ padding-right: ${Padding.l};
157
+ `
158
+
159
+ const NationalityButton = styled(Button)`
160
+ display: flex;
161
+ `
162
+
163
+ const NationalityButtonPrefix: FC = () => {
164
+ return (
165
+ <Flex>
166
+ <Icon.Comment />
167
+ <Icon.GraduationCap />
168
+ </Flex>
169
+ )
170
+ }
171
+
172
+ export const TabsExample = () => (
173
+ <CardPlayground
174
+ code={`
175
+ const [selected, setSelected] = useState(0);
176
+
177
+ <Card>
178
+ <Tabs selected={selected} onChange={setSelected}>
179
+ <Tabs.TabList>
180
+ <Tab Prefix={Icon.Comment}>Language</Tab>
181
+ <Tab Prefix={Icon.GraduationCap}>Higher Ed.</Tab>
182
+ <Controls>
183
+ <NationalityButton
184
+ plain subtle
185
+ IconPrefix={NationalityButtonPrefix}
186
+ >
187
+ Brazil, Onshore
188
+ </NationalityButton>
189
+ </Controls>
190
+ </Tabs.TabList>
191
+ <ContentFrame>
192
+ <Flex center>
193
+ <InputField
194
+ label='Destination'
195
+ placeholder='Search'
196
+ />
197
+ <InputField
198
+ label='Provider'
199
+ placeholder='Any'
200
+ />
201
+ <InputField
202
+ label='Min. Number of Weeks'
203
+ placeholder='4'
204
+ />
205
+ <Button large primary>Search</Button>
206
+ </Flex>
207
+ </ContentFrame>
208
+ <ContentFrame>
209
+ In progress...
210
+ </ContentFrame>
211
+ </Tabs>
212
+ </Card>
213
+ `}
214
+ providerProps={{
215
+ renderAsComponent: true,
216
+ scope: {
217
+ Tabs,
218
+ ContentFrame,
219
+ Tab,
220
+ InputField,
221
+ Flex,
222
+ Controls,
223
+ NationalityButton,
224
+ Label,
225
+ NationalityButtonPrefix,
226
+ Button,
227
+ Card: CardFrame,
228
+ Icon,
229
+ },
230
+ }}
231
+ />
232
+ )
233
+
234
+ export const StateManagementExample = () => (
235
+ <CardPlayground
236
+ code={`
237
+ const [selected, setSelected] = useState(0);
238
+
239
+ <Card>
240
+ <Tabs selected={selected} onChange={setSelected}>
241
+ <Tabs.TabList>
242
+ <Tab Prefix={Icon.Comment}>One</Tab>
243
+ <Tab Prefix={Icon.GraduationCap}>Two</Tab>
244
+ <Tab Prefix={Icon.Check}>Three</Tab>
245
+ {selected > 0 ? <Button onClick={() => setSelected(0)}>Reset</Button> : <Nothing />}
246
+ </Tabs.TabList>
247
+ <ContentFrame>
248
+ ONE
249
+ <Button onClick={() => setSelected(1)}>Next</Button>
250
+ </ContentFrame>
251
+ <ContentFrame>
252
+ TWO
253
+ <Button onClick={() => setSelected(2)}>Next</Button>
254
+ <Button onClick={() => setSelected(0)}>Back</Button>
255
+ </ContentFrame>
256
+ <ContentFrame>
257
+ THREE
258
+ <Button onClick={() => setSelected(1)}>Back</Button>
259
+ </ContentFrame>
260
+ </Tabs>
261
+ </Card>
262
+ `}
263
+ providerProps={{
264
+ renderAsComponent: true,
265
+ scope: {
266
+ Tabs,
267
+ ContentFrame,
268
+ Tab,
269
+ InputField,
270
+ Flex,
271
+ Controls,
272
+ NationalityButton,
273
+ Label,
274
+ NationalityButtonPrefix,
275
+ Nothing,
276
+ Button,
277
+ Card: CardFrame,
278
+ Icon,
279
+ },
280
+ }}
281
+ />
282
+ )
@@ -0,0 +1,97 @@
1
+ import { Meta } from '@storybook/addon-docs';
2
+ import { TabsExample, TabsWithIconsExample, RenderingContentExample, AdditionalControlsExample, StateManagementExample, CrazyTabsExample } from './components';
3
+
4
+ <Meta title="Components/Tabs"/>
5
+
6
+ # Tabs
7
+
8
+ Tabs are used to organize content on a page into sections.
9
+
10
+ For more details, check out the guidelines on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=734%3A7384)
11
+
12
+ ## How to Use It
13
+
14
+ ```tsx
15
+ import { Tabs, Tab } from '@edvisor/product-language'
16
+
17
+ const [selected, setSelected] = useState(0)
18
+
19
+ <Tabs selected={selected} onChange={setSelected}>
20
+ <Tabs.TabList>
21
+ <Tab>One</Tab>
22
+ <Tab>Two</Tab>
23
+ </Tabs.TabList>
24
+
25
+ <Tabs.Content>
26
+ One
27
+ </Tabs.Content>
28
+ <Tabs.Content>
29
+ Two
30
+ </Tabs.Content>
31
+ </Tabs>
32
+ ```
33
+
34
+ ### Rendering Content
35
+
36
+ Put whatever you want in the `Content` part of the `Tabs` layout, or style the `Content` slot directly.
37
+
38
+ ```tsx
39
+ // Add padding to the content slot
40
+ const ContentFrame = styled(Tabs.Content)`
41
+ padding: ${Padding.l};
42
+ `
43
+ ```
44
+
45
+ <RenderingContentExample />
46
+
47
+ ### Tabs with Icons
48
+
49
+ Add an icon of other simple components to the left of the `Tab` label.
50
+
51
+ <TabsWithIconsExample />
52
+
53
+ ### Tabs with additional layout
54
+
55
+ The `Tabs.TabList` slot will render all of its children. Only `Tab` children will be used to control the tabs.
56
+
57
+ <AdditionalControlsExample />
58
+
59
+ Use this to implement additional controls and configuration shared by the tabs.
60
+
61
+ <TabsExample />
62
+
63
+ ### Content with additional layout
64
+
65
+ The Tabs component will render any and all children in the order they are given. You can add children between the tabs and content, or you can put the tabs on the bottom.
66
+
67
+ <CrazyTabsExample />
68
+
69
+ ### Managing State
70
+
71
+ Pass an integer into the `selected` property of `Tabs` to manage its state.
72
+
73
+ <StateManagementExample />
74
+
75
+ ## API
76
+
77
+ ### `Tabs`
78
+
79
+ | Prop | Type | Description |
80
+ | ---------- | ---------------------------- | ------------------------------------------------------- |
81
+ | `selected` | `number` | Determines which tab is selected |
82
+ | `onChange` | `(selected: number) => void` | Announces when the currently selected tab should change |
83
+
84
+ ### `Tab`
85
+
86
+ Extends `HTMLAttributes<HTMLDivElement>`
87
+
88
+ | Prop | Type | Description |
89
+ | ---------- | ------------ | ------------------------------------------- |
90
+ | `selected` | `boolean?` | Whether this tab is selected |
91
+ | `Prefix` | `Component?` | A component to render in front of the label |
92
+
93
+ ## Changelog
94
+
95
+ ### [0.0.1]
96
+ - add primary tabs
97
+ - currently we can control the tabs with the "tab" key, but later we should implement the UX described here: https://www.w3.org/WAI/ARIA/apg/example-index/tabs/tabs-automatic
@@ -0,0 +1,86 @@
1
+ import styled from 'styled-components'
2
+ import { Margin } from '@foundations'
3
+ import { render, screen } from '@testing-library/react'
4
+ import userEvent from '@testing-library/user-event'
5
+ import { Tabs, Tab } from './index'
6
+
7
+ describe('Tabs', () => {
8
+ it('renders both tabs and the currently selected content', async () => {
9
+ render(
10
+ <Tabs selected={0}>
11
+ <Tabs.TabList>
12
+ <Tab>One</Tab>
13
+ <Tab>Two</Tab>
14
+ </Tabs.TabList>
15
+ <Tabs.Content>ONE</Tabs.Content>
16
+ <Tabs.Content>TWO</Tabs.Content>
17
+ </Tabs>
18
+ )
19
+
20
+ expect(screen.getAllByRole('tab')).toHaveLength(2)
21
+ expect(screen.getAllByRole('tabpanel')).toHaveLength(1)
22
+ expect(screen.getByRole('tabpanel')).toHaveTextContent('ONE')
23
+ })
24
+
25
+ it('does not render the unselected tabs', async () => {
26
+ render(
27
+ <Tabs selected={2}>
28
+ <Tabs.TabList>
29
+ <Tab>One</Tab>
30
+ <Tab>Two</Tab>
31
+ <Tab>Three</Tab>
32
+ </Tabs.TabList>
33
+ <Tabs.Content>ONE</Tabs.Content>
34
+ <Tabs.Content>TWO</Tabs.Content>
35
+ <Tabs.Content>THREE</Tabs.Content>
36
+ </Tabs>
37
+ )
38
+
39
+ expect(screen.getAllByRole('tab')).toHaveLength(3)
40
+ expect(screen.getAllByRole('tabpanel', { hidden: true })).toHaveLength(3)
41
+
42
+ expect(screen.getByText('ONE')).toHaveAttribute('aria-hidden', 'true')
43
+ expect(screen.getByText('TWO')).toHaveAttribute('aria-hidden', 'true')
44
+ expect(screen.getByText('ONE')).not.toBeVisible()
45
+ expect(screen.getByText('TWO')).not.toBeVisible()
46
+ })
47
+
48
+ /**
49
+ * this test just ensures that the programmer did not
50
+ * forget to add className? to the props and then pass
51
+ * it to the wrapping element so that users downstream
52
+ * can style the component
53
+ */
54
+ it('accepts styles', () => {
55
+ const NiceTab = styled(Tab)`
56
+ margin-bottom: ${Margin.l};
57
+ `
58
+
59
+ const { container } = render(<NiceTab>Contents</NiceTab>)
60
+
61
+ expect(container.firstChild).toHaveStyle(`margin-bottom: ${Margin.l}`)
62
+ expect(screen.getByText('Contents')).toBeInTheDocument()
63
+ })
64
+
65
+ it('calls onChange when a tab is clicked', async () => {
66
+ const handleChange = jest.fn()
67
+
68
+ render(
69
+ <Tabs selected={0} onChange={handleChange}>
70
+ <Tabs.TabList>
71
+ <Tab>One</Tab>
72
+ <Tab>Two</Tab>
73
+ </Tabs.TabList>
74
+ <Tabs.Content>ONE</Tabs.Content>
75
+ <Tabs.Content>TWO</Tabs.Content>
76
+ </Tabs>
77
+ )
78
+
79
+ await userEvent.click(screen.getByText('Two'))
80
+
81
+ expect(handleChange).toHaveBeenCalledTimes(1)
82
+
83
+ expect(screen.getByText('ONE')).toBeVisible()
84
+ expect(screen.getByText('TWO')).not.toBeVisible()
85
+ })
86
+ })