@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,27 @@
1
+ import { IValueComponentSingleProps } from '../types'
2
+ import { FC, isDefined } from '@helpers'
3
+ import { memo } from 'react'
4
+ import { SelectLabel } from './select-label'
5
+
6
+ const ValueComponentSingle: FC<IValueComponentSingleProps> = (props) => {
7
+ const LabelComponent = isDefined(props.labelComponent) ? props.labelComponent : SelectLabel
8
+ const className = ['value-single', props.className]
9
+ .filter(c => Boolean(c))
10
+ .join(' ')
11
+
12
+ return (
13
+ <LabelComponent
14
+ active
15
+ type="value-single"
16
+ className={className}
17
+ {...props.option}
18
+ default
19
+ style={{pointerEvents: 'none'}}
20
+ >
21
+ {props.option.label}
22
+ </LabelComponent>
23
+ )
24
+ }
25
+
26
+
27
+ export default memo(ValueComponentSingle) as typeof ValueComponentSingle
@@ -0,0 +1,370 @@
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, CSSProperties, 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 IErrorProps {
15
+ visible?: boolean
16
+ }
17
+
18
+ interface IValueContainerProps {
19
+ disabled?: boolean
20
+ focused?: boolean
21
+ hasLabel?: boolean
22
+ invalid?: boolean
23
+ multi?: boolean
24
+ menuIsOpen?: boolean
25
+ }
26
+
27
+ interface IValueLeftProps {
28
+ multi?: boolean
29
+ showClearer?: boolean
30
+ hasValue?: boolean
31
+ }
32
+
33
+ interface IClearButton {
34
+ plain: boolean
35
+ subtle: boolean
36
+ }
37
+
38
+ const valueStyles: (props: { canSearch?: boolean }) => CSSProperties = ({ canSearch }) => ({
39
+ minWidth: '1px',
40
+ marginLeft: '-1px',
41
+ userSelect: 'text',
42
+ opacity: is(canSearch) ? 1 : 0,
43
+ position: is(canSearch) ? 'relative' : 'absolute',
44
+ left: is(canSearch) ? '1px' : '0',
45
+ outline: 'none',
46
+ fontFamily: 'Inter',
47
+ fontWeight: 400,
48
+ fontSize: '14px',
49
+ lineHeight: '20px',
50
+ color: `${Text.Default}`
51
+ })
52
+
53
+ const ValueContainer = styled(SpaceBetween)`
54
+ pointer-events: ${(props: IValueContainerProps) =>
55
+ is(props.disabled) ? 'none' : 'auto'};
56
+ padding: ${Padding.xs} ${Padding.none};
57
+ background: ${(props: IValueContainerProps) =>
58
+ is(props.invalid) ? Surface.Critical.Subdued : Surface.Default.Default};
59
+ cursor: default;
60
+ border: 1px solid ${(props: IValueContainerProps) =>
61
+ is(props.invalid) ? Borders.Critical.Default : Borders.Default.Default};
62
+ border-radius: 6px;
63
+ outline-offset: -2px;
64
+
65
+ ${(props: IValueContainerProps) => is(props.menuIsOpen) && css`
66
+ outline: 2px solid ${Focused.Default};
67
+ `}
68
+
69
+ ${(props: IValueContainerProps) =>
70
+ (!is(props.disabled) && !is(props.invalid)) && `
71
+
72
+ &:focus {
73
+ outline: 2px solid ${Focused.Default}
74
+ }
75
+
76
+ &:focus-within {
77
+ outline: 2px solid ${Focused.Default}
78
+ }
79
+ `}
80
+ `
81
+
82
+ const ValueWrapper = styled(Flex)<{label?: string, labelPosition?: string}>`
83
+ width: 100%;
84
+ display: ${({label, labelPosition}) =>
85
+ isDefined(label)
86
+ && !isEmpty(label)
87
+ && labelPosition === labelPositionType.TOP ? 'block' : 'flex' };
88
+ `
89
+
90
+ const ValueLabel = styled(Label)<{labelPosition: string | undefined}>`
91
+ padding-left: ${Padding.xs};
92
+ margin-bottom: ${({labelPosition}) =>
93
+ labelPosition === labelPositionType.TOP ? Margin.xxs : Margin.none
94
+ };
95
+ display: flex;
96
+ align-self: ${({labelPosition}) =>
97
+ labelPosition === labelPositionType.TOP ? 'flex-start' : 'center'
98
+ };
99
+ width: fit-content;
100
+ white-space: pre;
101
+ ${({labelPosition}) =>
102
+ (labelPosition === labelPositionType.TOP) && css`
103
+ flex-basis: 100%;
104
+ `}
105
+ `
106
+
107
+ const ValueLeft = styled(Flex)`
108
+ padding-left: ${Padding.xs};
109
+ width: 100%;
110
+ flex-wrap: ${(props: IValueLeftProps) =>
111
+ is(props.multi) && is(props.hasValue) ? 'wrap' : 'nowrap'};
112
+ user-select: none;
113
+ min-width: 0;
114
+ min-height: 20px;
115
+ box-sizing: border-box;
116
+ gap: ${(props: IValueLeftProps) =>
117
+ is(props.multi) ? '4px' : 0};
118
+ `
119
+
120
+ const ValueRight = styled(Flex)`
121
+ padding-right: ${Padding.xxs};
122
+ cursor: pointer;
123
+ `
124
+
125
+ const Placeholder = styled(Label)`
126
+ pointer-events: none;
127
+ color: ${Text.Light};
128
+ `
129
+
130
+ const ClearButton = styled(Button).attrs<IClearButton>({
131
+ plain: true,
132
+ subtle: true,
133
+ })`
134
+ padding: ${Padding.none};
135
+ margin-right: ${Margin.none};
136
+ gap: 0;
137
+ &:focus {
138
+ outline: none;
139
+ }
140
+ &:active {
141
+ background-color: transparent;
142
+ }
143
+ `
144
+
145
+ const ErrorMessage = styled.div`
146
+ display: ${(props: IErrorProps) => is(props.visible) ? 'flex' : 'none'};
147
+ flex-direction: 'row';
148
+ width: 100%;
149
+ padding: ${Padding.xxs} ${Padding.none};
150
+ & path {
151
+ fill: ${Icons.Critical};
152
+ }
153
+ div {
154
+ color: ${Text.Critical};
155
+ margin: ${Margin.none} ${Margin.xxs}
156
+ }
157
+ `
158
+
159
+ const Value: FC<IValueProps> = (props) => {
160
+ const search: RefObject<HTMLSpanElement> = createRef()
161
+
162
+ useEffect(() => {
163
+ if (isDefined(search.current) && !is(props.focused)) {
164
+ search.current.innerText = ''
165
+ }
166
+
167
+ }, [props.value, props.focused, search])
168
+
169
+ const {
170
+ options = [],
171
+ value,
172
+ disabled,
173
+ clearable,
174
+ open,
175
+ multi,
176
+ focused,
177
+ invalid,
178
+ errors,
179
+ label,
180
+ searchable,
181
+ labelPosition = labelPositionType.TOP
182
+ } = props
183
+ const valueOptions: IOption[] = getValueOptions(
184
+ options,
185
+ value,
186
+ multi
187
+ )
188
+ const showClearer = is(clearable) && valueOptions.length > 0
189
+ const searchAtStart = !is(multi) || valueOptions.length === 0
190
+ const searchAtEnd = is(multi) && valueOptions.length > 0
191
+
192
+ const renderSearch = () => {
193
+ const {
194
+ onSearchFocus,
195
+ onSearchBlur
196
+ } = props
197
+
198
+ if (is(disabled) || !is(searchable)) {
199
+ return <Nothing />
200
+ }
201
+
202
+ const canSearch = (open && is(searchable))
203
+ || (!isDefined(value) && is(searchable))
204
+ || isDefined(search.current)
205
+
206
+ /**
207
+ * @TODO this is a hack to be able to use the ref in react-web-client
208
+ * RWC uses styled-components < v4 and expects the ref to be passes as
209
+ * "innerRef" not just "ref", but product-language uses > v4 and wants
210
+ * to use ref. So for some components that need a ref, like this one
211
+ * we will have to use a div and style it the old fashioned way until
212
+ * we upgrade rwc's styled-components or drop rwc
213
+ */
214
+ return (
215
+ <span
216
+ className="search"
217
+ contentEditable
218
+ style={{ ...valueStyles({ canSearch }) }}
219
+ onInput={onSearch}
220
+ onKeyDown={onKeyDown}
221
+ onFocus={onSearchFocus}
222
+ onBlur={onSearchBlur}
223
+ ref={search}
224
+ />
225
+ )
226
+ }
227
+
228
+ const renderLabel = () => {
229
+ return maybeRender(label,
230
+ <ValueLabel labelPosition={labelPosition} subtle subdued>{label}</ValueLabel>)
231
+ }
232
+
233
+ const renderValues = () => {
234
+ const {
235
+ placeholder,
236
+ labelComponent,
237
+ } = props
238
+
239
+ if (isDefined(search) && is(searchable) && open && !is(multi)) {
240
+ return <Nothing />
241
+ }
242
+
243
+ if (valueOptions.length === 0 && isNil((search?.current))) {
244
+ return <Placeholder>{defaultTo(placeholder, DEFAULT_PLACEHOLDER)}</Placeholder>
245
+ }
246
+
247
+ return valueOptions.map((option) =>
248
+ is(multi) ? (
249
+ <ValueComponentMulti
250
+ key={toKey(option.value)}
251
+ option={option}
252
+ labelComponent={labelComponent}
253
+ options={valueOptions}
254
+ onRemove={props.onOptionRemove}
255
+ />
256
+ ) : (
257
+ <ValueComponentSingle
258
+ key={toKey(option.value)}
259
+ option={option}
260
+ labelComponent={labelComponent}
261
+ />
262
+ )
263
+ )
264
+ }
265
+
266
+ const focus = (): void => {
267
+ const el = search.current
268
+
269
+ if (isDefined(el)) {
270
+ el.focus()
271
+ }
272
+ }
273
+
274
+ const onClick = () => {
275
+ if (!is(props.disabled)) {
276
+ focus()
277
+ props.onClick()
278
+ }
279
+ }
280
+
281
+ const onClear = (event: React.MouseEvent<HTMLElement>) => {
282
+ event.stopPropagation()
283
+ props.onClear()
284
+ }
285
+
286
+ const onSearch = (event: React.KeyboardEvent<HTMLSpanElement>) => {
287
+
288
+ if (is(props.searchable)) {
289
+ props.onSearch(event.currentTarget.innerText.trim())
290
+ } else {
291
+ event.preventDefault()
292
+ }
293
+ }
294
+
295
+ const onKeyDown = (event: React.KeyboardEvent<HTMLSpanElement>) => {
296
+
297
+ if (
298
+ (!is(searchable) && event.key !== keys.TAB) ||
299
+ event.key === keys.ENTER ||
300
+ event.key === keys.ARROW_UP ||
301
+ event.key === keys.ARROW_DOWN
302
+ ) {
303
+ event.preventDefault()
304
+ }
305
+
306
+ }
307
+
308
+ return (
309
+ <React.Fragment>
310
+ <ValueContainer
311
+ data-role="value"
312
+ className="select-value"
313
+ disabled={disabled}
314
+ focused={focused}
315
+ invalid={invalid}
316
+ hasLabel={isDefined(props.label)}
317
+ multi
318
+ menuIsOpen={open}
319
+ tabIndex={0}
320
+ onClick={onClick}
321
+ center
322
+ >
323
+ <ValueWrapper
324
+ label={label}
325
+ labelPosition={labelPosition}
326
+ >
327
+ {renderLabel()}
328
+ <ValueLeft
329
+ className="value-left"
330
+ multi={multi}
331
+ showClearer={showClearer}
332
+ hasValue={!(valueOptions.length === 0)}
333
+ >
334
+ {searchAtStart && renderSearch()}
335
+ {renderValues()}
336
+ {searchAtEnd && renderSearch()}
337
+ </ValueLeft>
338
+ </ValueWrapper>
339
+ <ValueRight
340
+ className="value-right"
341
+ center
342
+ >
343
+ {showClearer && (
344
+ <ClearButton
345
+ tabIndex={-1}
346
+ className="clearer"
347
+ onClick={onClear}
348
+ IconPrefix={IconMinor.Xmark}
349
+ />
350
+ )}
351
+ {is(searchable)
352
+ ? <IconMinor.MagnifyingGlass />
353
+ : open
354
+ ? <IconMinor.ChevronUpSolid />
355
+ : <IconMinor.ChevronDownSolid />
356
+ }
357
+ </ValueRight>
358
+ </ValueContainer>
359
+ {safeArray(errors).map((e) => (
360
+ <ErrorMessage visible={!open} key={e.message}>
361
+ <IconMinor.CircleExclamation />
362
+ <Body>{e.message}</Body>
363
+ </ErrorMessage>
364
+ ))}
365
+ </React.Fragment>
366
+
367
+ )
368
+ }
369
+
370
+ 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
+ })