@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,259 @@
1
+ import { Button, InputField, Label } from '@components'
2
+ import { Padding } from '@foundations'
3
+ import { isDefined } from '@helpers'
4
+ import { OverflowPlayground as Playground } from '@stories'
5
+ import styled from 'styled-components'
6
+ import { DatePicker } from '../date-picker'
7
+ import { datePickerFactory } from '../helpers/date-picker-factory'
8
+
9
+ export const DatePickerExample = () => (
10
+ <Playground
11
+ code={`
12
+ <DatePicker label='Start Date' />
13
+ `}
14
+ providerProps={{
15
+ renderAsComponent: true,
16
+ scope: {
17
+ DatePicker,
18
+ InputField,
19
+ },
20
+ }}
21
+ />
22
+ )
23
+
24
+ export const DatePickerFormatExample = () => (
25
+ <Playground
26
+ code={`
27
+ const [value, setValue] = useState(new Date().toISOString());
28
+
29
+ <>
30
+ <div>You Chose: {value}</div>
31
+ <DatePicker format={undefined} value={value} onChange={setValue} />
32
+ <DatePicker format='MMMM D, YYYY' value={value} onChange={setValue} />
33
+ <DatePicker format={({ date }) => 'Today is: ' + date} value={value} onChange={setValue} />
34
+ </>
35
+ `}
36
+ providerProps={{
37
+ renderAsComponent: true,
38
+ scope: {
39
+ DatePicker,
40
+ InputField,
41
+ },
42
+ }}
43
+ />
44
+ )
45
+
46
+ export const DatePickerAvailableDatesExample = () => (
47
+ <Playground
48
+ code={`
49
+ const today = new Date().toISOString()
50
+ const tomorrow = new Date(today)
51
+ tomorrow.setDate(tomorrow.getDate() + 1)
52
+
53
+ const isUnavailable = ({ date }) => new Date(date).getDay() === 6 || new Date(date).getDay() === 0;
54
+ const isTomorrow = ({ date, isSameDate }) => isSameDate(date, tomorrow);
55
+
56
+ <>
57
+ <div>No weekends, and we can do same day but not next day.</div>
58
+ <DatePicker min={today} isAvailable={(props) => !isUnavailable(props) && !isTomorrow(props)} />
59
+ </>
60
+ `}
61
+ providerProps={{
62
+ renderAsComponent: true,
63
+ scope: {
64
+ DatePicker,
65
+ InputField,
66
+ },
67
+ }}
68
+ />
69
+ )
70
+
71
+ export const DatePickerControlledExample = () => (
72
+ <Playground
73
+ code={`
74
+ const [value, setValue] = useState(new Date().toISOString());
75
+
76
+ <>
77
+ <div>You chose: {value}</div>
78
+ <DatePicker value={value} onChange={setValue} label='Start Date' />
79
+ </>
80
+ `}
81
+ providerProps={{
82
+ renderAsComponent: true,
83
+ scope: {
84
+ DatePicker,
85
+ InputField,
86
+ },
87
+ }}
88
+ />
89
+ )
90
+
91
+ export const DatePickerControlledOpenExample = () => (
92
+ <Playground
93
+ code={`
94
+ const [open, setOpen] = useState(false);
95
+
96
+ <>
97
+ <Button onClick={() => setOpen(!open)}>{open ? 'Close' : 'Open'} Sesame!</Button>
98
+ <DatePicker isOpen={open} onClick={() => setOpen(!open)} label='Start Date' />
99
+ </>
100
+ `}
101
+ providerProps={{
102
+ renderAsComponent: true,
103
+ scope: {
104
+ Button,
105
+ DatePicker,
106
+ InputField,
107
+ },
108
+ }}
109
+ />
110
+ )
111
+
112
+ export const DatePickerCustomHandleExample = () => (
113
+ <Playground
114
+ code={`
115
+ <DatePicker>
116
+ <DatePicker.Controls>
117
+ <Label>Click Me</Label>
118
+ </DatePicker.Controls>
119
+ </DatePicker>
120
+ `}
121
+ providerProps={{
122
+ renderAsComponent: true,
123
+ scope: {
124
+ DatePicker,
125
+ Label,
126
+ },
127
+ }}
128
+ />
129
+ )
130
+
131
+ const Controls = styled.div`
132
+ padding: ${Padding.l};
133
+ `
134
+
135
+ export const DatePickerWithExtraStuffInTheCalendar = () => (
136
+ <Playground
137
+ code={`
138
+ const [open, setOpen] = useState(false)
139
+ const [value, setValue] = useState(new Date().toISOString())
140
+ const [draft, setDraft] = useState(value);
141
+ const publish = (date) => {
142
+ setValue(date)
143
+ setDraft(date)
144
+ }
145
+
146
+ const NULL_DATE = ''
147
+ const format = ({ date, defaultFormatter }) => date === NULL_DATE
148
+ ? 'Next Available'
149
+ : defaultFormatter(date, 'MMMM D, YYYY');
150
+
151
+ <>
152
+ <DatePicker
153
+ format={format}
154
+ value={draft}
155
+ onChange={setDraft}
156
+ label='Start Date'
157
+ isOpen={open}
158
+ onClick={setOpen}
159
+ >
160
+ <Controls>
161
+ <Button onClick={() => publish(NULL_DATE)}>Next Available</Button>
162
+ <Button onClick={() => { setDraft(value); setOpen(false) }}>Cancel</Button>
163
+ <Button onClick={() => { publish(draft); setOpen(false) }}>Confirm</Button>
164
+ </Controls>
165
+ </DatePicker>
166
+ </>
167
+ `}
168
+ providerProps={{
169
+ renderAsComponent: true,
170
+ scope: {
171
+ DatePicker,
172
+ Controls,
173
+ Button,
174
+ InputField,
175
+ },
176
+ }}
177
+ />
178
+ )
179
+
180
+ const EpochDatePicker = datePickerFactory<number>({
181
+ toDate: (n) => new Date(n),
182
+ fromDate: (date) => isDefined(date) ? date.valueOf() : 0,
183
+ empty: (date) => date.valueOf() === 0,
184
+ })
185
+
186
+ export const DatePickerFactoryExample = () => (
187
+ <Playground
188
+ code={`
189
+ const [open, setOpen] = useState(false)
190
+ const [value, setValue] = useState(new Date().valueOf())
191
+ const [draft, setDraft] = useState(value)
192
+ const publish = (date) => {
193
+ setValue(date)
194
+ setDraft(date)
195
+ }
196
+
197
+ const format = ({ date, defaultFormatter }) => date.valueOf() === 0
198
+ ? 'Next Available'
199
+ : defaultFormatter(date, 'MMMM D, YYYY');
200
+
201
+ <>
202
+ You Chose: {value}
203
+ <EpochDatePicker
204
+ format={format}
205
+ value={draft}
206
+ onChange={setDraft}
207
+ label='Start Date'
208
+ isOpen={open}
209
+ onClick={setOpen}
210
+ >
211
+ <Controls>
212
+ <Button onClick={() => publish(0)}>Next Available</Button>
213
+ <Button onClick={() => { setDraft(value); setOpen(false) }}>Cancel</Button>
214
+ <Button onClick={() => { publish(draft); setOpen(false) }}>Confirm</Button>
215
+ </Controls>
216
+ </EpochDatePicker>
217
+ </>
218
+ `}
219
+ providerProps={{
220
+ renderAsComponent: true,
221
+ scope: {
222
+ EpochDatePicker,
223
+ Controls,
224
+ Button,
225
+ InputField,
226
+ },
227
+ }}
228
+ />
229
+ )
230
+
231
+ export const DatePickerFormExample = () => (
232
+ <Playground
233
+ code={`
234
+ const [min, setMin] = useState(new Date().toISOString())
235
+ const [max, setMax] = useState(new Date().toISOString());
236
+
237
+ <form onSubmit={(e) => e.preventDefault()}>
238
+ <DatePicker max={max} label='min' value={min} onChange={setMin} />
239
+ <DatePicker min={min} label='max' value={max} onChange={setMax} />
240
+ <DatePicker
241
+ label='Start Date'
242
+ required
243
+ min={min}
244
+ max={max}
245
+ />
246
+ <Button primary type='submit'>Submit</Button>
247
+ </form>
248
+ `}
249
+ providerProps={{
250
+ renderAsComponent: true,
251
+ scope: {
252
+ DatePicker,
253
+ Button,
254
+ InputField,
255
+ Label,
256
+ },
257
+ }}
258
+ />
259
+ )
@@ -0,0 +1,133 @@
1
+ import { Meta, Canvas } from '@storybook/addon-docs';
2
+ import { AlertBanner } from 'components/alert-banner'
3
+ import {
4
+ DatePickerExample,
5
+ DatePickerFormatExample,
6
+ DatePickerCustomHandleExample,
7
+ DatePickerRangeExample,
8
+ DatePickerControlledExample,
9
+ DatePickerControlledOpenExample,
10
+ DatePickerWithExtraStuffInTheCalendar,
11
+ DatePickerFactoryExample,
12
+ DatePickerAvailableDatesExample,
13
+ DatePickerFormExample,
14
+ } from './components'
15
+ import { DatePicker } from '../date-picker'
16
+
17
+ <Meta title="Components/Date Picker"/>
18
+
19
+ # Date Picker
20
+
21
+ Date Pickers let merchants choose dates from a visual calendar that’s consistently applied wherever dates need to be selected across Edvisor. For more details refer to <a href='https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=734%3A7365&t=Cz5qnAbrJNBJj8b1-0'>figma</a>.
22
+
23
+ ## How to Use It
24
+
25
+ ```tsx
26
+ import { DatePicker } from '@edvisor/product-language'
27
+
28
+ <DatePicker />
29
+ ```
30
+
31
+ ### Uncontrolled
32
+
33
+ Drop it into your project uncontrolled.
34
+
35
+ <DatePickerExample />
36
+
37
+ ### Controlled
38
+
39
+ Add state to control the date picker. By default the DatePicker takes a string as value.
40
+
41
+ <DatePickerControlledExample />
42
+
43
+ ### Familiar HTML Input Interface
44
+
45
+ Wrap it in a form and mark it required. Pass in a min/max to restrict input to that range.
46
+
47
+ <DatePickerFormExample />
48
+
49
+ ### Specify Available Dates
50
+
51
+ In addition to the min/max prop, you can pass in an `isAvailable` callback to apply specific restrictions.
52
+
53
+ <DatePickerAvailableDatesExample />
54
+
55
+ ## Props
56
+
57
+ extends `InputHTMLAttributes<HTMLInputElement>` except where described below.
58
+
59
+ | Prop | Type | Description |
60
+ | --------------- | --------------------------- | ------------------------------------------------- |
61
+ | `value?` | `string` | The date |
62
+ | `defaultValue?` | `string` | Provide a value for the uncontrolled component |
63
+ | `onChange?` | `(change: string) => void` | Receive the value when it changes |
64
+ | `min?` | `string` | The earliest date the user can choose |
65
+ | `max?` | `string` | The latest date the user can choose |
66
+ | `isAvailable?` | `(date: string) => boolean` | A predicate that determines if a date is disabled |
67
+
68
+ ## Customization
69
+
70
+ The default is sufficient for most cases, but you can also customize the DatePicker.
71
+
72
+ ### Custom Open/Close
73
+
74
+ By controlling the open state you can open or close the input from outside.
75
+
76
+ <DatePickerControlledOpenExample />
77
+
78
+ ### Custom Format
79
+
80
+ Pass in a format string or a custom formatting function. This only affects the visual format of the data.
81
+
82
+ <DatePickerFormatExample />
83
+
84
+ ### Custom Input/Handle
85
+
86
+ The input/handle can be replaced using the Controls slot.
87
+
88
+ <DatePickerCustomHandleExample />
89
+
90
+ ### Custom Calendar Controls
91
+
92
+ Children are rendered inside the calendar>
93
+
94
+ <DatePickerWithExtraStuffInTheCalendar />
95
+
96
+ ### Props
97
+
98
+ | Prop | Type | Description |
99
+ | ---------- | ------------------------ | ------------------------------------------------ |
100
+ | `isOpen?` | `boolean` | Determines if the Calendar is visible |
101
+ | `onClick?` | `() => void` | Called when the input/handle is clicked |
102
+ | `format?` | `string | DateFormatter` | Called to render the date visually in the handle |
103
+
104
+ ### Slots
105
+
106
+ | Slot | Description |
107
+ | ---------- | -------------------------------------------- |
108
+ | `Controls` | Completely replaces the default input/handle |
109
+ | `children` | Adds UI elements inside the Calendar |
110
+
111
+ ## DatePicker Factory
112
+
113
+ In all the previous examples, the date picker used string as input and output. You can create a DatePicker for any data type using datePickerFactory. For example, you could use number:
114
+
115
+ ```ts
116
+ const EpochDatePicker = datePickerFactory<number>({
117
+ toDate: (n) => new Date(n),
118
+ fromDate: (date) => isDefined(date) ? date.valueOf() : 0,
119
+ empty: (date) => date.valueOf() === 0,
120
+ })
121
+ ```
122
+
123
+ This makes it relatively easy to use the DatePicker with date libraries like Luxon.
124
+
125
+ <DatePickerFactoryExample />
126
+
127
+ ## Props
128
+
129
+ | Prop | Type | Description |
130
+ | ---------- | ------------------------- | ---------------------------------------------------------------------------------- |
131
+ | `toDate` | `(el: T) => Date` | Maps your type to date |
132
+ | `fromDate` | `(date: Date) => T` | Maps date to your type |
133
+ | `empty` | `(date: Date) => boolean` | Returns true if you give it the empty element of your type (such as '' for string) |
@@ -0,0 +1,37 @@
1
+ // this file was generated, but it is safe to modify
2
+ import { bitwiseOr, MappedEnum, RequireOnlyOne, PropsWithChildren } from '@helpers'
3
+ import { Borders } from '@foundations'
4
+
5
+ const enum DividerType {
6
+ default = 1,
7
+ subdued = 2,
8
+ }
9
+
10
+ type DividerTypes<T> = MappedEnum<typeof DividerType, T>
11
+
12
+ function toDividerType(n: number): DividerType {
13
+ switch (n) {
14
+ case DividerType.default:
15
+ return DividerType.default
16
+ case DividerType.subdued:
17
+ return DividerType.subdued
18
+ default:
19
+ return DividerType.default
20
+ }
21
+ }
22
+
23
+ const DividerTypeColor = {
24
+ [DividerType.default]: Borders.Default.Default,
25
+ [DividerType.subdued]: Borders.Default.Subdued,
26
+ }
27
+
28
+ export type DivideTypeProps = Partial<RequireOnlyOne<DividerTypes<boolean>>> &
29
+ PropsWithChildren
30
+
31
+ export function getColor(props: DivideTypeProps): string {
32
+ return DividerTypeColor[
33
+ toDividerType(
34
+ bitwiseOr([props.default, props.subdued])
35
+ )
36
+ ]
37
+ }
@@ -0,0 +1,34 @@
1
+ import { render, screen } from '@testing-library/react'
2
+ import { Divider } from './index'
3
+ import { Borders } from '@foundations'
4
+
5
+ describe('Divider Tests', () => {
6
+ describe('Divider Tests', () => {
7
+ it('should render the Divider with default color', async () => {
8
+ render(
9
+ <Divider/>
10
+ )
11
+
12
+ expect(screen.getByTestId('divider-test')).toBeInTheDocument()
13
+ expect(screen.getByTestId('divider-test')).toHaveStyle(`border: 1px solid ${Borders.Default.Default}`)
14
+ })
15
+
16
+ it('should render the Divider with default color using parameter', async () => {
17
+ render(
18
+ <Divider default/>
19
+ )
20
+
21
+ expect(screen.getByTestId('divider-test')).toBeInTheDocument()
22
+ expect(screen.getByTestId('divider-test')).toHaveStyle(`border: 1px solid ${Borders.Default.Default}`)
23
+ })
24
+
25
+ it('should render the Divider with subdued color', async () => {
26
+ render(
27
+ <Divider subdued/>
28
+ )
29
+
30
+ expect(screen.getByTestId('divider-test')).toBeInTheDocument()
31
+ expect(screen.getByTestId('divider-test')).toHaveStyle(`border: 1px solid ${Borders.Default.Subdued}`)
32
+ })
33
+ })
34
+ })
@@ -0,0 +1,37 @@
1
+ import styled from 'styled-components'
2
+ import { FC } from '@helpers'
3
+ import { DivideTypeProps, getColor } from './divider-type-flags'
4
+
5
+ /**
6
+ * @TODO I added flex here because without it the bottom margin was
7
+ * being collapsed with the next sibling (when I applied margins to the divider,
8
+ * which I expect we basically _always_ will)
9
+ *
10
+ * I'm not confident with reasoning about margin-collapse so if you see
11
+ * this comment and feel like experimenting, go crazy. Check out the
12
+ * card stories for an example of the divider (it's way at the bottom)
13
+ */
14
+ const DividerWrapper = styled.div`
15
+ position: relative;
16
+ width:100%;
17
+ `
18
+
19
+ const DividerLine = styled.hr<{ color: string }>`
20
+ position: absolute;
21
+ left: 0;
22
+ right: 0;
23
+ margin: unset;
24
+ border: 1px solid ${({ color }) => color};
25
+ `
26
+
27
+ type IProps = { className?: string } & DivideTypeProps
28
+
29
+ export const Divider: FC<IProps> = (props) => {
30
+ const color = getColor(props)
31
+
32
+ return (
33
+ <DividerWrapper className={props.className}>
34
+ <DividerLine color={color} data-testid="divider-test"/>
35
+ </DividerWrapper>
36
+ )
37
+ }
@@ -0,0 +1 @@
1
+ export * from './divider'
@@ -0,0 +1,13 @@
1
+ import styled from 'styled-components'
2
+ import { Padding, Surface } from '@foundations'
3
+
4
+
5
+ const WrapperStories = styled.div`
6
+ width: 390px;
7
+ padding: ${Padding.l};
8
+ background: ${Surface.Default.Default};
9
+ `
10
+
11
+ export {
12
+ WrapperStories
13
+ }
@@ -0,0 +1,44 @@
1
+ import { Canvas, Meta } from '@storybook/addon-docs';
2
+ import { Divider } from '../index'
3
+ import { WrapperStories, AvatarsWithText, AvatarsWithImage, WrapperStoriesWithLabel } from './components'
4
+
5
+ <Meta
6
+ title="Components/Divider"
7
+ component={Divider}
8
+ />
9
+
10
+ # Divider
11
+
12
+ For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=1194%3A1611)
13
+
14
+ ## How to use
15
+
16
+ ```javascript
17
+ // Import the component
18
+ import { Divider } from './index'
19
+
20
+
21
+ // Render the component sending the parameters
22
+ <Divider default/>
23
+
24
+ //or
25
+
26
+ <Divider subdued/>
27
+ ```
28
+
29
+ ## Examples
30
+
31
+ Default Divider
32
+ <Canvas>
33
+ <WrapperStories>
34
+ <Divider default/>
35
+ </WrapperStories>
36
+ </Canvas>
37
+
38
+ Subdued Divider
39
+ <Canvas>
40
+ <WrapperStories>
41
+ <Divider subdued/>
42
+ </WrapperStories>
43
+ </Canvas>
44
+
@@ -0,0 +1,55 @@
1
+ import { bitwiseOr, MappedEnum, RequireOnlyOne, PropsWithChildren } from '@helpers'
2
+
3
+ export const enum FlagSize {
4
+ small = 1,
5
+ medium = 2,
6
+ large = 4,
7
+ }
8
+
9
+ type FlagSizes<T> = MappedEnum<typeof FlagSize, T>
10
+
11
+ function toFlag(n: number): FlagSize {
12
+ switch (n) {
13
+ case FlagSize.small:
14
+ return FlagSize.small
15
+ case FlagSize.medium:
16
+ return FlagSize.medium
17
+ case FlagSize.large:
18
+ return FlagSize.large
19
+ default:
20
+ return FlagSize.medium
21
+ }
22
+ }
23
+
24
+ const FlagWidthValues = {
25
+ [FlagSize.small]: '20',
26
+ [FlagSize.medium]: '20',
27
+ [FlagSize.large]: '32',
28
+ }
29
+
30
+ const FlagHeightValues = {
31
+ [FlagSize.small]: '20',
32
+ [FlagSize.medium]: '20',
33
+ [FlagSize.large]: '24',
34
+ }
35
+
36
+ export type FlagProps = Partial<RequireOnlyOne<FlagSizes<boolean>>> &
37
+ PropsWithChildren
38
+
39
+ export function getHeigthBySize(props: FlagProps): string {
40
+ return FlagHeightValues[
41
+ getFlagSize(props)
42
+ ]
43
+ }
44
+
45
+ export function getWidthBySize(props: FlagProps): string {
46
+ return FlagWidthValues[
47
+ getFlagSize(props)
48
+ ]
49
+ }
50
+
51
+ export function getFlagSize(props: FlagProps) {
52
+ return toFlag(
53
+ bitwiseOr([props.small, props.medium, props.large])
54
+ )
55
+ }