@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,89 +0,0 @@
1
- import { Margin } from '@foundations'
2
- import { render, screen } from '@testing-library/react'
3
- import styled from 'styled-components'
4
- import { LeftRightCard } from './left-right-card'
5
-
6
- describe('LeftRightCard', () => {
7
- it('renders the content in the Right slot', () => {
8
- render(
9
- <LeftRightCard>
10
- <LeftRightCard.Right>Content</LeftRightCard.Right>
11
- </LeftRightCard>
12
- )
13
-
14
- expect(screen.getByText('Content')).toBeInTheDocument()
15
- })
16
-
17
- it('does not render other children', () => {
18
- render(
19
- <LeftRightCard>
20
- <div>Other Children</div>
21
- <LeftRightCard.Right>Content</LeftRightCard.Right>
22
- </LeftRightCard>
23
- )
24
-
25
- expect(screen.queryByText('Other Children')).not.toBeInTheDocument()
26
- })
27
-
28
- it('renders a region labelled by the given heading', () => {
29
- render(
30
- <LeftRightCard heading='Heading'>
31
- <LeftRightCard.Right>Content</LeftRightCard.Right>
32
- </LeftRightCard>
33
- )
34
-
35
- expect(screen.getByRole('region')).toBeInTheDocument()
36
- expect(screen.getByLabelText('Heading')).toBeInTheDocument()
37
- expect(screen.getByLabelText('Heading')).toHaveTextContent('Content')
38
- })
39
-
40
- it('renders no region without a heading', () => {
41
- render(
42
- <LeftRightCard>
43
- <LeftRightCard.Right>Content</LeftRightCard.Right>
44
- </LeftRightCard>
45
- )
46
-
47
- expect(screen.queryByRole('region')).not.toBeInTheDocument()
48
- expect(screen.queryByLabelText('Heading')).not.toBeInTheDocument()
49
- expect(screen.getByText('Content')).toBeInTheDocument()
50
- })
51
-
52
- it('describes the children by the given help text', () => {
53
- render(
54
- <LeftRightCard helpText='Helpful Text'>
55
- <LeftRightCard.Right>Content</LeftRightCard.Right>
56
- </LeftRightCard>
57
- )
58
-
59
- expect(screen.getByText('Helpful Text')).toBeInTheDocument()
60
- expect(screen.getByText('Content')).toHaveAccessibleDescription('Helpful Text')
61
- })
62
-
63
- it('still renders without the helpful text, but it is not as helpful', () => {
64
- render(
65
- <LeftRightCard>
66
- <LeftRightCard.Right>Content</LeftRightCard.Right>
67
- </LeftRightCard>
68
- )
69
-
70
- expect(screen.queryByText('Helpful Text')).not.toBeInTheDocument()
71
- expect(screen.getByText('Content')).not.toHaveAccessibleDescription('Helpful Text')
72
- })
73
-
74
- /**
75
- * this test just ensures that the programmer did not
76
- * forget to add className? to the props and then pass
77
- * it to the wrapping element so that users downstream
78
- * can style the component
79
- */
80
- it('accepts styles', () => {
81
- const Component = styled(LeftRightCard)`
82
- margin-bottom: ${Margin.l};
83
- `
84
-
85
- const { container } = render(<Component>Contents</Component>)
86
-
87
- expect(container.firstChild).toHaveStyle(`margin-bottom: ${Margin.l}`)
88
- })
89
- })
@@ -1,63 +0,0 @@
1
- import { FC, getSlot, If, isDefined, Slot, toKebabCase } from '@helpers'
2
- import { leftRightLayoutGenerator } from 'components/layout'
3
- import { Card, ICardProps } from '../card'
4
-
5
- const { Layout } = leftRightLayoutGenerator()
6
-
7
- class Right extends Slot {}
8
- class Controls extends Slot {}
9
-
10
- type SubComponents = {
11
- Right: typeof Right
12
- Controls: typeof Controls
13
- }
14
-
15
- interface ILeftRightCardProps extends ICardProps {
16
- helpText?: string
17
- className?: string
18
- }
19
-
20
- export const LeftRightCard: FC<ILeftRightCardProps, SubComponents> = (
21
- props
22
- ) => {
23
- const right = getSlot(Right, props.children)
24
- const controls = getSlot(Controls, props.children)
25
-
26
- const headingId = isDefined(props.heading)
27
- ? toKebabCase(props.heading)
28
- : undefined
29
-
30
- const helpTextId = isDefined(props.helpText)
31
- ? toKebabCase(props.helpText)
32
- : undefined
33
-
34
- return (
35
- <Card className={props.className}>
36
- <Card.Section aria-labelledby={headingId}>
37
- <Layout>
38
- <Layout.Left>
39
- <If is={props.heading}>
40
- <Layout.HeadingText id={headingId}>
41
- {props.heading}
42
- </Layout.HeadingText>
43
- </If>
44
- <If is={props.helpText}>
45
- <Layout.HelpText id={helpTextId}>
46
- {props.helpText}
47
- </Layout.HelpText>
48
- </If>
49
- </Layout.Left>
50
- <Layout.Right>
51
- <div aria-describedby={helpTextId}>{right}</div>
52
- </Layout.Right>
53
- </Layout>
54
- </Card.Section>
55
- <Card.Controls>
56
- {controls}
57
- </Card.Controls>
58
- </Card>
59
- )
60
- }
61
-
62
- LeftRightCard.Right = Right
63
- LeftRightCard.Controls = Controls
@@ -1,100 +0,0 @@
1
- import { Meta, Canvas } from '@storybook/addon-docs';
2
- import { AlertBanner } from 'components/alert-banner'
3
- import {
4
- CardExample,
5
- SectionsExample,
6
- AlertBannerExample,
7
- LeftRightLayoutExample,
8
- CardControlsExample,
9
- SectionsHeadingActionsExample,
10
- } from './components'
11
-
12
- <Meta title="Components/Card"/>
13
-
14
- # Card
15
-
16
- Cards are used to group similar things together.
17
-
18
- ## How to Use It
19
-
20
- ```tsx
21
- import { Card } from '@edvisor/product-language'
22
-
23
- <Card heading='Heading'>
24
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
25
- </Card>
26
- ```
27
-
28
- ### Card
29
-
30
- A simple card with a heading and content.
31
-
32
- <CardExample />
33
-
34
- ### Card with Sections
35
-
36
- You can divide a card's body up into sections.
37
-
38
- <SectionsExample />
39
-
40
- ### Card with Heading Actions
41
-
42
- Any heading in a Card can have an action
43
-
44
- <AlertBanner warning>
45
- HeadingAction is a slots, so its children will always render in the same place regardless of where you use it.
46
- </AlertBanner>
47
-
48
- <SectionsHeadingActionsExample />
49
-
50
- ### Card with Controls
51
-
52
- Primary controls go on the bottom of the card.
53
-
54
- <AlertBanner warning>
55
- Controls is a slot, so its children will always render in the same place regardless of where you use it.
56
- </AlertBanner>
57
-
58
- <CardControlsExample />
59
-
60
- ### Card with Alert Banner
61
-
62
- You can grab the user's attention with a banner.
63
-
64
- <AlertBanner warning>
65
- AlertBanner is a slot, so its children will always render in the same place regardless of where you use it.
66
- </AlertBanner>
67
-
68
- <AlertBannerExample />
69
-
70
- ### Card with a Layout
71
-
72
- You can add a layout to a card. In this case we've added a 1:2 ratio "left/right" layout.
73
-
74
- <LeftRightLayoutExample />
75
-
76
- ## API
77
-
78
- ### `Card`
79
-
80
- Extends `HTMLAttributes<HTMLDivElement>`
81
-
82
- | Prop | Type | Description |
83
- | --------- | ---------- | -------------------------- |
84
- | `heading` | `boolean?` | Adds a heading to the card |
85
-
86
- ### `Card.Section`
87
-
88
- Extends `HTMLAttributes<HTMLDivElement>`
89
-
90
- | Prop | Type | Description |
91
- | --------- | ---------- | ------------------------------- |
92
- | `heading` | `boolean?` | Adds a heading to the section |
93
-
94
- ### Slots
95
-
96
- | Slot | Description |
97
- | --------------- | ----------------------------------------------------------- |
98
- | `Controls` | Adds controls to the bottom of the card |
99
- | `HeadingAction` | Adds UI directly across from the card or sections's heading |
100
- | `AlertBanner` | Adds an alert banner above the heading |
@@ -1,240 +0,0 @@
1
- import styled from 'styled-components'
2
- import { Playground } from 'storybook-addon-jarle-monaco'
3
- import { Margin, Surface, Text } from '@foundations'
4
- import { leftRightLayoutGenerator } from 'components/layout'
5
- import { Body, Heading3 } from 'components/typography'
6
- import { Divider } from 'components/divider'
7
- import { Card } from '../card'
8
- import { LeftRightCard } from '../molecules/left-right-card'
9
- import { InputField } from 'components/input-field'
10
-
11
- const CardPlayground = styled(Playground)`
12
- background: ${Surface.Neutral.Default};
13
-
14
- margin-bottom: ${Margin.xxl};
15
-
16
- > div:nth-of-type(2) {
17
- background: ${Surface.Default.Inverse}; // Surface.Inverse
18
- color: ${Text.OnPrimary};
19
- }
20
- `
21
-
22
- const Bar = styled(Divider)`
23
- margin-bottom: ${Margin.l};
24
- margin-top: ${Margin.l};
25
- `
26
-
27
- export const CardExample = () => (
28
- <CardPlayground
29
- code={`
30
- <Card heading='Heading'>
31
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
32
- <Bar />
33
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
34
- </Card>
35
- `}
36
- providerProps={{
37
- renderAsComponent: true,
38
- scope: {
39
- Card,
40
- Bar,
41
- },
42
- }}
43
- />
44
- )
45
-
46
- export const SectionsExample = () => (
47
- <CardPlayground
48
- code={`
49
- <Card heading='Sections!'>
50
- If you include section slots, plain children won't render.
51
- <Card.Section heading='Subheading 1'>
52
- This is a section.
53
- </Card.Section>
54
- <Card.Section heading='Subheading 2'>
55
- This is another section.
56
- </Card.Section>
57
- </Card>
58
- `}
59
- providerProps={{
60
- renderAsComponent: true,
61
- scope: {
62
- Card,
63
- },
64
- }}
65
- />
66
- )
67
-
68
- export const CardControlsExample = () => (
69
- <CardPlayground
70
- code={`
71
- const handleCancel = () => alert('Cancel');
72
- const handleConfirm = () => alert('Confirm');
73
-
74
- <Card heading='Controls!'>
75
- <Card.Controls>
76
- <button onClick={handleCancel}>Cancel</button>
77
- <button onClick={handleConfirm}>Confirm</button>
78
- </Card.Controls>
79
- Notice that the controls render below this text, even though they are above this text in the JSX. That's because Controls is a slot, it is only telling Card what we want to render, not where we want to render it.
80
- </Card>
81
- `}
82
- providerProps={{
83
- renderAsComponent: true,
84
- scope: {
85
- Card,
86
- },
87
- }}
88
- />
89
- )
90
-
91
- export const CardHeadingActionExample = () => (
92
- <CardPlayground
93
- code={`
94
- <Card heading='Heading Actions!'>
95
- If you include section slots, plain children won't render.
96
- <Card.HeadingAction><button>Activate</button></Card.HeadingAction>
97
- </Card>
98
- `}
99
- providerProps={{
100
- renderAsComponent: true,
101
- scope: {
102
- Card,
103
- },
104
- }}
105
- />
106
- )
107
-
108
- export const SectionsHeadingActionsExample = () => (
109
- <CardPlayground
110
- code={`
111
- <Card heading='Heading Actions'>
112
- <Card.HeadingAction><button>Action</button></Card.HeadingAction>
113
-
114
- <Card.Section heading='Subheading 1'>
115
- This is a section.
116
- <Card.HeadingAction><button>Action</button></Card.HeadingAction>
117
- </Card.Section>
118
-
119
- <Card.Section heading='Subheading 2'>
120
- This is another section.
121
- <Card.HeadingAction><button>Action</button></Card.HeadingAction>
122
- </Card.Section>
123
- </Card>
124
- `}
125
- providerProps={{
126
- renderAsComponent: true,
127
- scope: {
128
- Card,
129
- },
130
- }}
131
- />
132
- )
133
-
134
- export const AlertBannerExample = () => (
135
- <CardPlayground
136
- code={`
137
- <Card heading='Heading'>
138
- <Card.AlertBanner info>Seriously though, if you change the student's age or nationality you will regret it.</Card.AlertBanner>
139
- Disaster can strike at any moment.
140
- </Card>
141
- `}
142
- providerProps={{
143
- renderAsComponent: true,
144
- scope: {
145
- Card,
146
- },
147
- }}
148
- />
149
- )
150
-
151
- const { Layout } = leftRightLayoutGenerator()
152
-
153
- const GreyBox = styled.div`
154
- background-color: ${Surface.Neutral};
155
- height: 100%;
156
- `
157
-
158
- export const LeftRightLayoutExample = () => (
159
- <CardPlayground
160
- code={`
161
- <Card>
162
- <Layout>
163
- <Layout.Left>
164
- <Heading3>Personal Information</Heading3>
165
- <Body subdued>This information will be seen by your colleagues and students.</Body>
166
- </Layout.Left>
167
- <Layout.Right>
168
- <form id='my-form' onSubmit={(e) => e.preventDefault()}>
169
- <InputField
170
- label='First name'
171
- />
172
- <InputField
173
- label='Last name'
174
- />
175
- <InputField
176
- type='email'
177
- required
178
- label='Email'
179
- />
180
- </form>
181
- </Layout.Right>
182
- </Layout>
183
- <Card.Controls>
184
- <button>Cancel</button>
185
- <button form='my-form' type='submit'>Confirm</button>
186
- </Card.Controls>
187
- </Card>
188
- `}
189
- providerProps={{
190
- renderAsComponent: true,
191
- scope: {
192
- Card,
193
- Layout,
194
- InputField,
195
- Heading3,
196
- Body,
197
- },
198
- }}
199
- />
200
- )
201
-
202
- export const LeftRightCardExample = () => (
203
- <CardPlayground
204
- code={`
205
- <LeftRightCard
206
- heading='Personal Information'
207
- helpText='This information will be seen by your colleagues and students.'
208
- >
209
- <LeftRightCard.Right>
210
- <form id='my-form-2' onSubmit={(e) => e.preventDefault()}>
211
- <InputField
212
- label='First name'
213
- />
214
- <InputField
215
- label='Last name'
216
- />
217
- <InputField
218
- type='email'
219
- required
220
- label='Email'
221
- />
222
- </form>
223
- </LeftRightCard.Right>
224
- <LeftRightCard.Controls>
225
- <button>Cancel</button>
226
- <button form='my-form-2' type='submit'>Confirm</button>
227
- </LeftRightCard.Controls>
228
- </LeftRightCard>
229
- `}
230
- providerProps={{
231
- renderAsComponent: true,
232
- scope: {
233
- LeftRightCard,
234
- GreyBox,
235
- Body,
236
- InputField,
237
- },
238
- }}
239
- />
240
- )
@@ -1,39 +0,0 @@
1
- import { render, screen } from '@testing-library/react'
2
- import userEvent from '@testing-library/user-event'
3
- import { Checkbox } from './checkbox'
4
-
5
- describe('Checkbox Input Tests', () => {
6
- it('should render the component and handle event after click', async () => {
7
- const spyOnChange = jest.fn()
8
- render(
9
- <Checkbox
10
- onChange={spyOnChange}
11
- />
12
- )
13
-
14
- expect(spyOnChange).not.toHaveBeenCalled()
15
- const myComponent = screen.getByRole('checkbox')
16
-
17
- expect(myComponent).toBeInTheDocument()
18
-
19
- await userEvent.click(myComponent)
20
- expect(spyOnChange).toHaveBeenCalled()
21
- })
22
-
23
- it('should not handle event after click if checkbox has disabled', async () => {
24
- const spyOnChange = jest.fn()
25
- render(
26
- <Checkbox
27
- disabled
28
- onChange={spyOnChange}
29
- />
30
- )
31
-
32
- expect(spyOnChange).not.toHaveBeenCalled()
33
- const myComponent = screen.getByRole('checkbox')
34
-
35
- userEvent.click(myComponent)
36
-
37
- expect(spyOnChange).not.toHaveBeenCalled()
38
- })
39
- })
@@ -1,124 +0,0 @@
1
- import { InputHTMLAttributes, useState } from 'react'
2
- import styled, { css } from 'styled-components'
3
- import { Surface, Borders, Margin, Padding, Interactive, Actions, Focused } from '@foundations'
4
- import { FC, is, isDefined } from '@helpers'
5
- import {
6
- getHoverStyles,
7
- getDisabledStyles,
8
- getInvalidStyles,
9
- getTabIndexValue,
10
- getCheckedIcon,
11
- HiddenCheckbox,
12
- Icon,
13
- Wrapper,
14
- } from './components/components'
15
-
16
- const CustomizedCheckbox = styled.div<{
17
- checked: boolean;
18
- disabled: boolean;
19
- error: boolean;
20
- }>`
21
- display: inline-block;
22
- width: 18px;
23
- height: 18px;
24
- margin: ${Margin.none};
25
- padding: ${Padding.none};
26
- border-radius: 4px;
27
-
28
- ${props => is(props.checked)
29
- ? css`
30
- background: ${Interactive.Default.Default};
31
- border: 2px solid ${Interactive.Default.Default};
32
- &:hover {
33
- background: ${Actions.Primary.Pressed};
34
- border: 2px solid ${Interactive.Default.Hover};
35
- }
36
- `
37
- : css`
38
- background: ${Surface.Default.Default};
39
- border: 2px solid ${Interactive.Default.Disabled};
40
- &:hover {
41
- ${getHoverStyles}
42
- }
43
- `
44
- }
45
-
46
- ${props => is(props.disabled) ? getDisabledStyles() : ''}
47
- ${props => is(props.error)
48
- ? css`
49
- ${getInvalidStyles()}
50
- &:hover {
51
- background: ${({ checked }) => (is(checked)
52
- ? `${Actions.Critical.Pressed}`
53
- : `${Surface.Default.Default}`
54
- )};
55
- border: 2px solid ${Borders.Critical.Default};
56
- }
57
- ${HiddenCheckbox}:invalid {
58
- ${getInvalidStyles()}
59
- }
60
- `
61
- : ''
62
- }
63
-
64
- ${HiddenCheckbox}:focus + & {
65
- outline: 2px solid ${Focused.Default};
66
- outline-offset: 1px;
67
- }
68
- ${Icon} {
69
- visibility: ${(props) => (is(props.checked) ? 'visible' : 'hidden')};
70
- }
71
- `
72
-
73
- export interface ICheckboxProps {
74
- disabled?: boolean;
75
- checked?: boolean;
76
- error?: boolean;
77
- className?: string;
78
- onChange?: (value: boolean) => void;
79
- }
80
-
81
- export type IProps = ICheckboxProps & InputHTMLAttributes<HTMLInputElement>
82
-
83
- export const Checkbox: FC<IProps> = (props: IProps) => {
84
- const {
85
- className,
86
- onChange,
87
- disabled = false,
88
- error = false,
89
- checked = false,
90
- } = props
91
- const [isChecked, setIsChecked] = useState<boolean>(checked)
92
- const handleOnChange = () => {
93
- const newCheckedValue = !isChecked
94
- setIsChecked(newCheckedValue)
95
- if(isDefined(onChange)){
96
- onChange(newCheckedValue)
97
- }
98
- }
99
-
100
- return (
101
- <Wrapper
102
- className={className}
103
- >
104
- <HiddenCheckbox
105
- {...props}
106
- tabIndex={getTabIndexValue(disabled)}
107
- checked={isChecked}
108
- disabled={disabled}
109
- onChange={handleOnChange}
110
- type='checkbox'
111
- />
112
- <CustomizedCheckbox
113
- {...props}
114
- data-testid='checkbox-id'
115
- checked={isChecked}
116
- disabled={disabled}
117
- error={error}
118
- onClick={handleOnChange}
119
- >
120
- {getCheckedIcon()}
121
- </CustomizedCheckbox>
122
- </Wrapper>
123
- )
124
- }