diff --git a/core/bootstrap/bootstrap-constructor-mock.ts b/core/bootstrap/bootstrap-constructor-mock.ts index 1f6e3302f..5ce8d5a49 100644 --- a/core/bootstrap/bootstrap-constructor-mock.ts +++ b/core/bootstrap/bootstrap-constructor-mock.ts @@ -3,6 +3,7 @@ import { BannerClientAdapterMock } from "@/core/infrastructure/marketplace-api-c import { ProgramClientAdapterMock } from "@/core/infrastructure/marketplace-api-client-adapter/mock-adapters/program-client-adapter-mock"; import { UserClientAdapterMock } from "@/core/infrastructure/marketplace-api-client-adapter/mock-adapters/user-client-adapter-mock"; import { DateAdapterMock } from "@/core/kernel/date/date-adapter-mock"; +import { MoneyAdapterMock } from "@/core/kernel/money/money-adapter-mock"; export const bootstrapConstructorMock: BootstrapConstructor = { userStoragePortForClient: new UserClientAdapterMock(), @@ -12,4 +13,5 @@ export const bootstrapConstructorMock: BootstrapConstructor = { programStoragePortForClient: new ProgramClientAdapterMock(), programStoragePortForServer: new ProgramClientAdapterMock(), dateKernelPort: DateAdapterMock, + moneyKernelPort: MoneyAdapterMock, }; diff --git a/core/bootstrap/index.ts b/core/bootstrap/index.ts index 3ec5ca542..60d86777d 100644 --- a/core/bootstrap/index.ts +++ b/core/bootstrap/index.ts @@ -9,6 +9,8 @@ import { FetchHttpClient } from "@/core/infrastructure/marketplace-api-client-ad import { ImpersonationProvider } from "@/core/infrastructure/marketplace-api-client-adapter/impersonation/impersonation-provider"; import { DateFacadePort } from "@/core/kernel/date/date-facade-port"; import { DateFnsAdapter } from "@/core/kernel/date/date-fns-adapter"; +import { MoneyFacadePort } from "@/core/kernel/money/money-facade-port"; +import { MoneyAdapter } from "@/core/kernel/money/money-fns-adapter"; export interface BootstrapConstructor { userStoragePortForClient: UserStoragePort; @@ -18,6 +20,7 @@ export interface BootstrapConstructor { programStoragePortForClient: ProgramStoragePort; programStoragePortForServer: ProgramStoragePort; dateKernelPort: DateFacadePort; + moneyKernelPort: MoneyFacadePort; } export class Bootstrap { @@ -31,6 +34,7 @@ export class Bootstrap { programStoragePortForClient: ProgramStoragePort; programStoragePortForServer: ProgramStoragePort; dateKernelPort: DateFacadePort; + moneyKernelPort: MoneyFacadePort; constructor(constructor: BootstrapConstructor) { this.userStoragePortForClient = constructor.userStoragePortForClient; @@ -40,6 +44,7 @@ export class Bootstrap { this.programStoragePortForClient = constructor.programStoragePortForClient; this.programStoragePortForServer = constructor.programStoragePortForServer; this.dateKernelPort = constructor.dateKernelPort; + this.moneyKernelPort = constructor.moneyKernelPort; } getAuthProvider() { @@ -86,6 +91,10 @@ export class Bootstrap { return this.dateKernelPort; } + getMoneyKernelPort() { + return this.moneyKernelPort; + } + public static get getBootstrap(): Bootstrap { if (!Bootstrap.#instance) { this.newBootstrap({ @@ -96,6 +105,7 @@ export class Bootstrap { programStoragePortForClient: new ProgramClientAdapter(new FetchHttpClient()), programStoragePortForServer: new ProgramClientAdapter(new FetchHttpClient()), dateKernelPort: DateFnsAdapter, + moneyKernelPort: MoneyAdapter, }); } diff --git a/core/kernel/money/money-adapter-mock.ts b/core/kernel/money/money-adapter-mock.ts new file mode 100644 index 000000000..476aa424c --- /dev/null +++ b/core/kernel/money/money-adapter-mock.ts @@ -0,0 +1,12 @@ +import { FormatParams, MoneyFacadePort } from "./money-facade-port"; + +export const MoneyAdapterMock: MoneyFacadePort = { + format: (_params: FormatParams) => "", + getUSDCurrency: () => ({ + id: "", + code: "", + name: "", + logoUrl: "", + decimals: 0, + }), +}; diff --git a/core/kernel/money/money-facade-port.ts b/core/kernel/money/money-facade-port.ts new file mode 100644 index 000000000..7a9bdfc91 --- /dev/null +++ b/core/kernel/money/money-facade-port.ts @@ -0,0 +1,17 @@ +import { components } from "@/core/infrastructure/marketplace-api-client-adapter/__generated/api"; + +export type Currency = components["schemas"]["ShortCurrencyResponse"]; + +export interface FormatParams { + value: number; + currency: Currency; + locale?: string; + showCurrency?: boolean; + notation?: "standard" | "scientific" | "engineering" | "compact"; + showTilde?: boolean; +} + +export interface MoneyFacadePort { + getUSDCurrency: () => Currency; + format(params: FormatParams): string; +} diff --git a/core/kernel/money/money-fns-adapter.ts b/core/kernel/money/money-fns-adapter.ts new file mode 100644 index 000000000..05985f7bc --- /dev/null +++ b/core/kernel/money/money-fns-adapter.ts @@ -0,0 +1,34 @@ +import { Currency, FormatParams, MoneyFacadePort } from "./money-facade-port"; + +const USD_CURRENCY: Currency = { + id: "", + code: "USD", + name: "US Dollar", + logoUrl: "", + decimals: 2, +}; + +export const MoneyAdapter: MoneyFacadePort = { + format: ({ + value, + currency, + locale = "en-US", + showCurrency = true, + notation = "standard", + showTilde = false, + }: FormatParams): string => { + let formattedValue = new Intl.NumberFormat(locale, { + style: "decimal", + minimumFractionDigits: currency.decimals, + maximumFractionDigits: currency.decimals, + notation, + }).format(value); + + if (showTilde) { + formattedValue = `~${formattedValue}`; + } + + return showCurrency ? `${formattedValue} ${currency.code}` : formattedValue; + }, + getUSDCurrency: () => USD_CURRENCY, +}; diff --git a/design-system/atoms/paper/adapters/default/default.variants.ts b/design-system/atoms/paper/adapters/default/default.variants.ts index 036cd0df1..4e41a7910 100644 --- a/design-system/atoms/paper/adapters/default/default.variants.ts +++ b/design-system/atoms/paper/adapters/default/default.variants.ts @@ -18,10 +18,11 @@ export const PaperDefaultVariants = tv({ action: { base: "bg-container-action" }, inverse: { base: "bg-container-inverse" }, transparent: { base: "bg-container-transparent" }, + "interactions-black": { base: "bg-interactions-black-default" }, }, border: { none: "border-0", - "container-stroke-separator": "border-container-stroke-separator border", + "container-stroke-separator": "border border-container-stroke-separator", }, }, defaultVariants: { diff --git a/design-system/atoms/paper/paper.types.ts b/design-system/atoms/paper/paper.types.ts index 642d98417..ce98dc387 100644 --- a/design-system/atoms/paper/paper.types.ts +++ b/design-system/atoms/paper/paper.types.ts @@ -2,7 +2,7 @@ import { ComponentPropsWithoutRef, ElementType, PropsWithChildren } from "react" interface Variants { size: "s" | "m" | "l"; - container: "1" | "2" | "3" | "4" | "action" | "inverse" | "transparent"; + container: "1" | "2" | "3" | "4" | "action" | "inverse" | "transparent" | "interactions-black"; border: "none" | "container-stroke-separator"; } diff --git a/design-system/atoms/skeleton/adapters/next-ui/next-ui.variants.ts b/design-system/atoms/skeleton/adapters/next-ui/next-ui.variants.ts index f492a71d5..30bb9b970 100644 --- a/design-system/atoms/skeleton/adapters/next-ui/next-ui.variants.ts +++ b/design-system/atoms/skeleton/adapters/next-ui/next-ui.variants.ts @@ -20,6 +20,7 @@ export const SkeletonNextUiVariants = tv({ "4": { base: "bg-container-4" }, action: { base: "bg-container-action" }, inverse: { base: "bg-container-inverse" }, + "interactions-black": { base: "bg-interactions-black-default" }, }, }, defaultVariants: { diff --git a/design-system/atoms/skeleton/skeleton.types.ts b/design-system/atoms/skeleton/skeleton.types.ts index c2bf2326e..5ce26aede 100644 --- a/design-system/atoms/skeleton/skeleton.types.ts +++ b/design-system/atoms/skeleton/skeleton.types.ts @@ -2,7 +2,7 @@ import { BaseHTMLAttributes } from "react"; interface Variants { shape: "square" | "circle"; - container: "1" | "2" | "3" | "4" | "action" | "inverse"; + container: "1" | "2" | "3" | "4" | "action" | "inverse" | "interactions-black"; } interface ClassNames { diff --git a/design-system/atoms/tag/adapters/default/default.variants.ts b/design-system/atoms/tag/adapters/default/default.variants.ts index 29cfcd9b6..ac02e76e7 100644 --- a/design-system/atoms/tag/adapters/default/default.variants.ts +++ b/design-system/atoms/tag/adapters/default/default.variants.ts @@ -2,8 +2,8 @@ import { tv } from "tailwind-variants"; export const TagDefaultVariants = tv({ slots: { - base: "border-1 border-container-stroke-separator bg-container-4 group block transition-colors data-[clickable=true]:cursor-pointer", - content: "text-text-1 flex flex-row items-center justify-center", + base: "group block border-1 border-container-stroke-separator bg-container-4 transition-colors data-[clickable=true]:cursor-pointer", + content: "flex flex-row items-center justify-center text-text-1", label: "text-inherit", deletableIcon: "text-inherit", dropDownIcon: "text-inherit", diff --git a/design-system/molecules/cards/card-budget/adapters/default/default.adapter.tsx b/design-system/molecules/cards/card-budget/adapters/default/default.adapter.tsx new file mode 100644 index 000000000..b795c9114 --- /dev/null +++ b/design-system/molecules/cards/card-budget/adapters/default/default.adapter.tsx @@ -0,0 +1,52 @@ +import { ElementType } from "react"; + +import { bootstrap } from "@/core/bootstrap"; + +import { Tag } from "@/design-system/atoms/tag"; +import { CardTemplate } from "@/design-system/molecules/cards/card-template"; + +import { cn } from "@/shared/helpers/cn"; + +import { CardBudgetPort } from "../../card-budget.types"; +import { CardBudgetDefaultVariants } from "./default.variants"; + +export function CardBudgetDefaultAdapter({ + as, + classNames, + htmlProps, + amount: { value, currency, usdEquivalent }, + budgetPercentage, +}: CardBudgetPort) { + const slots = CardBudgetDefaultVariants(); + + const { format: formatMoney, getUSDCurrency } = bootstrap.getMoneyKernelPort(); + + return ( + + {budgetPercentage}% + + ) + } + /> + ); +} diff --git a/design-system/molecules/cards/card-budget/adapters/default/default.variants.ts b/design-system/molecules/cards/card-budget/adapters/default/default.variants.ts new file mode 100644 index 000000000..4d675a577 --- /dev/null +++ b/design-system/molecules/cards/card-budget/adapters/default/default.variants.ts @@ -0,0 +1,9 @@ +import { tv } from "tailwind-variants"; + +export const CardBudgetDefaultVariants = tv({ + slots: { + base: "", + }, + variants: {}, + defaultVariants: {}, +}); diff --git a/design-system/molecules/cards/card-budget/card-budget.loading.tsx b/design-system/molecules/cards/card-budget/card-budget.loading.tsx new file mode 100644 index 000000000..f242f47bb --- /dev/null +++ b/design-system/molecules/cards/card-budget/card-budget.loading.tsx @@ -0,0 +1,5 @@ +import { CardTemplateLoading } from "@/design-system/molecules/cards/card-template"; + +export function CardBudgetLoading() { + return ; +} diff --git a/design-system/molecules/cards/card-budget/card-budget.stories.tsx b/design-system/molecules/cards/card-budget/card-budget.stories.tsx new file mode 100644 index 000000000..096bf2c97 --- /dev/null +++ b/design-system/molecules/cards/card-budget/card-budget.stories.tsx @@ -0,0 +1,66 @@ +import { Meta, StoryObj } from "@storybook/react"; + +import { CardBudgetDefaultAdapter } from "./adapters/default/default.adapter"; +import { CardBudgetLoading } from "./card-budget.loading"; +import { CardBudgetPort } from "./card-budget.types"; + +type Story = StoryObj; + +const defaultProps: CardBudgetPort<"div"> = { + amount: { + value: 100000, + currency: { + id: "", + code: "USDC", + name: "USD Coin", + logoUrl: undefined, + decimals: 2, + }, + usdEquivalent: 100000, + }, + budgetPercentage: 75, +}; + +const meta: Meta = { + component: CardBudgetDefaultAdapter, + title: "Molecules/Cards/CardBudget", + tags: ["autodocs"], + parameters: { + backgrounds: { + default: "black", + values: [{ name: "black", value: "#05051E" }], + }, + }, +}; + +export const Default: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const Skeleton: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: () => { + return ( +
+ +
+ ); + }, +}; + +export default meta; diff --git a/design-system/molecules/cards/card-budget/card-budget.types.ts b/design-system/molecules/cards/card-budget/card-budget.types.ts new file mode 100644 index 000000000..b9b7ea38e --- /dev/null +++ b/design-system/molecules/cards/card-budget/card-budget.types.ts @@ -0,0 +1,29 @@ +import { ComponentPropsWithoutRef, ElementType } from "react"; + +interface Variants {} + +interface ClassNames { + base: string; +} + +interface Currency { + id: string; + code: string; + name: string; + logoUrl?: string; + decimals: number; +} + +interface Amount { + value: number; + currency: Currency; + usdEquivalent: number; +} + +export interface CardBudgetPort extends Partial { + as?: C; + htmlProps?: ComponentPropsWithoutRef; + classNames?: Partial; + amount: Amount; + budgetPercentage?: number; +} diff --git a/design-system/molecules/cards/card-budget/index.ts b/design-system/molecules/cards/card-budget/index.ts new file mode 100644 index 000000000..2f289613f --- /dev/null +++ b/design-system/molecules/cards/card-budget/index.ts @@ -0,0 +1,3 @@ +export * from "./variants/card-budget-default"; +export * from "./card-budget.types"; +export * from "./card-budget.loading"; diff --git a/design-system/molecules/cards/card-budget/variants/card-budget-default.tsx b/design-system/molecules/cards/card-budget/variants/card-budget-default.tsx new file mode 100644 index 000000000..a4c4f1df7 --- /dev/null +++ b/design-system/molecules/cards/card-budget/variants/card-budget-default.tsx @@ -0,0 +1,10 @@ +import { ElementType } from "react"; + +import { withComponentAdapter } from "@/design-system/helpers/with-component-adapter"; + +import { CardBudgetDefaultAdapter } from "../adapters/default/default.adapter"; +import { CardBudgetPort } from "../card-budget.types"; + +export function CardBudget(props: CardBudgetPort) { + return withComponentAdapter>(CardBudgetDefaultAdapter)(props); +} diff --git a/design-system/molecules/cards/card-project/adapters/default/default.adapter.tsx b/design-system/molecules/cards/card-project/adapters/default/default.adapter.tsx new file mode 100644 index 000000000..44cc67431 --- /dev/null +++ b/design-system/molecules/cards/card-project/adapters/default/default.adapter.tsx @@ -0,0 +1,50 @@ +import { ElementType } from "react"; + +import { Button } from "@/design-system/atoms/button/variants/button-default"; + +import { cn } from "@/shared/helpers/cn"; + +import { CardTemplate } from "../../../card-template"; +import { CardProjectPort } from "../../card-project.types"; +import { CardProjectDefaultVariants } from "./default.variants"; + +export function CardProjectDefaultAdapter({ + as, + classNames, + htmlProps, + title, + description, + logoUrl, + languages = [], + categories = [], + buttonProps, +}: CardProjectPort) { + const slots = CardProjectDefaultVariants(); + + const formattedLanguages = languages.map(language => ({ + ...language, + icon: { name: "ri-code-line" }, + })); + + const formattedCategories = categories.map(category => ({ + ...category, + icon: { name: "ri-price-tag-3-line" }, + })); + + return ( + } + /> + ); +} diff --git a/design-system/molecules/cards/card-project/adapters/default/default.variants.ts b/design-system/molecules/cards/card-project/adapters/default/default.variants.ts new file mode 100644 index 000000000..a5c993c45 --- /dev/null +++ b/design-system/molecules/cards/card-project/adapters/default/default.variants.ts @@ -0,0 +1,9 @@ +import { tv } from "tailwind-variants"; + +export const CardProjectDefaultVariants = tv({ + slots: { + base: "", + }, + variants: {}, + defaultVariants: {}, +}); diff --git a/design-system/molecules/cards/card-project/card-project.loading.tsx b/design-system/molecules/cards/card-project/card-project.loading.tsx new file mode 100644 index 000000000..51c0275db --- /dev/null +++ b/design-system/molecules/cards/card-project/card-project.loading.tsx @@ -0,0 +1,5 @@ +import { CardTemplateLoading } from "@/design-system/molecules/cards/card-template"; + +export function CardProjectLoading() { + return ; +} diff --git a/design-system/molecules/cards/card-project/card-project.stories.tsx b/design-system/molecules/cards/card-project/card-project.stories.tsx new file mode 100644 index 000000000..0c793ce91 --- /dev/null +++ b/design-system/molecules/cards/card-project/card-project.stories.tsx @@ -0,0 +1,62 @@ +import { Meta, StoryObj } from "@storybook/react"; + +import { CardProjectDefaultAdapter } from "./adapters/default/default.adapter"; +import { CardProjectLoading } from "./card-project.loading"; +import { CardProjectPort } from "./card-project.types"; + +type Story = StoryObj; + +const defaultProps: CardProjectPort<"div"> = { + title: "Project Title", + description: "This is a brief description of the project.", + logoUrl: undefined, + languages: [{ children: "Cairo" }], + categories: [{ children: "Defi" }], + buttonProps: { + children: "See project", + }, +}; + +const meta: Meta = { + component: CardProjectDefaultAdapter, + title: "Molecules/Cards/CardProject", + tags: ["autodocs"], + parameters: { + backgrounds: { + default: "black", + values: [{ name: "black", value: "#05051E" }], + }, + }, +}; + +export const Default: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const Skeleton: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: () => { + return ( +
+ +
+ ); + }, +}; + +export default meta; diff --git a/design-system/molecules/cards/card-project/card-project.types.ts b/design-system/molecules/cards/card-project/card-project.types.ts new file mode 100644 index 000000000..3e415b596 --- /dev/null +++ b/design-system/molecules/cards/card-project/card-project.types.ts @@ -0,0 +1,22 @@ +import { ComponentPropsWithoutRef, ElementType } from "react"; + +import { ButtonPort } from "@/design-system/atoms/button/button.types"; +import { TagPort } from "@/design-system/atoms/tag"; + +interface Variants {} + +interface ClassNames { + base: string; +} + +export interface CardProjectPort extends Partial { + as?: C; + htmlProps?: ComponentPropsWithoutRef; + classNames?: Partial; + title: string; + description?: string; + logoUrl?: string; + languages?: Array>; + categories?: Array>; + buttonProps?: ButtonPort<"a">; +} diff --git a/design-system/molecules/cards/card-project/index.ts b/design-system/molecules/cards/card-project/index.ts new file mode 100644 index 000000000..6ef590599 --- /dev/null +++ b/design-system/molecules/cards/card-project/index.ts @@ -0,0 +1,3 @@ +export * from "./variants/card-project-default"; +export * from "./card-project.types"; +export * from "./card-project.loading"; diff --git a/design-system/molecules/cards/card-project/variants/card-project-default.tsx b/design-system/molecules/cards/card-project/variants/card-project-default.tsx new file mode 100644 index 000000000..d0cb7a1c0 --- /dev/null +++ b/design-system/molecules/cards/card-project/variants/card-project-default.tsx @@ -0,0 +1,10 @@ +import { ElementType } from "react"; + +import { withComponentAdapter } from "@/design-system/helpers/with-component-adapter"; + +import { CardProjectDefaultAdapter } from "../adapters/default/default.adapter"; +import { CardProjectPort } from "../card-project.types"; + +export function CardProject(props: CardProjectPort) { + return withComponentAdapter>(CardProjectDefaultAdapter)(props); +} diff --git a/design-system/molecules/cards/card-template/adapters/default/default.adapter.tsx b/design-system/molecules/cards/card-template/adapters/default/default.adapter.tsx new file mode 100644 index 000000000..7f51f6cef --- /dev/null +++ b/design-system/molecules/cards/card-template/adapters/default/default.adapter.tsx @@ -0,0 +1,62 @@ +import { ElementType } from "react"; + +import { Avatar } from "@/design-system/atoms/avatar"; +import { Icon } from "@/design-system/atoms/icon"; +import { Paper } from "@/design-system/atoms/paper"; +import { Tag } from "@/design-system/atoms/tag"; +import { Typo } from "@/design-system/atoms/typo"; + +import { cn } from "@/shared/helpers/cn"; + +import { CardTemplatePort } from "../../card-template.types"; +import { CardTemplateDefaultVariants } from "./default.variants"; + +export function CardTemplateDefaultAdapter({ + as, + classNames, + htmlProps, + avatarProps, + titleProps, + iconProps, + descriptionProps, + tags, + endContent, +}: CardTemplatePort) { + const slots = CardTemplateDefaultVariants(); + + return ( + + + +
+
+
+
+ {titleProps && } + + {iconProps && } +
+ + {descriptionProps && } +
+ + {endContent} +
+ + {tags?.length && ( +
+ {tags.map((t, key) => ( + + ))} +
+ )} +
+
+ ); +} diff --git a/design-system/molecules/cards/card-template/adapters/default/default.variants.ts b/design-system/molecules/cards/card-template/adapters/default/default.variants.ts new file mode 100644 index 000000000..2d10e62dd --- /dev/null +++ b/design-system/molecules/cards/card-template/adapters/default/default.variants.ts @@ -0,0 +1,7 @@ +import { tv } from "tailwind-variants"; + +export const CardTemplateDefaultVariants = tv({ + slots: { + base: "flex gap-2", + }, +}); diff --git a/design-system/molecules/cards/card-template/card-template.loading.tsx b/design-system/molecules/cards/card-template/card-template.loading.tsx new file mode 100644 index 000000000..32eee6765 --- /dev/null +++ b/design-system/molecules/cards/card-template/card-template.loading.tsx @@ -0,0 +1,13 @@ +import { Skeleton } from "@/design-system/atoms/skeleton"; + +export function CardTemplateLoading() { + return ( + + ); +} diff --git a/design-system/molecules/cards/card-template/card-template.stories.tsx b/design-system/molecules/cards/card-template/card-template.stories.tsx new file mode 100644 index 000000000..403f8c403 --- /dev/null +++ b/design-system/molecules/cards/card-template/card-template.stories.tsx @@ -0,0 +1,145 @@ +import { Meta, StoryObj } from "@storybook/react"; + +import { Button } from "@/design-system/atoms/button/variants/button-default"; + +import { CardTemplateDefaultAdapter } from "./adapters/default/default.adapter"; +import { CardTemplateLoading } from "./card-template.loading"; +import { CardTemplatePort } from "./card-template.types"; + +type Story = StoryObj; + +const defaultProps: CardTemplatePort<"div"> = { + avatarProps: { + src: undefined, + }, + titleProps: { + children: "Card Title", + }, + descriptionProps: { + children: "This is a description of the card.", + }, +}; + +const defaultPropsWithTags: CardTemplatePort<"div"> = { + ...defaultProps, + tags: [ + { children: "Tag 1" }, + { + children: "Tag 2", + icon: { + name: "ri-time-line", + }, + }, + { + children: "Tag 3", + icon: { + name: "ri-time-line", + }, + }, + ], +}; + +const meta: Meta = { + component: CardTemplateDefaultAdapter, + title: "Molecules/Cards/CardTemplate", + tags: ["autodocs"], + parameters: { + backgrounds: { + default: "black", + values: [{ name: "black", value: "#05051E" }], + }, + }, +}; + +export const Default: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const WithIcon: Story = { + parameters: { + docs: { + source: { + code: "", + }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const WithEndContent: Story = { + parameters: { + docs: { + source: { code: "Click me} />" }, + }, + }, + render: args => { + return ( +
+ + Click me + + } + /> +
+ ); + }, +}; + +export const WithCustomTags: Story = { + parameters: { + docs: { + source: { + code: "", + }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const Skeleton: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: () => { + return ( +
+ +
+ ); + }, +}; + +export default meta; diff --git a/design-system/molecules/cards/card-template/card-template.types.ts b/design-system/molecules/cards/card-template/card-template.types.ts new file mode 100644 index 000000000..0553f6c10 --- /dev/null +++ b/design-system/molecules/cards/card-template/card-template.types.ts @@ -0,0 +1,24 @@ +import { ComponentPropsWithoutRef, ElementType, ReactNode } from "react"; + +import { AvatarPort } from "@/design-system/atoms/avatar"; +import { IconPort } from "@/design-system/atoms/icon"; +import { TagPort } from "@/design-system/atoms/tag"; +import { TypoPort } from "@/design-system/atoms/typo"; + +interface Variants {} + +interface ClassNames { + base: string; +} + +export interface CardTemplatePort extends Partial { + as?: C; + htmlProps?: ComponentPropsWithoutRef; + classNames?: Partial; + avatarProps?: AvatarPort; + titleProps?: TypoPort<"p">; + iconProps?: IconPort; + descriptionProps?: TypoPort<"p">; + tags?: Array>; + endContent?: ReactNode; +} diff --git a/design-system/molecules/cards/card-template/index.ts b/design-system/molecules/cards/card-template/index.ts new file mode 100644 index 000000000..636903e58 --- /dev/null +++ b/design-system/molecules/cards/card-template/index.ts @@ -0,0 +1,3 @@ +export * from "./variants/card-template-default"; +export * from "./card-template.types"; +export * from "./card-template.loading"; diff --git a/design-system/molecules/cards/card-template/variants/card-template-default.tsx b/design-system/molecules/cards/card-template/variants/card-template-default.tsx new file mode 100644 index 000000000..90a4e6851 --- /dev/null +++ b/design-system/molecules/cards/card-template/variants/card-template-default.tsx @@ -0,0 +1,10 @@ +import { ElementType } from "react"; + +import { withComponentAdapter } from "@/design-system/helpers/with-component-adapter"; + +import { CardTemplateDefaultAdapter } from "../adapters/default/default.adapter"; +import { CardTemplatePort } from "../card-template.types"; + +export function CardTemplate(props: CardTemplatePort) { + return withComponentAdapter>(CardTemplateDefaultAdapter)(props); +} diff --git a/design-system/molecules/cards/card-transaction/adapters/default/default.adapter.tsx b/design-system/molecules/cards/card-transaction/adapters/default/default.adapter.tsx new file mode 100644 index 000000000..84e5e8340 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/adapters/default/default.adapter.tsx @@ -0,0 +1,61 @@ +import { ElementType } from "react"; + +import { bootstrap } from "@/core/bootstrap"; + +import { Button } from "@/design-system/atoms/button/variants/button-default"; +import { CardTemplate } from "@/design-system/molecules/cards/card-template"; + +import { cn } from "@/shared/helpers/cn"; + +import { CardTransactionPort } from "../../card-transaction.types"; +import { getComponentsVariants } from "../../card-transaction.utils"; +import { CardTransactionDefaultVariants } from "./default.variants"; + +export function CardTransactionDefaultAdapter({ + as, + classNames, + htmlProps, + status, + date, + amount: { value, currency, usdEquivalent }, + buttonProps, +}: CardTransactionPort) { + const slots = CardTransactionDefaultVariants(); + const { icon, statusName } = getComponentsVariants(status); + + const { format: formatDate } = bootstrap.getDateKernelPort(); + const { format: formatMoney, getUSDCurrency } = bootstrap.getMoneyKernelPort(); + + return ( + } + /> + ); +} diff --git a/design-system/molecules/cards/card-transaction/adapters/default/default.variants.ts b/design-system/molecules/cards/card-transaction/adapters/default/default.variants.ts new file mode 100644 index 000000000..56c6b7f6c --- /dev/null +++ b/design-system/molecules/cards/card-transaction/adapters/default/default.variants.ts @@ -0,0 +1,7 @@ +import { tv } from "tailwind-variants"; + +export const CardTransactionDefaultVariants = tv({ + slots: { + base: "", + }, +}); diff --git a/design-system/molecules/cards/card-transaction/card-transaction.loading.tsx b/design-system/molecules/cards/card-transaction/card-transaction.loading.tsx new file mode 100644 index 000000000..0db489181 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/card-transaction.loading.tsx @@ -0,0 +1,5 @@ +import { CardTemplateLoading } from "@/design-system/molecules/cards/card-template"; + +export function CardTransactionLoading() { + return ; +} diff --git a/design-system/molecules/cards/card-transaction/card-transaction.stories.tsx b/design-system/molecules/cards/card-transaction/card-transaction.stories.tsx new file mode 100644 index 000000000..486e03528 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/card-transaction.stories.tsx @@ -0,0 +1,124 @@ +import { Meta, StoryObj } from "@storybook/react"; + +import { Avatar } from "@/design-system/atoms/avatar"; + +import { CardTransactionDefaultAdapter } from "./adapters/default/default.adapter"; +import { CardTransactionLoading } from "./card-transaction.loading"; +import { CardTransactionPort } from "./card-transaction.types"; + +type Story = StoryObj; + +const defaultProps: CardTransactionPort<"div"> = { + status: "granted", + date: new Date(), + amount: { + value: 120000, + currency: { + id: "", + code: "USDC", + name: "USD Coin", + logoUrl: undefined, + decimals: 2, + }, + usdEquivalent: 120000, + }, + buttonProps: { + startContent: , + children: "Project", + }, +}; + +const meta: Meta = { + component: CardTransactionDefaultAdapter, + title: "Molecules/Cards/CardTransaction", + tags: ["autodocs"], + parameters: { + backgrounds: { + default: "black", + values: [{ name: "black", value: "#05051E" }], + }, + }, +}; + +export const Default: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const GrantedStatus: Story = { + parameters: { + docs: { + source: { + code: "", + }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const AllocatedStatus: Story = { + parameters: { + docs: { + source: { + code: "", + }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const ReturnedStatus: Story = { + parameters: { + docs: { + source: { + code: "", + }, + }, + }, + render: args => { + return ( +
+ +
+ ); + }, +}; + +export const Skeleton: Story = { + parameters: { + docs: { + source: { code: "" }, + }, + }, + render: () => { + return ( +
+ +
+ ); + }, +}; + +export default meta; diff --git a/design-system/molecules/cards/card-transaction/card-transaction.types.ts b/design-system/molecules/cards/card-transaction/card-transaction.types.ts new file mode 100644 index 000000000..beae4a5a6 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/card-transaction.types.ts @@ -0,0 +1,35 @@ +import { ComponentPropsWithoutRef, ElementType } from "react"; + +import { ButtonPort } from "@/design-system/atoms/button/button.types"; + +interface Variants {} + +interface ClassNames { + base: string; +} + +export type CardTransactionStatus = "granted" | "allocated" | "returned"; + +interface Currency { + id: string; + code: string; + name: string; + logoUrl?: string; + decimals: number; +} + +interface Amount { + value: number; + currency: Currency; + usdEquivalent: number; +} + +export interface CardTransactionPort extends Partial { + as?: C; + htmlProps?: ComponentPropsWithoutRef; + classNames?: Partial; + status: CardTransactionStatus; + date: Date; + amount: Amount; + buttonProps?: ButtonPort<"a" | "button">; +} diff --git a/design-system/molecules/cards/card-transaction/card-transaction.utils.tsx b/design-system/molecules/cards/card-transaction/card-transaction.utils.tsx new file mode 100644 index 000000000..51a80828c --- /dev/null +++ b/design-system/molecules/cards/card-transaction/card-transaction.utils.tsx @@ -0,0 +1,38 @@ +import { ReactNode } from "react"; + +import { IconPort } from "@/design-system/atoms/icon"; + +import { Translate } from "@/shared/translation/components/translate/translate"; + +import { CardTransactionStatus } from "./card-transaction.types"; + +export function getComponentsVariants(status: CardTransactionStatus): { + icon: IconPort; + statusName: ReactNode; +} { + const map: Record = { + granted: { + icon: { + name: "ri-arrow-right-line", + className: "text-label-blue", + }, + statusName: , + }, + allocated: { + icon: { + name: "ri-arrow-down-line", + className: "text-label-green", + }, + statusName: , + }, + returned: { + icon: { + name: "ri-arrow-turn-forward-line", + className: "text-label-red", + }, + statusName: , + }, + }; + + return map[status]; +} diff --git a/design-system/molecules/cards/card-transaction/index.ts b/design-system/molecules/cards/card-transaction/index.ts new file mode 100644 index 000000000..b3df2d4a5 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/index.ts @@ -0,0 +1,3 @@ +export * from "./variants/card-transaction-default"; +export * from "./card-transaction.types"; +export * from "./card-transaction.loading"; diff --git a/design-system/molecules/cards/card-transaction/translations/card-transaction.en.json b/design-system/molecules/cards/card-transaction/translations/card-transaction.en.json new file mode 100644 index 000000000..678a84b22 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/translations/card-transaction.en.json @@ -0,0 +1,7 @@ +{ + "status": { + "granted": "Granted", + "allocated": "Allocated", + "returned": "Returned" + } +} diff --git a/design-system/molecules/cards/card-transaction/translations/card-transaction.translate.ts b/design-system/molecules/cards/card-transaction/translations/card-transaction.translate.ts new file mode 100644 index 000000000..77900aa10 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/translations/card-transaction.translate.ts @@ -0,0 +1,5 @@ +import enCardTransaction from "./card-transaction.en.json"; + +export const enCardTransactionTranslation = { + cardTransaction: enCardTransaction, +}; diff --git a/design-system/molecules/cards/card-transaction/variants/card-transaction-default.tsx b/design-system/molecules/cards/card-transaction/variants/card-transaction-default.tsx new file mode 100644 index 000000000..f1739ee06 --- /dev/null +++ b/design-system/molecules/cards/card-transaction/variants/card-transaction-default.tsx @@ -0,0 +1,10 @@ +import { ElementType } from "react"; + +import { withComponentAdapter } from "@/design-system/helpers/with-component-adapter"; + +import { CardTransactionDefaultAdapter } from "../adapters/default/default.adapter"; +import { CardTransactionPort } from "../card-transaction.types"; + +export function CardTransaction(props: CardTransactionPort) { + return withComponentAdapter>(CardTransactionDefaultAdapter)(props); +} diff --git a/package-lock.json b/package-lock.json index a7650a12c..f540a872c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3781,17 +3781,6 @@ "node": ">=10.0.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", @@ -3802,74 +3791,6 @@ "react": ">=16.8.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", @@ -3887,899 +3808,171 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/@fillout/react": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@fillout/react/-/react-1.1.2.tgz", + "integrity": "sha512-XyzLY74Zhxxwym3A9770Tb3NINwaaWyWwvaw1lMJ5sA/P6hgsdzvefUOqohzR3+KVyspvBOR4BoR0nBMPFd/Vw==", + "license": "MIT" }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz", + "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", + "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz", + "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-skeleton-parser": "1.8.2", + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz", + "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, "engines": { - "node": ">=12" + "node": ">=10.10.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fillout/react": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@fillout/react/-/react-1.1.2.tgz", - "integrity": "sha512-XyzLY74Zhxxwym3A9770Tb3NINwaaWyWwvaw1lMJ5sA/P6hgsdzvefUOqohzR3+KVyspvBOR4BoR0nBMPFd/Vw==", - "license": "MIT" - }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz", - "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==", - "license": "MIT", - "dependencies": { - "@formatjs/intl-localematcher": "0.5.4", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/fast-memoize": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", - "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.7.8", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz", - "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.0.0", - "@formatjs/icu-skeleton-parser": "1.8.2", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz", - "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==", - "license": "MIT", - "dependencies": { - "@formatjs/ecma402-abstract": "2.0.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", - "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "engines": { "node": ">=12.22" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", - "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", - "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=11", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", - "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", - "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", - "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.31", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", - "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", - "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", - "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", - "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.1.1" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@img/sharp-win32-ia32": { + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", - "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", "cpu": [ - "ia32" + "arm64" ], "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "Apache-2.0", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { + "glibc": ">=2.26", "node": "^18.17.0 || ^20.3.0 || >=21.0.0", "npm": ">=9.6.5", "pnpm": ">=7.1.0", @@ -4787,23 +3980,26 @@ }, "funding": { "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" } }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", - "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "macos": ">=11", "npm": ">=9.6.5", "pnpm": ">=7.1.0", "yarn": ">=3.2.0" @@ -5273,126 +4469,6 @@ "node": ">= 10" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz", - "integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz", - "integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz", - "integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.5.tgz", - "integrity": "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.5.tgz", - "integrity": "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz", - "integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz", - "integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz", - "integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@nextui-org/accordion": { "version": "2.0.38", "resolved": "https://registry.npmjs.org/@nextui-org/accordion/-/accordion-2.0.38.tgz", @@ -8850,34 +7926,6 @@ "node": ">=10" } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", - "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", - "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.20.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", @@ -8892,188 +7940,6 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", - "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", - "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", - "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", - "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", - "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", - "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", - "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", - "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", - "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", - "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", - "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", - "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", - "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@rushstack/eslint-patch": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", @@ -10956,7 +9822,6 @@ "version": "8.20.1", "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.1.tgz", "integrity": "sha512-PJK+07qbengObe5l7c8vCdtefXm8cyR4i078acWrHbdm8JKw1ES7YpmOtVt9ALUVEEFAHscdVpGRhRgikgFMbQ==", - "license": "MIT", "dependencies": { "@tanstack/table-core": "8.20.1" }, @@ -10976,7 +9841,6 @@ "version": "8.20.1", "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.1.tgz", "integrity": "sha512-5Ly5TIRHnWH7vSDell9B/OVyV380qqIJVg7H7R7jU4fPEmOD4smqAX7VRflpYI09srWR8aj5OLD2Ccs1pI5mTg==", - "license": "MIT", "engines": { "node": ">=12" }, diff --git a/shared/translation/en.ts b/shared/translation/en.ts index f45498498..0f56e17bb 100644 --- a/shared/translation/en.ts +++ b/shared/translation/en.ts @@ -1,6 +1,7 @@ import { enProgramsTranslation } from "@/app/programs/_translations/programs.translate"; import { enTestTranslation } from "@/app/test/_translations/test.translate"; +import { enCardTransactionTranslation } from "@/design-system/molecules/cards/card-transaction/translations/card-transaction.translate"; import { enTableFilterTranslation } from "@/design-system/molecules/table-filter/translations/table-filter.translate"; import { enFeedbackDrawerTranslate } from "@/shared/features/feedback-drawer/_translations/feedback-drawer.translate"; @@ -14,4 +15,7 @@ export const en = { ...enFeedbackDrawerTranslate, ...enProgramsTranslation, ...enTableFilterTranslation, + cards: { + ...enCardTransactionTranslation, + }, };