@edvisor/product-language 0.10.0 → 0.10.2

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 (410) hide show
  1. package/.babelrc +12 -0
  2. package/.eslintrc.json +147 -0
  3. package/.release-it.json +17 -0
  4. package/.storybook/main.js +57 -0
  5. package/.storybook/manager.js +7 -0
  6. package/.storybook/preview.js +15 -0
  7. package/.storybook/tsconfig.json +30 -0
  8. package/jest.config.ts +15 -0
  9. package/jest.setup.ts +2 -0
  10. package/package.json +2 -27
  11. package/project.json +98 -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.test.tsx +93 -0
  23. package/src/lib/components/alert-banner/alert-banner.tsx +117 -0
  24. package/src/lib/components/alert-banner/alert-level-flags.ts +101 -0
  25. package/src/lib/components/alert-banner/index.ts +1 -0
  26. package/src/lib/components/alert-banner/storybook/alert-banner.stories.mdx +67 -0
  27. package/src/lib/components/alert-banner/storybook/components.tsx +124 -0
  28. package/src/lib/components/badge/badge-type-flags.ts +72 -0
  29. package/src/lib/components/badge/badge.test.tsx +29 -0
  30. package/src/lib/components/badge/badge.tsx +22 -0
  31. package/src/lib/components/badge/index.ts +1 -0
  32. package/src/lib/components/badge/stories/badge.stories.mdx +44 -0
  33. package/src/lib/components/badge/stories/components.tsx +49 -0
  34. package/{lib/components/card/atoms/card-frame.d.ts → src/lib/components/card/atoms/card-frame.tsx} +16 -7
  35. package/src/lib/components/card/atoms/index.ts +1 -0
  36. package/src/lib/components/card/card.test.tsx +162 -0
  37. package/src/lib/components/card/card.tsx +78 -0
  38. package/src/lib/components/card/components/card-alert-banner-slot.tsx +16 -0
  39. package/src/lib/components/card/components/card-controls-slot.tsx +19 -0
  40. package/src/lib/components/card/components/card-section-slot.tsx +51 -0
  41. package/src/lib/components/card/components/index.ts +3 -0
  42. package/src/lib/components/card/index.ts +3 -0
  43. package/src/lib/components/card/molecules/index.ts +1 -0
  44. package/src/lib/components/card/molecules/left-right-card.test.tsx +89 -0
  45. package/src/lib/components/card/molecules/left-right-card.tsx +63 -0
  46. package/src/lib/components/card/storybook/card.stories.mdx +100 -0
  47. package/src/lib/components/card/storybook/components.tsx +227 -0
  48. package/src/lib/components/checkbox/checkbox.test.tsx +39 -0
  49. package/src/lib/components/checkbox/checkbox.tsx +70 -0
  50. package/src/lib/components/checkbox/helpers.tsx +98 -0
  51. package/src/lib/components/checkbox/index.tsx +1 -0
  52. package/src/lib/components/checkbox/stories/checkbox.stories.mdx +57 -0
  53. package/src/lib/components/checkbox/stories/components.tsx +84 -0
  54. package/src/lib/components/date-picker/components/custom-calendar.tsx +193 -0
  55. package/src/lib/components/date-picker/components/index.ts +1 -0
  56. package/src/lib/components/date-picker/data-picker.test.tsx +220 -0
  57. package/src/lib/components/date-picker/date-picker.tsx +10 -0
  58. package/src/lib/components/date-picker/helpers/date-picker-factory.tsx +210 -0
  59. package/src/lib/components/date-picker/index.ts +1 -0
  60. package/src/lib/components/date-picker/storybook/components.tsx +259 -0
  61. package/src/lib/components/date-picker/storybook/date-picker.stories.mdx +133 -0
  62. package/src/lib/components/divider/divider-type-flags.tsx +37 -0
  63. package/src/lib/components/divider/divider.test.tsx +34 -0
  64. package/src/lib/components/divider/divider.tsx +37 -0
  65. package/src/lib/components/divider/index.tsx +1 -0
  66. package/src/lib/components/divider/stories/components.tsx +13 -0
  67. package/src/lib/components/divider/stories/divider.stories.mdx +44 -0
  68. package/src/lib/components/flag/flag-size-flags.tsx +55 -0
  69. package/src/lib/components/flag/flag.list.tsx +788 -0
  70. package/src/lib/components/flag/flag.test.tsx +65 -0
  71. package/src/lib/components/flag/flag.tsx +97 -0
  72. package/src/lib/components/flag/index.tsx +1 -0
  73. package/src/lib/components/flag/stories/components.tsx +403 -0
  74. package/src/lib/components/flag/stories/flag.stories.mdx +48 -0
  75. package/src/lib/components/flag/stories/playGround-select.tsx +145 -0
  76. package/src/lib/components/icon/icon-list.tsx +135 -0
  77. package/src/lib/components/icon/icon.test.tsx +47 -0
  78. package/src/lib/components/icon/icon.tsx +181 -0
  79. package/src/lib/components/icon/index.tsx +1 -0
  80. package/src/lib/components/icon/stories/components.tsx +282 -0
  81. package/src/lib/components/icon/stories/icon.stories.mdx +65 -0
  82. package/src/lib/components/index.ts +26 -0
  83. package/src/lib/components/input-field/components/index.ts +2 -0
  84. package/src/lib/components/input-field/components/labeled-input.tsx +57 -0
  85. package/src/lib/components/input-field/components/stepper.tsx +64 -0
  86. package/src/lib/components/input-field/index.ts +6 -0
  87. package/src/lib/components/input-field/input-field.test.tsx +107 -0
  88. package/src/lib/components/input-field/input-field.tsx +154 -0
  89. package/src/lib/components/input-field/input-number.tsx +41 -0
  90. package/src/lib/components/input-field/input-text.tsx +30 -0
  91. package/src/lib/components/input-field/storybook/components.tsx +367 -0
  92. package/src/lib/components/input-field/storybook/input-field.stories.mdx +120 -0
  93. package/src/lib/components/layout/flex.tsx +22 -0
  94. package/src/lib/components/layout/grid-layout.tsx +40 -0
  95. package/src/lib/components/layout/index.ts +3 -0
  96. package/src/lib/components/layout/left-right-layout.tsx +67 -0
  97. package/src/lib/components/link/index.ts +1 -0
  98. package/src/lib/components/link/link.test.tsx +29 -0
  99. package/src/lib/components/link/link.tsx +56 -0
  100. package/src/lib/components/link/storybook/link.stories.mdx +52 -0
  101. package/src/lib/components/modal/index.ts +3 -0
  102. package/src/lib/components/modal/modal-base.tsx +129 -0
  103. package/src/lib/components/modal/modal-destructive.tsx +70 -0
  104. package/src/lib/components/modal/modal.test.tsx +138 -0
  105. package/src/lib/components/modal/modal.tsx +114 -0
  106. package/src/lib/components/modal/storybook/components.tsx +105 -0
  107. package/src/lib/components/modal/storybook/modal-destructive.stories.mdx +31 -0
  108. package/src/lib/components/modal/storybook/modal.stories.mdx +50 -0
  109. package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +55 -0
  110. package/src/lib/components/molecules/avatar/avatar.test.tsx +114 -0
  111. package/src/lib/components/molecules/avatar/avatar.tsx +80 -0
  112. package/src/lib/components/molecules/avatar/index.tsx +1 -0
  113. package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +52 -0
  114. package/src/lib/components/molecules/avatar/stories/components.tsx +36 -0
  115. package/src/lib/components/molecules/button/button-flags.tsx +340 -0
  116. package/src/lib/components/molecules/button/button.test.tsx +77 -0
  117. package/src/lib/components/molecules/button/button.tsx +212 -0
  118. package/src/lib/components/molecules/button/index.tsx +1 -0
  119. package/src/lib/components/molecules/button/stories/button.stories.mdx +105 -0
  120. package/src/lib/components/molecules/button/stories/components.tsx +90 -0
  121. package/src/lib/components/molecules/index.ts +3 -0
  122. package/src/lib/components/molecules/input-checkbox/index.tsx +1 -0
  123. package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +34 -0
  124. package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +50 -0
  125. package/src/lib/components/molecules/input-checkbox/stories/components.tsx +53 -0
  126. package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +49 -0
  127. package/src/lib/components/organisms/choice-list/choice-list.test.tsx +36 -0
  128. package/src/lib/components/organisms/choice-list/choice-list.tsx +72 -0
  129. package/src/lib/components/organisms/choice-list/index.tsx +1 -0
  130. package/src/lib/components/organisms/choice-list/stories/choice-list.stories.mdx +57 -0
  131. package/src/lib/components/organisms/choice-list/stories/components.tsx +45 -0
  132. package/src/lib/components/organisms/index.ts +2 -0
  133. package/src/lib/components/organisms/multi-choice-list/index.tsx +1 -0
  134. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +33 -0
  135. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +53 -0
  136. package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +124 -0
  137. package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +99 -0
  138. package/src/lib/components/progress-bar/index.ts +1 -0
  139. package/src/lib/components/progress-bar/progress-bar-size-flags.tsx +37 -0
  140. package/src/lib/components/progress-bar/progress-bar.test.tsx +66 -0
  141. package/src/lib/components/progress-bar/progress-bar.tsx +42 -0
  142. package/src/lib/components/progress-bar/storybook/components.tsx +62 -0
  143. package/src/lib/components/progress-bar/storybook/progress-bar.stories.mdx +43 -0
  144. package/{lib/components/spinner/index.d.ts → src/lib/components/radio-button/index.tsx} +1 -1
  145. package/src/lib/components/radio-button/radio-button.tsx +135 -0
  146. package/src/lib/components/radio-button/radio.test.tsx +59 -0
  147. package/src/lib/components/radio-button/stories/components.tsx +36 -0
  148. package/src/lib/components/radio-button/stories/radio-button.stories.mdx +44 -0
  149. package/src/lib/components/range-slider/components/bar-chart.tsx +50 -0
  150. package/src/lib/components/range-slider/components/handle.tsx +58 -0
  151. package/src/lib/components/range-slider/components/rail.tsx +44 -0
  152. package/src/lib/components/range-slider/components/slider-component.tsx +98 -0
  153. package/src/lib/components/range-slider/components/slider-inputs.tsx +150 -0
  154. package/src/lib/components/range-slider/components/tick.tsx +51 -0
  155. package/src/lib/components/range-slider/components/track.tsx +67 -0
  156. package/src/lib/components/range-slider/index.tsx +2 -0
  157. package/src/lib/components/range-slider/range-slider.test.tsx +185 -0
  158. package/src/lib/components/range-slider/range-slider.tsx +132 -0
  159. package/src/lib/components/range-slider/slider.test.tsx +89 -0
  160. package/src/lib/components/range-slider/slider.tsx +80 -0
  161. package/src/lib/components/range-slider/stories/components.tsx +179 -0
  162. package/src/lib/components/range-slider/stories/range-slider.stories.mdx +84 -0
  163. package/src/lib/components/range-slider/types.ts +18 -0
  164. package/src/lib/components/select/components/menu-container.tsx +69 -0
  165. package/src/lib/components/select/components/menu-list.tsx +195 -0
  166. package/src/lib/components/select/components/menu-row.tsx +43 -0
  167. package/src/lib/components/select/components/menu.tsx +151 -0
  168. package/src/lib/components/select/components/option.tsx +91 -0
  169. package/src/lib/components/select/components/select-label.tsx +10 -0
  170. package/src/lib/components/select/components/value-component-multi.tsx +40 -0
  171. package/src/lib/components/select/components/value-component-single.tsx +27 -0
  172. package/src/lib/components/select/components/value.tsx +370 -0
  173. package/src/lib/components/select/index.tsx +3 -0
  174. package/src/lib/components/select/select.test.tsx +148 -0
  175. package/src/lib/components/select/select.tsx +337 -0
  176. package/src/lib/components/select/storybook/components.tsx +999 -0
  177. package/src/lib/components/select/storybook/radio-group.tsx +157 -0
  178. package/src/lib/components/select/storybook/select.stories.mdx +172 -0
  179. package/src/lib/components/select/types.ts +149 -0
  180. package/src/lib/components/select/utils.ts +101 -0
  181. package/src/lib/components/spinner/index.tsx +1 -0
  182. package/src/lib/components/spinner/spinner-size-flags.tsx +39 -0
  183. package/src/lib/components/spinner/spinner.test.tsx +31 -0
  184. package/src/lib/components/spinner/spinner.tsx +54 -0
  185. package/src/lib/components/spinner/stories/components.tsx +39 -0
  186. package/src/lib/components/spinner/stories/spinner.stories.mdx +35 -0
  187. package/src/lib/components/tabs/components/index.ts +1 -0
  188. package/src/lib/components/tabs/components/tab.tsx +85 -0
  189. package/src/lib/components/tabs/index.tsx +1 -0
  190. package/src/lib/components/tabs/storybook/components.tsx +317 -0
  191. package/src/lib/components/tabs/storybook/tabs.stories.mdx +105 -0
  192. package/src/lib/components/tabs/tabs.test.tsx +86 -0
  193. package/src/lib/components/tabs/tabs.tsx +115 -0
  194. package/src/lib/components/tag/components/close-button.tsx +85 -0
  195. package/src/lib/components/tag/components/index.ts +2 -0
  196. package/src/lib/components/tag/components/tag-label.tsx +45 -0
  197. package/src/lib/components/tag/index.tsx +1 -0
  198. package/src/lib/components/tag/stories/components.tsx +86 -0
  199. package/src/lib/components/tag/stories/tag.stories.mdx +42 -0
  200. package/src/lib/components/tag/tag.test.tsx +36 -0
  201. package/src/lib/components/tag/tag.tsx +33 -0
  202. package/src/lib/components/thumbnail/index.tsx +1 -0
  203. package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +44 -0
  204. package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +41 -0
  205. package/src/lib/components/thumbnail/thumbnail.test.tsx +51 -0
  206. package/src/lib/components/thumbnail/thumbnail.tsx +44 -0
  207. package/src/lib/components/tooltip/index.tsx +1 -0
  208. package/src/lib/components/tooltip/stories/components.tsx +224 -0
  209. package/src/lib/components/tooltip/stories/tooltip.stories.mdx +63 -0
  210. package/src/lib/components/tooltip/tooltip.test.tsx +22 -0
  211. package/src/lib/components/tooltip/tooltip.tsx +179 -0
  212. package/src/lib/components/tree-view/components/tree-node.tsx +203 -0
  213. package/src/lib/components/tree-view/helper.tsx +171 -0
  214. package/src/lib/components/tree-view/index.ts +2 -0
  215. package/src/lib/components/tree-view/stories/components.tsx +640 -0
  216. package/src/lib/components/tree-view/stories/tree-view.stories.mdx +127 -0
  217. package/src/lib/components/tree-view/tree-view.test.tsx +146 -0
  218. package/src/lib/components/tree-view/tree-view.tsx +168 -0
  219. package/src/lib/components/tree-view/types.tsx +70 -0
  220. package/src/lib/components/typography/index.ts +1 -0
  221. package/src/lib/components/typography/storybook/components.tsx +288 -0
  222. package/src/lib/components/typography/storybook/typography.stories.mdx +90 -0
  223. package/src/lib/components/typography/typography.test.tsx +97 -0
  224. package/src/lib/components/typography/typography.tsx +99 -0
  225. package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +123 -0
  226. package/src/lib/foundations/color-system/base-palette/base-palette.ts +93 -0
  227. package/src/lib/foundations/color-system/base-palette/index.ts +1 -0
  228. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +85 -0
  229. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +231 -0
  230. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +160 -0
  231. package/src/lib/foundations/color-system/color-guidelines/index.ts +1 -0
  232. package/src/lib/foundations/color-system/components/color-sample.tsx +99 -0
  233. package/src/lib/foundations/color-system/components/index.ts +1 -0
  234. package/src/lib/foundations/color-system/index.ts +1 -0
  235. package/src/lib/foundations/index.ts +4 -0
  236. package/src/lib/foundations/shadows/components.tsx +59 -0
  237. package/src/lib/foundations/shadows/index.ts +1 -0
  238. package/src/lib/foundations/shadows/shadows.stories.mdx +71 -0
  239. package/src/lib/foundations/shadows/shadows.tsx +47 -0
  240. package/src/lib/foundations/spacing/index.ts +1 -0
  241. package/src/lib/foundations/spacing/spacing-guidelines.ts +37 -0
  242. package/src/lib/foundations/spacing/spacing.stories.mdx +51 -0
  243. package/src/lib/foundations/spacing/spacing.ts +18 -0
  244. package/src/lib/foundations/typography/constants.ts +25 -0
  245. package/src/lib/foundations/typography/fonts.ts +205 -0
  246. package/src/lib/foundations/typography/index.tsx +1 -0
  247. package/src/lib/foundations/typography/text-aspect-flags.ts +61 -0
  248. package/src/lib/foundations/typography/typography.tsx +102 -0
  249. package/src/lib/helpers/generic-types.ts +44 -0
  250. package/src/lib/helpers/index.ts +8 -0
  251. package/src/lib/helpers/isReactElementOfType.test.tsx +108 -0
  252. package/src/lib/helpers/isReactElementOfType.ts +42 -0
  253. package/src/lib/helpers/nothing.tsx +22 -0
  254. package/{lib/helpers/numbers.d.ts → src/lib/helpers/numbers.ts} +67 -50
  255. package/src/lib/helpers/safe-navigation.ts +57 -0
  256. package/src/lib/helpers/slots.tsx +126 -0
  257. package/src/lib/helpers/strings.test.ts +47 -0
  258. package/src/lib/helpers/strings.ts +16 -0
  259. package/src/lib/helpers/useInputElementState.ts +56 -0
  260. package/src/lib/helpers/useKeyDown.ts +17 -0
  261. package/tsconfig.json +35 -0
  262. package/tsconfig.lib.json +28 -0
  263. package/tsconfig.spec.json +21 -0
  264. package/index.d.ts +0 -2
  265. package/index.js +0 -11246
  266. package/lib/components/alert-banner/alert-banner.d.ts +0 -15
  267. package/lib/components/alert-banner/alert-level-flags.d.ts +0 -18
  268. package/lib/components/alert-banner/index.d.ts +0 -1
  269. package/lib/components/badge/badge-type-flags.d.ts +0 -18
  270. package/lib/components/badge/badge.d.ts +0 -5
  271. package/lib/components/badge/index.d.ts +0 -1
  272. package/lib/components/card/atoms/index.d.ts +0 -1
  273. package/lib/components/card/card.d.ts +0 -14
  274. package/lib/components/card/components/card-alert-banner-slot.d.ts +0 -6
  275. package/lib/components/card/components/card-controls-slot.d.ts +0 -5
  276. package/lib/components/card/components/card-section-slot.d.ts +0 -11
  277. package/lib/components/card/components/index.d.ts +0 -3
  278. package/lib/components/card/index.d.ts +0 -3
  279. package/lib/components/card/molecules/index.d.ts +0 -1
  280. package/lib/components/card/molecules/left-right-card.d.ts +0 -16
  281. package/lib/components/checkbox/checkbox.d.ts +0 -11
  282. package/lib/components/checkbox/helpers.d.ts +0 -12
  283. package/lib/components/checkbox/index.d.ts +0 -1
  284. package/lib/components/date-picker/components/custom-calendar.d.ts +0 -6
  285. package/lib/components/date-picker/components/index.d.ts +0 -1
  286. package/lib/components/date-picker/date-picker.d.ts +0 -4
  287. package/lib/components/date-picker/helpers/date-picker-factory.d.ts +0 -34
  288. package/lib/components/date-picker/index.d.ts +0 -1
  289. package/lib/components/divider/divider-type-flags.d.ts +0 -9
  290. package/lib/components/divider/divider.d.ts +0 -7
  291. package/lib/components/divider/index.d.ts +0 -1
  292. package/lib/components/flag/flag-size-flags.d.ts +0 -12
  293. package/lib/components/flag/flag.d.ts +0 -9
  294. package/lib/components/flag/flag.list.d.ts +0 -782
  295. package/lib/components/flag/index.d.ts +0 -1
  296. package/lib/components/icon/icon-list.d.ts +0 -132
  297. package/lib/components/icon/icon.d.ts +0 -131
  298. package/lib/components/icon/index.d.ts +0 -1
  299. package/lib/components/index.d.ts +0 -24
  300. package/lib/components/input-field/components/index.d.ts +0 -2
  301. package/lib/components/input-field/components/labeled-input.d.ts +0 -10
  302. package/lib/components/input-field/components/stepper.d.ts +0 -7
  303. package/lib/components/input-field/index.d.ts +0 -3
  304. package/lib/components/input-field/input-field.d.ts +0 -26
  305. package/lib/components/input-field/input-number.d.ts +0 -18
  306. package/lib/components/input-field/input-text.d.ts +0 -14
  307. package/lib/components/layout/flex.d.ts +0 -16
  308. package/lib/components/layout/grid-layout.d.ts +0 -11
  309. package/lib/components/layout/index.d.ts +0 -3
  310. package/lib/components/layout/left-right-layout.d.ts +0 -34
  311. package/lib/components/link/index.d.ts +0 -1
  312. package/lib/components/link/link.d.ts +0 -14
  313. package/lib/components/modal/index.d.ts +0 -3
  314. package/lib/components/modal/modal-base.d.ts +0 -28
  315. package/lib/components/modal/modal-destructive.d.ts +0 -11
  316. package/lib/components/modal/modal.d.ts +0 -13
  317. package/lib/components/molecules/avatar/avatar-size-flags.d.ts +0 -12
  318. package/lib/components/molecules/avatar/avatar.d.ts +0 -12
  319. package/lib/components/molecules/avatar/index.d.ts +0 -1
  320. package/lib/components/molecules/button/button-flags.d.ts +0 -44
  321. package/lib/components/molecules/button/button.d.ts +0 -12
  322. package/lib/components/molecules/button/index.d.ts +0 -1
  323. package/lib/components/molecules/index.d.ts +0 -3
  324. package/lib/components/molecules/input-checkbox/index.d.ts +0 -1
  325. package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +0 -8
  326. package/lib/components/organisms/choice-list/choice-list.d.ts +0 -9
  327. package/lib/components/organisms/choice-list/index.d.ts +0 -1
  328. package/lib/components/organisms/index.d.ts +0 -2
  329. package/lib/components/organisms/multi-choice-list/index.d.ts +0 -1
  330. package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +0 -11
  331. package/lib/components/progress-bar/index.d.ts +0 -1
  332. package/lib/components/progress-bar/progress-bar-size-flags.d.ts +0 -10
  333. package/lib/components/progress-bar/progress-bar.d.ts +0 -8
  334. package/lib/components/radio-button/index.d.ts +0 -1
  335. package/lib/components/radio-button/radio-button.d.ts +0 -10
  336. package/lib/components/range-slider/components/bar-chart.d.ts +0 -8
  337. package/lib/components/range-slider/components/handle.d.ts +0 -12
  338. package/lib/components/range-slider/components/rail.d.ts +0 -9
  339. package/lib/components/range-slider/components/slider-component.d.ts +0 -12
  340. package/lib/components/range-slider/components/slider-inputs.d.ts +0 -14
  341. package/lib/components/range-slider/components/tick.d.ts +0 -10
  342. package/lib/components/range-slider/components/track.d.ts +0 -11
  343. package/lib/components/range-slider/index.d.ts +0 -2
  344. package/lib/components/range-slider/range-slider.d.ts +0 -15
  345. package/lib/components/range-slider/slider.d.ts +0 -11
  346. package/lib/components/range-slider/types.d.ts +0 -11
  347. package/lib/components/select/components/menu-container.d.ts +0 -3
  348. package/lib/components/select/components/menu-list.d.ts +0 -3
  349. package/lib/components/select/components/menu-row.d.ts +0 -9
  350. package/lib/components/select/components/menu.d.ts +0 -3
  351. package/lib/components/select/components/option.d.ts +0 -13
  352. package/lib/components/select/components/select-label.d.ts +0 -1
  353. package/lib/components/select/components/value-component-multi.d.ts +0 -4
  354. package/lib/components/select/components/value-component-single.d.ts +0 -4
  355. package/lib/components/select/components/value.d.ts +0 -4
  356. package/lib/components/select/index.d.ts +0 -3
  357. package/lib/components/select/select.d.ts +0 -10
  358. package/lib/components/select/types.d.ts +0 -133
  359. package/lib/components/select/utils.d.ts +0 -15
  360. package/lib/components/spinner/spinner-size-flags.d.ts +0 -10
  361. package/lib/components/spinner/spinner.d.ts +0 -9
  362. package/lib/components/tabs/components/index.d.ts +0 -1
  363. package/lib/components/tabs/components/tab.d.ts +0 -8
  364. package/lib/components/tabs/index.d.ts +0 -1
  365. package/lib/components/tabs/tabs.d.ts +0 -16
  366. package/lib/components/tag/components/close-button.d.ts +0 -8
  367. package/lib/components/tag/components/index.d.ts +0 -2
  368. package/lib/components/tag/components/tag-label.d.ts +0 -8
  369. package/lib/components/tag/index.d.ts +0 -1
  370. package/lib/components/tag/tag.d.ts +0 -10
  371. package/lib/components/thumbnail/index.d.ts +0 -1
  372. package/lib/components/thumbnail/thumbnail-size-flags.d.ts +0 -10
  373. package/lib/components/thumbnail/thumbnail.d.ts +0 -10
  374. package/lib/components/tooltip/index.d.ts +0 -1
  375. package/lib/components/tooltip/tooltip.d.ts +0 -26
  376. package/lib/components/tree-view/components/tree-node.d.ts +0 -3
  377. package/lib/components/tree-view/helper.d.ts +0 -12
  378. package/lib/components/tree-view/index.d.ts +0 -2
  379. package/lib/components/tree-view/tree-view.d.ts +0 -3
  380. package/lib/components/tree-view/types.d.ts +0 -63
  381. package/lib/components/typography/index.d.ts +0 -1
  382. package/lib/components/typography/typography.d.ts +0 -24
  383. package/lib/foundations/color-system/base-palette/base-palette.d.ts +0 -76
  384. package/lib/foundations/color-system/base-palette/index.d.ts +0 -1
  385. package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +0 -133
  386. package/lib/foundations/color-system/color-guidelines/index.d.ts +0 -1
  387. package/lib/foundations/color-system/components/color-sample.d.ts +0 -17
  388. package/lib/foundations/color-system/components/index.d.ts +0 -1
  389. package/lib/foundations/color-system/index.d.ts +0 -1
  390. package/lib/foundations/index.d.ts +0 -4
  391. package/lib/foundations/shadows/components.d.ts +0 -8
  392. package/lib/foundations/shadows/index.d.ts +0 -1
  393. package/lib/foundations/shadows/shadows.d.ts +0 -8
  394. package/lib/foundations/spacing/index.d.ts +0 -1
  395. package/lib/foundations/spacing/spacing-guidelines.d.ts +0 -33
  396. package/lib/foundations/spacing/spacing.d.ts +0 -18
  397. package/lib/foundations/typography/constants.d.ts +0 -22
  398. package/lib/foundations/typography/fonts.d.ts +0 -1
  399. package/lib/foundations/typography/index.d.ts +0 -1
  400. package/lib/foundations/typography/text-aspect-flags.d.ts +0 -19
  401. package/lib/foundations/typography/typography.d.ts +0 -24
  402. package/lib/helpers/generic-types.d.ts +0 -21
  403. package/lib/helpers/index.d.ts +0 -8
  404. package/lib/helpers/isReactElementOfType.d.ts +0 -8
  405. package/lib/helpers/nothing.d.ts +0 -10
  406. package/lib/helpers/safe-navigation.d.ts +0 -17
  407. package/lib/helpers/slots.d.ts +0 -17
  408. package/lib/helpers/strings.d.ts +0 -1
  409. package/lib/helpers/useInputElementState.d.ts +0 -30
  410. package/lib/helpers/useKeyDown.d.ts +0 -1
@@ -0,0 +1,49 @@
1
+ Components
2
+ ==========
3
+
4
+ This folder contains the components that will be exported from the Product Language and used in the front-end.
5
+
6
+ ```
7
+ /src
8
+ /lib
9
+ /components
10
+ /alert-banner
11
+ /card
12
+ index.ts
13
+ ```
14
+
15
+ The index.ts file is a manifest and anything in the manifest will be available the clients.
16
+
17
+ ```
18
+ /src
19
+ /lib
20
+ /components
21
+ /alert-banner
22
+ /card
23
+ /components
24
+ /helpers
25
+ index.tsx
26
+ card.tsx
27
+ card.stories.tsx
28
+ card.spec.ts
29
+ index.ts
30
+ ```
31
+
32
+ inside of any component, like `card` you will find another index.ts file. This is a manifest and it should only declare the main file of the component as an export:
33
+
34
+ ```ts
35
+ export * from './card'
36
+ ```
37
+
38
+ None of the specs, stories, sub-components, helpers, or any other kind of thing should appear in the manifest. Using manifests like this allows us to give each component a rich eco-system of helpers and sub-components without needing to move everything to a global scope.
39
+
40
+ For example, here is a helper in card/helpers.ts
41
+
42
+ ```ts
43
+ // this is not a real helper, just an example
44
+ export function makeCardTitle (title: string) {
45
+ return `Card: ${title}`
46
+ }
47
+ ```
48
+
49
+ This helper is obviously tightly coupled to the card "concern". It should not be declared in a global helpers file, that wouldn't make sense and it would lower cohesion in the app. In addition, it should not be exported from the manifest, since it is not intended for the client to use it.
@@ -0,0 +1,93 @@
1
+ import { render, screen } from '@testing-library/react'
2
+ import userEvent from '@testing-library/user-event'
3
+ import { AlertBanner } from './alert-banner'
4
+
5
+
6
+ describe('Alert banner tests', () => {
7
+ it('should render the alert banner when attribute open is true', async () => {
8
+ render (
9
+ <AlertBanner
10
+ open={true}
11
+ onClose={() => { return }}
12
+ >
13
+ Alert Banner
14
+ </AlertBanner>
15
+ )
16
+ expect(screen.getByRole('alert')).toBeInTheDocument()
17
+ })
18
+ it('should not render the close button by default', async () => {
19
+ const handleClose = jest.fn()
20
+
21
+ render (
22
+ <AlertBanner
23
+ open={true}
24
+ onClose={handleClose}
25
+ >
26
+ Alert Banner
27
+ </AlertBanner>
28
+ )
29
+
30
+ expect(handleClose).not.toHaveBeenCalled()
31
+ const closeButton = screen.queryByLabelText('Close')
32
+ expect(closeButton).not.toBeInTheDocument()
33
+
34
+ })
35
+ it('should render the close button and handle the close function', async () => {
36
+ const handleClose = jest.fn()
37
+
38
+ render (
39
+ <AlertBanner
40
+ open={true}
41
+ onClose={handleClose}
42
+ dismissible={true}
43
+ >
44
+ Alert Banner
45
+ </AlertBanner>
46
+ )
47
+
48
+ expect(handleClose).not.toHaveBeenCalled()
49
+ const closeButton = screen.getByLabelText('Close')
50
+ expect(closeButton).toBeInTheDocument()
51
+ await userEvent.click(closeButton)
52
+ expect(handleClose).toHaveBeenCalled()
53
+
54
+ })
55
+ it('should render the primary action button and handle event after click', async () => {
56
+ const handlePrimaryButtonClick = jest.fn()
57
+
58
+ render (
59
+ <AlertBanner
60
+ primaryButtonLabel="Do thing!"
61
+ onPrimaryAction={handlePrimaryButtonClick}
62
+ >
63
+ Alert Banner
64
+ </AlertBanner>
65
+ )
66
+
67
+ expect(handlePrimaryButtonClick).not.toHaveBeenCalled()
68
+ const primaryButton = screen.getByText('Do thing!')
69
+ expect(primaryButton).toBeInTheDocument()
70
+ await userEvent.click(primaryButton)
71
+ expect(handlePrimaryButtonClick).toHaveBeenCalled()
72
+
73
+ })
74
+ it('should render the secondary action button and handle event after click', async () => {
75
+ const handleSecondaryButtonClick = jest.fn()
76
+
77
+ render (
78
+ <AlertBanner
79
+ secondaryButtonLabel="Do other thing!"
80
+ onSecondaryAction={handleSecondaryButtonClick}
81
+ >
82
+ Alert Banner
83
+ </AlertBanner>
84
+ )
85
+
86
+ expect(handleSecondaryButtonClick).not.toHaveBeenCalled()
87
+ const primaryButton = screen.getByText('Do other thing!')
88
+ expect(primaryButton).toBeInTheDocument()
89
+ await userEvent.click(primaryButton)
90
+ expect(handleSecondaryButtonClick).toHaveBeenCalled()
91
+
92
+ })
93
+ })
@@ -0,0 +1,117 @@
1
+ import styled from 'styled-components'
2
+ import { FC, Hex, is, isDefined, Nothing, PropsWithChildren, safeCallback } from '@helpers'
3
+ import { AlertLevelProps, getBackgroundColor, getBorderColor, getIcon } from './alert-level-flags'
4
+ import { Gap, Padding } from '@foundations'
5
+ import { CardFrame } from 'components/card/atoms'
6
+ import { IconMinor } from 'components/icon'
7
+ import { Button } from 'components/molecules/button'
8
+ import { Body} from 'components/typography'
9
+ interface IAlertBannerProps extends PropsWithChildren {
10
+ dismissible?: boolean
11
+ className?: string
12
+ open?: boolean
13
+ primaryButtonLabel?: string
14
+ secondaryButtonLabel?: string
15
+ onPrimaryAction?: () => void
16
+ onSecondaryAction?: () => void
17
+ onClose?: () => void
18
+ }
19
+
20
+ export type AlertBannerProps = IAlertBannerProps & AlertLevelProps
21
+
22
+ const InCardFrame = styled(CardFrame).attrs({ as: 'div' })<{ background: Hex, border: Hex}>`
23
+ display: flex;
24
+ padding: ${Padding.m};
25
+ width: fill-available;
26
+ position: relative;
27
+ flex-wrap: wrap;
28
+ background: ${({ background }) => background};
29
+ border: 1px solid ${({ border }) => border};
30
+ `
31
+
32
+ const IconContainer = styled.div<{ iconColor: Hex }>`
33
+ width: fit-content;
34
+ svg[role='icon'] {
35
+ position: initial;
36
+ path {
37
+ fill: ${(props) => props.iconColor};
38
+ }
39
+ }
40
+ `
41
+
42
+ const AlertFooter = styled.footer`
43
+ width: 100%;
44
+ padding: ${Padding.m} ${Padding.xl} ${Padding.none} ;
45
+ bottom: 0;
46
+ box-sizing: border-box;
47
+ display: flex;
48
+ gap: ${Gap.xs};
49
+ `
50
+
51
+ const Content = styled(Body)`
52
+ padding-left: ${Padding.m};
53
+ flex: 1;
54
+ overflow: auto;
55
+ `
56
+
57
+ const CloseButton = styled(IconMinor.Xmark)`
58
+ cursor: pointer;
59
+ position: absolute;
60
+ top: 12px;
61
+ right: 12px;
62
+ border-radius: 3px;
63
+ `
64
+
65
+ export const AlertBanner: FC<AlertBannerProps> = (props) => {
66
+ const {
67
+ open = true,
68
+ dismissible = false,
69
+ primaryButtonLabel,
70
+ secondaryButtonLabel,
71
+ onPrimaryAction,
72
+ onSecondaryAction,
73
+ onClose,
74
+ } = props
75
+
76
+ const background = getBackgroundColor(props)
77
+ const border = getBorderColor(props)
78
+
79
+ const { icon: LevelIcon, color: iconColor } = getIcon(props)
80
+
81
+ const handleClose = () => {
82
+ safeCallback(onClose)
83
+ }
84
+
85
+ if(!is(open)) {
86
+ return <Nothing />
87
+ }
88
+
89
+ return (
90
+ <InCardFrame role="alert" background={background} border={border} className={props.className}>
91
+ <IconContainer iconColor={iconColor}>
92
+ <LevelIcon></LevelIcon>
93
+ </IconContainer>
94
+ <Content>
95
+ {props.children}
96
+ </Content>
97
+ { is(dismissible)
98
+ ? <CloseButton aria-label="Close" onClick={handleClose}></CloseButton>
99
+ : <Nothing></Nothing>
100
+ }
101
+
102
+ { isDefined(primaryButtonLabel) || isDefined(secondaryButtonLabel)
103
+ ? <AlertFooter>
104
+ { isDefined(primaryButtonLabel)
105
+ ? <Button outline onClick={onPrimaryAction} name="alert-banner-primary-button">{primaryButtonLabel}</Button>
106
+ : <Nothing />
107
+ }
108
+ { isDefined(secondaryButtonLabel)
109
+ ? <Button plain subtle onClick={onSecondaryAction} name="alert-banner-secondary-button">{secondaryButtonLabel}</Button>
110
+ : <Nothing />
111
+ }
112
+ </AlertFooter>
113
+ : <Nothing />
114
+ }
115
+ </InCardFrame>
116
+ )
117
+ }
@@ -0,0 +1,101 @@
1
+ // this file was generated, but it is safe to modify
2
+ import { Borders, Surface, Icons } from '@foundations'
3
+ import { bitwiseOr, Hex, MappedEnum, RequireOnlyOne, PropsWithChildren } from '@helpers'
4
+ import { ComponentType } from 'react'
5
+ import { Icon } from '../icon'
6
+
7
+ const enum AlertLevel {
8
+ neutral = 1,
9
+ info = 2,
10
+ success = 4,
11
+ warning = 8,
12
+ critical = 16,
13
+ }
14
+
15
+ type AlertLevels<T> = MappedEnum<typeof AlertLevel, T>
16
+
17
+ function toAlertLevel(n: number): AlertLevel {
18
+ switch (n) {
19
+ case AlertLevel.neutral:
20
+ return AlertLevel.neutral
21
+ case AlertLevel.info:
22
+ return AlertLevel.info
23
+ case AlertLevel.success:
24
+ return AlertLevel.success
25
+ case AlertLevel.warning:
26
+ return AlertLevel.warning
27
+ case AlertLevel.critical:
28
+ return AlertLevel.critical
29
+ default:
30
+ return AlertLevel.neutral
31
+ }
32
+ }
33
+
34
+ export type AlertLevelProps = Partial<RequireOnlyOne<AlertLevels<boolean>>> &
35
+ PropsWithChildren
36
+
37
+ const AlertLevelBackgroundColors = {
38
+ [AlertLevel.neutral]: Surface.Neutral.Subdued,
39
+ [AlertLevel.info]: Surface.Highlight.Subdued,
40
+ [AlertLevel.success]: Surface.Success.Subdued,
41
+ [AlertLevel.warning]: Surface.Warning.Subdued,
42
+ [AlertLevel.critical]: Surface.Critical.Subdued,
43
+ }
44
+
45
+ const AlertLevelBorderColors = {
46
+ [AlertLevel.neutral]: Borders.Default.Default,
47
+ [AlertLevel.info]: Borders.Highlight.Subdued,
48
+ [AlertLevel.success]: Borders.Success.Subdued,
49
+ [AlertLevel.warning]: Borders.Warning.Subdued,
50
+ [AlertLevel.critical]: Borders.Critical.Subdued,
51
+ }
52
+
53
+ const AlertLevelIcons = {
54
+ [AlertLevel.neutral]: { icon: Icon.CircleInfo, color: Icons.Default },
55
+ [AlertLevel.info]: { icon: Icon.CircleInfo, color: Icons.Highlight },
56
+ [AlertLevel.success]: { icon: Icon.CircleCheck, color: Icons.Success },
57
+ [AlertLevel.warning]: { icon: Icon.TriangleExclamation, color: Icons.Warning },
58
+ [AlertLevel.critical]: { icon: Icon.DiamondExclamation, color: Icons.Critical },
59
+ }
60
+
61
+ export function getBackgroundColor(props: AlertLevelProps): Hex {
62
+ return AlertLevelBackgroundColors[
63
+ toAlertLevel(
64
+ bitwiseOr([
65
+ props.neutral,
66
+ props.info,
67
+ props.success,
68
+ props.warning,
69
+ props.critical,
70
+ ])
71
+ )
72
+ ]
73
+ }
74
+
75
+ export function getBorderColor(props: AlertLevelProps): Hex {
76
+ return AlertLevelBorderColors[
77
+ toAlertLevel(
78
+ bitwiseOr([
79
+ props.neutral,
80
+ props.info,
81
+ props.success,
82
+ props.warning,
83
+ props.critical,
84
+ ])
85
+ )
86
+ ]
87
+ }
88
+
89
+ export function getIcon(props: AlertLevelProps): { icon: ComponentType, color: Hex } {
90
+ return AlertLevelIcons[
91
+ toAlertLevel(
92
+ bitwiseOr([
93
+ props.neutral,
94
+ props.info,
95
+ props.success,
96
+ props.warning,
97
+ props.critical,
98
+ ])
99
+ )
100
+ ]
101
+ }
@@ -0,0 +1 @@
1
+ export * from './alert-banner'
@@ -0,0 +1,67 @@
1
+ import { Canvas, Meta, Story } from '@storybook/addon-docs';
2
+ import { Card, SpaceBetween } from '@components'
3
+ import {
4
+ SimpleAlertBanner,
5
+ TypeVariantAlertBanner,
6
+ DismissibleAlertBanner,
7
+ ActionsAlertBanner
8
+ } from './components'
9
+
10
+ import { AlertBanner } from '../alert-banner'
11
+ import { Heading3, Body } from '../../typography'
12
+
13
+ <Meta title="Components/AlertBanner" component={AlertBanner}/>
14
+
15
+
16
+ # Alert Banner
17
+ • Alert Banners informs user about important changes or persistent conditions.
18
+ Use this component if you need to communicate to users in a prominent way.
19
+
20
+ For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=1082%3A1049&t=lBbNjmK8G41XPGz9-0)
21
+
22
+
23
+ ## How to use
24
+
25
+ ```javascript
26
+ // Import the component
27
+ import { AlertBanner } from './index'
28
+
29
+
30
+ // Render the component sending the parameters
31
+ <AlertBanner default>
32
+ <div> Content </div>
33
+ </AlertBanner>
34
+
35
+ ```
36
+
37
+ ### Simple Alert Banner
38
+ <SimpleAlertBanner />
39
+
40
+
41
+
42
+ ### Alert Banner with different type
43
+ The possible values are `neutral` \| `info` \| `success` \| `warning` \| `critical`
44
+ <TypeVariantAlertBanner />
45
+
46
+
47
+ ### Dismissible alert banner
48
+
49
+ <DismissibleAlertBanner/>
50
+
51
+ ### Alert banner with action buttons
52
+ <ActionsAlertBanner />
53
+
54
+
55
+ ## API
56
+
57
+ | Name | Type | Description |
58
+ | ----------------------------------------------------- ----- | ------------ | --------------------------------------------------------- |
59
+ | `dismissible?` | `boolean` | Defines if the user can dismiss alert |
60
+ | `className?` | `string` | Class to be attached to the Container |
61
+ | `open?` | `boolean` | Defines if the alert is visible on screen |
62
+ | `primaryButtonLabel?` | `boolean` | Text on the primary button |
63
+ | `secondaryButtonLabel?` | `boolean` | Text on the secondary button |
64
+ | `onPrimaryAction?` | `() => void` | Primary button event handler function |
65
+ | `onSecondaryAction?` | `() => void` | Secondary button event handler function |
66
+ | `onClose?` | `() => void` | Callback function invoked to close the alert banner |
67
+ | `neutral` \| `info` \| `success` \| `warning` \| `critical` | boolean | Define the color and icons of the alert |
@@ -0,0 +1,124 @@
1
+
2
+ import { AlertBanner } from '../alert-banner'
3
+ import { Button, Body, Heading3 } from '@components'
4
+ import { Margin } from '@foundations'
5
+ import styled from 'styled-components'
6
+ import { CardPlayground } from '@stories'
7
+
8
+ const ToggleButton = styled(Button)`
9
+ margin-bottom: ${Margin.s};
10
+ `
11
+
12
+ const AlertBannerHeading = styled(Heading3)`
13
+ margin-bottom: ${Margin.xs};
14
+ `
15
+
16
+ export const SimpleAlertBanner = () => (
17
+ <CardPlayground
18
+ code={`
19
+ const [isOpen, setIsOpen] = useState(true);
20
+
21
+ <>
22
+ <AlertBanner>
23
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
24
+ </AlertBanner>
25
+ </>
26
+ `}
27
+ providerProps={{
28
+ renderAsComponent: true,
29
+ scope: {
30
+ AlertBanner,
31
+ },
32
+ }}
33
+ />
34
+ )
35
+
36
+
37
+ export const TypeVariantAlertBanner = () => (
38
+ <CardPlayground
39
+ code={`
40
+ const [isOpen, setIsOpen] = useState(true);
41
+
42
+ <>
43
+ <AlertBanner warning>
44
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
45
+ </AlertBanner>
46
+ </>
47
+ `}
48
+ providerProps={{
49
+ renderAsComponent: true,
50
+ scope: {
51
+ AlertBanner,
52
+ },
53
+ }}
54
+ />
55
+ )
56
+
57
+ export const DismissibleAlertBanner = () => (
58
+ <CardPlayground
59
+ code={`
60
+ const [isOpen, setIsOpen] = useState(true);
61
+
62
+ <>
63
+ <ToggleButton onClick={() => setIsOpen(!isOpen)}>{isOpen ? 'Close' : 'Open'} the alert banner!</ToggleButton>
64
+ <AlertBanner
65
+ info
66
+ dismissible={true}
67
+ open={isOpen}
68
+ onClose={() => setIsOpen(false)}
69
+ >
70
+ <AlertBannerHeading>Info</AlertBannerHeading>
71
+ <Body>
72
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
73
+ Arcu mollis viverra duis in scelerisque condimentum aenean sit
74
+ turpis. Donec dictum bibendum non tristique placerat aliquet massa, odi.
75
+ </Body>
76
+ </AlertBanner>
77
+ </>
78
+ `}
79
+ providerProps={{
80
+ renderAsComponent: true,
81
+ scope: {
82
+ AlertBannerHeading,
83
+ AlertBanner,
84
+ Body,
85
+ ToggleButton
86
+ },
87
+ }}
88
+ />
89
+ )
90
+
91
+
92
+ export const ActionsAlertBanner = () => (
93
+ <CardPlayground
94
+ code={`
95
+ const [isOpen, setIsOpen] = useState(true);
96
+
97
+ <>
98
+ <AlertBanner
99
+ success
100
+ primaryButtonLabel="Take the blue pill"
101
+ secondaryButtonLabel="Take the red pill"
102
+ onPrimaryAction={() => alert("Nice choice")}
103
+ onSecondaryAction={() => alert("Wrong choice")}
104
+ >
105
+ <AlertBannerHeading>Success</AlertBannerHeading>
106
+ <Body>
107
+ Bacon ipsum dolor amet tongue turducken frankfurter biltong meatloaf
108
+ andouille bresaola jowl. Ham pastrami tongue capicola kielbasa prosciutto short ribs flank beef.
109
+ Pastrami shank venison tri-tip, bresaola landjaeger chicken capicola swine kielbasa.
110
+ </Body>
111
+ </AlertBanner>
112
+ </>
113
+ `}
114
+ providerProps={{
115
+ renderAsComponent: true,
116
+ scope: {
117
+ AlertBannerHeading,
118
+ AlertBanner,
119
+ Body,
120
+ ToggleButton
121
+ },
122
+ }}
123
+ />
124
+ )
@@ -0,0 +1,72 @@
1
+ // this file was generated, but it is safe to modify
2
+ import { Hex, PropsWithChildren } from '@helpers'
3
+ import { Surface } from '@foundations'
4
+
5
+ const enum BadgeType {
6
+ neutral = 1,
7
+ info = 2,
8
+ success = 4,
9
+ warning = 8,
10
+ critical = 16,
11
+ }
12
+
13
+ export type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<
14
+ T,
15
+ Exclude<keyof T, Keys>
16
+ > &
17
+ {
18
+ [K in Keys]-?: Required<Pick<T, K>> &
19
+ Partial<Record<Exclude<Keys, K>, undefined>>;
20
+ }[Keys];
21
+
22
+ export type MappedEnum<E, T> = {
23
+ [key in keyof E]: T;
24
+ }
25
+
26
+ type BadgeTypes<T> = MappedEnum<typeof BadgeType, T>
27
+
28
+ function toBadgeType(n: number): BadgeType {
29
+ switch (n) {
30
+ case BadgeType.neutral:
31
+ return BadgeType.neutral
32
+ case BadgeType.info:
33
+ return BadgeType.info
34
+ case BadgeType.success:
35
+ return BadgeType.success
36
+ case BadgeType.warning:
37
+ return BadgeType.warning
38
+ case BadgeType.critical:
39
+ return BadgeType.critical
40
+ default:
41
+ return BadgeType.neutral
42
+ }
43
+ }
44
+
45
+ const BadgeTypeColors = {
46
+ [BadgeType.neutral]: Surface.Neutral.Default,
47
+ [BadgeType.info]: Surface.Highlight.Default,
48
+ [BadgeType.success]: Surface.Success.Default,
49
+ [BadgeType.warning]: Surface.Warning.Default,
50
+ [BadgeType.critical]: Surface.Critical.Default,
51
+ }
52
+
53
+ export type BadgeTypeProps = Partial<RequireOnlyOne<BadgeTypes<boolean>>> &
54
+ PropsWithChildren
55
+
56
+ function bitwiseOr(flags: unknown[]): number {
57
+ return flags.reduce((mask: number, flag, i) => mask | (Number(flag) << i), 0)
58
+ }
59
+
60
+ export function getColor(props: BadgeTypeProps): Hex {
61
+ return BadgeTypeColors[
62
+ toBadgeType(
63
+ bitwiseOr([
64
+ props.neutral,
65
+ props.info,
66
+ props.success,
67
+ props.warning,
68
+ props.critical,
69
+ ])
70
+ )
71
+ ]
72
+ }
@@ -0,0 +1,29 @@
1
+ import { render } from '@testing-library/react'
2
+ import { Badge } from './badge'
3
+
4
+ describe('Badge', () => {
5
+ it('should render Neutral Badge successfully', () => {
6
+ const { baseElement } = render(<Badge neutral>Neutral</Badge>)
7
+ expect(baseElement).toBeTruthy()
8
+ })
9
+
10
+ it('should render Informational Badge successfully', () => {
11
+ const { baseElement } = render(<Badge info>Informational</Badge>)
12
+ expect(baseElement).toBeTruthy()
13
+ })
14
+
15
+ it('should render Warning Badge successfully', () => {
16
+ const { baseElement } = render(<Badge warning>Warning</Badge>)
17
+ expect(baseElement).toBeTruthy()
18
+ })
19
+
20
+ it('should render Success Badge successfully', () => {
21
+ const { baseElement } = render(<Badge success>Success</Badge>)
22
+ expect(baseElement).toBeTruthy()
23
+ })
24
+
25
+ it('should render Critical Badge successfully', () => {
26
+ const { baseElement } = render(<Badge critical>Critical</Badge>)
27
+ expect(baseElement).toBeTruthy()
28
+ })
29
+ })
@@ -0,0 +1,22 @@
1
+ import styled from 'styled-components'
2
+ import { Padding } from '@foundations'
3
+ import { BadgeTypeProps, getColor } from './badge-type-flags'
4
+ import { FC, PropsWithChildren } from '@helpers'
5
+ import { Label } from 'components/typography'
6
+
7
+ const BadgeFrame = styled(Label)<{color: string}>`
8
+ background: ${props => props.color};
9
+ display: flex;
10
+ align-items:center;
11
+ padding: ${Padding.xxxs} ${Padding.xs};
12
+ border-radius:10px;
13
+ height: fit-content;
14
+ `
15
+
16
+ type IBadgeProps = BadgeTypeProps & PropsWithChildren
17
+
18
+ export const Badge: FC<IBadgeProps> = (props) => {
19
+ const color = getColor(props)
20
+
21
+ return <BadgeFrame color={color}>{props.children}</BadgeFrame>
22
+ }
@@ -0,0 +1 @@
1
+ export * from './badge'