@edvisor/product-language 0.6.0 → 0.7.0-rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/.babelrc +12 -0
  2. package/.eslintrc.json +147 -0
  3. package/.storybook/main.js +57 -0
  4. package/.storybook/manager.js +7 -0
  5. package/.storybook/preview.js +15 -0
  6. package/.storybook/tsconfig.json +30 -0
  7. package/jest.config.ts +15 -0
  8. package/jest.setup.ts +2 -0
  9. package/package.json +3 -12
  10. package/project.json +96 -0
  11. package/release-it.json +18 -0
  12. package/src/README.md +61 -0
  13. package/src/assets/svg/example_icon.svg +3 -0
  14. package/src/assets/svg/example_icon_white.svg +3 -0
  15. package/src/assets/svg/spinner.svg +3 -0
  16. package/src/assets/svg/spinner_white.svg +3 -0
  17. package/src/helpers/index.ts +4 -0
  18. package/src/helpers/playground.ts +26 -0
  19. package/src/helpers/talesOf.tsx +42 -0
  20. package/src/index.ts +2 -0
  21. package/src/lib/components/README.md +49 -0
  22. package/src/lib/components/alert-banner/alert-banner.tsx +34 -0
  23. package/src/lib/components/alert-banner/alert-level-flags.ts +77 -0
  24. package/src/lib/components/alert-banner/index.ts +1 -0
  25. package/src/lib/components/badge/badge-type-flags.ts +72 -0
  26. package/src/lib/components/badge/badge.test.tsx +29 -0
  27. package/src/lib/components/badge/badge.tsx +22 -0
  28. package/src/lib/components/badge/index.ts +1 -0
  29. package/src/lib/components/badge/stories/badge.stories.mdx +44 -0
  30. package/src/lib/components/badge/stories/components.tsx +49 -0
  31. package/{lib/components/card/atoms/card-frame.d.ts → src/lib/components/card/atoms/card-frame.tsx} +16 -7
  32. package/src/lib/components/card/atoms/index.ts +1 -0
  33. package/src/lib/components/card/card.test.tsx +162 -0
  34. package/src/lib/components/card/card.tsx +78 -0
  35. package/src/lib/components/card/components/card-alert-banner-slot.tsx +16 -0
  36. package/src/lib/components/card/components/card-controls-slot.tsx +19 -0
  37. package/src/lib/components/card/components/card-section-slot.tsx +51 -0
  38. package/src/lib/components/card/components/index.ts +3 -0
  39. package/src/lib/components/card/index.ts +3 -0
  40. package/src/lib/components/card/molecules/index.ts +1 -0
  41. package/src/lib/components/card/molecules/left-right-card.test.tsx +89 -0
  42. package/src/lib/components/card/molecules/left-right-card.tsx +63 -0
  43. package/src/lib/components/card/storybook/card.stories.mdx +100 -0
  44. package/src/lib/components/card/storybook/components.tsx +227 -0
  45. package/src/lib/components/checkbox/checkbox.test.tsx +39 -0
  46. package/src/lib/components/checkbox/checkbox.tsx +70 -0
  47. package/src/lib/components/checkbox/helpers.tsx +98 -0
  48. package/src/lib/components/checkbox/index.tsx +1 -0
  49. package/src/lib/components/checkbox/stories/checkbox.stories.mdx +57 -0
  50. package/src/lib/components/checkbox/stories/components.tsx +84 -0
  51. package/src/lib/components/date-picker/components/custom-calendar.tsx +193 -0
  52. package/src/lib/components/date-picker/components/index.ts +1 -0
  53. package/src/lib/components/date-picker/data-picker.test.tsx +220 -0
  54. package/src/lib/components/date-picker/date-picker.tsx +10 -0
  55. package/src/lib/components/date-picker/helpers/date-picker-factory.tsx +210 -0
  56. package/src/lib/components/date-picker/index.ts +1 -0
  57. package/src/lib/components/date-picker/storybook/components.tsx +259 -0
  58. package/src/lib/components/date-picker/storybook/date-picker.stories.mdx +133 -0
  59. package/src/lib/components/divider/divider-type-flags.tsx +37 -0
  60. package/src/lib/components/divider/divider.test.tsx +34 -0
  61. package/src/lib/components/divider/divider.tsx +37 -0
  62. package/src/lib/components/divider/index.tsx +1 -0
  63. package/src/lib/components/divider/stories/components.tsx +13 -0
  64. package/src/lib/components/divider/stories/divider.stories.mdx +44 -0
  65. package/src/lib/components/flag/flag-size-flags.tsx +55 -0
  66. package/src/lib/components/flag/flag.list.tsx +788 -0
  67. package/src/lib/components/flag/flag.test.tsx +65 -0
  68. package/src/lib/components/flag/flag.tsx +97 -0
  69. package/src/lib/components/flag/index.tsx +1 -0
  70. package/src/lib/components/flag/stories/components.tsx +403 -0
  71. package/src/lib/components/flag/stories/flag.stories.mdx +48 -0
  72. package/src/lib/components/flag/stories/playGround-select.tsx +145 -0
  73. package/src/lib/components/icon/icon-list.tsx +135 -0
  74. package/src/lib/components/icon/icon.test.tsx +47 -0
  75. package/src/lib/components/icon/icon.tsx +181 -0
  76. package/src/lib/components/icon/index.tsx +1 -0
  77. package/src/lib/components/icon/stories/components.tsx +282 -0
  78. package/src/lib/components/icon/stories/icon.stories.mdx +65 -0
  79. package/src/lib/components/index.ts +24 -0
  80. package/src/lib/components/input-field/components/index.ts +2 -0
  81. package/src/lib/components/input-field/components/labeled-input.tsx +57 -0
  82. package/src/lib/components/input-field/components/stepper.tsx +64 -0
  83. package/src/lib/components/input-field/index.ts +6 -0
  84. package/src/lib/components/input-field/input-field.test.tsx +107 -0
  85. package/src/lib/components/input-field/input-field.tsx +129 -0
  86. package/src/lib/components/input-field/input-number.tsx +41 -0
  87. package/src/lib/components/input-field/input-text.tsx +30 -0
  88. package/src/lib/components/input-field/storybook/components.tsx +339 -0
  89. package/src/lib/components/input-field/storybook/input-field.stories.mdx +113 -0
  90. package/src/lib/components/layout/flex.tsx +22 -0
  91. package/src/lib/components/layout/grid-layout.tsx +40 -0
  92. package/src/lib/components/layout/index.ts +3 -0
  93. package/src/lib/components/layout/left-right-layout.tsx +67 -0
  94. package/src/lib/components/link/index.ts +1 -0
  95. package/src/lib/components/link/link.test.tsx +29 -0
  96. package/src/lib/components/link/link.tsx +56 -0
  97. package/src/lib/components/link/storybook/link.stories.mdx +52 -0
  98. package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +55 -0
  99. package/src/lib/components/molecules/avatar/avatar.test.tsx +114 -0
  100. package/src/lib/components/molecules/avatar/avatar.tsx +80 -0
  101. package/src/lib/components/molecules/avatar/index.tsx +1 -0
  102. package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +52 -0
  103. package/src/lib/components/molecules/avatar/stories/components.tsx +36 -0
  104. package/src/lib/components/molecules/button/button-flags.tsx +340 -0
  105. package/src/lib/components/molecules/button/button.test.tsx +77 -0
  106. package/src/lib/components/molecules/button/button.tsx +209 -0
  107. package/src/lib/components/molecules/button/index.tsx +1 -0
  108. package/src/lib/components/molecules/button/stories/button.stories.mdx +105 -0
  109. package/src/lib/components/molecules/button/stories/components.tsx +90 -0
  110. package/src/lib/components/molecules/index.ts +3 -0
  111. package/src/lib/components/molecules/input-checkbox/index.tsx +1 -0
  112. package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +34 -0
  113. package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +50 -0
  114. package/src/lib/components/molecules/input-checkbox/stories/components.tsx +53 -0
  115. package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +49 -0
  116. package/src/lib/components/organisms/choice-list/choice-list.test.tsx +36 -0
  117. package/src/lib/components/organisms/choice-list/choice-list.tsx +72 -0
  118. package/src/lib/components/organisms/choice-list/index.tsx +1 -0
  119. package/src/lib/components/organisms/choice-list/stories/choice-list.stories.mdx +57 -0
  120. package/src/lib/components/organisms/choice-list/stories/components.tsx +45 -0
  121. package/src/lib/components/organisms/index.ts +2 -0
  122. package/src/lib/components/organisms/multi-choice-list/index.tsx +1 -0
  123. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +33 -0
  124. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +53 -0
  125. package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +124 -0
  126. package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +99 -0
  127. package/{lib/components/spinner/index.d.ts → src/lib/components/radio-button/index.tsx} +1 -1
  128. package/src/lib/components/radio-button/radio-button.tsx +135 -0
  129. package/src/lib/components/radio-button/radio.test.tsx +59 -0
  130. package/src/lib/components/radio-button/stories/components.tsx +36 -0
  131. package/src/lib/components/radio-button/stories/radio-button.stories.mdx +44 -0
  132. package/src/lib/components/range-slider/components/bar-chart.tsx +50 -0
  133. package/src/lib/components/range-slider/components/handle.tsx +58 -0
  134. package/src/lib/components/range-slider/components/rail.tsx +44 -0
  135. package/src/lib/components/range-slider/components/slider-component.tsx +92 -0
  136. package/src/lib/components/range-slider/components/slider-inputs.tsx +129 -0
  137. package/src/lib/components/range-slider/components/tick.tsx +51 -0
  138. package/src/lib/components/range-slider/components/track.tsx +67 -0
  139. package/src/lib/components/range-slider/index.tsx +2 -0
  140. package/src/lib/components/range-slider/range-slider.test.tsx +185 -0
  141. package/src/lib/components/range-slider/range-slider.tsx +131 -0
  142. package/src/lib/components/range-slider/slider.test.tsx +89 -0
  143. package/src/lib/components/range-slider/slider.tsx +80 -0
  144. package/src/lib/components/range-slider/stories/components.tsx +179 -0
  145. package/src/lib/components/range-slider/stories/range-slider.stories.mdx +84 -0
  146. package/src/lib/components/range-slider/types.ts +18 -0
  147. package/src/lib/components/select/components/menu-container.tsx +69 -0
  148. package/src/lib/components/select/components/menu-list.tsx +195 -0
  149. package/src/lib/components/select/components/menu-row.tsx +43 -0
  150. package/src/lib/components/select/components/menu.tsx +151 -0
  151. package/src/lib/components/select/components/option.tsx +91 -0
  152. package/src/lib/components/select/components/select-label.tsx +10 -0
  153. package/src/lib/components/select/components/value-component-multi.tsx +40 -0
  154. package/src/lib/components/select/components/value-component-single.tsx +27 -0
  155. package/src/lib/components/select/components/value.tsx +374 -0
  156. package/src/lib/components/select/index.tsx +3 -0
  157. package/src/lib/components/select/select.test.tsx +148 -0
  158. package/src/lib/components/select/select.tsx +337 -0
  159. package/src/lib/components/select/storybook/components.tsx +999 -0
  160. package/src/lib/components/select/storybook/radio-group.tsx +157 -0
  161. package/src/lib/components/select/storybook/select.stories.mdx +172 -0
  162. package/src/lib/components/select/types.ts +149 -0
  163. package/src/lib/components/select/utils.ts +101 -0
  164. package/src/lib/components/spinner/index.tsx +1 -0
  165. package/src/lib/components/spinner/spinner-size-flags.tsx +39 -0
  166. package/src/lib/components/spinner/spinner.test.tsx +31 -0
  167. package/src/lib/components/spinner/spinner.tsx +54 -0
  168. package/src/lib/components/spinner/stories/components.tsx +39 -0
  169. package/src/lib/components/spinner/stories/spinner.stories.mdx +35 -0
  170. package/src/lib/components/tabs/components/index.ts +1 -0
  171. package/src/lib/components/tabs/components/tab.tsx +62 -0
  172. package/src/lib/components/tabs/index.tsx +1 -0
  173. package/src/lib/components/tabs/storybook/components.tsx +282 -0
  174. package/src/lib/components/tabs/storybook/tabs.stories.mdx +97 -0
  175. package/src/lib/components/tabs/tabs.test.tsx +86 -0
  176. package/src/lib/components/tabs/tabs.tsx +101 -0
  177. package/src/lib/components/tag/components/close-button.tsx +85 -0
  178. package/src/lib/components/tag/components/index.ts +2 -0
  179. package/src/lib/components/tag/components/tag-label.tsx +45 -0
  180. package/src/lib/components/tag/index.tsx +1 -0
  181. package/src/lib/components/tag/stories/components.tsx +86 -0
  182. package/src/lib/components/tag/stories/tag.stories.mdx +42 -0
  183. package/src/lib/components/tag/tag.test.tsx +36 -0
  184. package/src/lib/components/tag/tag.tsx +33 -0
  185. package/src/lib/components/thumbnail/index.tsx +1 -0
  186. package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +44 -0
  187. package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +41 -0
  188. package/src/lib/components/thumbnail/thumbnail.test.tsx +51 -0
  189. package/src/lib/components/thumbnail/thumbnail.tsx +44 -0
  190. package/src/lib/components/tree-view/components/tree-node.tsx +203 -0
  191. package/src/lib/components/tree-view/helper.tsx +171 -0
  192. package/src/lib/components/tree-view/index.ts +2 -0
  193. package/src/lib/components/tree-view/stories/components.tsx +640 -0
  194. package/src/lib/components/tree-view/stories/tree-view.stories.mdx +127 -0
  195. package/src/lib/components/tree-view/tree-view.test.tsx +146 -0
  196. package/src/lib/components/tree-view/tree-view.tsx +168 -0
  197. package/src/lib/components/tree-view/types.tsx +70 -0
  198. package/src/lib/components/typography/index.ts +1 -0
  199. package/src/lib/components/typography/storybook/components.tsx +288 -0
  200. package/src/lib/components/typography/storybook/typography.stories.mdx +90 -0
  201. package/src/lib/components/typography/typography.test.tsx +97 -0
  202. package/src/lib/components/typography/typography.tsx +99 -0
  203. package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +123 -0
  204. package/src/lib/foundations/color-system/base-palette/base-palette.ts +93 -0
  205. package/src/lib/foundations/color-system/base-palette/index.ts +1 -0
  206. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +85 -0
  207. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +231 -0
  208. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +160 -0
  209. package/src/lib/foundations/color-system/color-guidelines/index.ts +1 -0
  210. package/src/lib/foundations/color-system/components/color-sample.tsx +99 -0
  211. package/src/lib/foundations/color-system/components/index.ts +1 -0
  212. package/src/lib/foundations/color-system/index.ts +1 -0
  213. package/src/lib/foundations/index.ts +4 -0
  214. package/src/lib/foundations/shadows/components.tsx +59 -0
  215. package/src/lib/foundations/shadows/index.ts +1 -0
  216. package/src/lib/foundations/shadows/shadows.stories.mdx +71 -0
  217. package/src/lib/foundations/shadows/shadows.tsx +47 -0
  218. package/src/lib/foundations/spacing/index.ts +1 -0
  219. package/src/lib/foundations/spacing/spacing-guidelines.ts +24 -0
  220. package/src/lib/foundations/spacing/spacing.stories.mdx +51 -0
  221. package/src/lib/foundations/spacing/spacing.ts +18 -0
  222. package/src/lib/foundations/typography/constants.ts +25 -0
  223. package/src/lib/foundations/typography/fonts.ts +205 -0
  224. package/src/lib/foundations/typography/index.tsx +1 -0
  225. package/src/lib/foundations/typography/text-aspect-flags.ts +61 -0
  226. package/src/lib/foundations/typography/typography.tsx +102 -0
  227. package/src/lib/helpers/generic-types.ts +44 -0
  228. package/src/lib/helpers/index.ts +8 -0
  229. package/src/lib/helpers/isReactElementOfType.test.tsx +108 -0
  230. package/src/lib/helpers/isReactElementOfType.ts +42 -0
  231. package/src/lib/helpers/nothing.tsx +22 -0
  232. package/{lib/helpers/numbers.d.ts → src/lib/helpers/numbers.ts} +67 -50
  233. package/src/lib/helpers/safe-navigation.ts +57 -0
  234. package/src/lib/helpers/slots.tsx +126 -0
  235. package/src/lib/helpers/strings.test.ts +47 -0
  236. package/src/lib/helpers/strings.ts +16 -0
  237. package/src/lib/helpers/useInputElementState.ts +56 -0
  238. package/tsconfig.json +35 -0
  239. package/tsconfig.lib.json +28 -0
  240. package/tsconfig.spec.json +21 -0
  241. package/index.d.ts +0 -2
  242. package/index.js +0 -9976
  243. package/lib/components/alert-banner/alert-banner.d.ts +0 -11
  244. package/lib/components/alert-banner/alert-level-flags.d.ts +0 -13
  245. package/lib/components/alert-banner/index.d.ts +0 -1
  246. package/lib/components/badge/badge-type-flags.d.ts +0 -18
  247. package/lib/components/badge/badge.d.ts +0 -5
  248. package/lib/components/badge/index.d.ts +0 -1
  249. package/lib/components/card/atoms/index.d.ts +0 -1
  250. package/lib/components/card/card.d.ts +0 -14
  251. package/lib/components/card/components/card-alert-banner-slot.d.ts +0 -6
  252. package/lib/components/card/components/card-controls-slot.d.ts +0 -5
  253. package/lib/components/card/components/card-section-slot.d.ts +0 -11
  254. package/lib/components/card/components/index.d.ts +0 -3
  255. package/lib/components/card/index.d.ts +0 -3
  256. package/lib/components/card/molecules/index.d.ts +0 -1
  257. package/lib/components/card/molecules/left-right-card.d.ts +0 -16
  258. package/lib/components/checkbox/checkbox.d.ts +0 -11
  259. package/lib/components/checkbox/helpers.d.ts +0 -12
  260. package/lib/components/checkbox/index.d.ts +0 -1
  261. package/lib/components/divider/divider-type-flags.d.ts +0 -9
  262. package/lib/components/divider/divider.d.ts +0 -7
  263. package/lib/components/divider/index.d.ts +0 -1
  264. package/lib/components/flag/flag-size-flags.d.ts +0 -12
  265. package/lib/components/flag/flag.d.ts +0 -9
  266. package/lib/components/flag/flag.list.d.ts +0 -782
  267. package/lib/components/flag/index.d.ts +0 -1
  268. package/lib/components/icon/icon-list.d.ts +0 -132
  269. package/lib/components/icon/icon.d.ts +0 -131
  270. package/lib/components/icon/index.d.ts +0 -1
  271. package/lib/components/index.d.ts +0 -20
  272. package/lib/components/input-field/components/index.d.ts +0 -2
  273. package/lib/components/input-field/components/labeled-input.d.ts +0 -10
  274. package/lib/components/input-field/components/stepper.d.ts +0 -7
  275. package/lib/components/input-field/index.d.ts +0 -3
  276. package/lib/components/input-field/input-field.d.ts +0 -25
  277. package/lib/components/input-field/input-number.d.ts +0 -18
  278. package/lib/components/input-field/input-text.d.ts +0 -14
  279. package/lib/components/layout/flex.d.ts +0 -16
  280. package/lib/components/layout/grid-layout.d.ts +0 -11
  281. package/lib/components/layout/index.d.ts +0 -3
  282. package/lib/components/layout/left-right-layout.d.ts +0 -34
  283. package/lib/components/link/index.d.ts +0 -1
  284. package/lib/components/link/link.d.ts +0 -14
  285. package/lib/components/molecules/avatar/avatar-size-flags.d.ts +0 -12
  286. package/lib/components/molecules/avatar/avatar.d.ts +0 -12
  287. package/lib/components/molecules/avatar/index.d.ts +0 -1
  288. package/lib/components/molecules/button/button-flags.d.ts +0 -44
  289. package/lib/components/molecules/button/button.d.ts +0 -12
  290. package/lib/components/molecules/button/index.d.ts +0 -1
  291. package/lib/components/molecules/index.d.ts +0 -3
  292. package/lib/components/molecules/input-checkbox/index.d.ts +0 -1
  293. package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +0 -8
  294. package/lib/components/organisms/choice-list/choice-list.d.ts +0 -9
  295. package/lib/components/organisms/choice-list/index.d.ts +0 -1
  296. package/lib/components/organisms/index.d.ts +0 -2
  297. package/lib/components/organisms/multi-choice-list/index.d.ts +0 -1
  298. package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +0 -11
  299. package/lib/components/radio-button/index.d.ts +0 -1
  300. package/lib/components/radio-button/radio-button.d.ts +0 -10
  301. package/lib/components/select/components/menu-container.d.ts +0 -3
  302. package/lib/components/select/components/menu-list.d.ts +0 -3
  303. package/lib/components/select/components/menu-row.d.ts +0 -9
  304. package/lib/components/select/components/menu.d.ts +0 -3
  305. package/lib/components/select/components/option.d.ts +0 -13
  306. package/lib/components/select/components/select-label.d.ts +0 -1
  307. package/lib/components/select/components/value-component-multi.d.ts +0 -4
  308. package/lib/components/select/components/value-component-single.d.ts +0 -4
  309. package/lib/components/select/components/value.d.ts +0 -4
  310. package/lib/components/select/index.d.ts +0 -3
  311. package/lib/components/select/select.d.ts +0 -10
  312. package/lib/components/select/types.d.ts +0 -133
  313. package/lib/components/select/utils.d.ts +0 -15
  314. package/lib/components/spinner/spinner-size-flags.d.ts +0 -10
  315. package/lib/components/spinner/spinner.d.ts +0 -9
  316. package/lib/components/tabs/components/index.d.ts +0 -1
  317. package/lib/components/tabs/components/tab.d.ts +0 -7
  318. package/lib/components/tabs/index.d.ts +0 -1
  319. package/lib/components/tabs/tabs.d.ts +0 -15
  320. package/lib/components/tag/components/close-button.d.ts +0 -8
  321. package/lib/components/tag/components/index.d.ts +0 -2
  322. package/lib/components/tag/components/tag-label.d.ts +0 -8
  323. package/lib/components/tag/index.d.ts +0 -1
  324. package/lib/components/tag/tag.d.ts +0 -10
  325. package/lib/components/thumbnail/index.d.ts +0 -1
  326. package/lib/components/thumbnail/thumbnail-size-flags.d.ts +0 -10
  327. package/lib/components/thumbnail/thumbnail.d.ts +0 -10
  328. package/lib/components/tree-view/components/tree-node.d.ts +0 -3
  329. package/lib/components/tree-view/helper.d.ts +0 -12
  330. package/lib/components/tree-view/index.d.ts +0 -2
  331. package/lib/components/tree-view/tree-view.d.ts +0 -3
  332. package/lib/components/tree-view/types.d.ts +0 -63
  333. package/lib/components/typography/index.d.ts +0 -1
  334. package/lib/components/typography/typography.d.ts +0 -24
  335. package/lib/foundations/color-system/base-palette/base-palette.d.ts +0 -76
  336. package/lib/foundations/color-system/base-palette/index.d.ts +0 -1
  337. package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +0 -132
  338. package/lib/foundations/color-system/color-guidelines/index.d.ts +0 -1
  339. package/lib/foundations/color-system/components/color-sample.d.ts +0 -17
  340. package/lib/foundations/color-system/components/index.d.ts +0 -1
  341. package/lib/foundations/color-system/index.d.ts +0 -1
  342. package/lib/foundations/index.d.ts +0 -4
  343. package/lib/foundations/shadows/components.d.ts +0 -8
  344. package/lib/foundations/shadows/index.d.ts +0 -1
  345. package/lib/foundations/shadows/shadows.d.ts +0 -8
  346. package/lib/foundations/spacing/index.d.ts +0 -1
  347. package/lib/foundations/spacing/spacing-guidelines.d.ts +0 -22
  348. package/lib/foundations/spacing/spacing.d.ts +0 -18
  349. package/lib/foundations/typography/constants.d.ts +0 -22
  350. package/lib/foundations/typography/fonts.d.ts +0 -1
  351. package/lib/foundations/typography/index.d.ts +0 -1
  352. package/lib/foundations/typography/text-aspect-flags.d.ts +0 -19
  353. package/lib/foundations/typography/typography.d.ts +0 -24
  354. package/lib/helpers/generic-types.d.ts +0 -21
  355. package/lib/helpers/index.d.ts +0 -7
  356. package/lib/helpers/isReactElementOfType.d.ts +0 -8
  357. package/lib/helpers/nothing.d.ts +0 -10
  358. package/lib/helpers/safe-navigation.d.ts +0 -15
  359. package/lib/helpers/slots.d.ts +0 -17
  360. package/lib/helpers/strings.d.ts +0 -1
@@ -0,0 +1,374 @@
1
+ import { defaultTo, FC, is, isDefined, isEmpty, isNil, maybeRender, Nothing, safeArray } from '@helpers'
2
+ import styled, { css } from 'styled-components'
3
+ import { Borders, Focused, Icons, Margin, Padding, Surface, Text } from '@foundations'
4
+ import { Body, Label } from 'components/typography'
5
+ import { IOption, IValueProps, DEFAULT_PLACEHOLDER, labelPositionType } from '../types'
6
+ import ValueComponentMulti from './value-component-multi'
7
+ import ValueComponentSingle from './value-component-single'
8
+ import { getValueOptions, keys, toKey } from '../utils'
9
+ import React, { createRef, memo, RefObject, useEffect } from 'react'
10
+ import { IconMinor } from 'components/icon'
11
+ import { Flex, SpaceBetween } from 'components/layout'
12
+ import { Button } from 'components/molecules/button'
13
+
14
+ interface ISearchProps {
15
+ canSearch?: boolean
16
+ }
17
+
18
+ interface IErrorhProps {
19
+ visible?: boolean
20
+ }
21
+
22
+ interface IValueContainerProps {
23
+ disabled?: boolean
24
+ focused?: boolean
25
+ hasLabel?: boolean
26
+ invalid?: boolean
27
+ multi?: boolean
28
+ menuIsOpen?: boolean
29
+ }
30
+
31
+ interface IValueLeftProps {
32
+ multi?: boolean
33
+ showClearer?: boolean
34
+ hasValue?: boolean
35
+ }
36
+
37
+ interface IClearButton {
38
+ plain: boolean
39
+ subtle: boolean
40
+ }
41
+
42
+ const ValueContainer = styled(SpaceBetween)`
43
+ pointer-events: ${(props: IValueContainerProps) =>
44
+ is(props.disabled) ? 'none' : 'auto'};
45
+ padding: ${Padding.xs} ${Padding.none} ${Padding.none} ${Padding.none};
46
+ background: ${(props: IValueContainerProps) =>
47
+ is(props.invalid) ? Surface.Critical.Subdued : Surface.Default.Default};
48
+ cursor: default;
49
+ border: 1px solid ${(props: IValueContainerProps) =>
50
+ is(props.invalid) ? Borders.Critical.Default : Borders.Default.Default};
51
+ z-index: 0;
52
+ border-radius: 6px;
53
+ outline-offset: -2px;
54
+
55
+ ${(props: IValueContainerProps) => is(props.hasLabel) && css`
56
+ & div:first-of-type {
57
+ align-self: flex-start;
58
+ }`}
59
+
60
+ ${(props: IValueContainerProps) => is(props.menuIsOpen) && css`
61
+ outline: 2px solid ${Focused.Default};
62
+ `}
63
+
64
+ ${(props: IValueContainerProps) =>
65
+ (!is(props.disabled) && !is(props.invalid)) && `
66
+
67
+ &:focus {
68
+ outline: 2px solid ${Focused.Default}
69
+ }
70
+
71
+ &:focus-within {
72
+ outline: 2px solid ${Focused.Default}
73
+ }
74
+ `}
75
+ `
76
+
77
+ const ValueWrapper = styled(Flex)<{label?: string, labelPosition?: string}>`
78
+ width: 100%;
79
+ padding-bottom: ${Padding.xs};
80
+ display: ${({label, labelPosition}) =>
81
+ isDefined(label)
82
+ && !isEmpty(label)
83
+ && labelPosition === labelPositionType.TOP ? 'block' : 'flex' };
84
+ `
85
+
86
+ const ValueLabel = styled(Label)<{labelPosition: string | undefined}>`
87
+ padding-left: ${Padding.xs};
88
+ margin-bottom: ${Margin.xxs};
89
+ width: fit-content;
90
+ white-space: pre;
91
+ ${({labelPosition}) =>
92
+ (labelPosition === labelPositionType.TOP) && css`
93
+ flex-basis: 100%;
94
+ `}
95
+ `
96
+
97
+ const ValueLeft = styled(Flex)`
98
+ padding-left: ${Padding.xs};
99
+ width: 100%;
100
+ flex-wrap: ${(props: IValueLeftProps) =>
101
+ is(props.multi) && is(props.hasValue) ? 'wrap' : 'nowrap'};
102
+ user-select: none;
103
+ min-width: 0;
104
+ min-height: 20px;
105
+ box-sizing: border-box;
106
+ gap: ${(props: IValueLeftProps) =>
107
+ is(props.multi) ? '4px' : 0};
108
+ `
109
+
110
+ const ValueRight = styled(Flex)`
111
+ padding-right: ${Padding.xxs};
112
+ pointer-events: none;
113
+ `
114
+
115
+ const Placeholder = styled(Label)`
116
+ pointer-events: none;
117
+ color: ${Text.Light};
118
+ `
119
+
120
+ const ClearButton = styled(Button).attrs<IClearButton>({
121
+ plain: true,
122
+ subtle: true,
123
+ })`
124
+ padding: ${Padding.none};
125
+ margin-right: ${Margin.none};
126
+ gap: 0;
127
+ &:focus {
128
+ outline: none;
129
+ }
130
+ &:active {
131
+ background-color: transparent;
132
+ }
133
+ `
134
+
135
+ const Search = styled.span`
136
+ min-width: 1px;
137
+ margin-left: -1px;
138
+ user-select: text;
139
+
140
+ ${(props: ISearchProps) =>
141
+ is(props.canSearch)
142
+ ? css`
143
+ opacity: 1;
144
+ position: relative;
145
+ left: 1px;
146
+ `
147
+ : css`
148
+ position: absolute;
149
+ opacity: 0;
150
+ `}
151
+
152
+ &:focus {
153
+ outline: none;
154
+ }
155
+ `
156
+
157
+ const ErrorMessage = styled.div`
158
+ display: ${(props: IErrorhProps) => is(props.visible) ? 'flex' : 'none'};
159
+ flex-direction: 'row';
160
+ width: 100%;
161
+ padding: ${Padding.xxs} ${Padding.none};
162
+ & path {
163
+ fill: ${Icons.Critical};
164
+ }
165
+ div {
166
+ color: ${Text.Critical};
167
+ margin: ${Margin.none} ${Margin.xxs}
168
+ }
169
+ `
170
+
171
+ const Value: FC<IValueProps> = (props) => {
172
+ const search: RefObject<HTMLSpanElement> = createRef()
173
+
174
+ useEffect(() => {
175
+ if (isDefined(search.current) && !is(props.focused)) {
176
+ search.current.innerText = ''
177
+ }
178
+
179
+ }, [props.value, props.focused, search])
180
+
181
+ const {
182
+ options = [],
183
+ value,
184
+ disabled,
185
+ clearable,
186
+ open,
187
+ multi,
188
+ focused,
189
+ invalid,
190
+ errors,
191
+ label,
192
+ searchable,
193
+ labelPosition = labelPositionType.TOP
194
+ } = props
195
+ const valueOptions: IOption[] = getValueOptions(
196
+ options,
197
+ value,
198
+ multi
199
+ )
200
+ const showClearer = is(clearable) && valueOptions.length > 0
201
+ const searchAtStart = !is(multi) || valueOptions.length === 0
202
+ const searchAtEnd = is(multi) && valueOptions.length > 0
203
+
204
+ const renderSearch = () => {
205
+ const {
206
+ onSearchFocus,
207
+ onSearchBlur
208
+ } = props
209
+
210
+ if (is(disabled) || !is(searchable)) {
211
+ return <Nothing />
212
+ }
213
+
214
+ const canSearch = (open && is(searchable))
215
+ || (!isDefined(value) && is(searchable))
216
+ || isDefined(search.current)
217
+
218
+ return (
219
+ <Search
220
+ className="search"
221
+ contentEditable
222
+ canSearch={canSearch}
223
+ onInput={onSearch}
224
+ onKeyDown={onKeyDown}
225
+ onFocus={onSearchFocus}
226
+ onBlur={onSearchBlur}
227
+ ref={search}
228
+ />
229
+ )
230
+ }
231
+
232
+ const renderLabel = () => {
233
+ return maybeRender(label,
234
+ <ValueLabel labelPosition={labelPosition} subtle subdued>{label}</ValueLabel>)
235
+ }
236
+
237
+ const renderValues = () => {
238
+ const {
239
+ placeholder,
240
+ labelComponent,
241
+ } = props
242
+
243
+ if (isDefined(search) && is(searchable) && open && !is(multi)) {
244
+ return <Nothing />
245
+ }
246
+
247
+ if (valueOptions.length === 0 && isNil((search?.current))) {
248
+ return <Placeholder>{defaultTo(placeholder, DEFAULT_PLACEHOLDER)}</Placeholder>
249
+ }
250
+
251
+ return valueOptions.map((option) =>
252
+ is(multi) ? (
253
+ <ValueComponentMulti
254
+ key={toKey(option.value)}
255
+ option={option}
256
+ labelComponent={labelComponent}
257
+ options={valueOptions}
258
+ onRemove={props.onOptionRemove}
259
+ />
260
+ ) : (
261
+ <ValueComponentSingle
262
+ key={toKey(option.value)}
263
+ option={option}
264
+ labelComponent={labelComponent}
265
+ />
266
+ )
267
+ )
268
+ }
269
+
270
+ const focus = (): void => {
271
+ const el = search.current
272
+
273
+ if (isDefined(el)) {
274
+ el.focus()
275
+ }
276
+ }
277
+
278
+ const onClick = () => {
279
+ if (!is(props.disabled)) {
280
+ focus()
281
+ props.onClick()
282
+ }
283
+ }
284
+
285
+ const onClear = (e: React.SyntheticEvent<HTMLButtonElement>) => {
286
+ e.stopPropagation()
287
+ props.onClear()
288
+ }
289
+
290
+ const onSearch = (e: React.KeyboardEvent<HTMLSpanElement>) => {
291
+
292
+ if (is(props.searchable)) {
293
+ props.onSearch(e.currentTarget.innerText.trim())
294
+ } else {
295
+ e.preventDefault()
296
+ }
297
+ }
298
+
299
+ const onKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>) => {
300
+
301
+ if (
302
+ (!is(searchable) && e.key !== keys.TAB) ||
303
+ e.key === keys.ENTER ||
304
+ e.key === keys.ARROW_UP ||
305
+ e.key === keys.ARROW_DOWN
306
+ ) {
307
+ e.preventDefault()
308
+ }
309
+
310
+ }
311
+
312
+ return (
313
+ <React.Fragment>
314
+ <ValueContainer
315
+ data-role="value"
316
+ className="select-value"
317
+ disabled={disabled}
318
+ focused={focused}
319
+ invalid={invalid}
320
+ hasLabel={isDefined(props.label)}
321
+ multi
322
+ menuIsOpen={open}
323
+ tabIndex={0}
324
+ onClick={onClick}
325
+ center
326
+ >
327
+ <ValueWrapper
328
+ label={label}
329
+ labelPosition={labelPosition}
330
+ >
331
+ {renderLabel()}
332
+ <ValueLeft
333
+ className="value-left"
334
+ multi={multi}
335
+ showClearer={showClearer}
336
+ hasValue={!(valueOptions.length === 0)}
337
+ >
338
+ {searchAtStart && renderSearch()}
339
+ {renderValues()}
340
+ {searchAtEnd && renderSearch()}
341
+ </ValueLeft>
342
+ </ValueWrapper>
343
+ <ValueRight
344
+ className="value-right"
345
+ center
346
+ >
347
+ {showClearer && (
348
+ <ClearButton
349
+ tabIndex={-1}
350
+ className="clearer"
351
+ onClick={onClear}
352
+ IconPrefix={IconMinor.Xmark}
353
+ />
354
+ )}
355
+ {is(searchable)
356
+ ? <IconMinor.MagnifyingGlass />
357
+ : open
358
+ ? <IconMinor.ChevronUpSolid />
359
+ : <IconMinor.ChevronDownSolid />
360
+ }
361
+ </ValueRight>
362
+ </ValueContainer>
363
+ {safeArray(errors).map((e) => (
364
+ <ErrorMessage visible={!open} key={e.message}>
365
+ <IconMinor.CircleExclamation />
366
+ <Body>{e.message}</Body>
367
+ </ErrorMessage>
368
+ ))}
369
+ </React.Fragment>
370
+
371
+ )
372
+ }
373
+
374
+ export default memo(Value) as typeof Value
@@ -0,0 +1,3 @@
1
+ export * from './select'
2
+ export * from './components/menu-list'
3
+ export { IOption } from './types'
@@ -0,0 +1,148 @@
1
+ // eslint-disable-next-line no-restricted-syntax
2
+ import { fireEvent, render, screen } from '@testing-library/react'
3
+ import { IconMinor } from 'components/icon'
4
+ import { Select, MenuList } from './index'
5
+
6
+ describe('Select Tests', () => {
7
+
8
+ const options = [
9
+ {
10
+ label: 'Brasil',
11
+ value: 'BR'
12
+ },
13
+ {
14
+ label: 'Canada',
15
+ value: 'CA'
16
+ },
17
+ {
18
+ label: 'Mexico',
19
+ value: 'MX'
20
+ }
21
+ ]
22
+
23
+ it('should render the Select', async () => {
24
+ const { container } = render(<>
25
+ <Select />
26
+ <Select />
27
+ </>)
28
+
29
+ const select = container.getElementsByClassName('select')
30
+ expect(select.length).toBe(2)
31
+
32
+ })
33
+
34
+ it('should render the container value', async () => {
35
+ const { container } = render(
36
+ <Select />
37
+ )
38
+
39
+ const valueContainer = container.getElementsByClassName('select-value')
40
+ expect(valueContainer.length).toBe(1)
41
+
42
+ })
43
+
44
+ it('should render the Custom Label', async () => {
45
+ render(
46
+ <Select label='Test Select'/>
47
+ )
48
+
49
+ const select = screen.getByText('Test Select')
50
+ expect(select).toBeInTheDocument()
51
+
52
+ })
53
+
54
+ it('should Open the menu on click', async () => {
55
+
56
+ render(
57
+ <Select
58
+ label='Test Select'
59
+ options={options}
60
+ />
61
+ )
62
+
63
+ const select = screen.getByText('Test Select')
64
+
65
+ const optionBeforClick = screen.queryByText('Brasil')
66
+ expect(optionBeforClick).not.toBeInTheDocument()
67
+
68
+ fireEvent(select, new MouseEvent('click', {
69
+ bubbles: true,
70
+ cancelable: true,
71
+ }),)
72
+
73
+ const optionBRAfterClick = screen.getByText('Brasil')
74
+ const optionCAAfterClick = screen.getByText('Canada')
75
+ const optionMXCAAfterClick = screen.getByText('Mexico')
76
+
77
+ expect(optionBRAfterClick).toBeInTheDocument()
78
+ expect(optionCAAfterClick).toBeInTheDocument()
79
+ expect(optionMXCAAfterClick).toBeInTheDocument()
80
+
81
+ })
82
+
83
+ it('Should Set a value on change', async () => {
84
+
85
+ const handleChaqnge = jest.fn()
86
+ const handleClose = jest.fn()
87
+
88
+ render(
89
+ <Select
90
+ label='Test Select'
91
+ onChange={handleChaqnge}
92
+ onClose={handleClose}
93
+ options={options}
94
+ />
95
+ )
96
+
97
+ const select = screen.getByText('Test Select')
98
+
99
+ fireEvent(select, new MouseEvent('click', {
100
+ bubbles: true,
101
+ cancelable: true,
102
+ }),)
103
+
104
+ const optionMX = screen.getByText('Mexico')
105
+
106
+ fireEvent(optionMX, new MouseEvent('click', {
107
+ bubbles: true,
108
+ cancelable: true,
109
+ }),)
110
+
111
+ expect(handleClose).toBeCalled()
112
+
113
+ const optionMXAfterMenuClose = screen.queryByText('Mexico')
114
+ expect(optionMXAfterMenuClose).toBeNull()
115
+
116
+ expect(handleChaqnge).toBeCalledWith('MX', {'label': 'Mexico', 'value': 'MX'})
117
+
118
+ })
119
+
120
+ it('should render the custom menu', async () => {
121
+
122
+ const setSelectOptions = options.map((opt, index) => ({
123
+ ...opt,
124
+ icon: <IconMinor.Clone />,
125
+ helperText: `Lorem ipsum dolor sit amet - ${index}`
126
+ }))
127
+
128
+ render(
129
+ <Select
130
+ menuComponent={MenuList}
131
+ label='Test Select'
132
+ options={setSelectOptions}
133
+ />
134
+ )
135
+
136
+ const select = screen.getByText('Test Select')
137
+
138
+ fireEvent(select, new MouseEvent('click', {
139
+ bubbles: true,
140
+ cancelable: true,
141
+ }),)
142
+
143
+ expect(screen.getByText('Lorem ipsum dolor sit amet - 0')).toBeTruthy()
144
+ expect(screen.getByText('Lorem ipsum dolor sit amet - 1')).toBeTruthy()
145
+ expect(screen.getByText('Lorem ipsum dolor sit amet - 2')).toBeTruthy()
146
+
147
+ })
148
+ })