feat(dashboard, medusa, medusa-js, medusa-react, icons): DataGrid, partial Product domain, and ProductVariant hook (#6428)

The PR for the Products section is growing quite large, so I would like to merge this PR that contains a lot of the ground work before moving onto finalizing the rest of the domain.

**Note**
Since the PR contains changes to the core, that the dashboard depends on, the staging env will not work. To preview this PR, you will need to run it locally. 

## `@medusajs/medusa`

**What**
- Adds missing query params to `GET /admin/products/:id/variants`
- `options.values` has been added to the default relations of admin product endpoints.

## `medusa-react`

**What**
- Adds missing hook for `GET /admin/products/:id/variants`

## `@medusajs/dashboard`
- Adds base implementation for `DataGrid` component (formerly `BulkEditor`) (WIP)
- Adds `/products` overview page
- Adds partial `/products/create` page for creating new products (WIP - need to go over design w/ Ludvig before continuing)
- Adds `/products/:id` details page
- Adds `/products/:id/gallery` page for inspecting a products images in fullscreen.
- Adds `/products/:id/edit` page for editing the general information of a product
- Adds `/products/:id/attributes` page for editing the attributes information of a product
- Adds `/products/:id/sales-channels` page for editing which sales channels a product is available in
- Fixes a bug in `DataTable` where a table with two fixed columns would not display correctly

For the review its not important to test the DataGrid, as it is still WIP, and I need to go through some minor changes to the behaviour with Ludvig, as virtualizing it adds some constraints.

## `@medusajs/icons`

**What**
- Pulls latest icons from Figma

## TODO in next PR
- [ ] Fix the typing of POST /admin/products/:id as it is currently not possible to delete any of the nullable fields once they have been added. Be aware of this when reviewing this PR.
- [ ] Wrap up `/products/create` page
- [ ] Add `/products/:id/media` page for managing media associated with the product.
- [ ] Add `/products/id/options` for managing product options (need Ludvig to rethink this as the current API is very limited and we can implement the current design as is.)
- [ ] Add `/products/:id/variants/:id` page for editing a variant. (Possibly concat all of these into one BulkEditor page?)
This commit is contained in:
Kasper Fabricius Kristensen
2024-02-21 11:29:35 +00:00
committed by GitHub
parent c3e30224c7
commit 44d43e8155
131 changed files with 5799 additions and 656 deletions
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import BarsArrowDown from "../bars-arrow-down"
describe("BarsArrowDown", () => {
it("should render the icon without errors", async () => {
render(<BarsArrowDown data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import ChartPie from "../chart-pie"
describe("ChartPie", () => {
it("should render the icon without errors", async () => {
render(<ChartPie data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import FolderIllustration from "../folder-illustration"
describe("FolderIllustration", () => {
it("should render the icon without errors", async () => {
render(<FolderIllustration data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import FolderOpenIllustration from "../folder-open-illustration"
describe("FolderOpenIllustration", () => {
it("should render the icon without errors", async () => {
render(<FolderOpenIllustration data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -1,11 +1,11 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import Sidebar from "../sidebar"
import Loader from "../loader"
describe("Sidebar", () => {
describe("Loader", () => {
it("should render the icon without errors", async () => {
render(<Sidebar data-testid="icon" />)
render(<Loader data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import QueueList from "../queue-list"
describe("QueueList", () => {
it("should render the icon without errors", async () => {
render(<QueueList data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SidebarLeft from "../sidebar-left"
describe("SidebarLeft", () => {
it("should render the icon without errors", async () => {
render(<SidebarLeft data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SidebarRight from "../sidebar-right"
describe("SidebarRight", () => {
it("should render the icon without errors", async () => {
render(<SidebarRight data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SquareBlueSolid from "../square-blue-solid"
describe("SquareBlueSolid", () => {
it("should render the icon without errors", async () => {
render(<SquareBlueSolid data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SquareGreenSolid from "../square-green-solid"
describe("SquareGreenSolid", () => {
it("should render the icon without errors", async () => {
render(<SquareGreenSolid data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SquareGreySolid from "../square-grey-solid"
describe("SquareGreySolid", () => {
it("should render the icon without errors", async () => {
render(<SquareGreySolid data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SquareOrangeSolid from "../square-orange-solid"
describe("SquareOrangeSolid", () => {
it("should render the icon without errors", async () => {
render(<SquareOrangeSolid data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SquarePurpleSolid from "../square-purple-solid"
describe("SquarePurpleSolid", () => {
it("should render the icon without errors", async () => {
render(<SquarePurpleSolid data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import SquareRedSolid from "../square-red-solid"
describe("SquareRedSolid", () => {
it("should render the icon without errors", async () => {
render(<SquareRedSolid data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import Stopwatch from "../stopwatch"
describe("Stopwatch", () => {
it("should render the icon without errors", async () => {
render(<Stopwatch data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import ThumbnailBadge from "../thumbnail-badge"
describe("ThumbnailBadge", () => {
it("should render the icon without errors", async () => {
render(<ThumbnailBadge data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import VerifiedBadge from "../verified-badge"
describe("VerifiedBadge", () => {
it("should render the icon without errors", async () => {
render(<VerifiedBadge data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,17 @@
import * as React from "react"
import { cleanup, render, screen } from "@testing-library/react"
import WandSparkle from "../wand-sparkle"
describe("WandSparkle", () => {
it("should render the icon without errors", async () => {
render(<WandSparkle data-testid="icon" />)
const svgElement = screen.getByTestId("icon")
expect(svgElement).toBeInTheDocument()
cleanup()
})
})
@@ -0,0 +1,26 @@
import * as React from "react"
import type { IconProps } from "../types"
const BarsArrowDown = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
stroke={color}
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M2.5 3.75h11.875M2.5 7.5h8.125M2.5 11.25h8.125m3.75-3.75v10m0 0-3.125-3.125m3.125 3.125 3.125-3.125"
/>
</svg>
)
}
)
BarsArrowDown.displayName = "BarsArrowDown"
export default BarsArrowDown
@@ -0,0 +1,33 @@
import * as React from "react"
import type { IconProps } from "../types"
const ChartPie = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
stroke={color}
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M8.75 5A6.25 6.25 0 1 0 15 11.25H8.75V5Z"
/>
<path
stroke={color}
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M11.25 8.75h6.25a6.25 6.25 0 0 0-6.25-6.25v6.25Z"
/>
</svg>
)
}
)
ChartPie.displayName = "ChartPie"
export default ChartPie
@@ -21,7 +21,7 @@ const Figma = React.forwardRef<SVGSVGElement, Omit<IconProps, "color">>(
/>
<path
fill="#FF7262"
d="M10 1.092V7.03h2.97a2.97 2.97 0 1 0 0-5.94H10Z"
d="M10 1.092V7.03h2.97a2.97 2.97 0 1 0 0-5.938H10Z"
/>
<path
fill="#F24E1E"
@@ -0,0 +1,112 @@
import * as React from "react"
import type { IconProps } from "../types"
const FolderIllustration = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
fill="#60A5FA"
fillRule="evenodd"
d="M18.25 14.722a2.972 2.972 0 0 1-2.972 2.972H4.722a2.972 2.972 0 0 1-2.972-2.972V5.278a2.972 2.972 0 0 1 2.972-2.973H6.89c.902 0 1.754.41 2.318 1.112l.445.555h5.625a2.972 2.972 0 0 1 2.972 2.972v7.778Z"
clipRule="evenodd"
/>
<path
fill="url(#a)"
fillOpacity={0.15}
fillRule="evenodd"
d="M18.25 14.722a2.972 2.972 0 0 1-2.972 2.972H4.722a2.972 2.972 0 0 1-2.972-2.972V5.278a2.972 2.972 0 0 1 2.972-2.973H6.89c.902 0 1.754.41 2.318 1.112l.445.555h5.625a2.972 2.972 0 0 1 2.972 2.972v7.778Z"
clipRule="evenodd"
/>
<path
stroke="#000"
strokeLinecap="round"
strokeLinejoin="round"
strokeOpacity={0.15}
strokeWidth={0.5}
d="M9.458 4.128a.25.25 0 0 0 .195.094h5.625A2.722 2.722 0 0 1 18 6.944v7.778a2.722 2.722 0 0 1-2.722 2.722H4.722A2.722 2.722 0 0 1 2 14.722V5.278a2.722 2.722 0 0 1 2.722-2.723H6.89c.826 0 1.606.375 2.123 1.018l.445.555Z"
/>
<g filter="url(#b)">
<path
fill="#60A5FA"
d="M1.75 9.722A2.972 2.972 0 0 1 4.722 6.75h10.556a2.972 2.972 0 0 1 2.972 2.972v5a2.972 2.972 0 0 1-2.972 2.972H4.722a2.972 2.972 0 0 1-2.972-2.972v-5Z"
/>
<path
fill="url(#c)"
fillOpacity={0.2}
d="M1.75 9.722A2.972 2.972 0 0 1 4.722 6.75h10.556a2.972 2.972 0 0 1 2.972 2.972v5a2.972 2.972 0 0 1-2.972 2.972H4.722a2.972 2.972 0 0 1-2.972-2.972v-5Z"
/>
</g>
<defs>
<linearGradient
id="a"
x1={10}
x2={10}
y1={2.305}
y2={17.694}
gradientUnits="userSpaceOnUse"
>
<stop />
<stop offset={1} stopOpacity={0} />
</linearGradient>
<linearGradient
id="c"
x1={10}
x2={10}
y1={6.75}
y2={17.694}
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#fff" />
<stop offset={1} stopColor="#fff" stopOpacity={0} />
</linearGradient>
<filter
id="b"
width={16.5}
height={10.944}
x={1.75}
y={6.75}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={-0.5} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" />
<feBlend in2="shape" result="effect1_innerShadow_6347_11987" />
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={0.5} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0" />
<feBlend
in2="effect1_innerShadow_6347_11987"
result="effect2_innerShadow_6347_11987"
/>
</filter>
</defs>
</svg>
)
}
)
FolderIllustration.displayName = "FolderIllustration"
export default FolderIllustration
@@ -0,0 +1,112 @@
import * as React from "react"
import type { IconProps } from "../types"
const FolderOpenIllustration = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
fill="#60A5FA"
fillRule="evenodd"
d="M18.25 14.722a2.972 2.972 0 0 1-2.972 2.972H4.722a2.972 2.972 0 0 1-2.972-2.972V5.278a2.972 2.972 0 0 1 2.972-2.973H6.89c.902 0 1.754.41 2.318 1.112l.445.555h5.625a2.972 2.972 0 0 1 2.972 2.972v7.778Z"
clipRule="evenodd"
/>
<path
fill="url(#a)"
fillOpacity={0.15}
fillRule="evenodd"
d="M18.25 14.722a2.972 2.972 0 0 1-2.972 2.972H4.722a2.972 2.972 0 0 1-2.972-2.972V5.278a2.972 2.972 0 0 1 2.972-2.973H6.89c.902 0 1.754.41 2.318 1.112l.445.555h5.625a2.972 2.972 0 0 1 2.972 2.972v7.778Z"
clipRule="evenodd"
/>
<path
stroke="#000"
strokeLinecap="round"
strokeLinejoin="round"
strokeOpacity={0.15}
strokeWidth={0.5}
d="M9.458 4.128a.25.25 0 0 0 .195.094h5.625A2.722 2.722 0 0 1 18 6.944v7.778a2.722 2.722 0 0 1-2.722 2.722H4.722A2.722 2.722 0 0 1 2 14.722V5.278a2.722 2.722 0 0 1 2.722-2.723H6.89c.826 0 1.606.375 2.123 1.018l.445.555Z"
/>
<g fillRule="evenodd" clipRule="evenodd" filter="url(#b)">
<path
fill="#60A5FA"
d="M3.002 7.778h13.995a2.5 2.5 0 0 1 2.415 3.143L18.19 15.51a3.055 3.055 0 0 1-2.952 2.269H4.763a3.054 3.054 0 0 1-2.952-2.27L.588 10.922A2.5 2.5 0 0 1 3 7.778h.002Z"
/>
<path
fill="url(#c)"
fillOpacity={0.2}
d="M3.002 7.778h13.995a2.5 2.5 0 0 1 2.415 3.143L18.19 15.51a3.055 3.055 0 0 1-2.952 2.269H4.763a3.054 3.054 0 0 1-2.952-2.27L.588 10.922A2.5 2.5 0 0 1 3 7.778h.002Z"
/>
</g>
<defs>
<linearGradient
id="a"
x1={10}
x2={10}
y1={2.305}
y2={17.694}
gradientUnits="userSpaceOnUse"
>
<stop />
<stop offset={1} stopOpacity={0} />
</linearGradient>
<linearGradient
id="c"
x1={10}
x2={10}
y1={7.778}
y2={17.778}
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#fff" />
<stop offset={1} stopColor="#fff" stopOpacity={0} />
</linearGradient>
<filter
id="b"
width={18.997}
height={10}
x={0.502}
y={7.778}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={-0.5} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" />
<feBlend in2="shape" result="effect1_innerShadow_6347_12110" />
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={0.5} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0" />
<feBlend
in2="effect1_innerShadow_6347_12110"
result="effect2_innerShadow_6347_12110"
/>
</filter>
</defs>
</svg>
)
}
)
FolderOpenIllustration.displayName = "FolderOpenIllustration"
export default FolderOpenIllustration
@@ -33,6 +33,7 @@ export { default as ArrowsPointingOut } from "./arrows-pointing-out"
export { default as ArrrowRight } from "./arrrow-right"
export { default as AtSymbol } from "./at-symbol"
export { default as BackwardSolid } from "./backward-solid"
export { default as BarsArrowDown } from "./bars-arrow-down"
export { default as BarsThree } from "./bars-three"
export { default as Beaker } from "./beaker"
export { default as BellAlertSolid } from "./bell-alert-solid"
@@ -56,6 +57,7 @@ export { default as Cash } from "./cash"
export { default as ChannelsSolid } from "./channels-solid"
export { default as Channels } from "./channels"
export { default as ChartBar } from "./chart-bar"
export { default as ChartPie } from "./chart-pie"
export { default as ChatBubbleLeftRightSolid } from "./chat-bubble-left-right-solid"
export { default as ChatBubbleLeftRight } from "./chat-bubble-left-right"
export { default as ChatBubble } from "./chat-bubble"
@@ -134,6 +136,8 @@ export { default as Facebook } from "./facebook"
export { default as Figma } from "./figma"
export { default as FlagMini } from "./flag-mini"
export { default as FlyingBox } from "./flying-box"
export { default as FolderIllustration } from "./folder-illustration"
export { default as FolderOpenIllustration } from "./folder-open-illustration"
export { default as FolderOpen } from "./folder-open"
export { default as Folder } from "./folder"
export { default as ForwardSolid } from "./forward-solid"
@@ -164,6 +168,7 @@ export { default as LightBulb } from "./light-bulb"
export { default as Link } from "./link"
export { default as Linkedin } from "./linkedin"
export { default as ListBullet } from "./list-bullet"
export { default as Loader } from "./loader"
export { default as LockClosedSolidMini } from "./lock-closed-solid-mini"
export { default as LockClosedSolid } from "./lock-closed-solid"
export { default as LockOpenSolid } from "./lock-open-solid"
@@ -196,6 +201,7 @@ export { default as PuzzleSolid } from "./puzzle-solid"
export { default as Puzzle } from "./puzzle"
export { default as QuestionMarkCircle } from "./question-mark-circle"
export { default as QuestionMark } from "./question-mark"
export { default as QueueList } from "./queue-list"
export { default as ReactJsEx } from "./react-js-ex"
export { default as ReactJs } from "./react-js"
export { default as ReceiptPercent } from "./receipt-percent"
@@ -212,7 +218,8 @@ export { default as Server } from "./server"
export { default as ShoppingBag } from "./shopping-bag"
export { default as ShoppingCartSolid } from "./shopping-cart-solid"
export { default as ShoppingCart } from "./shopping-cart"
export { default as Sidebar } from "./sidebar"
export { default as SidebarLeft } from "./sidebar-left"
export { default as SidebarRight } from "./sidebar-right"
export { default as Slack } from "./slack"
export { default as Snooze } from "./snooze"
export { default as SparklesMiniSolid } from "./sparkles-mini-solid"
@@ -220,6 +227,12 @@ export { default as SparklesMini } from "./sparkles-mini"
export { default as SparklesSolid } from "./sparkles-solid"
export { default as Sparkles } from "./sparkles"
export { default as Spinner } from "./spinner"
export { default as SquareBlueSolid } from "./square-blue-solid"
export { default as SquareGreenSolid } from "./square-green-solid"
export { default as SquareGreySolid } from "./square-grey-solid"
export { default as SquareOrangeSolid } from "./square-orange-solid"
export { default as SquarePurpleSolid } from "./square-purple-solid"
export { default as SquareRedSolid } from "./square-red-solid"
export { default as SquareTwoStackMini } from "./square-two-stack-mini"
export { default as SquareTwoStackSolid } from "./square-two-stack-solid"
export { default as SquareTwoStack } from "./square-two-stack"
@@ -227,6 +240,7 @@ export { default as SquaresPlusSolid } from "./squares-plus-solid"
export { default as SquaresPlus } from "./squares-plus"
export { default as StarSolid } from "./star-solid"
export { default as Star } from "./star"
export { default as Stopwatch } from "./stopwatch"
export { default as Stripe } from "./stripe"
export { default as SunSolid } from "./sun-solid"
export { default as Sun } from "./sun"
@@ -238,6 +252,7 @@ export { default as Tailwind } from "./tailwind"
export { default as Text } from "./text"
export { default as ThumbDown } from "./thumb-down"
export { default as ThumbUp } from "./thumb-up"
export { default as ThumbnailBadge } from "./thumbnail-badge"
export { default as ToolsSolid } from "./tools-solid"
export { default as Tools } from "./tools"
export { default as Trash } from "./trash"
@@ -255,7 +270,9 @@ export { default as User } from "./user"
export { default as UsersSolid } from "./users-solid"
export { default as Users } from "./users"
export { default as Vercel } from "./vercel"
export { default as VerifiedBadge } from "./verified-badge"
export { default as Visa } from "./visa"
export { default as WandSparkle } from "./wand-sparkle"
export { default as Window } from "./window"
export { default as XCircleSolid } from "./x-circle-solid"
export { default as XCircle } from "./x-circle"
@@ -0,0 +1,58 @@
import * as React from "react"
import type { IconProps } from "../types"
const Loader = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
fill={color}
d="M10 6a.75.75 0 0 1-.75-.75v-2.5a.75.75 0 0 1 1.5 0v2.5A.75.75 0 0 1 10 6Z"
/>
<path
fill={color}
d="M13.359 7.391a.75.75 0 0 1-.53-1.281l1.768-1.768a.75.75 0 1 1 1.061 1.061L13.89 7.171a.75.75 0 0 1-.531.22Z"
opacity={0.88}
/>
<path
fill={color}
d="M17.25 10.75h-2.5a.75.75 0 0 1 0-1.5h2.5a.75.75 0 0 1 0 1.5Z"
opacity={0.75}
/>
<path
fill={color}
d="M15.126 15.876a.744.744 0 0 1-.53-.22l-1.768-1.768a.75.75 0 1 1 1.061-1.061l1.768 1.768a.75.75 0 0 1-.531 1.28Z"
opacity={0.63}
/>
<path
fill={color}
d="M10 18a.75.75 0 0 1-.75-.75v-2.5a.75.75 0 0 1 1.5 0v2.5A.75.75 0 0 1 10 18Z"
opacity={0.5}
/>
<path
fill={color}
d="M4.874 15.876a.75.75 0 0 1-.53-1.281l1.768-1.768a.75.75 0 1 1 1.061 1.06l-1.768 1.769a.75.75 0 0 1-.531.22Z"
opacity={0.38}
/>
<path
fill={color}
d="M5.25 10.75h-2.5a.75.75 0 0 1 0-1.5h2.5a.75.75 0 0 1 0 1.5Z"
opacity={0.25}
/>
<path
fill={color}
d="M6.641 7.391a.744.744 0 0 1-.53-.22L4.343 5.403a.75.75 0 1 1 1.061-1.06L7.172 6.11a.75.75 0 0 1-.53 1.281h-.001Z"
opacity={0.13}
/>
</svg>
)
}
)
Loader.displayName = "Loader"
export default Loader
@@ -0,0 +1,26 @@
import * as React from "react"
import type { IconProps } from "../types"
const QueueList = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
stroke={color}
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M3.125 10h13.75m-13.75 3.125h13.75M3.125 16.25h13.75M4.687 3.75h10.625a1.563 1.563 0 0 1 0 3.125H4.688a1.562 1.562 0 1 1 0-3.125Z"
/>
</svg>
)
}
)
QueueList.displayName = "QueueList"
export default QueueList
@@ -1,6 +1,6 @@
import * as React from "react"
import type { IconProps } from "../types"
const Sidebar = React.forwardRef<SVGSVGElement, IconProps>(
const SidebarLeft = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
@@ -22,5 +22,5 @@ const Sidebar = React.forwardRef<SVGSVGElement, IconProps>(
)
}
)
Sidebar.displayName = "Sidebar"
export default Sidebar
SidebarLeft.displayName = "SidebarLeft"
export default SidebarLeft
@@ -0,0 +1,26 @@
import * as React from "react"
import type { IconProps } from "../types"
const SidebarRight = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
stroke={color}
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M14.5 6v8m3-7.125V15a1.875 1.875 0 0 1-1.875 1.875H4.375A1.875 1.875 0 0 1 2.5 15V5a1.875 1.875 0 0 1 1.875-1.875h11.25A1.875 1.875 0 0 1 17.5 5v1.875Z"
/>
</svg>
)
}
)
SidebarRight.displayName = "SidebarRight"
export default SidebarRight
@@ -0,0 +1,54 @@
import * as React from "react"
import type { IconProps } from "../types"
const SquareBlueSolid = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g filter="url(#a)">
<rect width={8} height={8} x={6} y={6} fill="#2563EB" rx={2} />
</g>
<defs>
<filter
id="a"
width={8}
height={8}
x={6}
y={6}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feMorphology
in="SourceAlpha"
radius={1}
result="effect1_innerShadow_6173_13258"
/>
<feOffset />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend in2="shape" result="effect1_innerShadow_6173_13258" />
</filter>
</defs>
</svg>
)
}
)
SquareBlueSolid.displayName = "SquareBlueSolid"
export default SquareBlueSolid
@@ -0,0 +1,54 @@
import * as React from "react"
import type { IconProps } from "../types"
const SquareGreenSolid = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g filter="url(#a)">
<rect width={8} height={8} x={6} y={6} fill="#059669" rx={2} />
</g>
<defs>
<filter
id="a"
width={8}
height={8}
x={6}
y={6}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feMorphology
in="SourceAlpha"
radius={1}
result="effect1_innerShadow_6166_953"
/>
<feOffset />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend in2="shape" result="effect1_innerShadow_6166_953" />
</filter>
</defs>
</svg>
)
}
)
SquareGreenSolid.displayName = "SquareGreenSolid"
export default SquareGreenSolid
@@ -0,0 +1,54 @@
import * as React from "react"
import type { IconProps } from "../types"
const SquareGreySolid = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g filter="url(#a)">
<rect width={8} height={8} x={6} y={6} fill="#6B7280" rx={2} />
</g>
<defs>
<filter
id="a"
width={8}
height={8}
x={6}
y={6}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feMorphology
in="SourceAlpha"
radius={1}
result="effect1_innerShadow_6166_956"
/>
<feOffset />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend in2="shape" result="effect1_innerShadow_6166_956" />
</filter>
</defs>
</svg>
)
}
)
SquareGreySolid.displayName = "SquareGreySolid"
export default SquareGreySolid
@@ -0,0 +1,54 @@
import * as React from "react"
import type { IconProps } from "../types"
const SquareOrangeSolid = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g filter="url(#a)">
<rect width={8} height={8} x={6} y={6} fill="#D97706" rx={2} />
</g>
<defs>
<filter
id="a"
width={8}
height={8}
x={6}
y={6}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feMorphology
in="SourceAlpha"
radius={1}
result="effect1_innerShadow_6166_954"
/>
<feOffset />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend in2="shape" result="effect1_innerShadow_6166_954" />
</filter>
</defs>
</svg>
)
}
)
SquareOrangeSolid.displayName = "SquareOrangeSolid"
export default SquareOrangeSolid
@@ -0,0 +1,54 @@
import * as React from "react"
import type { IconProps } from "../types"
const SquarePurpleSolid = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g filter="url(#a)">
<rect width={8} height={8} x={6} y={6} fill="#7C3AED" rx={2} />
</g>
<defs>
<filter
id="a"
width={8}
height={8}
x={6}
y={6}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feMorphology
in="SourceAlpha"
radius={1}
result="effect1_innerShadow_6173_13257"
/>
<feOffset />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend in2="shape" result="effect1_innerShadow_6173_13257" />
</filter>
</defs>
</svg>
)
}
)
SquarePurpleSolid.displayName = "SquarePurpleSolid"
export default SquarePurpleSolid
@@ -0,0 +1,54 @@
import * as React from "react"
import type { IconProps } from "../types"
const SquareRedSolid = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g filter="url(#a)">
<rect width={8} height={8} x={6} y={6} fill="#E11D48" rx={2} />
</g>
<defs>
<filter
id="a"
width={8}
height={8}
x={6}
y={6}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feBlend
in="SourceGraphic"
in2="BackgroundImageFix"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feMorphology
in="SourceAlpha"
radius={1}
result="effect1_innerShadow_6166_955"
/>
<feOffset />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend in2="shape" result="effect1_innerShadow_6166_955" />
</filter>
</defs>
</svg>
)
}
)
SquareRedSolid.displayName = "SquareRedSolid"
export default SquareRedSolid
@@ -0,0 +1,26 @@
import * as React from "react"
import type { IconProps } from "../types"
const Stopwatch = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<path
stroke={color}
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M7.75 2.25h4.5M10 2.25v2.5M10 17.25a6.25 6.25 0 1 0 0-12.5 6.25 6.25 0 0 0 0 12.5ZM7.702 8.702 10 11M15.25 3.75l2 2"
/>
</svg>
)
}
)
Stopwatch.displayName = "Stopwatch"
export default Stopwatch
@@ -28,7 +28,7 @@ const Tailwind = React.forwardRef<SVGSVGElement, Omit<IconProps, "color">>(
<path
fill="#38BDF8"
fillRule="evenodd"
d="M10 4.6c-2.4 0-3.9 1.2-4.5 3.6.9-1.2 1.95-1.65 3.15-1.35.685.171 1.174.668 1.716 1.218C11.248 8.963 12.269 10 14.5 10c2.4 0 3.9-1.2 4.5-3.6-.9 1.2-1.95 1.65-3.15 1.35-.685-.171-1.174-.668-1.716-1.218C13.252 5.637 12.231 4.6 10 4.6ZM5.5 10c-2.4 0-3.9 1.2-4.5 3.6.9-1.2 1.95-1.65 3.15-1.35.685.171 1.174.668 1.716 1.218.882.895 1.903 1.932 4.134 1.932 2.4 0 3.9-1.2 4.5-3.6-.9 1.2-1.95 1.65-3.15 1.35-.685-.171-1.174-.668-1.716-1.218C8.752 11.037 7.731 10 5.5 10Z"
d="M10 4.6c-2.4 0-3.9 1.2-4.5 3.6.9-1.2 1.95-1.65 3.15-1.35.685.171 1.174.668 1.716 1.218C11.248 8.963 12.269 10 14.5 10c2.4 0 3.9-1.2 4.5-3.6-.9 1.2-1.95 1.65-3.15 1.35-.685-.17-1.174-.668-1.716-1.218C13.252 5.637 12.231 4.6 10 4.6ZM5.5 10c-2.4 0-3.9 1.2-4.5 3.6.9-1.2 1.95-1.65 3.15-1.35.685.171 1.174.668 1.716 1.218.882.895 1.903 1.932 4.134 1.932 2.4 0 3.9-1.2 4.5-3.6-.9 1.2-1.95 1.65-3.15 1.35-.685-.17-1.174-.668-1.716-1.218C8.752 11.037 7.731 10 5.5 10Z"
clipRule="evenodd"
/>
</g>
@@ -0,0 +1,107 @@
import * as React from "react"
import type { IconProps } from "../types"
const ThumbnailBadge = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g clipPath="url(#a)">
<g filter="url(#b)">
<circle cx={10} cy={10} r={9} fill="#3B82F6" />
<circle cx={10} cy={10} r={9} fill="url(#c)" fillOpacity={0.2} />
<circle
cx={10}
cy={10}
r={8.75}
stroke="#000"
strokeOpacity={0.2}
strokeWidth={0.5}
/>
</g>
<g fill="#fff" clipPath="url(#d)">
<path d="M5.5 12.87a.835.835 0 0 1-.833-.833V7.963a.835.835 0 0 1 1.096-.791l.562.187a.5.5 0 0 1-.317.949l-.342-.114v3.613l.342-.114a.5.5 0 1 1 .317.948l-.562.188a.826.826 0 0 1-.262.042ZM8.167 14.167a.834.834 0 0 1-.833-.834V6.667a.832.832 0 0 1 1.153-.77l.539.224a.5.5 0 0 1-.385.924l-.307-.128v6.166l.307-.128a.5.5 0 0 1 .385.924l-.539.224a.843.843 0 0 1-.32.064ZM14.655 6.367l-3.472-1.603A.833.833 0 0 0 10 5.52v8.958a.83.83 0 0 0 .833.834.84.84 0 0 0 .35-.077l3.472-1.603a1.17 1.17 0 0 0 .678-1.06V7.428c0-.454-.266-.87-.678-1.06Z" />
</g>
</g>
<defs>
<clipPath id="a">
<path fill="#fff" d="M0 0h20v20H0z" />
</clipPath>
<clipPath id="d">
<path fill="#fff" d="M4 4h12v12H4z" />
</clipPath>
<linearGradient
id="c"
x1={10}
x2={10}
y1={1}
y2={19}
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#fff" />
<stop offset={1} stopColor="#fff" stopOpacity={0} />
</linearGradient>
<filter
id="b"
width={22.215}
height={22.215}
x={-1.108}
y={-0.054}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={1.054} />
<feGaussianBlur stdDeviation={1.054} />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend
in2="BackgroundImageFix"
result="effect1_dropShadow_6384_214"
/>
<feBlend
in="SourceGraphic"
in2="effect1_dropShadow_6384_214"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={1.054} />
<feGaussianBlur stdDeviation={1.054} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.1 0" />
<feBlend in2="shape" result="effect2_innerShadow_6384_214" />
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={-1.054} />
<feGaussianBlur stdDeviation={2.635} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.1 0" />
<feBlend
in2="effect2_innerShadow_6384_214"
result="effect3_innerShadow_6384_214"
/>
</filter>
</defs>
</svg>
)
}
)
ThumbnailBadge.displayName = "ThumbnailBadge"
export default ThumbnailBadge
@@ -0,0 +1,117 @@
import * as React from "react"
import type { IconProps } from "../types"
const VerifiedBadge = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g clipPath="url(#a)">
<g filter="url(#b)">
<path
fill="#3B82F6"
fillRule="evenodd"
d="M6.864 2.43A4.145 4.145 0 0 1 10 1a4.14 4.14 0 0 1 3.136 1.43 4.145 4.145 0 0 1 3.229 1.206 4.147 4.147 0 0 1 1.206 3.228A4.146 4.146 0 0 1 19 10a4.143 4.143 0 0 1-1.43 3.136 4.146 4.146 0 0 1-1.206 3.228 4.145 4.145 0 0 1-3.228 1.206A4.144 4.144 0 0 1 10 19a4.143 4.143 0 0 1-3.136-1.43 4.145 4.145 0 0 1-3.229-1.205 4.145 4.145 0 0 1-1.206-3.23A4.145 4.145 0 0 1 1 10a4.14 4.14 0 0 1 1.43-3.136 4.145 4.145 0 0 1 1.206-3.228A4.145 4.145 0 0 1 6.864 2.43Z"
clipRule="evenodd"
/>
<path
fill="url(#c)"
fillOpacity={0.2}
fillRule="evenodd"
d="M6.864 2.43A4.145 4.145 0 0 1 10 1a4.14 4.14 0 0 1 3.136 1.43 4.145 4.145 0 0 1 3.229 1.206 4.147 4.147 0 0 1 1.206 3.228A4.146 4.146 0 0 1 19 10a4.143 4.143 0 0 1-1.43 3.136 4.146 4.146 0 0 1-1.206 3.228 4.145 4.145 0 0 1-3.228 1.206A4.144 4.144 0 0 1 10 19a4.143 4.143 0 0 1-3.136-1.43 4.145 4.145 0 0 1-3.229-1.205 4.145 4.145 0 0 1-1.206-3.23A4.145 4.145 0 0 1 1 10a4.14 4.14 0 0 1 1.43-3.136 4.145 4.145 0 0 1 1.206-3.228A4.145 4.145 0 0 1 6.864 2.43Z"
clipRule="evenodd"
/>
<path
stroke="#000"
strokeOpacity={0.2}
strokeWidth={0.5}
d="m6.847 2.68.124.008.082-.094A3.895 3.895 0 0 1 10 1.25a3.89 3.89 0 0 1 2.947 1.344l.082.094.124-.009a3.894 3.894 0 0 1 3.035 1.134 3.895 3.895 0 0 1 1.134 3.034l-.01.124.095.082A3.896 3.896 0 0 1 18.75 10a3.896 3.896 0 0 1-1.344 2.947l-.094.082.009.124a3.896 3.896 0 0 1-1.134 3.034 3.899 3.899 0 0 1-3.034 1.134l-.124-.01-.082.095A3.896 3.896 0 0 1 10 18.75a3.896 3.896 0 0 1-2.947-1.344l-.082-.094-.125.009a3.894 3.894 0 0 1-3.034-1.133 3.897 3.897 0 0 1-1.134-3.034l.01-.125-.095-.082A3.895 3.895 0 0 1 1.25 10a3.89 3.89 0 0 1 1.344-2.947l.094-.082-.009-.124a3.895 3.895 0 0 1 1.134-3.034 3.894 3.894 0 0 1 3.034-1.134Z"
/>
</g>
<path
stroke="#fff"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M6.667 10.333 9.333 13l4-6"
/>
</g>
<defs>
<linearGradient
id="c"
x1={10}
x2={10}
y1={1}
y2={19}
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#fff" />
<stop offset={1} stopColor="#fff" stopOpacity={0} />
</linearGradient>
<clipPath id="a">
<path fill="#fff" d="M0 0h20v20H0z" />
</clipPath>
<filter
id="b"
width={22.215}
height={22.215}
x={-1.108}
y={-0.054}
colorInterpolationFilters="sRGB"
filterUnits="userSpaceOnUse"
>
<feFlood floodOpacity={0} result="BackgroundImageFix" />
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={1.054} />
<feGaussianBlur stdDeviation={1.054} />
<feComposite in2="hardAlpha" operator="out" />
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0" />
<feBlend
in2="BackgroundImageFix"
result="effect1_dropShadow_6386_370"
/>
<feBlend
in="SourceGraphic"
in2="effect1_dropShadow_6386_370"
result="shape"
/>
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={1.054} />
<feGaussianBlur stdDeviation={1.054} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.1 0" />
<feBlend in2="shape" result="effect2_innerShadow_6386_370" />
<feColorMatrix
in="SourceAlpha"
result="hardAlpha"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
/>
<feOffset dy={-1.054} />
<feGaussianBlur stdDeviation={2.635} />
<feComposite in2="hardAlpha" k2={-1} k3={1} operator="arithmetic" />
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.1 0" />
<feBlend
in2="effect2_innerShadow_6386_370"
result="effect3_innerShadow_6386_370"
/>
</filter>
</defs>
</svg>
)
}
)
VerifiedBadge.displayName = "VerifiedBadge"
export default VerifiedBadge
@@ -13,7 +13,7 @@ const Visa = React.forwardRef<SVGSVGElement, Omit<IconProps, "color">>(
>
<path
fill="#1A1F71"
d="m7.834 7.197-2.356 5.622H3.94L2.78 8.332c-.07-.276-.13-.378-.345-.494-.35-.19-.927-.367-1.435-.478l.034-.163H3.51a.678.678 0 0 1 .67.573l.613 3.253 1.513-3.826h1.528Zm6.025 3.787c.006-1.485-2.052-1.566-2.038-2.23.005-.201.197-.416.617-.47.492-.047.987.04 1.434.252l.255-1.193a3.906 3.906 0 0 0-1.36-.25c-1.438 0-2.45.765-2.459 1.86-.009.809.723 1.26 1.274 1.53.567.275.757.452.754.698-.004.378-.451.544-.87.55-.731.012-1.155-.197-1.494-.354l-.263 1.231c.34.156.967.293 1.617.299 1.528 0 2.527-.755 2.533-1.923Zm3.795 1.835H19l-1.174-5.622h-1.242a.662.662 0 0 0-.62.412l-2.181 5.21h1.527l.304-.84h1.866l.174.84Zm-1.622-1.992.765-2.111.441 2.11h-1.206Zm-6.12-3.63L8.71 12.819H7.255l1.204-5.622h1.453Z"
d="m7.834 7.197-2.356 5.622H3.94L2.78 8.332c-.07-.276-.13-.378-.345-.494-.35-.19-.927-.367-1.435-.478l.034-.163H3.51a.678.678 0 0 1 .67.573l.613 3.253 1.513-3.826h1.528Zm6.025 3.786c.006-1.484-2.052-1.565-2.038-2.228.005-.202.197-.417.617-.471.492-.047.987.04 1.434.252l.255-1.193a3.906 3.906 0 0 0-1.36-.25c-1.438 0-2.45.765-2.459 1.86-.009.809.723 1.26 1.274 1.53.567.275.757.452.754.698-.004.378-.451.544-.87.55-.731.011-1.155-.197-1.494-.354l-.263 1.231c.34.156.967.292 1.617.298 1.528 0 2.527-.754 2.533-1.923Zm3.795 1.836H19l-1.174-5.622h-1.242a.662.662 0 0 0-.62.412l-2.181 5.21h1.527l.304-.84h1.866l.174.84Zm-1.622-1.992.765-2.111.441 2.11h-1.206Zm-6.12-3.63L8.71 12.819H7.255l1.204-5.622h1.453Z"
/>
</svg>
)
@@ -0,0 +1,37 @@
import * as React from "react"
import type { IconProps } from "../types"
const WandSparkle = React.forwardRef<SVGSVGElement, IconProps>(
({ color = "currentColor", ...props }, ref) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width={20}
height={20}
fill="none"
ref={ref}
{...props}
>
<g clipPath="url(#a)">
<path
stroke={color}
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={1.5}
d="M14.107 3.393 3.381 14.119a1.111 1.111 0 0 0 0 1.572l.928.928a1.111 1.111 0 0 0 1.572 0L16.607 5.893a1.111 1.111 0 0 0 0-1.572l-.928-.928a1.111 1.111 0 0 0-1.572 0ZM11.541 5.959l2.5 2.5"
/>
<path
fill={color}
d="m8.048 3.88-1.051-.35-.351-1.052c-.114-.34-.677-.34-.79 0L5.504 3.53l-1.05.35a.417.417 0 0 0 0 .791l1.05.35.352 1.052a.416.416 0 0 0 .788 0l.352-1.052 1.05-.35a.417.417 0 0 0 .002-.791ZM18.509 13.322l-1.404-.468-.467-1.403c-.153-.453-.903-.453-1.055 0l-.467 1.403-1.404.468a.556.556 0 0 0 0 1.054l1.404.467.467 1.404a.557.557 0 0 0 1.056 0l.468-1.404 1.403-.467a.555.555 0 0 0-.001-1.054ZM10.278 2.778a.833.833 0 1 0 0-1.667.833.833 0 0 0 0 1.667Z"
/>
</g>
<defs>
<clipPath id="a">
<path fill="#fff" d="M0 0h20v20H0z" />
</clipPath>
</defs>
</svg>
)
}
)
WandSparkle.displayName = "WandSparkle"
export default WandSparkle