@edvisor/product-language 0.9.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 (407) 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/radio-button/index.d.ts +0 -1
  332. package/lib/components/radio-button/radio-button.d.ts +0 -10
  333. package/lib/components/range-slider/components/bar-chart.d.ts +0 -8
  334. package/lib/components/range-slider/components/handle.d.ts +0 -12
  335. package/lib/components/range-slider/components/rail.d.ts +0 -9
  336. package/lib/components/range-slider/components/slider-component.d.ts +0 -12
  337. package/lib/components/range-slider/components/slider-inputs.d.ts +0 -14
  338. package/lib/components/range-slider/components/tick.d.ts +0 -10
  339. package/lib/components/range-slider/components/track.d.ts +0 -11
  340. package/lib/components/range-slider/index.d.ts +0 -2
  341. package/lib/components/range-slider/range-slider.d.ts +0 -15
  342. package/lib/components/range-slider/slider.d.ts +0 -11
  343. package/lib/components/range-slider/types.d.ts +0 -11
  344. package/lib/components/select/components/menu-container.d.ts +0 -3
  345. package/lib/components/select/components/menu-list.d.ts +0 -3
  346. package/lib/components/select/components/menu-row.d.ts +0 -9
  347. package/lib/components/select/components/menu.d.ts +0 -3
  348. package/lib/components/select/components/option.d.ts +0 -13
  349. package/lib/components/select/components/select-label.d.ts +0 -1
  350. package/lib/components/select/components/value-component-multi.d.ts +0 -4
  351. package/lib/components/select/components/value-component-single.d.ts +0 -4
  352. package/lib/components/select/components/value.d.ts +0 -4
  353. package/lib/components/select/index.d.ts +0 -3
  354. package/lib/components/select/select.d.ts +0 -10
  355. package/lib/components/select/types.d.ts +0 -133
  356. package/lib/components/select/utils.d.ts +0 -15
  357. package/lib/components/spinner/spinner-size-flags.d.ts +0 -10
  358. package/lib/components/spinner/spinner.d.ts +0 -9
  359. package/lib/components/tabs/components/index.d.ts +0 -1
  360. package/lib/components/tabs/components/tab.d.ts +0 -8
  361. package/lib/components/tabs/index.d.ts +0 -1
  362. package/lib/components/tabs/tabs.d.ts +0 -16
  363. package/lib/components/tag/components/close-button.d.ts +0 -8
  364. package/lib/components/tag/components/index.d.ts +0 -2
  365. package/lib/components/tag/components/tag-label.d.ts +0 -8
  366. package/lib/components/tag/index.d.ts +0 -1
  367. package/lib/components/tag/tag.d.ts +0 -10
  368. package/lib/components/thumbnail/index.d.ts +0 -1
  369. package/lib/components/thumbnail/thumbnail-size-flags.d.ts +0 -10
  370. package/lib/components/thumbnail/thumbnail.d.ts +0 -10
  371. package/lib/components/tooltip/index.d.ts +0 -1
  372. package/lib/components/tooltip/tooltip.d.ts +0 -26
  373. package/lib/components/tree-view/components/tree-node.d.ts +0 -3
  374. package/lib/components/tree-view/helper.d.ts +0 -12
  375. package/lib/components/tree-view/index.d.ts +0 -2
  376. package/lib/components/tree-view/tree-view.d.ts +0 -3
  377. package/lib/components/tree-view/types.d.ts +0 -63
  378. package/lib/components/typography/index.d.ts +0 -1
  379. package/lib/components/typography/typography.d.ts +0 -24
  380. package/lib/foundations/color-system/base-palette/base-palette.d.ts +0 -76
  381. package/lib/foundations/color-system/base-palette/index.d.ts +0 -1
  382. package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +0 -133
  383. package/lib/foundations/color-system/color-guidelines/index.d.ts +0 -1
  384. package/lib/foundations/color-system/components/color-sample.d.ts +0 -17
  385. package/lib/foundations/color-system/components/index.d.ts +0 -1
  386. package/lib/foundations/color-system/index.d.ts +0 -1
  387. package/lib/foundations/index.d.ts +0 -4
  388. package/lib/foundations/shadows/components.d.ts +0 -8
  389. package/lib/foundations/shadows/index.d.ts +0 -1
  390. package/lib/foundations/shadows/shadows.d.ts +0 -8
  391. package/lib/foundations/spacing/index.d.ts +0 -1
  392. package/lib/foundations/spacing/spacing-guidelines.d.ts +0 -33
  393. package/lib/foundations/spacing/spacing.d.ts +0 -18
  394. package/lib/foundations/typography/constants.d.ts +0 -22
  395. package/lib/foundations/typography/fonts.d.ts +0 -1
  396. package/lib/foundations/typography/index.d.ts +0 -1
  397. package/lib/foundations/typography/text-aspect-flags.d.ts +0 -19
  398. package/lib/foundations/typography/typography.d.ts +0 -24
  399. package/lib/helpers/generic-types.d.ts +0 -21
  400. package/lib/helpers/index.d.ts +0 -8
  401. package/lib/helpers/isReactElementOfType.d.ts +0 -8
  402. package/lib/helpers/nothing.d.ts +0 -10
  403. package/lib/helpers/safe-navigation.d.ts +0 -17
  404. package/lib/helpers/slots.d.ts +0 -17
  405. package/lib/helpers/strings.d.ts +0 -1
  406. package/lib/helpers/useInputElementState.d.ts +0 -30
  407. package/lib/helpers/useKeyDown.d.ts +0 -1
@@ -0,0 +1,157 @@
1
+ /* eslint-disable no-restricted-syntax */
2
+ import { InputHTMLAttributes } from 'react'
3
+ import { FC } from '@helpers'
4
+ import styled from 'styled-components'
5
+ import { Borders, Focused, Icons, Margin, Padding, Surface } from '@foundations'
6
+ import { Label } from 'components/typography'
7
+
8
+ export interface InputElementProps extends InputHTMLAttributes<HTMLInputElement> {
9
+ label: string;
10
+ id: string;
11
+ key?: string;
12
+ disabled?: boolean;
13
+ }
14
+
15
+ export interface IOption {
16
+ label: string;
17
+ value: string;
18
+ name?: string;
19
+ disabled?: boolean;
20
+ }
21
+
22
+ export interface IOptionGroup {
23
+ label: string;
24
+ options: IOption[];
25
+ onChange: (value: string) => void
26
+ }
27
+
28
+ export const RadioButton: FC<InputElementProps> = (props) => {
29
+ return (
30
+ <OptionWrapper>
31
+ <Label style={{minWidth: '50px'}}>
32
+ {props.label}
33
+ </Label>
34
+ <Radio type="radio" disabled={props.disabled} {...props} />
35
+ </OptionWrapper>
36
+ )
37
+ }
38
+
39
+ export const RadioButtonGroup: FC<IOptionGroup> = (props) => {
40
+
41
+ const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
42
+ props.onChange(event.target.value)
43
+ }
44
+
45
+ const renderOptions = () => {
46
+ return props.options.map((option: IOption, index) => {
47
+ const shortenedOptionLabel = option.label.replace(/\s+/g, '')
48
+ const optionId = `radio-option-${shortenedOptionLabel}`
49
+
50
+ return (
51
+ <RadioButton
52
+ value={option.value}
53
+ label={option.label}
54
+ key={optionId}
55
+ id={optionId}
56
+ name={option.name}
57
+ disabled={option.disabled}
58
+ defaultChecked={index === 0}
59
+ onChange={handleChange}
60
+ />
61
+ )
62
+ })
63
+ }
64
+
65
+ return (
66
+ <Container>
67
+ <Title>{props.label}</Title>
68
+ <GroupWrapper>
69
+ {renderOptions()}
70
+ </GroupWrapper>
71
+ </Container>
72
+ )
73
+ }
74
+
75
+ const Container = styled.div`
76
+ display: flex;
77
+ flex-direction: row;
78
+ align-items: center;
79
+ float: left;
80
+ `
81
+
82
+ const Title = styled(Label)`
83
+ padding: ${Padding.none} ${Padding.xs};
84
+ min-width: 100px;
85
+ `
86
+
87
+ const GroupWrapper = styled.div`
88
+ display: flex;
89
+ min-width: 150px;
90
+ flex-direction: row;
91
+ align-items: center;
92
+ `
93
+
94
+ const OptionWrapper = styled.div`
95
+ gap: 6px;
96
+ padding: ${Padding.xs};
97
+ display: flex;
98
+ flex-direction: row-reverse;
99
+ float: left;
100
+ `
101
+
102
+ export const Radio = styled.input`
103
+ -webkit-appearance: none;
104
+ appearance: none;
105
+ margin: ${Margin.none};
106
+ width: 1.5em;
107
+ height: 1.5em;
108
+ border: 2px solid ${Borders.Highlight.Default};
109
+ border-radius: 50%;
110
+ transition: all 0.1s ease-in-out;
111
+ ::after {
112
+ content: "";
113
+ display: block;
114
+ border-radius: 50%;
115
+ width: 0.75em;
116
+ height: 0.75em;
117
+ margin: 3px;
118
+ }
119
+ :checked {
120
+ ::after {
121
+ background-color: ${Icons.Highlight};
122
+ }
123
+ :hover {
124
+ background-color: ${Surface.Default.Default};
125
+ border: 2px solid ${Icons.Highlight};
126
+ ::after {
127
+ background-color: ${Icons.Highlight};
128
+ }
129
+ }
130
+ }
131
+ :hover {
132
+ ::after {
133
+ background-color: ${Focused.Default};
134
+ }
135
+ }
136
+ :disabled {
137
+ cursor: not-allowed;
138
+ border: 2px solid ${Focused.Default};
139
+ background-color: ${Surface.Highlight.Default};
140
+ :hover {
141
+ ::after {
142
+ background-color: ${Surface.Highlight.Default};
143
+ }
144
+ }
145
+ :checked {
146
+ ::after {
147
+ background-color: ${Focused.Default};
148
+ }
149
+ :hover {
150
+ background-color: ${Surface.Highlight.Default};
151
+ ::after {
152
+ background-color: ${Focused.Default};
153
+ }
154
+ }
155
+ }
156
+ }
157
+ `
@@ -0,0 +1,172 @@
1
+ import { Canvas, Meta, Story, ArgsTable } from '@storybook/addon-docs';
2
+ import { Select } from '../index'
3
+ import {
4
+ SelectOptions,
5
+ CustomLabelComponent,
6
+ HugeListWithCustomLabelComponent,
7
+ CustomValidation,
8
+ CustomMenu,
9
+ FancyMenu
10
+ } from './components'
11
+
12
+
13
+ <Meta title="Components/Select" component={Select}/>
14
+
15
+ # Select System
16
+
17
+ For more details, check out the guidelines on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=4%3A12&t=3Z4YOaL6SG9Km6ih-0)
18
+
19
+ ### Table of Contents
20
+ 1. [How to use](#how-to-use)
21
+ 2. [Select Options](#select-options)
22
+ 3. [Custom Label component](#custom-label)
23
+ 4. [Handling Huge lists](#huge-lists)
24
+ 5. [Validation](#validation)
25
+ 6. [Custom Menu Component](#custom-menu)
26
+ 7. [Customized Menu](#fancy-menu)
27
+ 8. [API](#api)
28
+ 9. [Select props](#select)
29
+ 10. [option props](#option)
30
+ 11. [labelComponent props](#labelComponent)
31
+ 12. [menuComponent props](#menuComponent)
32
+
33
+ <div id="how-to-use"/>
34
+
35
+ ## How to Use
36
+
37
+ ```tsx
38
+ import { select } from '@edvisor/product-language'
39
+
40
+ <Select />
41
+
42
+ ```
43
+
44
+ <div id="select-options"></div>
45
+
46
+ ### Select Options
47
+ <SelectOptions />
48
+
49
+ <div id="custom-label"></div>
50
+
51
+ ### Custom Label component
52
+ <CustomLabelComponent/>
53
+
54
+ <div id="huge-lists"></div>
55
+
56
+ ### Handling Huge lists
57
+ The Select component uses [react-window](https://github.com/bvaughn/react-window) for efficiently rendering large lists by rendering part of a large data set
58
+
59
+ Try searching some Countries
60
+ <HugeListWithCustomLabelComponent/>
61
+
62
+ <div id="validation"></div>
63
+
64
+ ### Validation
65
+ <CustomValidation/>
66
+
67
+ <div id="custom-menu"></div>
68
+
69
+ ### Custom Menu Component
70
+ You can build your own menu component and pass it to the `menuComponent` property
71
+ <CustomMenu/>
72
+
73
+ <div id="fancy-menu"></div>
74
+
75
+ ### Customized Menu
76
+
77
+ This is a ready to use customized menu.
78
+ Add the extra `icon` and `helperText` to the option Object to have them rendered in the menu.
79
+
80
+ ```tsx
81
+ {
82
+ label: string,
83
+ value: T | T[],
84
+ icon?: IconM | IconMinor,
85
+ helperText?: string
86
+ }
87
+ ```
88
+ <FancyMenu/>
89
+
90
+ <div id="api"></div>
91
+
92
+ ## API
93
+
94
+ <div id="select"></div>
95
+
96
+ ### `Select : ISelectProps`
97
+
98
+ | Prop | Type | Description |
99
+ | ------------------------------------ | ----------------------------------------------------------------- | ---------------------------------------------------------------- |
100
+ | `className?` | `string` | A Class name to be added to the wrapper |
101
+ | [`options?`](#option) | `IOption<T>[]` | A list of values to be selected |
102
+ | `value?` | `T` \| `T[]` | The current value selected |
103
+ | `placeholder?` | `string` | The placeholder to be displayed |
104
+ | `emptyText?` | `string` | The text to be displayed when there are no values |
105
+ | `clearable?` | `boolean` | Allow the selected value to be cleared |
106
+ | `searchable?` | `boolean` | Enable search in the select |
107
+ | `disabled?` | `boolean` | Disable the component |
108
+ | `multi?` | `boolean` | Enable multi selection |
109
+ | `invalid?` | `boolean` | Indicate there's an error in the component |
110
+ | `rowHeight?` | `number` | The height of the fields, defaults to 44px |
111
+ | `menuHeight?` | `number` | The height of the menu, defaults to 190px |
112
+ | `menuPosition?` | `top` \| `bottom` | The position where the menu should be rendered |
113
+ | `menuTitle?` | `string` | Menu title when using the [Customized Menu](#fancy-menu) |
114
+ | `label?` | `string` | The Label of the select |
115
+ | `labelPosition?` | `top` \| `side` | The position where the label should be rendered |
116
+ | [`menuComponent?`](#menuComponent) | `JSX.Element<IMenuComponentProps>` | Replaces the default List Menu component |
117
+ | [`labelComponent?`](#labelComponent) | `JSX.Element<LabelComponentProps<T>>` | Replaces the default Label component |
118
+ | `onChange?` | `(value: T[]` \| `T` \| `undefined, option?: IOption<T>) => void` | Called when an option is changed |
119
+ | `onSearch?` | `(value: string) => void` | Called when the search is triggers |
120
+ | `onOpen?` | `() => void` | Called when the menu opens |
121
+ | `onClose?` | `() => void` | Called when the menu closes |
122
+
123
+ <div id="option"></div>
124
+
125
+ ### `option: IOption`
126
+ The options property expects an array of objects of a type:
127
+ ```tsx
128
+ {
129
+ label: string,
130
+ value: T | T[],
131
+ }
132
+ ```
133
+
134
+ | Prop | Type | Description |
135
+ | ----------------- | ------------- | ----------------------------------------------- |
136
+ | value | T | The Option value |
137
+ | disabled? | boolean | Whether the option is disabled (not implemented) |
138
+ | label | string | The Option label to be displayed |
139
+ | [key: string] | any | key to the custom properties |
140
+
141
+
142
+ <div id="labelComponent"></div>
143
+
144
+ ### `labelComponent: LabelComponentProps extends IOption`
145
+ | Prop | Type | Description |
146
+ | ----------------- | ------------- | ---------------------------------------------------------- |
147
+ | `active` | `boolean` | indicates the option is active |
148
+ | `type` | `value-single` \| `value-multi` \| `option` | used to style accordingly |
149
+
150
+ <div id="menuComponent"></div>
151
+
152
+ ### `menuComponent: IMenuComponentProps`
153
+ When using the custom menuComponent, the select exposes this properties.
154
+
155
+ | Prop | Type | Description |
156
+ | ----------------- | --------------------------------------------------------| --------------------------------------------- |
157
+ | `options` | `IOption<T>[]` | The list of values of the selected |
158
+ | `value` | `T` \| `T[]` | The Selected Value |
159
+ | `labelComponent` | `JSX.Element<LabelComponentProps<T>>` | The Select Label Component |
160
+ | `emptyText` | `string` | Text displayed when there are no values |
161
+ | `multi` | `boolean` | Indicate multi selection is active |
162
+ | `rowHeight` | `number` | The height of the fields |
163
+ | `menuHeight` | `number` | The height of the menu |
164
+ | `menuPosition` | `top` \| `bottom` | The position of the menu |
165
+ | `invalid` | `boolean` | Indicate an error in the component |
166
+ | `selectedIndex?` | `number` | The index of the Selected Item |
167
+ | `open` | `boolean` | Indicates if the menu is open |
168
+ | `search?` | `string` | The string typed in the search field |
169
+ | `labelPosition?` | `string` | The position where the label |
170
+ | `label?` | `string` | The Label of the select |
171
+ | `onSelect` |`(value: T extends any[] ? T[] : T, option?: T) => void` | Triggers when the selected option changes |
172
+
@@ -0,0 +1,149 @@
1
+ import { FC } from '@helpers'
2
+ import { CSSProperties } from 'react'
3
+
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ export interface ISelectProps<T = any> {
6
+ className?: string
7
+ style?: CSSProperties
8
+ options?: IOption<T>[]
9
+ value?: T | T[]
10
+ placeholder?: string
11
+ emptyText?: string
12
+ clearable?: boolean
13
+ searchable?: boolean
14
+ disabled?: boolean
15
+ multi?: boolean
16
+ invalid?: boolean
17
+ errors?: { message: string }[]
18
+ rowHeight?: number
19
+ menuHeight?: number
20
+ menuPosition?: 'top' | 'bottom'
21
+ menuTitle?: string
22
+ label?: string
23
+ labelPosition?: 'top' | 'side'
24
+ labelComponent?: FC<LabelComponentProps<T>>
25
+ menuComponent?: FC<IMenuComponentProps>
26
+ onChange?(value: T[] | T | undefined, option?: IOption<T>): void
27
+ onSearch?(value: string): void
28
+ onOpen?(): void
29
+ onClose?(): void
30
+ }
31
+
32
+ export interface IValueProps {
33
+ options: ISelectProps['options'];
34
+ value: ISelectProps['value'];
35
+ placeholder: ISelectProps['placeholder'];
36
+ clearable: ISelectProps['clearable'];
37
+ searchable: ISelectProps['searchable'];
38
+ labelComponent: ISelectProps['labelComponent'];
39
+ multi: ISelectProps['multi'];
40
+ disabled: ISelectProps['disabled'];
41
+ invalid: ISelectProps['invalid'];
42
+ errors: ISelectProps['errors'];
43
+ search?: string;
44
+ open: boolean;
45
+ focused?: boolean;
46
+ label: ISelectProps['label'];
47
+ labelPosition: ISelectProps['labelPosition'];
48
+ onClear(): void;
49
+ onClick(): void;
50
+ onSearch(search: string): void;
51
+ onSearchFocus(): void;
52
+ onSearchBlur(): void;
53
+ onOptionRemove(value: any): void;
54
+ }
55
+
56
+ export interface IMenuContainerProps {
57
+ className?: string;
58
+ menuTop?: number;
59
+ menuHeight?: RectSize;
60
+ menuPosition?: ISelectProps['menuPosition'];
61
+ invalid?: boolean;
62
+ labelPosition?: string
63
+ label?: string
64
+ children?: React.ReactNode;
65
+ onRef?(el: HTMLDivElement | undefined): void;
66
+ onClick?(el: React.MouseEvent<HTMLDivElement>): void;
67
+ }
68
+
69
+ type RectSize = number | 'auto';
70
+
71
+ export interface IValueComponentMultiProps<T = any>
72
+ extends IValueComponentSingleProps<T> {
73
+ options: IOption<T>[];
74
+ onRemove(value: T): void;
75
+ }
76
+
77
+ export type LabelComponentProps<T = any> = IOption<T> & {
78
+ active: boolean;
79
+ type: 'value-single' | 'value-multi' | 'option';
80
+ }
81
+
82
+ export interface IValueComponentSingleProps<T = any> {
83
+ className?: string;
84
+ option: IOption<T>;
85
+ labelComponent: ISelectProps['labelComponent'];
86
+ }
87
+
88
+ export interface IOptionComponentProps<T extends IOption = any> {
89
+ className?: string;
90
+ option: T;
91
+ active?: boolean;
92
+ selected?: boolean;
93
+ height?: number;
94
+ labelComponent: ISelectProps['labelComponent'];
95
+ search?: string;
96
+ onSelect(value: T['value'], option?: T): void;
97
+ }
98
+
99
+ export interface IOption<T = any> {
100
+ value: T;
101
+ disabled?: boolean;
102
+ label: string;
103
+ [key: string]: any;
104
+ }
105
+
106
+ export interface IMenuComponentProps<T = any> {
107
+ options: ISelectProps['options'];
108
+ value: ISelectProps['value'];
109
+ labelComponent: ISelectProps['labelComponent'];
110
+ menuComponent: ISelectProps['menuComponent'];
111
+ emptyText: ISelectProps['emptyText'];
112
+ multi: ISelectProps['multi'];
113
+ rowHeight: ISelectProps['rowHeight'];
114
+ menuHeight: ISelectProps['menuHeight'];
115
+ menuPosition: ISelectProps['menuPosition'];
116
+ invalid: ISelectProps['invalid'];
117
+ selectedIndex?: number;
118
+ open: boolean;
119
+ search?: string;
120
+ labelPosition?: string;
121
+ label?: string;
122
+ menuTitle?: string
123
+ onSelect(value: T extends any[] ? T[] : T, option?: T): void;
124
+ }
125
+
126
+ export interface IPosition {
127
+ menuPosition?: 'top' | 'bottom',
128
+ menuHeight?: RectSize,
129
+ label?: string,
130
+ labelPosition?: string
131
+ }
132
+
133
+ export const DEFAULT_ROW_HEIGHT = 44
134
+
135
+ export const DEFAULT_MENU_HEIGHT = 190
136
+
137
+ export const DEFAULT_EMPTY_TEXT = 'No results found'
138
+
139
+ export const DEFAULT_PLACEHOLDER = 'Select Something'
140
+
141
+ export const enum menuPositionType {
142
+ TOP = 'top',
143
+ BOTTOM = 'bottom',
144
+ }
145
+
146
+ export const enum labelPositionType {
147
+ TOP = 'top',
148
+ SIDE = 'side',
149
+ }
@@ -0,0 +1,101 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { is, isDefined, isEmpty, isNil } from '@helpers'
3
+ import { IOption, IPosition, labelPositionType, menuPositionType } from './types'
4
+
5
+ export function getDocument(): Document | undefined {
6
+ if (typeof document !== 'undefined') {
7
+ return document
8
+ }
9
+
10
+ return undefined
11
+ }
12
+
13
+ export function equal(valueA: any, valueB: any) {
14
+ if (valueA === valueB) {
15
+ return true
16
+ }
17
+
18
+ if (isNil(valueA) || isNil(valueB)) {
19
+ return false
20
+ }
21
+
22
+ if (typeof valueA === 'object' && typeof valueB === 'object') {
23
+ if (isDefined(valueA.toJSON) && isDefined(valueB.toJSON)) {
24
+ return JSON.stringify(valueA.toJSON()) === JSON.stringify(valueB.toJSON())
25
+ }
26
+
27
+ return JSON.stringify(valueA) === JSON.stringify(valueB)
28
+ }
29
+
30
+ return false
31
+ }
32
+
33
+ export function getValueOptions(
34
+ options: IOption[],
35
+ value: any,
36
+ multi: boolean | undefined,
37
+ ) {
38
+ return options
39
+ .slice()
40
+ .filter((option) => {
41
+ if (Array.isArray(value) && is(multi)) {
42
+ return value.some((val) =>
43
+ equal(option.value, val)
44
+ )
45
+ } else {
46
+ return equal(option.value, value)
47
+ }
48
+ })
49
+ .sort((optionA, optionB) => {
50
+ if (Array.isArray(value) && is(multi)) {
51
+ const resultA = value.findIndex((val) =>
52
+ equal(optionA.value, val)
53
+ )
54
+ const resultB = value.findIndex((val) =>
55
+ equal(optionB.value, val)
56
+ )
57
+
58
+ return resultA < resultB ? -1 : resultA > resultB ? 1 : 0
59
+ } else {
60
+ return 0
61
+ }
62
+ })
63
+ }
64
+
65
+ export const keys = {
66
+ ARROW_UP: 'ArrowUp',
67
+ ARROW_DOWN: 'ArrowDown',
68
+ ENTER: 'Enter',
69
+ TAB: 'Tab',
70
+ ESC: 'Escape',
71
+ BACKSPACE: 'Backspace',
72
+ SPACE: ' '
73
+ }
74
+
75
+ export function toKey(value: any): string | number {
76
+ if (typeof value === 'string') {
77
+ return value
78
+ }
79
+
80
+ if (isDefined(value) && typeof value === 'object') {
81
+ const jsonObject = isDefined(value.toJSON) ? value.toJSON() : value
82
+
83
+ return JSON.stringify(jsonObject)
84
+ }
85
+
86
+ return JSON.stringify(value)
87
+ }
88
+
89
+ export const topPosition = (props: IPosition) => {
90
+ if (props.menuPosition === menuPositionType.TOP
91
+ && isDefined(props.menuHeight)
92
+ && typeof props.menuHeight === 'number') {
93
+
94
+ return `${-(props.menuHeight + (
95
+ isDefined(props.label) && !isEmpty(props.label)
96
+ && props.labelPosition === labelPositionType.TOP
97
+ ? 64
98
+ : 44))}px`
99
+ }
100
+ return '4px'
101
+ }
@@ -0,0 +1 @@
1
+ export * from './spinner'
@@ -0,0 +1,39 @@
1
+ import { bitwiseOr, MappedEnum, RequireOnlyOne, PropsWithChildren } from '@helpers'
2
+
3
+ const enum SpinnerSize {
4
+ small = 1,
5
+ medium = 2,
6
+ large = 4,
7
+ }
8
+
9
+ type SpinnerSizes<T> = MappedEnum<typeof SpinnerSize, T>
10
+
11
+ function toSpinner(n: number): SpinnerSize {
12
+ switch (n) {
13
+ case SpinnerSize.small:
14
+ return SpinnerSize.small
15
+ case SpinnerSize.medium:
16
+ return SpinnerSize.medium
17
+ case SpinnerSize.large:
18
+ return SpinnerSize.large
19
+ default:
20
+ return SpinnerSize.medium
21
+ }
22
+ }
23
+
24
+ const SpinnerValues = {
25
+ [SpinnerSize.small]: '18px',
26
+ [SpinnerSize.medium]: '40px',
27
+ [SpinnerSize.large]: '60px',
28
+ }
29
+
30
+ export type SpinnerProps = Partial<RequireOnlyOne<SpinnerSizes<boolean>>> &
31
+ PropsWithChildren
32
+
33
+ export function getValuesBySize(props: SpinnerProps): string {
34
+ return SpinnerValues[
35
+ toSpinner(
36
+ bitwiseOr([props.small, props.medium, props.large])
37
+ )
38
+ ]
39
+ }
@@ -0,0 +1,31 @@
1
+ import { render, screen } from '@testing-library/react'
2
+ import { Spinner } from './index'
3
+
4
+ describe('Spinner Tests', () => {
5
+ describe('Spinner Tests', () => {
6
+ it('should render the Spinner with default size', async () => {
7
+ render(
8
+ <Spinner />
9
+ )
10
+
11
+ const spinner = screen.getByRole('icon')
12
+
13
+ expect(spinner).toBeInTheDocument()
14
+ expect(spinner).toHaveStyle('height: 40px')
15
+
16
+ })
17
+
18
+ it('should render the Spinner with small size', async () => {
19
+ render(
20
+ <Spinner small/>
21
+ )
22
+
23
+ const spinner = screen.getByRole('icon')
24
+
25
+ expect(spinner).toBeInTheDocument()
26
+ expect(spinner).toHaveStyle('height: 18px')
27
+
28
+ })
29
+
30
+ })
31
+ })