@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,3 +0,0 @@
1
- export * from './left-right-layout'
2
- export * from './flex'
3
- export * from './grid-layout'
@@ -1,67 +0,0 @@
1
- import { Margin } from '@foundations'
2
- import { FC, PropsWithChildren } from '@helpers'
3
- import { Body, Heading3 } from 'components/typography'
4
- import styled from 'styled-components'
5
-
6
- interface ILeftRightLayoutGeneratorProps {
7
- columns?: number
8
- columnGutter?: number
9
- rowGutter?: number
10
- }
11
-
12
- const DEFAULT: ILeftRightLayoutGeneratorProps = {
13
- columns: 12,
14
- columnGutter: 24,
15
- rowGutter: 0,
16
- }
17
-
18
- export function leftRightLayoutGenerator (layoutProps: ILeftRightLayoutGeneratorProps = {}) {
19
- const options = {
20
- ...DEFAULT,
21
- ...layoutProps,
22
- }
23
-
24
- const LayoutFrame = styled.div`
25
- display: grid;
26
- grid-template-columns: repeat(${options.columns}, 1fr);
27
- grid-column-gap: ${options.columnGutter}px;
28
- grid-row-gap: ${options.rowGutter}px;
29
- `
30
-
31
- const Left = styled.div`
32
- grid-column: 1 / span 4;
33
- grid-row: third-line / 4;
34
- `
35
-
36
- const Right = styled.div`
37
- grid-column: 5 / span 8;
38
- grid-row: third-line / 4;
39
- `
40
-
41
- const Slots = {
42
- Left,
43
- Right,
44
- HeadingText: styled(Heading3)`
45
- margin-bottom: ${Margin.m};
46
- `,
47
- HelpText: styled(Body).attrs({ subdued: true })``,
48
- BodyText: Body,
49
- }
50
-
51
- const Layout: FC<PropsWithChildren, typeof Slots> = (props) => {
52
- return <LayoutFrame>{props.children}</LayoutFrame>
53
- }
54
-
55
- Layout.Left = Left
56
- Layout.Right = Right
57
- Layout.HeadingText = Slots.HeadingText
58
- Layout.BodyText = Slots.BodyText
59
- Layout.HelpText = Slots.HelpText
60
-
61
- return {
62
- LeftRightLayout: Layout,
63
- Layout,
64
- Left,
65
- Right,
66
- }
67
- }
@@ -1 +0,0 @@
1
- export * from './link'
@@ -1,29 +0,0 @@
1
- import { render, screen } from '@testing-library/react'
2
- import { Link } from '.'
3
- import { Interactive } from '@foundations'
4
-
5
- describe('Link', () => {
6
- it('should render the component Link with default color', async () => {
7
- render(
8
- <Link label="Edvisor" aria-label="red" href="https://app.edvisor.io/" />
9
- )
10
- expect(screen.getByRole('link')).toBeInTheDocument()
11
- expect(screen.getByText('Edvisor')).toBeInTheDocument()
12
- expect(screen.getByRole('link')).toHaveStyle(`color: ${Interactive.Default.Default}`)
13
- })
14
- it('should render the component Link with subtle color', async () => {
15
- render(<Link href="https://app.edvisor.io/" label="Edvisor" subtle />)
16
- expect(screen.getByRole('link')).toBeInTheDocument()
17
- expect(screen.getByText('Edvisor')).toBeInTheDocument()
18
- expect(screen.getByRole('link')).toHaveStyle(`color: ${Interactive.Subtle.Default}`)
19
- })
20
- it('should render the component Link with disabled color even if it has default or subtle attributes color', async () => {
21
- render(
22
- <Link subtle disabled label="Edvisor" href="https://app.edvisor.io/" />
23
- )
24
-
25
- expect(screen.getByRole('link')).toBeInTheDocument()
26
- expect(screen.getByText('Edvisor')).toBeInTheDocument()
27
- expect(screen.getByRole('link')).toHaveStyle(`color: ${Interactive.Default.Disabled}`)
28
- })
29
- })
@@ -1,56 +0,0 @@
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
- }
@@ -1,51 +0,0 @@
1
- import { Canvas, Meta } from '@storybook/addon-docs';
2
- import { Link } from '../link'
3
- import { Body } from '../../typography'
4
-
5
-
6
- <Meta title="Components/Link" />
7
-
8
- # Link
9
-
10
- 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.
11
-
12
-
13
- ## How to use it
14
- The Link component is an extension of HTML <b><a\></b> tag, but its use is limited to textual anchors.
15
-
16
- ## Default
17
-
18
- The Link component with default behavior and styles
19
- <Canvas>
20
- <Body>
21
- <Link href="https://app.edvisor.io/" target="_blank" label="Edvisor" /> is the number 1 student recruitment software
22
- </Body>
23
- </Canvas>
24
-
25
- ## Subtle
26
- The Link component with subtle behavior and styles
27
- <Canvas>
28
- <Body>
29
- Streamline the way you sell education with <Link subtle href="https://app.edvisor.io/" target="_blank" label="Edvisor" />, the best student recruitment software.
30
- </Body>
31
- </Canvas>
32
-
33
- ## Disabled
34
-
35
- A disabled Link prevents user interaction.
36
- <Canvas>
37
- <Body>
38
- Education with <Link subtle disabled href="https://app.edvisor.io/" target="_blank" label="Edvisor" /> is the best.
39
- </Body>
40
- </Canvas>
41
-
42
- ## API
43
-
44
- Extends `HTMLAttributes<HTMLAnchorElement>`. Check the documentation <Link href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement" target="_blank" label="here"/>.
45
-
46
- | Prop | Type | Description |
47
- | ----------- | --------- | --------------------------|
48
- | `label` | `string` | the text used as anchor |
49
- | `default?` | `boolean` | default styling |
50
- | `subtle?` | `boolean` | subtle styling |
51
- | `disabled?` | `boolean` | prevents user interaciton |
@@ -1,55 +0,0 @@
1
- // this file was generated, but it is safe to modify
2
- import { bitwiseOr, MappedEnum, RequireOnlyOne, PropsWithChildren } from '@helpers'
3
- import { Label1, BodyLarge, Display } from 'components/typography'
4
-
5
- const enum AvatarSize {
6
- small = 1,
7
- medium = 2,
8
- large = 4,
9
- }
10
-
11
- type AvatarSizes<T> = MappedEnum<typeof AvatarSize, T>
12
-
13
- function toAvatarSize(n: number): AvatarSize {
14
- switch (n) {
15
- case AvatarSize.small:
16
- return AvatarSize.small
17
- case AvatarSize.medium:
18
- return AvatarSize.medium
19
- case AvatarSize.large:
20
- return AvatarSize.large
21
- default:
22
- return AvatarSize.medium
23
- }
24
- }
25
-
26
- const AvatarSizeValues = {
27
- [AvatarSize.small]: '32px',
28
- [AvatarSize.medium]: '40px',
29
- [AvatarSize.large]: '60px',
30
- }
31
-
32
- const AvatarSizeNodes = {
33
- [AvatarSize.small]: Label1,
34
- [AvatarSize.medium]: BodyLarge,
35
- [AvatarSize.large]: Display,
36
- }
37
-
38
- export type AvatarSizeProps = Partial<RequireOnlyOne<AvatarSizes<boolean>>> &
39
- PropsWithChildren
40
-
41
- export function getValuesBySize(props: AvatarSizeProps): string {
42
- return AvatarSizeValues[
43
- toAvatarSize(
44
- bitwiseOr([props.small, props.medium, props.large])
45
- )
46
- ]
47
- }
48
-
49
- export function getNodeToRenderText(props: AvatarSizeProps): React.ElementType {
50
- return AvatarSizeNodes[
51
- toAvatarSize(
52
- bitwiseOr([props.small, props.medium, props.large])
53
- )
54
- ]
55
- }
@@ -1,114 +0,0 @@
1
- import {render, screen } from '@testing-library/react'
2
- import { axe } from 'jest-axe'
3
- import { Avatar } from './index'
4
-
5
- describe('Avatar Tests', () => {
6
- describe('Avatar Tests', () => {
7
- it('should render the acronym name from user', async () => {
8
- render(
9
- <Avatar
10
- name="Some Full Name"
11
- small
12
- />
13
- )
14
-
15
- expect(screen.getByText('SN')).toBeInTheDocument()
16
- expect(screen.queryByRole('img')).not.toBeInTheDocument()
17
- expect(screen.queryByText('Some Full Name')).not.toBeInTheDocument()
18
- })
19
- it('should render the acronym name with just two parts of name', async () => {
20
- render(
21
- <Avatar
22
- name="Some Name"
23
- small
24
- />
25
- )
26
-
27
- expect(screen.getByText('SN')).toBeInTheDocument()
28
- })
29
- it('should render the acronym name with just one parts of name', async () => {
30
- render(
31
- <Avatar
32
- name="Name"
33
- small
34
- />
35
- )
36
-
37
- expect(screen.getByText('N')).toBeInTheDocument()
38
- })
39
- it('should not render the acronym with empty name', async () => {
40
- render(
41
- <Avatar
42
- name=""
43
- small
44
- />
45
- )
46
- expect(screen.queryByText('Name')).not.toBeInTheDocument()
47
- })
48
- })
49
-
50
- it('should render the image from user', async () => {
51
- render(
52
- <Avatar
53
- name="Some Full Name"
54
- imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png'
55
- />
56
- )
57
-
58
- expect(screen.queryByText('SN')).not.toBeInTheDocument()
59
- expect(screen.queryByText('Some Full Name')).not.toBeInTheDocument()
60
- expect(screen.getByRole('img')).toBeInTheDocument()
61
- })
62
-
63
- it('should not have accessibility issues', async () => {
64
- const { container } = render(
65
- <Avatar
66
- name="Some Full Name"
67
- small
68
- />
69
- )
70
- const results = await axe(container)
71
- expect(results).toHaveNoViolations()
72
- })
73
-
74
- describe('withLabel behavior Tests', () => {
75
- it('should render the full name and the acronym name from user', async () => {
76
- render(
77
- <Avatar
78
- name="Some Full Name"
79
- withLabel
80
- />
81
- )
82
-
83
- expect(screen.queryByRole('img')).not.toBeInTheDocument()
84
- expect(screen.getByText('SN')).toBeInTheDocument()
85
- expect(screen.getByText('Some Full Name')).toBeInTheDocument()
86
- })
87
-
88
- it('should render the full name and the user image', async () => {
89
- render(
90
- <Avatar
91
- name="Some Full Name"
92
- imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png'
93
- withLabel
94
- />
95
- )
96
-
97
- expect(screen.queryByText('SN')).not.toBeInTheDocument()
98
- expect(screen.getByText('Some Full Name')).toBeInTheDocument()
99
- expect(screen.getByRole('img')).toBeInTheDocument()
100
- })
101
-
102
- it('should not have accessibility issues', async () => {
103
- const { container } = render(
104
- <Avatar
105
- name="Some Full Name"
106
- imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png'
107
- withLabel
108
- />
109
- )
110
- const results = await axe(container)
111
- expect(results).toHaveNoViolations()
112
- })
113
- })
114
- })
@@ -1,80 +0,0 @@
1
- import styled from 'styled-components'
2
- import { FC, isDefined, isNil, Nothing } from '@helpers'
3
- import { Margin, Surface } from '@foundations'
4
- import { SpaceAround } from '../../layout/'
5
- import { AvatarSizeProps, getValuesBySize, getNodeToRenderText } from './avatar-size-flags'
6
- import { Label1 } from 'components/typography'
7
-
8
- const Container = styled(SpaceAround)`
9
- align-items: center;
10
- `
11
-
12
- const Circle = styled.div<{ size: string }>`
13
- width: ${({ size }) => size};
14
- height: ${({ size }) => size};
15
- border-radius: 50%;
16
- display: flex;
17
- align-items: center;
18
- justify-content: space-around;
19
- background: ${Surface.Neutral.Default};
20
- `
21
-
22
- const Image = styled.img`
23
- width: 100%;
24
- height: 100%;
25
- border-radius: 50%;
26
- `
27
-
28
- const FullName = styled(Label1)`
29
- margin-left: ${Margin.xs};
30
- `
31
- interface IAvatarProps {
32
- name: string;
33
- imageUrl?: string;
34
- imageLabel?: string;
35
- withLabel?: boolean;
36
- className?: string
37
- }
38
- type IProps = IAvatarProps & AvatarSizeProps
39
-
40
- const isFirstOrLast = (el: string,
41
- index: number,
42
- items: Array<string>): boolean =>
43
- isDefined(el) && index === 0 || index === items.length - 1
44
-
45
- const getInitial = (text: string): string => isNil(text)
46
- ? ''
47
- : text.charAt(0)
48
-
49
-
50
- const getInitialsFromName = (name: string): string => {
51
- const allNames = name.trim().split(' ')
52
- const initials = allNames
53
- .filter(isFirstOrLast)
54
- .map(getInitial)
55
- .join('')
56
-
57
- return initials
58
- }
59
-
60
- export const Avatar: FC<IProps> = (props) => {
61
- const {name, imageUrl, withLabel, imageLabel = `${name} avatar` } = props
62
- const size = getValuesBySize(props)
63
- const Text = getNodeToRenderText(props)
64
-
65
- if (!isDefined(name)) {
66
- return <Nothing />
67
- }
68
-
69
- return (
70
- <Container className={props.className}>
71
- <Circle size={size}>
72
- { isDefined(imageUrl)
73
- ? <Image src={imageUrl} alt={imageLabel}/>
74
- : <Text>{getInitialsFromName(name)}</Text>
75
- }
76
- </Circle>
77
- { isDefined(withLabel) && <FullName>{name}</FullName> }
78
- </Container>
79
- )
80
- }
@@ -1 +0,0 @@
1
- export * from './avatar'
@@ -1,55 +0,0 @@
1
- import { Canvas, Meta, Story, ArgsTable } from '@storybook/addon-docs';
2
- import { Avatar } from '../index'
3
- import { WrapperStories, AvatarsWithText, AvatarsWithImage, WrapperStoriesWithLabel } from './components'
4
-
5
- <Meta
6
- title="Components/Avatar"
7
- component={Avatar}
8
- />
9
-
10
- # Avatar
11
-
12
- For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=1008%3A1257)
13
-
14
- ## How to use
15
-
16
- ```javascript
17
- // Import the component
18
- import { Avatar } from './index'
19
-
20
-
21
- // Render the component sending the required parameters
22
- <Avatar name="SOME-NAME-HERE" />
23
- ```
24
- ## Good Practices
25
- - You can send the `imageLabel` propertie as and `alt` propertie in order to set and alternative text to image
26
-
27
- ## Examples
28
-
29
- <Canvas>
30
- <Story name="default">
31
- <WrapperStories>
32
- <AvatarsWithText>
33
- <Avatar name="Yan Leite" small />
34
- <Avatar name="Yan Leite" medium />
35
- <Avatar name="Yan Leite" large />
36
- </AvatarsWithText>
37
- <AvatarsWithImage>
38
- <Avatar name="Yan Leite" imageLabel="Edvisor Logo" small imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
39
- <Avatar name="Yan Leite" medium imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
40
- <Avatar name="Yan Leite" large imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
41
- </AvatarsWithImage>
42
- </WrapperStories>
43
- </Story>
44
- </Canvas>
45
-
46
- Also, we can use that rendering the full name
47
- <Canvas>
48
- <Story name="with-label">
49
- <WrapperStoriesWithLabel>
50
- <Avatar name="Yan Leite" withLabel />
51
- <Avatar name="Yan Leite" withLabel imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
52
- </WrapperStoriesWithLabel>
53
- </Story>
54
- </Canvas>
55
-
@@ -1,36 +0,0 @@
1
- import styled from 'styled-components'
2
- import { Surface, Padding } from '@foundations'
3
-
4
- const WrapperStories = styled.div`
5
- width: 244px;
6
- height: 192px;
7
- background: ${Surface.Default.Default};
8
- `
9
-
10
- const WrapperStoriesWithLabel = styled.div`
11
- width: 130px;
12
- background: ${Surface.Default.Default};
13
-
14
- & > div {
15
- padding-bottom: ${Padding.l};
16
- }
17
- `
18
-
19
- const AvatarsWithText = styled.div`
20
- display: flex;
21
- justify-content: space-around;
22
- padding: ${Padding.l} 0 ${Padding.l} 0;
23
- `
24
-
25
- const AvatarsWithImage = styled.div`
26
- display: flex;
27
- justify-content: space-around;
28
- padding-bottom: ${Padding.l};
29
- `
30
-
31
- export {
32
- WrapperStories,
33
- AvatarsWithText,
34
- AvatarsWithImage,
35
- WrapperStoriesWithLabel,
36
- }