@edvisor/product-language 0.2.0 → 0.3.1

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 (248) hide show
  1. package/index.d.ts +2 -0
  2. package/index.js +7914 -0
  3. package/lib/components/alert-banner/alert-banner.d.ts +11 -0
  4. package/lib/components/alert-banner/alert-level-flags.d.ts +13 -0
  5. package/lib/components/alert-banner/index.d.ts +1 -0
  6. package/lib/components/badge/badge-type-flags.d.ts +18 -0
  7. package/lib/components/badge/badge.d.ts +5 -0
  8. package/lib/components/badge/index.d.ts +1 -0
  9. package/{src/lib/components/card/atoms/card-frame.tsx → lib/components/card/atoms/card-frame.d.ts} +7 -17
  10. package/lib/components/card/atoms/index.d.ts +1 -0
  11. package/lib/components/card/card.d.ts +14 -0
  12. package/lib/components/card/components/card-alert-banner-slot.d.ts +5 -0
  13. package/lib/components/card/components/card-controls-slot.d.ts +4 -0
  14. package/lib/components/card/components/card-section-slot.d.ts +11 -0
  15. package/lib/components/card/components/index.d.ts +3 -0
  16. package/lib/components/card/index.d.ts +2 -0
  17. package/lib/components/card/molecules/index.d.ts +1 -0
  18. package/lib/components/card/molecules/left-right-card.d.ts +16 -0
  19. package/lib/components/checkbox/checkbox.d.ts +10 -0
  20. package/lib/components/checkbox/helpers.d.ts +12 -0
  21. package/lib/components/checkbox/index.d.ts +1 -0
  22. package/lib/components/divider/divider-type-flags.d.ts +9 -0
  23. package/lib/components/divider/divider.d.ts +7 -0
  24. package/lib/components/divider/index.d.ts +1 -0
  25. package/lib/components/flag/flag-size-flags.d.ts +12 -0
  26. package/lib/components/flag/flag.d.ts +9 -0
  27. package/lib/components/flag/flag.list.d.ts +781 -0
  28. package/lib/components/flag/index.d.ts +1 -0
  29. package/lib/components/icon/icon-list.d.ts +131 -0
  30. package/lib/components/icon/icon.d.ts +131 -0
  31. package/lib/components/icon/index.d.ts +1 -0
  32. package/lib/components/index.d.ts +17 -0
  33. package/lib/components/input-field/components/index.d.ts +2 -0
  34. package/lib/components/input-field/components/labeled-input.d.ts +10 -0
  35. package/lib/components/input-field/components/stepper.d.ts +7 -0
  36. package/lib/components/input-field/index.d.ts +3 -0
  37. package/lib/components/input-field/input-field.d.ts +25 -0
  38. package/lib/components/input-field/input-number.d.ts +18 -0
  39. package/lib/components/input-field/input-text.d.ts +14 -0
  40. package/lib/components/layout/flex.d.ts +16 -0
  41. package/lib/components/layout/grid-layout.d.ts +11 -0
  42. package/lib/components/layout/index.d.ts +3 -0
  43. package/lib/components/layout/left-right-layout.d.ts +34 -0
  44. package/lib/components/link/index.d.ts +1 -0
  45. package/lib/components/link/link.d.ts +14 -0
  46. package/lib/components/molecules/avatar/avatar-size-flags.d.ts +12 -0
  47. package/lib/components/molecules/avatar/avatar.d.ts +12 -0
  48. package/lib/components/molecules/avatar/index.d.ts +1 -0
  49. package/lib/components/molecules/button/button-flags.d.ts +44 -0
  50. package/lib/components/molecules/button/button.d.ts +12 -0
  51. package/lib/components/molecules/button/index.d.ts +1 -0
  52. package/lib/components/molecules/index.d.ts +3 -0
  53. package/lib/components/molecules/input-checkbox/index.d.ts +1 -0
  54. package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +8 -0
  55. package/lib/components/organisms/index.d.ts +1 -0
  56. package/lib/components/organisms/multi-choice-list/index.d.ts +1 -0
  57. package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +10 -0
  58. package/lib/components/spinner/index.d.ts +1 -0
  59. package/lib/components/spinner/spinner-size-flags.d.ts +10 -0
  60. package/lib/components/spinner/spinner.d.ts +9 -0
  61. package/lib/components/tabs/components/index.d.ts +1 -0
  62. package/lib/components/tabs/components/tab.d.ts +7 -0
  63. package/lib/components/tabs/index.d.ts +1 -0
  64. package/lib/components/tabs/tabs.d.ts +15 -0
  65. package/lib/components/tag/components/close-button.d.ts +8 -0
  66. package/lib/components/tag/components/index.d.ts +2 -0
  67. package/lib/components/tag/components/tag-label.d.ts +8 -0
  68. package/lib/components/tag/index.d.ts +1 -0
  69. package/lib/components/tag/tag.d.ts +10 -0
  70. package/lib/components/thumbnail/index.d.ts +1 -0
  71. package/lib/components/thumbnail/thumbnail-size-flags.d.ts +10 -0
  72. package/lib/components/thumbnail/thumbnail.d.ts +10 -0
  73. package/lib/components/typography/index.d.ts +1 -0
  74. package/lib/components/typography/typography.d.ts +24 -0
  75. package/lib/foundations/color-system/base-palette/base-palette.d.ts +76 -0
  76. package/lib/foundations/color-system/base-palette/index.d.ts +1 -0
  77. package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +132 -0
  78. package/lib/foundations/color-system/color-guidelines/index.d.ts +1 -0
  79. package/lib/foundations/color-system/components/color-sample.d.ts +17 -0
  80. package/lib/foundations/color-system/components/index.d.ts +1 -0
  81. package/lib/foundations/color-system/index.d.ts +1 -0
  82. package/lib/foundations/index.d.ts +4 -0
  83. package/lib/foundations/shadows/components.d.ts +8 -0
  84. package/lib/foundations/shadows/index.d.ts +1 -0
  85. package/lib/foundations/shadows/shadows.d.ts +8 -0
  86. package/lib/foundations/spacing/index.d.ts +1 -0
  87. package/lib/foundations/spacing/spacing-guidelines.d.ts +22 -0
  88. package/lib/foundations/spacing/spacing.d.ts +18 -0
  89. package/lib/foundations/typography/constants.d.ts +22 -0
  90. package/lib/foundations/typography/fonts.d.ts +1 -0
  91. package/lib/foundations/typography/index.d.ts +1 -0
  92. package/lib/foundations/typography/text-aspect-flags.d.ts +19 -0
  93. package/lib/foundations/typography/typography.d.ts +24 -0
  94. package/lib/helpers/generic-types.d.ts +21 -0
  95. package/lib/helpers/index.d.ts +6 -0
  96. package/lib/helpers/nothing.d.ts +8 -0
  97. package/{src/lib/helpers/numbers.ts → lib/helpers/numbers.d.ts} +50 -53
  98. package/lib/helpers/safe-navigation.d.ts +15 -0
  99. package/lib/helpers/slots.d.ts +23 -0
  100. package/lib/helpers/strings.d.ts +1 -0
  101. package/package.json +12 -5
  102. package/.babelrc +0 -12
  103. package/.eslintrc.json +0 -139
  104. package/.storybook/main.js +0 -57
  105. package/.storybook/manager.js +0 -7
  106. package/.storybook/preview-head.html +0 -1
  107. package/.storybook/preview.js +0 -15
  108. package/.storybook/tsconfig.json +0 -30
  109. package/jest.config.ts +0 -15
  110. package/jest.setup.ts +0 -2
  111. package/project.json +0 -85
  112. package/release-it.json +0 -18
  113. package/src/assets/svg/example_icon.svg +0 -3
  114. package/src/assets/svg/example_icon_white.svg +0 -3
  115. package/src/assets/svg/spinner.svg +0 -3
  116. package/src/assets/svg/spinner_white.svg +0 -3
  117. package/src/helpers/index.ts +0 -3
  118. package/src/helpers/talesOf.tsx +0 -42
  119. package/src/index.ts +0 -2
  120. package/src/lib/components/README.md +0 -49
  121. package/src/lib/components/alert-banner/alert-banner.tsx +0 -34
  122. package/src/lib/components/alert-banner/alert-level-flags.ts +0 -77
  123. package/src/lib/components/alert-banner/index.ts +0 -1
  124. package/src/lib/components/badge/badge-type-flags.ts +0 -72
  125. package/src/lib/components/badge/badge.stories.tsx +0 -16
  126. package/src/lib/components/badge/badge.test.tsx +0 -29
  127. package/src/lib/components/badge/badge.tsx +0 -31
  128. package/src/lib/components/badge/index.ts +0 -1
  129. package/src/lib/components/card/atoms/index.ts +0 -1
  130. package/src/lib/components/card/card.test.tsx +0 -163
  131. package/src/lib/components/card/card.tsx +0 -78
  132. package/src/lib/components/card/components/card-alert-banner-slot.tsx +0 -16
  133. package/src/lib/components/card/components/card-controls-slot.tsx +0 -19
  134. package/src/lib/components/card/components/card-section-slot.tsx +0 -51
  135. package/src/lib/components/card/components/index.ts +0 -3
  136. package/src/lib/components/card/index.ts +0 -2
  137. package/src/lib/components/card/molecules/index.ts +0 -1
  138. package/src/lib/components/card/molecules/left-right-card.test.tsx +0 -89
  139. package/src/lib/components/card/molecules/left-right-card.tsx +0 -63
  140. package/src/lib/components/card/storybook/card.stories.mdx +0 -100
  141. package/src/lib/components/card/storybook/components.tsx +0 -240
  142. package/src/lib/components/checkbox/checkbox.test.tsx +0 -39
  143. package/src/lib/components/checkbox/checkbox.tsx +0 -124
  144. package/src/lib/components/checkbox/components/components.tsx +0 -59
  145. package/src/lib/components/checkbox/index.tsx +0 -1
  146. package/src/lib/components/checkbox/stories/checkbox.stories.mdx +0 -54
  147. package/src/lib/components/checkbox/stories/components.tsx +0 -36
  148. package/src/lib/components/checkbox/stories/index.tsx +0 -1
  149. package/src/lib/components/divider/divider-type-flags.tsx +0 -37
  150. package/src/lib/components/divider/divider.test.tsx +0 -34
  151. package/src/lib/components/divider/divider.tsx +0 -37
  152. package/src/lib/components/divider/index.tsx +0 -1
  153. package/src/lib/components/divider/stories/components.tsx +0 -13
  154. package/src/lib/components/divider/stories/divider.stories.mdx +0 -50
  155. package/src/lib/components/index.ts +0 -14
  156. package/src/lib/components/input-field/components/index.ts +0 -2
  157. package/src/lib/components/input-field/components/labeled-input.tsx +0 -61
  158. package/src/lib/components/input-field/components/stepper.tsx +0 -59
  159. package/src/lib/components/input-field/index.ts +0 -6
  160. package/src/lib/components/input-field/input-field.test.tsx +0 -108
  161. package/src/lib/components/input-field/input-field.tsx +0 -126
  162. package/src/lib/components/input-field/input-number.tsx +0 -41
  163. package/src/lib/components/input-field/input-text.tsx +0 -30
  164. package/src/lib/components/input-field/storybook/components.tsx +0 -334
  165. package/src/lib/components/input-field/storybook/input-field.stories.mdx +0 -113
  166. package/src/lib/components/layout/flex.tsx +0 -22
  167. package/src/lib/components/layout/grid-layout.tsx +0 -40
  168. package/src/lib/components/layout/index.ts +0 -3
  169. package/src/lib/components/layout/left-right-layout.tsx +0 -67
  170. package/src/lib/components/link/index.ts +0 -1
  171. package/src/lib/components/link/link.test.tsx +0 -29
  172. package/src/lib/components/link/link.tsx +0 -56
  173. package/src/lib/components/link/storybook/link.stories.mdx +0 -51
  174. package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +0 -55
  175. package/src/lib/components/molecules/avatar/avatar.test.tsx +0 -114
  176. package/src/lib/components/molecules/avatar/avatar.tsx +0 -80
  177. package/src/lib/components/molecules/avatar/index.tsx +0 -1
  178. package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +0 -55
  179. package/src/lib/components/molecules/avatar/stories/components.tsx +0 -36
  180. package/src/lib/components/molecules/button/button-flags.tsx +0 -235
  181. package/src/lib/components/molecules/button/button.test.tsx +0 -77
  182. package/src/lib/components/molecules/button/button.tsx +0 -231
  183. package/src/lib/components/molecules/button/index.tsx +0 -1
  184. package/src/lib/components/molecules/button/stories/button.stories.mdx +0 -104
  185. package/src/lib/components/molecules/button/stories/components.tsx +0 -86
  186. package/src/lib/components/molecules/index.ts +0 -3
  187. package/src/lib/components/molecules/input-checkbox/index.tsx +0 -1
  188. package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +0 -34
  189. package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +0 -50
  190. package/src/lib/components/molecules/input-checkbox/stories/components.tsx +0 -36
  191. package/src/lib/components/molecules/input-checkbox/stories/index.tsx +0 -1
  192. package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +0 -51
  193. package/src/lib/components/organisms/index.ts +0 -1
  194. package/src/lib/components/organisms/multi-choice-list/index.tsx +0 -1
  195. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +0 -33
  196. package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +0 -53
  197. package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +0 -126
  198. package/src/lib/components/organisms/multi-choice-list/stories/index.tsx +0 -1
  199. package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +0 -99
  200. package/src/lib/components/spinner/index.tsx +0 -1
  201. package/src/lib/components/spinner/spinner-size-flags.tsx +0 -39
  202. package/src/lib/components/spinner/spinner.test.tsx +0 -31
  203. package/src/lib/components/spinner/spinner.tsx +0 -67
  204. package/src/lib/components/spinner/stories/components.tsx +0 -8
  205. package/src/lib/components/spinner/stories/spinner.stories.mdx +0 -42
  206. package/src/lib/components/thumbnail/index.tsx +0 -1
  207. package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +0 -34
  208. package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +0 -41
  209. package/src/lib/components/thumbnail/thumbnail.test.tsx +0 -51
  210. package/src/lib/components/thumbnail/thumbnail.tsx +0 -40
  211. package/src/lib/components/typography/index.ts +0 -1
  212. package/src/lib/components/typography/storybook/components.tsx +0 -256
  213. package/src/lib/components/typography/storybook/typography.stories.mdx +0 -88
  214. package/src/lib/components/typography/typography.test.tsx +0 -93
  215. package/src/lib/components/typography/typography.tsx +0 -57
  216. package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +0 -123
  217. package/src/lib/foundations/color-system/base-palette/base-palette.ts +0 -94
  218. package/src/lib/foundations/color-system/base-palette/index.ts +0 -1
  219. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +0 -85
  220. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +0 -231
  221. package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +0 -159
  222. package/src/lib/foundations/color-system/color-guidelines/index.ts +0 -1
  223. package/src/lib/foundations/color-system/components/color-sample.tsx +0 -99
  224. package/src/lib/foundations/color-system/components/index.ts +0 -1
  225. package/src/lib/foundations/color-system/index.ts +0 -1
  226. package/src/lib/foundations/index.ts +0 -4
  227. package/src/lib/foundations/shadows/components.tsx +0 -59
  228. package/src/lib/foundations/shadows/index.ts +0 -1
  229. package/src/lib/foundations/shadows/shadows.stories.mdx +0 -71
  230. package/src/lib/foundations/shadows/shadows.tsx +0 -47
  231. package/src/lib/foundations/spacing/index.ts +0 -1
  232. package/src/lib/foundations/spacing/spacing-guidelines.ts +0 -24
  233. package/src/lib/foundations/spacing/spacing.stories.mdx +0 -51
  234. package/src/lib/foundations/spacing/spacing.ts +0 -18
  235. package/src/lib/foundations/typography/constants.ts +0 -25
  236. package/src/lib/foundations/typography/index.tsx +0 -1
  237. package/src/lib/foundations/typography/text-aspect-flags.ts +0 -54
  238. package/src/lib/foundations/typography/typography.tsx +0 -97
  239. package/src/lib/helpers/generic-types.ts +0 -44
  240. package/src/lib/helpers/index.ts +0 -6
  241. package/src/lib/helpers/nothing.tsx +0 -18
  242. package/src/lib/helpers/safe-navigation.ts +0 -34
  243. package/src/lib/helpers/slots.tsx +0 -76
  244. package/src/lib/helpers/strings.test.ts +0 -47
  245. package/src/lib/helpers/strings.ts +0 -16
  246. package/tsconfig.json +0 -35
  247. package/tsconfig.lib.json +0 -28
  248. package/tsconfig.spec.json +0 -21
@@ -1,49 +0,0 @@
1
- Components
2
- ==========
3
-
4
- This folder contains the components that will be exported from the Product Language and used in the front-end.
5
-
6
- ```
7
- /src
8
- /lib
9
- /components
10
- /alert-banner
11
- /card
12
- index.ts
13
- ```
14
-
15
- The index.ts file is a manifest and anything in the manifest will be available the clients.
16
-
17
- ```
18
- /src
19
- /lib
20
- /components
21
- /alert-banner
22
- /card
23
- /components
24
- /helpers
25
- index.tsx
26
- card.tsx
27
- card.stories.tsx
28
- card.spec.ts
29
- index.ts
30
- ```
31
-
32
- inside of any component, like `card` you will find another index.ts file. This is a manifest and it should only declare the main file of the component as an export:
33
-
34
- ```ts
35
- export * from './card'
36
- ```
37
-
38
- None of the specs, stories, sub-components, helpers, or any other kind of thing should appear in the manifest. Using manifests like this allows us to give each component a rich eco-system of helpers and sub-components without needing to move everything to a global scope.
39
-
40
- For example, here is a helper in card/helpers.ts
41
-
42
- ```ts
43
- // this is not a real helper, just an example
44
- export function makeCardTitle (title: string) {
45
- return `Card: ${title}`
46
- }
47
- ```
48
-
49
- This helper is obviously tightly coupled to the card "concern". It should not be declared in a global helpers file, that wouldn't make sense and it would lower cohesion in the app. In addition, it should not be exported from the manifest, since it is not intended for the client to use it.
@@ -1,34 +0,0 @@
1
- import styled from 'styled-components'
2
- import { FC, Hex, PropsWithChildren } from '@helpers'
3
- import { AlertLevelProps, getBackgroundColor, getBorderColor } from './alert-level-flags'
4
- import { Padding } from '@foundations'
5
- import { CardFrame } from 'components/card/atoms'
6
-
7
- interface IAlertBannerProps extends PropsWithChildren {
8
- /** @TODO can we get some examples of alert banner in card from figma? */
9
- inCard?: boolean
10
- dismissible?: boolean
11
- className?: string
12
- }
13
-
14
- export type AlertBannerProps = IAlertBannerProps & AlertLevelProps
15
-
16
- const InCardFrame = styled(CardFrame).attrs({ as: 'div' })<{ background: Hex, border: Hex }>`
17
- display: inline-block;
18
- padding: ${Padding.m};
19
- width: fill-available;
20
-
21
- background: ${({ background }) => background};
22
- border: 1px solid ${({ border }) => border};
23
- `
24
-
25
- export const AlertBanner: FC<AlertBannerProps> = (props) => {
26
- const background = getBackgroundColor(props)
27
- const border = getBorderColor(props)
28
-
29
- return (
30
- <InCardFrame background={background} border={border} className={props.className}>
31
- {props.children}
32
- </InCardFrame>
33
- )
34
- }
@@ -1,77 +0,0 @@
1
- // this file was generated, but it is safe to modify
2
- import { Borders, Surface } from '@foundations'
3
- import { bitwiseOr, Hex, MappedEnum, RequireOnlyOne, PropsWithChildren } from '@helpers'
4
-
5
- const enum AlertLevel {
6
- neutral = 1,
7
- info = 2,
8
- success = 4,
9
- warning = 8,
10
- critical = 16,
11
- }
12
-
13
- type AlertLevels<T> = MappedEnum<typeof AlertLevel, T>
14
-
15
- function toAlertLevel(n: number): AlertLevel {
16
- switch (n) {
17
- case AlertLevel.neutral:
18
- return AlertLevel.neutral
19
- case AlertLevel.info:
20
- return AlertLevel.info
21
- case AlertLevel.success:
22
- return AlertLevel.success
23
- case AlertLevel.warning:
24
- return AlertLevel.warning
25
- case AlertLevel.critical:
26
- return AlertLevel.critical
27
- default:
28
- return AlertLevel.neutral
29
- }
30
- }
31
-
32
- export type AlertLevelProps = Partial<RequireOnlyOne<AlertLevels<boolean>>> &
33
- PropsWithChildren
34
-
35
- const AlertLevelBackgroundColors = {
36
- [AlertLevel.neutral]: Surface.Neutral.Subdued,
37
- [AlertLevel.info]: Surface.Highlight.Subdued,
38
- [AlertLevel.success]: Surface.Success.Subdued,
39
- [AlertLevel.warning]: Surface.Warning.Subdued,
40
- [AlertLevel.critical]: Surface.Critical.Subdued,
41
- }
42
-
43
- const AlertLevelBorderColors = {
44
- [AlertLevel.neutral]: Borders.Default.Default,
45
- [AlertLevel.info]: Borders.Highlight.Subdued,
46
- [AlertLevel.success]: Borders.Success.Subdued,
47
- [AlertLevel.warning]: Borders.Warning.Subdued,
48
- [AlertLevel.critical]: Borders.Critical.Subdued,
49
- }
50
-
51
- export function getBackgroundColor(props: AlertLevelProps): Hex {
52
- return AlertLevelBackgroundColors[
53
- toAlertLevel(
54
- bitwiseOr([
55
- props.neutral,
56
- props.info,
57
- props.success,
58
- props.warning,
59
- props.critical,
60
- ])
61
- )
62
- ]
63
- }
64
-
65
- export function getBorderColor(props: AlertLevelProps): Hex {
66
- return AlertLevelBorderColors[
67
- toAlertLevel(
68
- bitwiseOr([
69
- props.neutral,
70
- props.info,
71
- props.success,
72
- props.warning,
73
- props.critical,
74
- ])
75
- )
76
- ]
77
- }
@@ -1 +0,0 @@
1
- export * from './alert-banner'
@@ -1,72 +0,0 @@
1
- // this file was generated, but it is safe to modify
2
- import { Hex, PropsWithChildren } from '@helpers'
3
- import { Surface } from '@foundations'
4
-
5
- const enum BadgeType {
6
- neutral = 1,
7
- info = 2,
8
- success = 4,
9
- warning = 8,
10
- critical = 16,
11
- }
12
-
13
- export type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<
14
- T,
15
- Exclude<keyof T, Keys>
16
- > &
17
- {
18
- [K in Keys]-?: Required<Pick<T, K>> &
19
- Partial<Record<Exclude<Keys, K>, undefined>>;
20
- }[Keys];
21
-
22
- export type MappedEnum<E, T> = {
23
- [key in keyof E]: T;
24
- }
25
-
26
- type BadgeTypes<T> = MappedEnum<typeof BadgeType, T>
27
-
28
- function toBadgeType(n: number): BadgeType {
29
- switch (n) {
30
- case BadgeType.neutral:
31
- return BadgeType.neutral
32
- case BadgeType.info:
33
- return BadgeType.info
34
- case BadgeType.success:
35
- return BadgeType.success
36
- case BadgeType.warning:
37
- return BadgeType.warning
38
- case BadgeType.critical:
39
- return BadgeType.critical
40
- default:
41
- return BadgeType.neutral
42
- }
43
- }
44
-
45
- const BadgeTypeColors = {
46
- [BadgeType.neutral]: Surface.Neutral.Default,
47
- [BadgeType.info]: Surface.Highlight.Default,
48
- [BadgeType.success]: Surface.Success.Default,
49
- [BadgeType.warning]: Surface.Warning.Default,
50
- [BadgeType.critical]: Surface.Critical.Default,
51
- }
52
-
53
- export type BadgeTypeProps = Partial<RequireOnlyOne<BadgeTypes<boolean>>> &
54
- PropsWithChildren
55
-
56
- function bitwiseOr(flags: unknown[]): number {
57
- return flags.reduce((mask: number, flag, i) => mask | (Number(flag) << i), 0)
58
- }
59
-
60
- export function getColor(props: BadgeTypeProps): Hex {
61
- return BadgeTypeColors[
62
- toBadgeType(
63
- bitwiseOr([
64
- props.neutral,
65
- props.info,
66
- props.success,
67
- props.warning,
68
- props.critical,
69
- ])
70
- )
71
- ]
72
- }
@@ -1,16 +0,0 @@
1
- import { StoryComponent, talesOf } from '@stories'
2
- import { Badge } from './badge'
3
-
4
- const Story: StoryComponent = () => {
5
- return (
6
- <>
7
- <Badge neutral>Neutral</Badge>
8
- <Badge info>Informational</Badge>
9
- <Badge warning>Warning</Badge>
10
- <Badge success>Success</Badge>
11
- <Badge critical>Critical</Badge>
12
- </>
13
- )
14
- }
15
-
16
- talesOf(__filename, module, Story)
@@ -1,29 +0,0 @@
1
- import { render } from '@testing-library/react'
2
- import { Badge } from './badge'
3
-
4
- describe('Badge', () => {
5
- it('should render Neutral Badge successfully', () => {
6
- const { baseElement } = render(<Badge neutral>Neutral</Badge>)
7
- expect(baseElement).toBeTruthy()
8
- })
9
-
10
- it('should render Informational Badge successfully', () => {
11
- const { baseElement } = render(<Badge info>Informational</Badge>)
12
- expect(baseElement).toBeTruthy()
13
- })
14
-
15
- it('should render Warning Badge successfully', () => {
16
- const { baseElement } = render(<Badge warning>Warning</Badge>)
17
- expect(baseElement).toBeTruthy()
18
- })
19
-
20
- it('should render Success Badge successfully', () => {
21
- const { baseElement } = render(<Badge success>Success</Badge>)
22
- expect(baseElement).toBeTruthy()
23
- })
24
-
25
- it('should render Critical Badge successfully', () => {
26
- const { baseElement } = render(<Badge critical>Critical</Badge>)
27
- expect(baseElement).toBeTruthy()
28
- })
29
- })
@@ -1,31 +0,0 @@
1
- import styled from 'styled-components'
2
- import { Padding } from '@foundations'
3
- import { BadgeTypeProps, getColor } from './badge-type-flags'
4
- import { FC, PropsWithChildren } from '@helpers'
5
- import { Label2 } from 'components/typography'
6
-
7
- const BadgeFrame = styled.div<{color: string}>`
8
- background: ${props => props.color};
9
- display: flex;
10
- flex-direction: row;
11
- align-items:center;
12
- gap: 8px;
13
- padding: ${Padding.xxxs} ${Padding.s};
14
- border-radius:100px;
15
- width: fit-content;
16
- `
17
-
18
- type IBadgeProps = BadgeTypeProps & PropsWithChildren
19
-
20
- const Base: FC<IBadgeProps> = (props) => {
21
- const color = getColor(props)
22
-
23
-
24
- return (
25
- <BadgeFrame color={color}>
26
- <Label2>{props.children}</Label2>
27
- </BadgeFrame>
28
- )
29
- }
30
-
31
- export const Badge = Base
@@ -1 +0,0 @@
1
- export * from './badge'
@@ -1 +0,0 @@
1
- export * from './card-frame'
@@ -1,163 +0,0 @@
1
- import { Margin } from '@foundations'
2
- import { fireEvent, render, screen } from '@testing-library/react'
3
- import styled from 'styled-components'
4
-
5
- import { Card } from './card'
6
-
7
- describe('Card', () => {
8
- it('renders with the heading', () => {
9
- render(
10
- <Card heading='Heading'>Contents</Card>
11
- )
12
-
13
- expect(screen.getByRole('heading')).toBeInTheDocument()
14
- expect(screen.getByText('Heading')).toBeInTheDocument()
15
- expect(screen.getByText('Contents')).toBeInTheDocument()
16
- })
17
-
18
- it('renders without the heading', () => {
19
- render(
20
- <Card>Contents</Card>
21
- )
22
-
23
- expect(screen.queryByRole('heading')).not.toBeInTheDocument()
24
- expect(screen.getByText('Contents')).toBeInTheDocument()
25
- })
26
-
27
- /**
28
- * this test just ensures that the programmer did not
29
- * forget to add className? to the props and then pass
30
- * it to the wrapping element so that users downstream
31
- * can style the component
32
- */
33
- it('accepts styles', () => {
34
- const NiceCard = styled(Card)`
35
- margin-bottom: ${Margin.l};
36
- `
37
-
38
- const { container } = render(<NiceCard>Contents</NiceCard>)
39
-
40
- expect(container.firstChild).toHaveStyle(`margin-bottom: ${Margin.l}`)
41
- expect(screen.getByText('Contents')).toBeInTheDocument()
42
- })
43
-
44
- describe('slots', () => {
45
- it('renders no regions if it has no headings', () => {
46
- render(
47
- <Card>Contents</Card>
48
- )
49
-
50
- expect(screen.queryByRole('region')).not.toBeInTheDocument()
51
- expect(screen.getByText('Contents')).toBeInTheDocument()
52
- })
53
-
54
- it('renders one region if the card has a heading', () => {
55
- render(
56
- <Card heading='Heading'>Contents</Card>
57
- )
58
-
59
- expect(screen.getByRole('region')).toBeInTheDocument()
60
- expect(screen.getAllByRole('region').length).toBe(1)
61
- expect(screen.getByText('Contents')).toBeInTheDocument()
62
- })
63
-
64
- it('renders one region per heading', () => {
65
- render(
66
- <Card heading='Heading'>
67
- <Card.Section heading='Subheading 1'>Section 1</Card.Section>
68
- <Card.Section heading='Subheading 2'>Section 2</Card.Section>
69
- <Card.Section>Section 3</Card.Section>
70
- <Card.Section>Section 4</Card.Section>
71
- </Card>
72
- )
73
-
74
- expect(screen.getAllByRole('region').length).toBe(3)
75
- })
76
-
77
- it('renders all the given sections', () => {
78
- render(
79
- <Card heading='Heading'>
80
- <Card.Section heading='Subheading 1'>Section 1</Card.Section>
81
- <Card.Section heading='Subheading 2'>Section 2</Card.Section>
82
- <Card.Section>Section 3</Card.Section>
83
- <Card.Section>Section 4</Card.Section>
84
- </Card>
85
- )
86
-
87
- expect(screen.getByText('Section 1')).toBeInTheDocument()
88
- expect(screen.getByText('Section 2')).toBeInTheDocument()
89
- expect(screen.getByText('Section 3')).toBeInTheDocument()
90
- expect(screen.getByText('Section 4')).toBeInTheDocument()
91
- })
92
-
93
- it('does not render plain children if you give it sections', () => {
94
- render(
95
- <Card>
96
- <Card.Section>Section 1</Card.Section>
97
- <div data-testid='plain-children'>PLAIN CHILDREN</div>
98
- </Card>
99
- )
100
-
101
- expect(screen.getByText('Section 1')).toBeInTheDocument()
102
- expect(screen.queryByTestId('plain-children')).not.toBeInTheDocument()
103
- })
104
-
105
- it('renders the heading actions if there is a heading', () => {
106
- render(
107
- <Card heading='Heading'>
108
- <Card.Section>Section 1</Card.Section>
109
- <Card.HeadingAction>
110
- <button>Click Me</button>
111
- </Card.HeadingAction>
112
- </Card>
113
- )
114
-
115
- expect(screen.getByRole('button')).toBeInTheDocument()
116
- })
117
-
118
- it('does not render heading actions if there is no heading', () => {
119
- render(
120
- <Card>
121
- <Card.Section>Section 1</Card.Section>
122
- <Card.HeadingAction>
123
- <button>Click Me</button>
124
- </Card.HeadingAction>
125
- </Card>
126
- )
127
-
128
- expect(screen.queryByRole('button')).not.toBeInTheDocument()
129
- })
130
-
131
- it('renders the controls when they are provided', () => {
132
- render(
133
- <Card heading='Heading'>
134
- <Card.Section>Section 1</Card.Section>
135
- <Card.Controls>
136
- <button>Click Me</button>
137
- </Card.Controls>
138
- </Card>
139
- )
140
-
141
- expect(screen.getByRole('button')).toBeInTheDocument()
142
- })
143
-
144
- it('does not stop the user from clicking the controls', () => {
145
- const handleClick = jest.fn()
146
-
147
- render(
148
- <Card heading='Heading'>
149
- <Card.Section>Section 1</Card.Section>
150
- <Card.Controls>
151
- <button onClick={handleClick}>Click Me</button>
152
- </Card.Controls>
153
- </Card>
154
- )
155
-
156
- fireEvent.click(screen.getByText('Click Me'), {
157
- target: { value: 'JavaScript' },
158
- })
159
-
160
- expect(handleClick).toHaveBeenCalledTimes(1)
161
- })
162
- })
163
- })
@@ -1,78 +0,0 @@
1
- import styled from 'styled-components'
2
- import { isDefined, isEmpty, getSlots, getChildren, FC, PropsWithChildren, If, getSlot, toKebabCase } from '@helpers'
3
- import { Padding, Margin, shadow } from '@foundations'
4
- import { CardFrame as CardFrameBase } from './atoms'
5
- import { Heading3 } from 'components/typography'
6
- import { SpaceBetween } from 'components/layout'
7
- import { CardAlertBannerSlot, CardControlsSlot, CardHeadingActionSlot, CardSectionSlot } from './components'
8
- import { HTMLAttributes } from 'react'
9
-
10
- const CardHeading = styled(SpaceBetween)`
11
- margin: ${Margin.none} ${Margin.l} ${Margin.none} ${Margin.l};
12
- padding-top: ${Padding.l};
13
- `
14
-
15
- /** remove the margin bottom here since the frame handles it */
16
- const CardHeadingText = styled(Heading3)`
17
- margin-bottom: ${Margin.none};
18
- `
19
-
20
- const CardFrame = styled(CardFrameBase)`
21
- ${shadow};
22
-
23
- > section:nth-of-type(1) {
24
- border: none;
25
- }
26
- `
27
-
28
- export interface ICardProps extends HTMLAttributes<HTMLDivElement>, PropsWithChildren {
29
- heading?: string
30
- }
31
-
32
- const SubComponents = {
33
- Section: CardSectionSlot,
34
- Controls: CardControlsSlot,
35
- HeadingAction: CardHeadingActionSlot,
36
- AlertBanner: CardAlertBannerSlot,
37
- }
38
-
39
- export const Card: FC<ICardProps, typeof SubComponents> = (props) => {
40
- const { children, heading, ...htmlProps } = props
41
-
42
- const sections = getSlots(CardSectionSlot, children)
43
- const controls = getSlot(CardControlsSlot, children)
44
- const headingAction = getSlot(CardHeadingActionSlot, children)
45
- const alertBanners = getSlots(CardAlertBannerSlot, children)
46
- const otherChildren = getChildren(children)
47
-
48
- const headingId = isDefined(heading)
49
- ? toKebabCase(heading)
50
- : undefined
51
-
52
- return (
53
- <CardFrame
54
- aria-labelledby={headingId}
55
- {...htmlProps}
56
- >
57
- <If is={alertBanners}>{alertBanners}</If>
58
- <If is={heading}>
59
- <CardHeading>
60
- <CardHeadingText id={headingId}>{heading}</CardHeadingText>
61
- <If is={headingAction}>{headingAction}</If>
62
- </CardHeading>
63
- </If>
64
- {isEmpty(sections) ? (
65
- <CardSectionSlot>{otherChildren}</CardSectionSlot>
66
- ) : (
67
- sections
68
- )}
69
- <If is={controls}>{controls}</If>
70
- </CardFrame>
71
- )
72
- }
73
-
74
- /** export the slots and some sub-components */
75
- Card.Section = CardSectionSlot
76
- Card.Controls = CardControlsSlot
77
- Card.HeadingAction = CardHeadingActionSlot
78
- Card.AlertBanner = CardAlertBannerSlot
@@ -1,16 +0,0 @@
1
- import styled from 'styled-components'
2
- import { Slot } from '@helpers'
3
- import { Margin } from '@foundations'
4
- import { AlertBanner, AlertBannerProps } from 'components/alert-banner'
5
-
6
- const CardAlertBanner = styled(AlertBanner)`
7
- margin: ${Margin.l} ${Margin.l} ${Margin.none} ${Margin.l};
8
- `
9
-
10
- export class CardAlertBannerSlot extends Slot<AlertBannerProps> {
11
- override render () {
12
- return (
13
- <CardAlertBanner {...this.props}>{this.props.children}</CardAlertBanner>
14
- )
15
- }
16
- }
@@ -1,19 +0,0 @@
1
- import styled from 'styled-components'
2
- import { Slot, PropsWithChildren } from '@helpers'
3
- import { Padding } from '@foundations'
4
- import { Flex } from 'components/layout'
5
-
6
- const ControlsFrame = styled(Flex)`
7
- justify-content: end;
8
- padding: ${Padding.none} ${Padding.l} ${Padding.l} ${Padding.l};
9
- `
10
-
11
- export class CardControlsSlot extends Slot<PropsWithChildren> {
12
- override render () {
13
- return (
14
- <ControlsFrame>
15
- {this.props.children}
16
- </ControlsFrame>
17
- )
18
- }
19
- }
@@ -1,51 +0,0 @@
1
- import { HTMLAttributes } from 'react'
2
- import styled from 'styled-components'
3
- import { isDefined, Slot, getChildren, PropsWithChildren, If, getSlot, toKebabCase } from '@helpers'
4
- import { Borders, Padding, Margin } from '@foundations'
5
- import { Heading4 } from 'components/typography'
6
- import { SpaceBetween } from 'components/layout'
7
-
8
- export class CardHeadingActionSlot extends Slot {}
9
-
10
- interface ICardSectionProps extends HTMLAttributes<HTMLDivElement>, PropsWithChildren {
11
- heading?: string
12
- }
13
-
14
- const Subheading = styled(Heading4)`
15
- margin: ${Margin.none};
16
- `
17
-
18
- const SectionFrame = styled.section`
19
- border-top: 1px solid ${Borders.Default.Subdued};
20
-
21
- padding: ${Padding.l};
22
- `
23
-
24
- const SubheadingFrame = styled(SpaceBetween)`
25
- margin: ${Margin.none} ${Margin.none} ${Margin.m} ${Margin.none};
26
- `
27
-
28
- export class CardSectionSlot extends Slot<ICardSectionProps> {
29
- override render () {
30
- const headingAction = getSlot(CardHeadingActionSlot, this.props.children)
31
- const children = getChildren(this.props.children)
32
- const headingId = isDefined(this.props.heading)
33
- ? toKebabCase(this.props.heading)
34
- : undefined
35
-
36
- return (
37
- <SectionFrame
38
- aria-labelledby={headingId}
39
- {...this.props}
40
- >
41
- <If is={this.props.heading}>
42
- <SubheadingFrame>
43
- <Subheading id={headingId}>{this.props.heading}</Subheading>
44
- <If is={headingAction}>{headingAction}</If>
45
- </SubheadingFrame>
46
- </If>
47
- {children}
48
- </SectionFrame>
49
- )
50
- }
51
- }
@@ -1,3 +0,0 @@
1
- export * from './card-alert-banner-slot'
2
- export * from './card-controls-slot'
3
- export * from './card-section-slot'
@@ -1,2 +0,0 @@
1
- export * from './card'
2
- export * from './molecules/left-right-card'
@@ -1 +0,0 @@
1
- export * from './left-right-card'