@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.
- package/index.d.ts +2 -0
- package/index.js +7914 -0
- package/lib/components/alert-banner/alert-banner.d.ts +11 -0
- package/lib/components/alert-banner/alert-level-flags.d.ts +13 -0
- package/lib/components/alert-banner/index.d.ts +1 -0
- package/lib/components/badge/badge-type-flags.d.ts +18 -0
- package/lib/components/badge/badge.d.ts +5 -0
- package/lib/components/badge/index.d.ts +1 -0
- package/{src/lib/components/card/atoms/card-frame.tsx → lib/components/card/atoms/card-frame.d.ts} +7 -17
- package/lib/components/card/atoms/index.d.ts +1 -0
- package/lib/components/card/card.d.ts +14 -0
- package/lib/components/card/components/card-alert-banner-slot.d.ts +5 -0
- package/lib/components/card/components/card-controls-slot.d.ts +4 -0
- package/lib/components/card/components/card-section-slot.d.ts +11 -0
- package/lib/components/card/components/index.d.ts +3 -0
- package/lib/components/card/index.d.ts +2 -0
- package/lib/components/card/molecules/index.d.ts +1 -0
- package/lib/components/card/molecules/left-right-card.d.ts +16 -0
- package/lib/components/checkbox/checkbox.d.ts +10 -0
- package/lib/components/checkbox/helpers.d.ts +12 -0
- package/lib/components/checkbox/index.d.ts +1 -0
- package/lib/components/divider/divider-type-flags.d.ts +9 -0
- package/lib/components/divider/divider.d.ts +7 -0
- package/lib/components/divider/index.d.ts +1 -0
- package/lib/components/flag/flag-size-flags.d.ts +12 -0
- package/lib/components/flag/flag.d.ts +9 -0
- package/lib/components/flag/flag.list.d.ts +781 -0
- package/lib/components/flag/index.d.ts +1 -0
- package/lib/components/icon/icon-list.d.ts +131 -0
- package/lib/components/icon/icon.d.ts +131 -0
- package/lib/components/icon/index.d.ts +1 -0
- package/lib/components/index.d.ts +17 -0
- package/lib/components/input-field/components/index.d.ts +2 -0
- package/lib/components/input-field/components/labeled-input.d.ts +10 -0
- package/lib/components/input-field/components/stepper.d.ts +7 -0
- package/lib/components/input-field/index.d.ts +3 -0
- package/lib/components/input-field/input-field.d.ts +25 -0
- package/lib/components/input-field/input-number.d.ts +18 -0
- package/lib/components/input-field/input-text.d.ts +14 -0
- package/lib/components/layout/flex.d.ts +16 -0
- package/lib/components/layout/grid-layout.d.ts +11 -0
- package/lib/components/layout/index.d.ts +3 -0
- package/lib/components/layout/left-right-layout.d.ts +34 -0
- package/lib/components/link/index.d.ts +1 -0
- package/lib/components/link/link.d.ts +14 -0
- package/lib/components/molecules/avatar/avatar-size-flags.d.ts +12 -0
- package/lib/components/molecules/avatar/avatar.d.ts +12 -0
- package/lib/components/molecules/avatar/index.d.ts +1 -0
- package/lib/components/molecules/button/button-flags.d.ts +44 -0
- package/lib/components/molecules/button/button.d.ts +12 -0
- package/lib/components/molecules/button/index.d.ts +1 -0
- package/lib/components/molecules/index.d.ts +3 -0
- package/lib/components/molecules/input-checkbox/index.d.ts +1 -0
- package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +8 -0
- package/lib/components/organisms/index.d.ts +1 -0
- package/lib/components/organisms/multi-choice-list/index.d.ts +1 -0
- package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +10 -0
- package/lib/components/spinner/index.d.ts +1 -0
- package/lib/components/spinner/spinner-size-flags.d.ts +10 -0
- package/lib/components/spinner/spinner.d.ts +9 -0
- package/lib/components/tabs/components/index.d.ts +1 -0
- package/lib/components/tabs/components/tab.d.ts +7 -0
- package/lib/components/tabs/index.d.ts +1 -0
- package/lib/components/tabs/tabs.d.ts +15 -0
- package/lib/components/tag/components/close-button.d.ts +8 -0
- package/lib/components/tag/components/index.d.ts +2 -0
- package/lib/components/tag/components/tag-label.d.ts +8 -0
- package/lib/components/tag/index.d.ts +1 -0
- package/lib/components/tag/tag.d.ts +10 -0
- package/lib/components/thumbnail/index.d.ts +1 -0
- package/lib/components/thumbnail/thumbnail-size-flags.d.ts +10 -0
- package/lib/components/thumbnail/thumbnail.d.ts +10 -0
- package/lib/components/typography/index.d.ts +1 -0
- package/lib/components/typography/typography.d.ts +24 -0
- package/lib/foundations/color-system/base-palette/base-palette.d.ts +76 -0
- package/lib/foundations/color-system/base-palette/index.d.ts +1 -0
- package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +132 -0
- package/lib/foundations/color-system/color-guidelines/index.d.ts +1 -0
- package/lib/foundations/color-system/components/color-sample.d.ts +17 -0
- package/lib/foundations/color-system/components/index.d.ts +1 -0
- package/lib/foundations/color-system/index.d.ts +1 -0
- package/lib/foundations/index.d.ts +4 -0
- package/lib/foundations/shadows/components.d.ts +8 -0
- package/lib/foundations/shadows/index.d.ts +1 -0
- package/lib/foundations/shadows/shadows.d.ts +8 -0
- package/lib/foundations/spacing/index.d.ts +1 -0
- package/lib/foundations/spacing/spacing-guidelines.d.ts +22 -0
- package/lib/foundations/spacing/spacing.d.ts +18 -0
- package/lib/foundations/typography/constants.d.ts +22 -0
- package/lib/foundations/typography/fonts.d.ts +1 -0
- package/lib/foundations/typography/index.d.ts +1 -0
- package/lib/foundations/typography/text-aspect-flags.d.ts +19 -0
- package/lib/foundations/typography/typography.d.ts +24 -0
- package/lib/helpers/generic-types.d.ts +21 -0
- package/lib/helpers/index.d.ts +6 -0
- package/lib/helpers/nothing.d.ts +8 -0
- package/{src/lib/helpers/numbers.ts → lib/helpers/numbers.d.ts} +50 -53
- package/lib/helpers/safe-navigation.d.ts +15 -0
- package/lib/helpers/slots.d.ts +23 -0
- package/lib/helpers/strings.d.ts +1 -0
- package/package.json +12 -5
- package/.babelrc +0 -12
- package/.eslintrc.json +0 -139
- package/.storybook/main.js +0 -57
- package/.storybook/manager.js +0 -7
- package/.storybook/preview-head.html +0 -1
- package/.storybook/preview.js +0 -15
- package/.storybook/tsconfig.json +0 -30
- package/jest.config.ts +0 -15
- package/jest.setup.ts +0 -2
- package/project.json +0 -85
- package/release-it.json +0 -18
- package/src/assets/svg/example_icon.svg +0 -3
- package/src/assets/svg/example_icon_white.svg +0 -3
- package/src/assets/svg/spinner.svg +0 -3
- package/src/assets/svg/spinner_white.svg +0 -3
- package/src/helpers/index.ts +0 -3
- package/src/helpers/talesOf.tsx +0 -42
- package/src/index.ts +0 -2
- package/src/lib/components/README.md +0 -49
- package/src/lib/components/alert-banner/alert-banner.tsx +0 -34
- package/src/lib/components/alert-banner/alert-level-flags.ts +0 -77
- package/src/lib/components/alert-banner/index.ts +0 -1
- package/src/lib/components/badge/badge-type-flags.ts +0 -72
- package/src/lib/components/badge/badge.stories.tsx +0 -16
- package/src/lib/components/badge/badge.test.tsx +0 -29
- package/src/lib/components/badge/badge.tsx +0 -31
- package/src/lib/components/badge/index.ts +0 -1
- package/src/lib/components/card/atoms/index.ts +0 -1
- package/src/lib/components/card/card.test.tsx +0 -163
- package/src/lib/components/card/card.tsx +0 -78
- package/src/lib/components/card/components/card-alert-banner-slot.tsx +0 -16
- package/src/lib/components/card/components/card-controls-slot.tsx +0 -19
- package/src/lib/components/card/components/card-section-slot.tsx +0 -51
- package/src/lib/components/card/components/index.ts +0 -3
- package/src/lib/components/card/index.ts +0 -2
- package/src/lib/components/card/molecules/index.ts +0 -1
- package/src/lib/components/card/molecules/left-right-card.test.tsx +0 -89
- package/src/lib/components/card/molecules/left-right-card.tsx +0 -63
- package/src/lib/components/card/storybook/card.stories.mdx +0 -100
- package/src/lib/components/card/storybook/components.tsx +0 -240
- package/src/lib/components/checkbox/checkbox.test.tsx +0 -39
- package/src/lib/components/checkbox/checkbox.tsx +0 -124
- package/src/lib/components/checkbox/components/components.tsx +0 -59
- package/src/lib/components/checkbox/index.tsx +0 -1
- package/src/lib/components/checkbox/stories/checkbox.stories.mdx +0 -54
- package/src/lib/components/checkbox/stories/components.tsx +0 -36
- package/src/lib/components/checkbox/stories/index.tsx +0 -1
- package/src/lib/components/divider/divider-type-flags.tsx +0 -37
- package/src/lib/components/divider/divider.test.tsx +0 -34
- package/src/lib/components/divider/divider.tsx +0 -37
- package/src/lib/components/divider/index.tsx +0 -1
- package/src/lib/components/divider/stories/components.tsx +0 -13
- package/src/lib/components/divider/stories/divider.stories.mdx +0 -50
- package/src/lib/components/index.ts +0 -14
- package/src/lib/components/input-field/components/index.ts +0 -2
- package/src/lib/components/input-field/components/labeled-input.tsx +0 -61
- package/src/lib/components/input-field/components/stepper.tsx +0 -59
- package/src/lib/components/input-field/index.ts +0 -6
- package/src/lib/components/input-field/input-field.test.tsx +0 -108
- package/src/lib/components/input-field/input-field.tsx +0 -126
- package/src/lib/components/input-field/input-number.tsx +0 -41
- package/src/lib/components/input-field/input-text.tsx +0 -30
- package/src/lib/components/input-field/storybook/components.tsx +0 -334
- package/src/lib/components/input-field/storybook/input-field.stories.mdx +0 -113
- package/src/lib/components/layout/flex.tsx +0 -22
- package/src/lib/components/layout/grid-layout.tsx +0 -40
- package/src/lib/components/layout/index.ts +0 -3
- package/src/lib/components/layout/left-right-layout.tsx +0 -67
- package/src/lib/components/link/index.ts +0 -1
- package/src/lib/components/link/link.test.tsx +0 -29
- package/src/lib/components/link/link.tsx +0 -56
- package/src/lib/components/link/storybook/link.stories.mdx +0 -51
- package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +0 -55
- package/src/lib/components/molecules/avatar/avatar.test.tsx +0 -114
- package/src/lib/components/molecules/avatar/avatar.tsx +0 -80
- package/src/lib/components/molecules/avatar/index.tsx +0 -1
- package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +0 -55
- package/src/lib/components/molecules/avatar/stories/components.tsx +0 -36
- package/src/lib/components/molecules/button/button-flags.tsx +0 -235
- package/src/lib/components/molecules/button/button.test.tsx +0 -77
- package/src/lib/components/molecules/button/button.tsx +0 -231
- package/src/lib/components/molecules/button/index.tsx +0 -1
- package/src/lib/components/molecules/button/stories/button.stories.mdx +0 -104
- package/src/lib/components/molecules/button/stories/components.tsx +0 -86
- package/src/lib/components/molecules/index.ts +0 -3
- package/src/lib/components/molecules/input-checkbox/index.tsx +0 -1
- package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +0 -34
- package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +0 -50
- package/src/lib/components/molecules/input-checkbox/stories/components.tsx +0 -36
- package/src/lib/components/molecules/input-checkbox/stories/index.tsx +0 -1
- package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +0 -51
- package/src/lib/components/organisms/index.ts +0 -1
- package/src/lib/components/organisms/multi-choice-list/index.tsx +0 -1
- package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +0 -33
- package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +0 -53
- package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +0 -126
- package/src/lib/components/organisms/multi-choice-list/stories/index.tsx +0 -1
- package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +0 -99
- package/src/lib/components/spinner/index.tsx +0 -1
- package/src/lib/components/spinner/spinner-size-flags.tsx +0 -39
- package/src/lib/components/spinner/spinner.test.tsx +0 -31
- package/src/lib/components/spinner/spinner.tsx +0 -67
- package/src/lib/components/spinner/stories/components.tsx +0 -8
- package/src/lib/components/spinner/stories/spinner.stories.mdx +0 -42
- package/src/lib/components/thumbnail/index.tsx +0 -1
- package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +0 -34
- package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +0 -41
- package/src/lib/components/thumbnail/thumbnail.test.tsx +0 -51
- package/src/lib/components/thumbnail/thumbnail.tsx +0 -40
- package/src/lib/components/typography/index.ts +0 -1
- package/src/lib/components/typography/storybook/components.tsx +0 -256
- package/src/lib/components/typography/storybook/typography.stories.mdx +0 -88
- package/src/lib/components/typography/typography.test.tsx +0 -93
- package/src/lib/components/typography/typography.tsx +0 -57
- package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +0 -123
- package/src/lib/foundations/color-system/base-palette/base-palette.ts +0 -94
- package/src/lib/foundations/color-system/base-palette/index.ts +0 -1
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +0 -85
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +0 -231
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +0 -159
- package/src/lib/foundations/color-system/color-guidelines/index.ts +0 -1
- package/src/lib/foundations/color-system/components/color-sample.tsx +0 -99
- package/src/lib/foundations/color-system/components/index.ts +0 -1
- package/src/lib/foundations/color-system/index.ts +0 -1
- package/src/lib/foundations/index.ts +0 -4
- package/src/lib/foundations/shadows/components.tsx +0 -59
- package/src/lib/foundations/shadows/index.ts +0 -1
- package/src/lib/foundations/shadows/shadows.stories.mdx +0 -71
- package/src/lib/foundations/shadows/shadows.tsx +0 -47
- package/src/lib/foundations/spacing/index.ts +0 -1
- package/src/lib/foundations/spacing/spacing-guidelines.ts +0 -24
- package/src/lib/foundations/spacing/spacing.stories.mdx +0 -51
- package/src/lib/foundations/spacing/spacing.ts +0 -18
- package/src/lib/foundations/typography/constants.ts +0 -25
- package/src/lib/foundations/typography/index.tsx +0 -1
- package/src/lib/foundations/typography/text-aspect-flags.ts +0 -54
- package/src/lib/foundations/typography/typography.tsx +0 -97
- package/src/lib/helpers/generic-types.ts +0 -44
- package/src/lib/helpers/index.ts +0 -6
- package/src/lib/helpers/nothing.tsx +0 -18
- package/src/lib/helpers/safe-navigation.ts +0 -34
- package/src/lib/helpers/slots.tsx +0 -76
- package/src/lib/helpers/strings.test.ts +0 -47
- package/src/lib/helpers/strings.ts +0 -16
- package/tsconfig.json +0 -35
- package/tsconfig.lib.json +0 -28
- package/tsconfig.spec.json +0 -21
|
@@ -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
|
-
}
|