@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,56 @@
1
+ import styled from 'styled-components'
2
+ import { AnchorHTMLAttributes } from 'react'
3
+ import { FC, is } from '@helpers'
4
+ import { Interactive } from '@foundations'
5
+
6
+ export const HTMLAnchor = styled.a<{disabled: boolean, initialColor: string, interactionColor: string}>`
7
+ color: ${({ initialColor }) => initialColor};
8
+ pointer-events: ${({ disabled }) => disabled ? 'none' : 'auto' };
9
+ &:hover{
10
+ text-decoration: none;
11
+ color: ${({ interactionColor }) => interactionColor};
12
+ }
13
+ &:active{
14
+ text-decoration: underline;
15
+ }
16
+ `
17
+
18
+ interface ILinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
19
+ label: string;
20
+ subtle?: boolean
21
+ disabled?: boolean
22
+ }
23
+
24
+ export const Link: FC<ILinkProps> = (props) => {
25
+
26
+ const { label, disabled = false, subtle, ...rest } = props
27
+ const initialColor = getInitialColor(props)
28
+ const interactionColor = getInteractionColor(props)
29
+
30
+ return (
31
+ <HTMLAnchor
32
+ {...rest}
33
+ disabled={disabled}
34
+ initialColor={initialColor}
35
+ interactionColor={interactionColor}
36
+ >
37
+ {label}
38
+ </HTMLAnchor>
39
+ )
40
+ }
41
+
42
+ function getInitialColor ({ subtle, disabled }: ILinkProps) {
43
+ if (is(disabled)) {
44
+ return Interactive.Default.Disabled
45
+ }
46
+
47
+ return is(subtle)
48
+ ? Interactive.Subtle.Default
49
+ : Interactive.Default.Default
50
+ }
51
+
52
+ function getInteractionColor ({ subtle }: ILinkProps) {
53
+ return is(subtle)
54
+ ? Interactive.Subtle.Hover
55
+ : Interactive.Default.Hover
56
+ }
@@ -0,0 +1,52 @@
1
+ import { Canvas, Meta } from '@storybook/addon-docs';
2
+ import { Link } from '../link'
3
+ import { Button } from '../../molecules/button'
4
+ import { Body } from '../../typography'
5
+
6
+
7
+ <Meta title="Components/Link" />
8
+
9
+ # Link
10
+
11
+ Links are navigational actions that take users to another place. They can appear within or directly following a sentence. Links should not to be mistaken with a Plain Button which are used for actions that aren’t related to navigation.
12
+
13
+
14
+ ## How to use it
15
+ The Link component is an extension of HTML <b><a\></b> tag, but its use is limited to textual anchors.
16
+
17
+ ## Default
18
+
19
+ The Link component with default behavior and styles
20
+ <Canvas>
21
+ <Body>
22
+ <Link href="https://app.edvisor.io/" target="_blank" label="Edvisor" /> is the number 1 student recruitment software
23
+ </Body>
24
+ </Canvas>
25
+
26
+ ## Subtle
27
+ The Link component with subtle behavior and styles
28
+ <Canvas>
29
+ <Body>
30
+ Streamline the way you sell education with <Link subtle href="https://app.edvisor.io/" target="_blank" label="Edvisor" />, the best student recruitment software.
31
+ </Body>
32
+ </Canvas>
33
+
34
+ ## Disabled
35
+
36
+ A disabled Link prevents user interaction.
37
+ <Canvas>
38
+ <Body>
39
+ Education with <Link subtle disabled href="https://app.edvisor.io/" target="_blank" label="Edvisor" /> is the best.
40
+ </Body>
41
+ </Canvas>
42
+
43
+ ## API
44
+
45
+ Extends `HTMLAttributes<HTMLAnchorElement>`. Check the documentation <Link href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement" target="_blank" label="here"/>.
46
+
47
+ | Prop | Type | Description |
48
+ | ----------- | --------- | --------------------------|
49
+ | `label` | `string` | the text used as anchor |
50
+ | `default?` | `boolean` | default styling |
51
+ | `subtle?` | `boolean` | subtle styling |
52
+ | `disabled?` | `boolean` | prevents user interaciton |
@@ -0,0 +1,3 @@
1
+ export * from './modal-base'
2
+ export * from './modal'
3
+ export * from './modal-destructive'
@@ -0,0 +1,129 @@
1
+ import { InputHTMLAttributes, useRef, MouseEvent } from 'react'
2
+ import { Background, shadowXl, Surface } from '@foundations'
3
+ import { FC, is, isNil, Nothing, safeCallback } from '@helpers'
4
+ import styled, { keyframes } from 'styled-components'
5
+ import { Flex } from 'components/layout'
6
+ import { useKeyDown } from 'helpers/useKeyDown'
7
+
8
+ const fadeIn = keyframes`
9
+ from { opacity: .4; }
10
+ to { opacity: 1; }
11
+ `
12
+
13
+ const grow = keyframes`
14
+ from { transform: scale(.8) }
15
+ to { transform: scale(1) }
16
+ `
17
+
18
+ const OverlayFrame = styled(Flex)`
19
+ position: fixed;
20
+ top: 0;
21
+ left: 0;
22
+ width: 100%;
23
+ height: 100%;
24
+ z-index: 20000;
25
+ background-color: ${Background.Overlay};
26
+ justify-content: center;
27
+ animation: ${fadeIn} .2s ease-out;
28
+ `
29
+
30
+ const ModalFrame = styled(Flex)<{widthValue: string}>`
31
+ background-color: ${Surface.Default.Default};
32
+ z-index: 20010;
33
+ width: ${({widthValue}) => widthValue};
34
+ ${shadowXl};
35
+ border-radius: 8px;
36
+ animation: ${grow} .1s ease-in;
37
+ `
38
+
39
+ interface Sizes {
40
+ small: string,
41
+ critical: string,
42
+ default: string,
43
+ large: string,
44
+ xLarge: string,
45
+ }
46
+
47
+ export const MODAL_SIZE: Sizes = {
48
+ small: '456px',
49
+ critical: '518px',
50
+ default: '616px',
51
+ large: '776px',
52
+ xLarge: '936px',
53
+ }
54
+
55
+ export const MODAL_SIZE_TEXT = {
56
+ SMALL: 'small',
57
+ CRITICAL: 'critical',
58
+ DEFAULT: 'default',
59
+ LARGE: 'large',
60
+ XLARGE: 'xLarge'
61
+ }
62
+
63
+ export interface IModalBaseProps {
64
+ open: boolean
65
+ children: React.ReactElement
66
+ closeOnEsc?: boolean
67
+ modalSize?: keyof typeof MODAL_SIZE
68
+ onOverlayClick?: () => void
69
+ onClose: () => void
70
+ }
71
+
72
+ function getModalSize(size: string): string {
73
+ const isValidKey = Object.keys(MODAL_SIZE).includes(size)
74
+ const validSize = isValidKey ? size : MODAL_SIZE_TEXT.DEFAULT
75
+ return MODAL_SIZE[validSize as keyof Sizes]
76
+ }
77
+
78
+ export type IModalBase = InputHTMLAttributes<HTMLInputElement> & IModalBaseProps
79
+
80
+ export const ModalBase: FC<IModalBase> = (props: IModalBase) => {
81
+ const {
82
+ open,
83
+ children,
84
+ closeOnEsc = true,
85
+ modalSize = MODAL_SIZE_TEXT.DEFAULT,
86
+ onOverlayClick,
87
+ onClose,
88
+ } = props
89
+
90
+ // eslint-disable-next-line no-null/no-null
91
+ const modalRef = useRef<HTMLDivElement>(null)
92
+
93
+ const handleEscPress = () => {
94
+ if(is(closeOnEsc)) {
95
+ onClose()
96
+ }
97
+ }
98
+
99
+ useKeyDown('Escape', handleEscPress)
100
+
101
+ if(!is(open)) {
102
+ document.body.style.overflow = 'unset'
103
+ return <Nothing />
104
+ } else {
105
+ document.body.style.overflow = 'hidden'
106
+ }
107
+
108
+ const handleOverlayClick = (event: MouseEvent) => {
109
+ if (isNil(modalRef.current) || modalRef.current.contains(event.target as HTMLElement)) {
110
+ return
111
+ }
112
+ safeCallback(onOverlayClick)
113
+ }
114
+
115
+ return (
116
+ <OverlayFrame center onClick={handleOverlayClick} data-testid="modal-overlay">
117
+ <div ref={modalRef}>
118
+ <ModalFrame
119
+ column
120
+ role="dialog"
121
+ widthValue={getModalSize(modalSize)}
122
+ aria-modal="true"
123
+ >
124
+ {children}
125
+ </ModalFrame>
126
+ </div>
127
+ </OverlayFrame>
128
+ )
129
+ }
@@ -0,0 +1,70 @@
1
+ import { HTMLAttributes } from 'react'
2
+ import { Gap, Padding } from '@foundations'
3
+ import { FC, isDefined, Nothing } from '@helpers'
4
+ import styled from 'styled-components'
5
+ import { Button } from 'components/molecules/button'
6
+ import { ModalBase, IModalBaseProps, MODAL_SIZE_TEXT, MODAL_SIZE } from './modal-base'
7
+
8
+
9
+ const ModalContent = styled.div`
10
+ padding: ${Padding.xl} ${Padding.xl} ${Padding.none};
11
+ `
12
+
13
+ const ModalFooter = styled.footer`
14
+ width: 100%;
15
+ padding: ${Padding.m} ${Padding.xl} ${Padding.xl};
16
+ bottom: 0;
17
+ box-sizing: border-box;
18
+ display: flex;
19
+ gap: ${Gap.xs};
20
+ justify-content: flex-end;
21
+ `
22
+
23
+ const CustomButton = styled(Button)`
24
+ width: calc(50% - 4px);
25
+ `
26
+
27
+ export interface IModalDestructiveProps extends IModalBaseProps {
28
+ primaryButtonLabel?: string
29
+ closeButtonLabel: string
30
+ onPrimaryAction: () => void
31
+ }
32
+
33
+ type IModalDestructive = IModalDestructiveProps & HTMLAttributes<HTMLDivElement>
34
+
35
+ export const ModalDestructive: FC<IModalDestructive> = (props: IModalDestructive) => {
36
+ const {
37
+ open,
38
+ closeOnEsc,
39
+ children,
40
+ primaryButtonLabel,
41
+ closeButtonLabel,
42
+ onPrimaryAction,
43
+ onClose,
44
+ onOverlayClick,
45
+ } = props
46
+
47
+ return (
48
+ <ModalBase
49
+ open={open}
50
+ onOverlayClick={onOverlayClick}
51
+ closeOnEsc={closeOnEsc}
52
+ modalSize={MODAL_SIZE_TEXT.CRITICAL as keyof typeof MODAL_SIZE}
53
+ onClose={onClose}
54
+ >
55
+ <>
56
+ <ModalContent>
57
+ {children}
58
+ </ModalContent>
59
+ <ModalFooter>
60
+ <CustomButton onClick={onClose}>{closeButtonLabel}</CustomButton>
61
+ { isDefined(primaryButtonLabel)
62
+ ? <CustomButton primary destructive onClick={onPrimaryAction}>{primaryButtonLabel}</CustomButton>
63
+ : <Nothing />
64
+ }
65
+ <Nothing />
66
+ </ModalFooter>
67
+ </>
68
+ </ModalBase>
69
+ )
70
+ }
@@ -0,0 +1,138 @@
1
+ import { render, screen } from '@testing-library/react'
2
+ import userEvent from '@testing-library/user-event'
3
+ import { Modal, ModalDestructive } from './index'
4
+
5
+
6
+ describe('Modal tests', () => {
7
+ it('should render the modal when attribute open is true', async () => {
8
+ render (
9
+ <Modal
10
+ open={true}
11
+ onClose={() => { return }}
12
+ >
13
+ <p>modal</p>
14
+ </Modal>
15
+ )
16
+ expect(screen.getByRole('dialog')).toBeInTheDocument()
17
+ })
18
+ it('should render the close button and handle the close function', async () => {
19
+ const handleClose = jest.fn()
20
+
21
+ render (
22
+ <Modal
23
+ open={true}
24
+ onClose={handleClose}
25
+ closeButtonLabel="Close me"
26
+ >
27
+ <p>modal</p>
28
+ </Modal>
29
+ )
30
+
31
+ expect(handleClose).not.toHaveBeenCalled()
32
+ const closeButton = screen.getByText('Close me')
33
+ expect(closeButton).toBeInTheDocument()
34
+ await userEvent.click(closeButton)
35
+ expect(handleClose).toHaveBeenCalled()
36
+
37
+ })
38
+ it('should render the primary action button and handle event after click', async () => {
39
+ const handlePrimaryButtonClick = jest.fn()
40
+
41
+ render (
42
+ <Modal
43
+ open={true}
44
+ onClose={() => { return }}
45
+ primaryButtonLabel="Go!"
46
+ onPrimaryAction={handlePrimaryButtonClick}
47
+ >
48
+ <p>modal</p>
49
+ </Modal>
50
+ )
51
+
52
+ expect(handlePrimaryButtonClick).not.toHaveBeenCalled()
53
+ const primaryButton = screen.getByText('Go!')
54
+ expect(primaryButton).toBeInTheDocument()
55
+ await userEvent.click(primaryButton)
56
+ expect(handlePrimaryButtonClick).toHaveBeenCalled()
57
+
58
+ })
59
+
60
+ it('should render the secondary action button and handle event after click', async () => {
61
+ const handleSecondaryButtonClick = jest.fn()
62
+
63
+ render (
64
+ <Modal
65
+ open={true}
66
+ onClose={() => { return }}
67
+ secondaryButtonLabel="Open docs"
68
+ onSecondaryAction={handleSecondaryButtonClick}
69
+ >
70
+ <p>modal</p>
71
+ </Modal>
72
+ )
73
+
74
+ expect(handleSecondaryButtonClick).not.toHaveBeenCalled()
75
+ const secondaryButton = screen.getByText('Open docs')
76
+ expect(secondaryButton).toBeInTheDocument()
77
+ await userEvent.click(secondaryButton)
78
+ expect(handleSecondaryButtonClick).toHaveBeenCalled()
79
+
80
+ })
81
+
82
+ it('should call the close function on press "Esc" key', async () => {
83
+ const handleClose = jest.fn()
84
+
85
+ render (
86
+ <Modal
87
+ open={true}
88
+ onClose={handleClose}
89
+ >
90
+ <p>modal</p>
91
+ </Modal>
92
+ )
93
+
94
+ expect(handleClose).not.toHaveBeenCalled()
95
+ await userEvent.keyboard('{Escape}')
96
+ expect(handleClose).toHaveBeenCalled()
97
+
98
+ })
99
+
100
+ it('should not call the close function on press "Esc" key if the closeOnEsc is false', async () => {
101
+ const handleClose = jest.fn()
102
+
103
+ render (
104
+ <Modal
105
+ open={true}
106
+ onClose={handleClose}
107
+ closeOnEsc={false}
108
+ >
109
+ <p>modal</p>
110
+ </Modal>
111
+ )
112
+
113
+ expect(handleClose).not.toHaveBeenCalled()
114
+ await userEvent.keyboard('{Escape}')
115
+ expect(handleClose).not.toHaveBeenCalled()
116
+
117
+ })
118
+
119
+ it('should call a function we pass on onOverlayClick when click on the overlay section', async () => {
120
+ const handleClose = jest.fn()
121
+
122
+ render (
123
+ <Modal
124
+ open={true}
125
+ onClose={handleClose}
126
+ onOverlayClick={handleClose}
127
+ >
128
+ <p>modal</p>
129
+ </Modal>
130
+ )
131
+
132
+ expect(handleClose).not.toHaveBeenCalled()
133
+ const outside = screen.getByTestId('modal-overlay')
134
+ await userEvent.click(outside)
135
+ expect(handleClose).toHaveBeenCalled()
136
+
137
+ })
138
+ })
@@ -0,0 +1,114 @@
1
+ import { InputHTMLAttributes } from 'react'
2
+ import { Surface, Borders, Padding, Focused, Gap } from '@foundations'
3
+ import { FC, isDefined, Nothing } from '@helpers'
4
+ import styled from 'styled-components'
5
+ import { Heading2 } from 'components/typography'
6
+ import { Button } from 'components/molecules/button'
7
+ import { IconMinor } from 'components/icon'
8
+ import { ModalBase, IModalBaseProps } from './modal-base'
9
+
10
+
11
+ const ModalHeader = styled.header`
12
+ height: 28px;
13
+ display: flex;
14
+ justify-content: space-between;
15
+ padding: ${Padding.m};
16
+ border-bottom: 1px solid ${Borders.Default.Subdued};
17
+ box-sizing: content-box;
18
+ `
19
+
20
+ const CloseButton = styled(IconMinor.Xmark)`
21
+ cursor: pointer;
22
+ align-self: center;
23
+ border-radius: 3px;
24
+ &:hover {
25
+ background-color: ${Surface.Default.Hover};
26
+ }
27
+ &:active {
28
+ background-color: ${Surface.Default.Pressed};
29
+ }
30
+ &:focus {
31
+ outline: 2px solid ${Focused.Default};
32
+ }
33
+ `
34
+
35
+ const ModalContent = styled.div`
36
+ max-height: 70vh;
37
+ overflow-y: auto;
38
+ overflow-x: hidden;
39
+ padding: ${Padding.m};
40
+ `
41
+
42
+ const ModalFooter = styled.footer`
43
+ height: 68px;
44
+ width: 100%;
45
+ padding: ${Padding.m};
46
+ border-top: 1px solid ${Borders.Default.Subdued};
47
+ bottom: 0;
48
+ box-sizing: border-box;
49
+ display: flex;
50
+ gap: ${Gap.xs};
51
+ justify-content: flex-end;
52
+ `
53
+
54
+ export interface IModalProps extends IModalBaseProps {
55
+ title?: string
56
+ primaryButtonLabel?: string
57
+ closeButtonLabel?: string
58
+ secondaryButtonLabel?: string
59
+ onPrimaryAction?: () => void
60
+ onSecondaryAction?: () => void
61
+ }
62
+
63
+ export type IModal = IModalProps & InputHTMLAttributes<HTMLInputElement>
64
+
65
+ export const Modal: FC<IModal> = (props: IModal) => {
66
+ const {
67
+ open,
68
+ closeOnEsc,
69
+ title,
70
+ children,
71
+ primaryButtonLabel,
72
+ closeButtonLabel,
73
+ secondaryButtonLabel,
74
+ modalSize,
75
+ onOverlayClick,
76
+ onPrimaryAction,
77
+ onSecondaryAction,
78
+ onClose,
79
+ } = props
80
+
81
+ return (
82
+ <ModalBase
83
+ open={open}
84
+ onOverlayClick={onOverlayClick}
85
+ closeOnEsc={closeOnEsc}
86
+ modalSize={modalSize}
87
+ onClose={onClose}
88
+ >
89
+ <>
90
+ <ModalHeader>
91
+ <Heading2 default>{title}</Heading2>
92
+ <CloseButton role="button" onClick={onClose}/>
93
+ </ModalHeader>
94
+ <ModalContent>
95
+ {children}
96
+ </ModalContent>
97
+ <ModalFooter>
98
+ { isDefined(secondaryButtonLabel)
99
+ ? <Button plain subtle onClick={onSecondaryAction} name="modal-secondary-button">{secondaryButtonLabel}</Button>
100
+ : <Nothing />
101
+ }
102
+ { isDefined(closeButtonLabel)
103
+ ? <Button onClick={onClose} name="modal-close-button">{closeButtonLabel}</Button>
104
+ : <Nothing />
105
+ }
106
+ { isDefined(primaryButtonLabel)
107
+ ? <Button primary onClick={onPrimaryAction} name="modal-primary-button">{primaryButtonLabel}</Button>
108
+ : <Nothing />
109
+ }
110
+ </ModalFooter>
111
+ </>
112
+ </ModalBase>
113
+ )
114
+ }
@@ -0,0 +1,105 @@
1
+
2
+ import { Playground } from 'storybook-addon-jarle-monaco'
3
+ import { Modal } from '../modal'
4
+ import { ModalDestructive } from '../modal-destructive'
5
+ import { Button, Body, BodyLarge, Flex, Icon } from '@components'
6
+ import { Surface, Text, Margin } from '@foundations'
7
+ import styled from 'styled-components'
8
+
9
+ const IconFrame = styled(Flex)`
10
+ background-color: ${Surface.Critical.Pressed};
11
+ width: 44px;
12
+ height: 44px;
13
+ border-radius: 50%;
14
+ justify-content: center;
15
+ margin-bottom: ${Margin.m};
16
+ `
17
+
18
+ const ExclamationIcon = styled(Icon.TriangleExclamation)`
19
+ path {
20
+ fill: ${Text.Critical};
21
+ }
22
+ `
23
+
24
+ const MainText = styled(Body)`
25
+ margin: ${Margin.m} ${Margin.none} ${Margin.xs};
26
+ text-align: center;
27
+ `
28
+
29
+ export const ModalExample = () => (
30
+ <Playground
31
+ code={`
32
+ const [isOpen, setIsOpen] = useState(false);
33
+
34
+ <>
35
+ <Button onClick={() => setIsOpen(true)}>Open the modal!</Button>
36
+ <Modal
37
+ open={isOpen}
38
+ modalSize="large"
39
+ title="Modal Heading"
40
+ closeButtonLabel="Close me"
41
+ primaryButtonLabel="Do Stuff!"
42
+ onPrimaryAction={() => alert("Stuff done", setIsOpen(false))}
43
+ secondaryButtonLabel="Could you click here?"
44
+ onSecondaryAction={() => alert("Nice", setIsOpen(false))}
45
+ onClose={() => setIsOpen(false)}
46
+ onOverlayClick={() => setIsOpen(false)}
47
+ >
48
+ <Body>Modal with incredible content</Body>
49
+ </Modal>
50
+ </>
51
+ `}
52
+ providerProps={{
53
+ renderAsComponent: true,
54
+ scope: {
55
+ Button,
56
+ Modal,
57
+ Body,
58
+ },
59
+ }}
60
+ />
61
+ )
62
+
63
+ export const ModalDestructiveExample = () => (
64
+ <Playground
65
+ code={`
66
+ const [isOpen, setIsOpen] = useState(false);
67
+
68
+ <>
69
+ <Button onClick={() => setIsOpen(true)}>Open the modal!</Button>
70
+ <ModalDestructive
71
+ open={isOpen}
72
+ closeButtonLabel="Get me outta here"
73
+ primaryButtonLabel="Delete it!"
74
+ onPrimaryAction={() => alert("Deleted :(", setIsOpen(false))}
75
+ onClose={() => setIsOpen(false)}
76
+ onOverlayClick={() => setIsOpen(false)}
77
+ >
78
+ <Flex center column>
79
+ <IconFrame center>
80
+ <ExclamationIcon />
81
+ </IconFrame>
82
+ <BodyLarge strong>Delete Account</BodyLarge>
83
+ <MainText subdued>
84
+ Are you sure you want to delete your account? All of your data will be permanently removed.
85
+ This action cannot be undone.
86
+ </MainText>
87
+ </Flex>
88
+ </ModalDestructive>
89
+ </>
90
+ `}
91
+ providerProps={{
92
+ renderAsComponent: true,
93
+ scope: {
94
+ Button,
95
+ ModalDestructive,
96
+ BodyLarge,
97
+ Body,
98
+ IconFrame,
99
+ ExclamationIcon,
100
+ Flex,
101
+ MainText,
102
+ },
103
+ }}
104
+ />
105
+ )
@@ -0,0 +1,31 @@
1
+ import { Canvas } from '@storybook/addon-docs';
2
+ import { ModalDestructive } from '../modal-destructive'
3
+ import { ModalExample, ModalDestructiveExample } from './components'
4
+
5
+ <Meta title="Components/ModalDestructive" component={ModalDestructive}/>
6
+
7
+ ## Modal
8
+ This special type of modal is used to confirm destructive actions that cannot be undone.
9
+
10
+ For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=734%3A7372&t=pb7J9FXC7G2B8T7p-0)
11
+
12
+ ```tsx
13
+ import { ModalDestructive } from './index'
14
+
15
+ <ModalDestructive />
16
+ ```
17
+
18
+ <ModalDestructiveExample />
19
+
20
+ ## API
21
+
22
+ | Prop | Type | Description |
23
+ | ----------------------- | -------------------- | --------------------------------------------------------- |
24
+ | `open` | `boolean` | if true, the modal will be open |
25
+ | `children?` | `ReactElement` | the elements to be displayed on main section of the modal |
26
+ | `closeOnBackdropClick` | `boolean` | if true, the modal will close when click on overlay area |
27
+ | `closeOnEsc` | `boolean` | if true, the modal will close when press esc key |
28
+ | `primaryButtonLabel?` | `string` | Primary action button label |
29
+ | `closeButtonLabel?` | `string` | Close/Dismiss action button label |
30
+ | `onPrimaryAction?` | `() => void` | Primary button event handler function |
31
+ | `onClose?` | `() => void` | Callback function invoked to close the modal |