Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MP-602] Add pictograms #4640

Merged
merged 3 commits into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/shiny-pillows-check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@toptal/picasso-pictograms': minor
---

- add pictograms (`BoxArchiveEmptyStateBacklog`, `PeopleReferralInviteEmptyState`, `ScanHeatmapSiteResearchTest`)
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ To add a new icon to `@toptal/picasso` or pictogram to `@toptal/picasso-pictogra
1. Prepare your SVG:
- Make sure that it has `viewBox` attribute specified
- Make sure that `viewBox` sizes are `0 0 16 16` and `0 0 24 24` for icon (there should always be two icon variants) and `0 0 64 64` for pictogram (be careful this isn't just a simple value set!)
- Make sure all paths are expanded and strokes are not used
- Make sure all paths are expanded and strokes are not used (use [this](https://iconly.io/tools/svg-convert-stroke-to-fill) or [this](https://svgomg.net/) online tools)
2. Add your SVG file(s) to the Picasso project:

```bash
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import type { Ref } from 'react'
import React, { forwardRef } from 'react'
import type { StandardProps } from '@toptal/picasso-shared'

const SIZE = 64

type ScaleType = 1 | 2
export interface Props extends StandardProps {
scale?: ScaleType
base?: number
}
const SvgBoxArchiveEmptyStateBacklogBlue64 = forwardRef(
function SvgBoxArchiveEmptyStateBacklogBlue64(
props: Props,
ref: Ref<SVGSVGElement>
) {
const { className, style = {}, scale, base, 'data-testid': testId } = props
const scaledSize = base || SIZE * Math.ceil(scale || 1)

const svgStyle = {
minWidth: `${scaledSize}px`,
minHeight: `${scaledSize}px`,
...style,
}

return (
<svg
fill='none'
viewBox='0 0 64 64'
className={className}
style={svgStyle}
ref={ref}
data-testid={testId}
>
<g clipPath='url(#a)'>
sashuk marked this conversation as resolved.
Show resolved Hide resolved
<path
fill='#183A9E'
d='M62.4 61.6H1.6c-.664 0-1.2-.536-1.2-1.2v2c0 .664.536 1.2 1.2 1.2h60.8c.664 0 1.2-.536 1.2-1.2v-2c0 .664-.536 1.2-1.2 1.2ZM63.8 22.6l-8-8H8.2l-8 8'
opacity={0.15}
/>
<path
stroke='#204ECF'
d='M32.2 0v3.6M22.352 2.676l1.928 3.136M15.356 9.672l3.136 1.928M48.644 9.672 45.508 11.6M41.648 2.676 39.72 5.812M8.2 14.8v6.4M55.8 14.8v6.4M62 22.6H2m61.8 0v40c0 .664-.536 1.2-1.2 1.2H1.4c-.664 0-1.2-.536-1.2-1.2v-40l8-8h47.6l8 8Z'
/>
<path
fill='#183A9E'
d='M39 33.4H25a1.6 1.6 0 1 1 0-3.2h14a1.6 1.6 0 1 1 0 3.2Z'
opacity={0.15}
/>
<path
stroke='#204ECF'
d='M39 33.4H25a1.6 1.6 0 1 1 0-3.2h14a1.6 1.6 0 1 1 0 3.2Z'
/>
</g>
<defs>
<clipPath id='a'>
<path fill='#fff' d='M0 0h64v64H0z' />
</clipPath>
</defs>
sashuk marked this conversation as resolved.
Show resolved Hide resolved
</svg>
)
}
)

SvgBoxArchiveEmptyStateBacklogBlue64.displayName =
'SvgBoxArchiveEmptyStateBacklogBlue64'
export default SvgBoxArchiveEmptyStateBacklogBlue64
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import type { Ref } from 'react'
import React, { forwardRef } from 'react'
import type { StandardProps } from '@toptal/picasso-shared'

const SIZE = 64

type ScaleType = 1 | 2
export interface Props extends StandardProps {
scale?: ScaleType
base?: number
}
const SvgBoxArchiveEmptyStateBacklogWhite64 = forwardRef(
function SvgBoxArchiveEmptyStateBacklogWhite64(
props: Props,
ref: Ref<SVGSVGElement>
) {
const { className, style = {}, scale, base, 'data-testid': testId } = props
const scaledSize = base || SIZE * Math.ceil(scale || 1)

const svgStyle = {
minWidth: `${scaledSize}px`,
minHeight: `${scaledSize}px`,
...style,
}

return (
<svg
fill='none'
viewBox='0 0 64 64'
className={className}
style={svgStyle}
ref={ref}
data-testid={testId}
>
<g clipPath='url(#a)'>
<path
fill='#231F20'
d='M62.4 61.6H1.6c-.664 0-1.2-.536-1.2-1.2v2c0 .664.536 1.2 1.2 1.2h60.8c.664 0 1.2-.536 1.2-1.2v-2c0 .664-.536 1.2-1.2 1.2ZM63.8 22.6l-8-8H8.2l-8 8'
opacity={0.3}
/>
<path
stroke='#fff'
d='M32.2 0v3.6M22.352 2.676l1.928 3.136M15.356 9.672l3.136 1.928M48.644 9.672 45.508 11.6M41.648 2.676 39.72 5.812M8.2 14.8v6.4M55.8 14.8v6.4M62 22.6H2m61.8 0v40c0 .664-.536 1.2-1.2 1.2H1.4c-.664 0-1.2-.536-1.2-1.2v-40l8-8h47.6l8 8Z'
/>
<path
fill='#231F20'
d='M39 33.4H25a1.6 1.6 0 1 1 0-3.2h14a1.6 1.6 0 1 1 0 3.2Z'
opacity={0.3}
/>
<path
stroke='#fff'
d='M39 33.4H25a1.6 1.6 0 1 1 0-3.2h14a1.6 1.6 0 1 1 0 3.2Z'
/>
</g>
<defs>
<clipPath id='a'>
<path fill='#fff' d='M0 0h64v64H0z' />
</clipPath>
</defs>
</svg>
)
}
)

SvgBoxArchiveEmptyStateBacklogWhite64.displayName =
'SvgBoxArchiveEmptyStateBacklogWhite64'
export default SvgBoxArchiveEmptyStateBacklogWhite64
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import type { Ref } from 'react'
import React, { forwardRef } from 'react'
import type { StandardProps } from '@toptal/picasso-shared'

const SIZE = 64

type ScaleType = 1 | 2
export interface Props extends StandardProps {
scale?: ScaleType
base?: number
}
const SvgPeopleReferralInviteEmptyStateBlue64 = forwardRef(
function SvgPeopleReferralInviteEmptyStateBlue64(
props: Props,
ref: Ref<SVGSVGElement>
) {
const { className, style = {}, scale, base, 'data-testid': testId } = props
const scaledSize = base || SIZE * Math.ceil(scale || 1)

const svgStyle = {
minWidth: `${scaledSize}px`,
minHeight: `${scaledSize}px`,
...style,
}

return (
<svg
fill='none'
viewBox='0 0 64 64'
className={className}
style={svgStyle}
ref={ref}
data-testid={testId}
>
<g clipPath='url(#a)'>
<path
fill='#183A9E'
d='M17.376 21.796c5.523 0 10-4.477 10-10s-4.477-10-10-10-10 4.477-10 10 4.477 10 10 10ZM13 40.2H9l8-7.2 6.02 5.416c5.164-4.48 3.624-15.04-5.12-15.4a20.434 20.434 0 0 0-.7-.016c-9.388 0-17 7.788-17 17.396H13V40.2ZM46.8 37.504c-9.388 0-17 7.744-17 17.296h17.168c11.184 0 11.708-16.824.536-17.284a20.423 20.423 0 0 0-.7-.016l-.004.004Z'
opacity={0.15}
/>
<path
stroke='#204ECF'
strokeMiterlimit={10}
d='M29.8 54.7c0-9.552 7.612-17.296 17-17.296s17 7.744 17 17.296'
/>
<path
fill='#183A9E'
d='M47.012 36.168c5.51 0 9.976-4.473 9.976-9.992 0-5.518-4.466-9.992-9.976-9.992-5.51 0-9.976 4.474-9.976 9.992 0 5.519 4.466 9.992 9.976 9.992Z'
opacity={0.15}
/>
<path
stroke='#204ECF'
strokeMiterlimit={10}
d='M47.012 36.168c5.51 0 9.976-4.473 9.976-9.992 0-5.518-4.466-9.992-9.976-9.992-5.51 0-9.976 4.474-9.976 9.992 0 5.519 4.466 9.992 9.976 9.992ZM.2 40.396C.2 30.788 7.812 23 17.2 23s17 7.788 17 17.396M17.376 21.796c5.523 0 10-4.477 10-10s-4.477-10-10-10-10 4.477-10 10 4.477 10 10 10Z'
/>
<path
stroke='#204ECF'
strokeMiterlimit={10}
d='M34.492 62.392c-7.808-1.492-13.448-8.284-13.448-16.188l-.04-6.004h4l-8-7.2-8 7.2h4l.04 7.116c0 9.104 7.42 16.484 16.576 16.484h12.248l-7.376-1.408Z'
/>
</g>
<defs>
<clipPath id='a'>
<path fill='#fff' d='M0 0h64v64H0z' />
</clipPath>
</defs>
</svg>
)
}
)

SvgPeopleReferralInviteEmptyStateBlue64.displayName =
'SvgPeopleReferralInviteEmptyStateBlue64'
export default SvgPeopleReferralInviteEmptyStateBlue64
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import type { Ref } from 'react'
import React, { forwardRef } from 'react'
import type { StandardProps } from '@toptal/picasso-shared'

const SIZE = 64

type ScaleType = 1 | 2
export interface Props extends StandardProps {
scale?: ScaleType
base?: number
}
const SvgPeopleReferralInviteEmptyStateWhite64 = forwardRef(
function SvgPeopleReferralInviteEmptyStateWhite64(
props: Props,
ref: Ref<SVGSVGElement>
) {
const { className, style = {}, scale, base, 'data-testid': testId } = props
const scaledSize = base || SIZE * Math.ceil(scale || 1)

const svgStyle = {
minWidth: `${scaledSize}px`,
minHeight: `${scaledSize}px`,
...style,
}

return (
<svg
fill='none'
viewBox='0 0 64 64'
className={className}
style={svgStyle}
ref={ref}
data-testid={testId}
>
<g clipPath='url(#a)'>
<path
fill='#231F20'
d='M17.376 21.796c5.523 0 10-4.477 10-10s-4.477-10-10-10-10 4.477-10 10 4.477 10 10 10ZM13 40.2H9l8-7.2 6.02 5.416c5.164-4.48 3.624-15.04-5.12-15.4a20.434 20.434 0 0 0-.7-.016c-9.388 0-17 7.788-17 17.396H13V40.2ZM46.8 37.504c-9.388 0-17 7.744-17 17.296h17.168c11.184 0 11.708-16.824.536-17.284a20.423 20.423 0 0 0-.7-.016l-.004.004Z'
opacity={0.3}
/>
<path
stroke='#fff'
strokeMiterlimit={10}
d='M29.8 54.7c0-9.552 7.612-17.296 17-17.296s17 7.744 17 17.296'
/>
<path
fill='#231F20'
d='M47.012 36.168c5.51 0 9.976-4.473 9.976-9.992 0-5.518-4.466-9.992-9.976-9.992-5.51 0-9.976 4.474-9.976 9.992 0 5.519 4.466 9.992 9.976 9.992Z'
opacity={0.3}
/>
<path
stroke='#fff'
strokeMiterlimit={10}
d='M47.012 36.168c5.51 0 9.976-4.473 9.976-9.992 0-5.518-4.466-9.992-9.976-9.992-5.51 0-9.976 4.474-9.976 9.992 0 5.519 4.466 9.992 9.976 9.992ZM.2 40.396C.2 30.788 7.812 23 17.2 23s17 7.788 17 17.396M17.376 21.796c5.523 0 10-4.477 10-10s-4.477-10-10-10-10 4.477-10 10 4.477 10 10 10Z'
/>
<path
stroke='#fff'
strokeMiterlimit={10}
d='M34.492 62.392c-7.808-1.492-13.448-8.284-13.448-16.188l-.04-6.004h4l-8-7.2-8 7.2h4l.04 7.116c0 9.104 7.42 16.484 16.576 16.484h12.248l-7.376-1.408Z'
/>
</g>
<defs>
<clipPath id='a'>
<path fill='#fff' d='M0 0h64v64H0z' />
</clipPath>
</defs>
</svg>
)
}
)

SvgPeopleReferralInviteEmptyStateWhite64.displayName =
'SvgPeopleReferralInviteEmptyStateWhite64'
export default SvgPeopleReferralInviteEmptyStateWhite64
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import type { Ref } from 'react'
import React, { forwardRef } from 'react'
import type { StandardProps } from '@toptal/picasso-shared'

const SIZE = 64

type ScaleType = 1 | 2
export interface Props extends StandardProps {
scale?: ScaleType
base?: number
}
const SvgScanHeatmapSiteResearchTestBlue64 = forwardRef(
function SvgScanHeatmapSiteResearchTestBlue64(
props: Props,
ref: Ref<SVGSVGElement>
) {
const { className, style = {}, scale, base, 'data-testid': testId } = props
const scaledSize = base || SIZE * Math.ceil(scale || 1)

const svgStyle = {
minWidth: `${scaledSize}px`,
minHeight: `${scaledSize}px`,
...style,
}

return (
<svg
fill='none'
viewBox='0 0 64 65'
className={className}
style={svgStyle}
ref={ref}
data-testid={testId}
>
<g clipPath='url(#a)'>
<path
fill='#183A9C'
d='M31.5 61.533a6 6 0 1 0 0-12 6 6 0 0 0 0 12Zm23.5-37.5H22v8h33v-8Z'
opacity={0.15}
/>
<path
fill='#183A9C'
d='M20 50.033v-5h31.17l1.19-3H20v-5h34.35l1.19-3H20v-12h37v8.34l5.5-13.84H.5L6 30.353v-8.32h11v28h-3.16l2.19 5.5a19.18 19.18 0 0 1 6.08-5.5H20Z'
opacity={0.15}
/>
<path
fill='#183A9C'
d='M15 24.033H8v11.34l5.04 12.66H15v-24Zm25.89 26a19.18 19.18 0 0 1 6.08 5.5H47l2.19-5.5h-8.3Zm-18.89-10h31.16l.4-1H22v1Zm28.38 7H22v1h5.19c1.38-.32 2.83-.5 4.31-.5 1.48 0 2.92.18 4.31.5h14.17l.4-1Z'
opacity={0.15}
/>
<path
stroke='#204ECD'
strokeMiterlimit={10}
d='M12 55.533H2.5c-1.1 0-2-.9-2-2v-43c0-1.1.9-2 2-2h58c1.1 0 2 .9 2 2v43c0 1.1-.9 2-2 2H51m-50.5-39h62m-59-4h2m1.5 0h2m1.5 0h2'
/>
<path
stroke='#204ECD'
strokeMiterlimit={10}
d='M31.5 47.533c-6.39 0-12.03 3.16-15.47 8 3.44 4.84 9.08 8 15.47 8 6.39 0 12.03-3.16 15.47-8-3.44-4.84-9.08-8-15.47-8Z'
/>
<path
stroke='#204ECD'
strokeMiterlimit={10}
d='M31.5 61.533a6 6 0 1 0 0-12 6 6 0 0 0 0 12Z'
/>
<path
stroke='#204ECD'
strokeMiterlimit={10}
d='m29 56.033 1.5 1.5 3.5-3.5'
/>
</g>
<defs>
<clipPath id='a'>
<path fill='#fff' d='M0 .033h64v64H0z' />
</clipPath>
</defs>
</svg>
)
}
)

SvgScanHeatmapSiteResearchTestBlue64.displayName =
'SvgScanHeatmapSiteResearchTestBlue64'
export default SvgScanHeatmapSiteResearchTestBlue64
Loading
Loading