From b465d6a8a5f9e4427647810ebcee94c0e3b5f949 Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Wed, 12 Mar 2025 12:08:07 -0600 Subject: [PATCH 001/116] Enhance color palette and improve documentation visualization (#34) * feat: Expand color palette with additional color variants and refined color values * refactor: Improve color palette visualization in Storybook documentation * chore: Prepare minor version bump for color palette update --- .changeset/orange-kiwis-occur.md | 5 + .../src/tailwind/index.ts | 95 +++++++++++++------ .../documentation/components/Color.tsx | 12 +-- 3 files changed, 75 insertions(+), 37 deletions(-) create mode 100644 .changeset/orange-kiwis-occur.md diff --git a/.changeset/orange-kiwis-occur.md b/.changeset/orange-kiwis-occur.md new file mode 100644 index 00000000..82fd0d4e --- /dev/null +++ b/.changeset/orange-kiwis-occur.md @@ -0,0 +1,5 @@ +--- +"@worldcoin/mini-apps-ui-kit-react": minor +--- + +Update color palette diff --git a/packages/mini-apps-ui-kit-react/src/tailwind/index.ts b/packages/mini-apps-ui-kit-react/src/tailwind/index.ts index 8a423a7c..f446554c 100644 --- a/packages/mini-apps-ui-kit-react/src/tailwind/index.ts +++ b/packages/mini-apps-ui-kit-react/src/tailwind/index.ts @@ -1,48 +1,64 @@ import plugin from "tailwindcss/plugin"; export const gray = { - "--gray-900": "#191c20", - "--gray-700": "#3c424b", - "--gray-500": "#657080", - "--gray-400": "#9ba3ae", - "--gray-300": "#d6d9dd", - "--gray-200": "#ebecef", - "--gray-100": "#f3f4f5", - "--gray-50": "#f9fafb", - "--gray-25": "#fbfbfc", - "--gray-0": "#ffffff", + "--gray-0": "#FFFFFF", + "--gray-50": "#FAFAFA", + "--gray-100": "#F5F5F5", + "--gray-200": "#E9EAEB", + "--gray-300": "#D5D7DA", + "--gray-350": "#B1B8C2", + "--gray-400": "#A4A7AE", + "--gray-500": "#717680", + "--gray-700": "#414651", + "--gray-900": "#181818", }; export const success = { - "--success-900": "#18964f", - "--success-800": "#00ab11", - "--success-700": "#00c313", - "--success-300": "#d6f6de", - "--success-100": "#f5fdf7", + "--success-100": "#E6F9EC", + "--success-200": "#CCF3D9", + "--success-300": "#99E8B3", + "--success-400": "#66DC8D", + "--success-500": "#33D167", + "--success-600": "#00C230", + "--success-700": "#009B26", + "--success-800": "#00741D", + "--success-900": "#004D13", }; export const error = { - "--error-900": "#b71b58", - "--error-800": "#dc0025", - "--error-700": "#ff5a76", - "--error-300": "#ffd7df", - "--error-100": "#fff5f7", + "--error-100": "#FEE9E7", + "--error-200": "#FDD3CF", + "--error-300": "#FBA79F", + "--error-400": "#F97B6F", + "--error-500": "#F7503F", + "--error-600": "#F2280D", + "--error-700": "#C2200A", + "--error-800": "#911808", + "--error-900": "#611005", }; export const warning = { - "--warning-900": "#b47500", - "--warning-800": "#dc8f00", - "--warning-700": "#ffb11b", - "--warning-300": "#ffeece", - "--warning-100": "#fff9ef", + "--warning-100": "#FFF6E6", + "--warning-200": "#FFEDCC", + "--warning-300": "#FFDB99", + "--warning-400": "#FFC966", + "--warning-500": "#FFB833", + "--warning-600": "#FFAE00", + "--warning-700": "#CC8B00", + "--warning-800": "#996800", + "--warning-900": "#664600", }; export const info = { - "--info-900": "#054cb7", - "--info-800": "#0025dc", - "--info-700": "#5a9cff", - "--info-300": "#cee2ff", - "--info-100": "#f3f8ff", + "--info-100": "#E6F0FF", + "--info-200": "#CCE0FF", + "--info-300": "#99C2FF", + "--info-400": "#66A3FF", + "--info-500": "#3385FF", + "--info-600": "#005CFF", + "--info-700": "#004ACC", + "--info-800": "#003799", + "--info-900": "#002466", }; const uiKitTailwindPlugin = plugin( @@ -72,42 +88,59 @@ const uiKitTailwindPlugin = plugin( current: "currentColor", gray: { 900: "var(--gray-900)", + 800: "var(--gray-800)", 700: "var(--gray-700)", 500: "var(--gray-500)", 400: "var(--gray-400)", + 350: "var(--gray-350)", 300: "var(--gray-300)", 200: "var(--gray-200)", 100: "var(--gray-100)", 50: "var(--gray-50)", - 25: "var(--gray-25)", 0: "var(--gray-0)", }, success: { 900: "var(--success-900)", 800: "var(--success-800)", 700: "var(--success-700)", + 600: "var(--success-600)", + 500: "var(--success-500)", + 400: "var(--success-400)", 300: "var(--success-300)", + 200: "var(--success-200)", 100: "var(--success-100)", }, error: { 900: "var(--error-900)", 800: "var(--error-800)", 700: "var(--error-700)", + 600: "var(--error-600)", + 500: "var(--error-500)", + 400: "var(--error-400)", 300: "var(--error-300)", + 200: "var(--error-200)", 100: "var(--error-100)", }, warning: { 900: "var(--warning-900)", 800: "var(--warning-800)", 700: "var(--warning-700)", + 600: "var(--warning-600)", + 500: "var(--warning-500)", + 400: "var(--warning-400)", 300: "var(--warning-300)", + 200: "var(--warning-200)", 100: "var(--warning-100)", }, info: { 900: "var(--info-900)", 800: "var(--info-800)", 700: "var(--info-700)", + 600: "var(--info-600)", + 500: "var(--info-500)", + 400: "var(--info-400)", 300: "var(--info-300)", + 200: "var(--info-200)", 100: "var(--info-100)", }, }, diff --git a/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx b/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx index b6512d8d..3e2d0b2a 100644 --- a/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx +++ b/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx @@ -7,12 +7,12 @@ interface ColorProps { export const Color = ({ name, color }: ColorProps) => { const nameWithoutPrefix = name.split("-").pop() || ""; return ( -
-
-
+
+
+
{nameWithoutPrefix} {color.toUpperCase()}
From 5691b351b2673adea4e0f95631760fcddd6e0b2b Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Thu, 13 Mar 2025 13:09:13 -0600 Subject: [PATCH 002/116] fix: Adjust Switch component height for better alignment (#38) --- .../mini-apps-ui-kit-react/src/components/Switch/Switch.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mini-apps-ui-kit-react/src/components/Switch/Switch.tsx b/packages/mini-apps-ui-kit-react/src/components/Switch/Switch.tsx index fe6c9408..4f120170 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Switch/Switch.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Switch/Switch.tsx @@ -30,7 +30,7 @@ export const Switch = forwardRef( checked={checked} onCheckedChange={onCheckedChange} disabled={disabled} - className="relative inline-flex h-auto w-10 items-center rounded-full border-2 transition-all data-[state=checked]:border-gray-900 data-[state=checked]:bg-gray-900 data-[state=unchecked]:border-gray-300 data-[state=unchecked]:bg-gray-300 disabled:cursor-not-allowed disabled:opacity-20" + className="relative inline-flex h-6 w-10 items-center rounded-full border-2 transition-all data-[state=checked]:border-gray-900 data-[state=checked]:bg-gray-900 data-[state=unchecked]:border-gray-300 data-[state=unchecked]:bg-gray-300 disabled:cursor-not-allowed disabled:opacity-20" {...rest} > From 2ed1acd53d122835b3c7b4703a6f6468879fdc4f Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Thu, 13 Mar 2025 16:50:06 -0600 Subject: [PATCH 003/116] Update Button (#35) * feat: Add label variant to Typography component * refactor: Update Button component styling and variants * feat: Extract Spinner component from Button and add package export * feat: Enhance Button component with state management and add success/fail icons * refactor: Simplify Button component icon handling and update state management in stories * refactor: Update Button component to use new icon structure and improve state management * refactor: Update Button component props to omit className and improve icon documentation --- packages/mini-apps-ui-kit-react/package.json | 6 +- .../src/components/Button/Button.tsx | 103 ++++++------------ .../src/components/Button/Spinner.tsx | 36 ------ .../src/components/Button/icons/Fail.tsx | 69 ++++++++++++ .../src/components/Button/icons/Success.tsx | 69 ++++++++++++ .../src/components/Button/icons/index.ts | 2 + .../src/components/Spinner/Spinner.tsx | 34 ++++++ .../src/components/Spinner/index.ts | 1 + .../src/components/Typography/Typography.tsx | 19 +++- packages/mini-apps-ui-kit-react/src/index.ts | 1 + .../stories/Button.stories.tsx | 18 +-- 11 files changed, 236 insertions(+), 122 deletions(-) delete mode 100644 packages/mini-apps-ui-kit-react/src/components/Button/Spinner.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Button/icons/Fail.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Button/icons/Success.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts create mode 100644 packages/mini-apps-ui-kit-react/src/components/Spinner/Spinner.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Spinner/index.ts diff --git a/packages/mini-apps-ui-kit-react/package.json b/packages/mini-apps-ui-kit-react/package.json index 06dcee93..a0f1e8f0 100644 --- a/packages/mini-apps-ui-kit-react/package.json +++ b/packages/mini-apps-ui-kit-react/package.json @@ -93,6 +93,10 @@ "types": "./dist/components/Typography/index.d.ts", "default": "./dist/components/Typography/index.js" }, + "./Spinner": { + "types": "./dist/components/Spinner/index.d.ts", + "default": "./dist/components/Spinner/index.js" + }, "./tailwind": { "types": "./dist/tailwind/index.d.ts", "default": "./dist/tailwind/index.js" @@ -173,4 +177,4 @@ "description": "React components UI Kit library for Mini Apps", "author": "", "license": "ISC" -} +} \ No newline at end of file diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx b/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx index 72656a3d..7ffd0a30 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx @@ -1,38 +1,31 @@ "use client"; +import { cn } from "@/lib/utils"; import { Slot } from "@radix-ui/react-slot"; import { type VariantProps, cva } from "class-variance-authority"; import { ButtonHTMLAttributes, forwardRef } from "react"; -import Spinner from "./Spinner"; +import { Spinner } from "../Spinner"; +import { Typography } from "../Typography"; +import { Fail, Success } from "./icons"; const buttonVariants = cva( - "flex items-center justify-center gap-1 font-display font-semibold leading-[1.2] tracking-normal transition-colors", + "flex items-center justify-center rounded-full gap-1 font-display leading-[1.2] tracking-normal transition-colors", { variants: { variant: { primary: - "bg-gray-900 text-gray-0 hover:bg-gray-700 active:bg-gray-500 disabled:bg-gray-100 disabled:text-gray-300", + "bg-gray-900 text-gray-0 hover:bg-gray-700 active:bg-gray-700 disabled:bg-gray-100 disabled:text-gray-300", secondary: - "bg-gray-200 text-gray-900 hover:bg-gray-300 active:bg-gray-400 disabled:bg-gray-100 disabled:text-gray-300", + "bg-transparent text-gray-900 border border-gray-200 hover:bg-gray-50 active:bg-gray-50 disabled:text-gray-300 disabled:border-gray-100", tertiary: - "border border-gray-200 bg-transparent text-gray-500 hover:bg-gray-100 active:bg-gray-200 disabled:text-gray-300", - ghost: - "bg-transparent text-gray-500 hover:bg-gray-100 active:bg-gray-200 disabled:text-gray-300", + "bg-gray-100 text-gray-900 hover:bg-gray-200 active:bg-gray-200 disabled:text-gray-300 disabled:bg-gray-50", }, size: { - sm: "h-10 min-w-10 px-2 text-sm", - md: "h-12 min-w-12 px-3 text-base", - lg: "h-14 min-w-14 px-4 text-base", + sm: "h-10 min-w-10 px-2", + lg: "h-14 min-w-14 px-4", }, - radius: { - none: "rounded-none", - sm: "rounded", - md: "rounded-xl", - lg: "rounded-2xl", - full: "rounded-full", - }, - isLoading: { + stateful: { true: "border-none bg-transparent fill-transparent text-transparent hover:bg-transparent active:bg-transparent disabled:bg-transparent disabled:text-transparent", false: "", }, @@ -44,49 +37,29 @@ const buttonVariants = cva( defaultVariants: { variant: "primary", size: "lg", - radius: "md", fullWidth: false, }, }, ); -const iconContainerStyles = { - sm: { - width: "1rem", - height: "1rem", - }, - md: { - width: "1.25rem", - height: "1.25rem", - }, - lg: { - width: "1.5rem", - height: "1.5rem", - }, -}; export interface ButtonProps - extends ButtonHTMLAttributes, + extends Omit, "className">, VariantProps { /** * The variant style to use * @default "primary" */ - variant?: "primary" | "secondary" | "tertiary" | "ghost"; + variant?: "primary" | "secondary" | "tertiary"; /** * The size of the button * @default "md" */ - size?: "sm" | "md" | "lg"; - /** - * The border radius of the button - * @default "md" - */ - radius?: "none" | "sm" | "md" | "lg" | "full"; + size?: "sm" | "lg"; /** - * Whether the button is in a loading state - * @default false + * The state of the button + * @default undefined */ - isLoading?: boolean; + state?: "pending" | "success" | "failed"; /** * Optional icon to display in the button. * The component passed to this prop must accept a `style` prop. @@ -106,47 +79,33 @@ export interface ButtonProps } export const Button = forwardRef( - ( - { - variant, - size = "lg", - radius, - className, - isLoading, - children, - icon, - fullWidth, - asChild, - ...props - }, - ref, - ) => { + ({ variant, size = "lg", children, icon, fullWidth, asChild, state, ...props }, ref) => { const Comp = asChild ? Slot : "button"; + + const stateful = !!state; + return ( - {icon && ( - - {icon} - + {icon && {icon}} + + {children && ( + + {children} + )} - {children && {children}} - {isLoading && } + {state === "pending" && } + {state === "success" && } + {state === "failed" && } ); }, diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/Spinner.tsx b/packages/mini-apps-ui-kit-react/src/components/Button/Spinner.tsx deleted file mode 100644 index 43d58320..00000000 --- a/packages/mini-apps-ui-kit-react/src/components/Button/Spinner.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { cn } from "../../lib/utils"; - -interface SpinnerProps { - /** - * Additional CSS classes to apply to the spinner - */ - className?: string; -} - -const Spinner = ({ className }: SpinnerProps) => { - return ( - - - - - ); -}; - -export default Spinner; diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/icons/Fail.tsx b/packages/mini-apps-ui-kit-react/src/components/Button/icons/Fail.tsx new file mode 100644 index 00000000..620e5946 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Button/icons/Fail.tsx @@ -0,0 +1,69 @@ +import { cn } from "../../../lib/utils"; + +interface FailProps { + /** + * Additional CSS classes to apply to the icon + */ + className?: string; +} + +export const Fail = ({ className }: FailProps) => { + return ( + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/icons/Success.tsx b/packages/mini-apps-ui-kit-react/src/components/Button/icons/Success.tsx new file mode 100644 index 00000000..c2df2d32 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Button/icons/Success.tsx @@ -0,0 +1,69 @@ +import { cn } from "../../../lib/utils"; + +interface SuccessProps { + /** + * Additional CSS classes to apply to the icon + */ + className?: string; +} + +export const Success = ({ className }: SuccessProps) => { + return ( + + + + + + + + + + + + + + + + + ); +}; diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts b/packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts new file mode 100644 index 00000000..a1198e39 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts @@ -0,0 +1,2 @@ +export * from "./Fail"; +export * from "./Success"; diff --git a/packages/mini-apps-ui-kit-react/src/components/Spinner/Spinner.tsx b/packages/mini-apps-ui-kit-react/src/components/Spinner/Spinner.tsx new file mode 100644 index 00000000..3ac096f3 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Spinner/Spinner.tsx @@ -0,0 +1,34 @@ +import { cn } from "../../lib/utils"; + +interface SpinnerProps { + /** + * Additional CSS classes to apply to the spinner + */ + className?: string; +} + +export const Spinner = ({ className }: SpinnerProps) => { + return ( + + + + + ); +}; diff --git a/packages/mini-apps-ui-kit-react/src/components/Spinner/index.ts b/packages/mini-apps-ui-kit-react/src/components/Spinner/index.ts new file mode 100644 index 00000000..2f83b969 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Spinner/index.ts @@ -0,0 +1 @@ +export * from "./Spinner"; diff --git a/packages/mini-apps-ui-kit-react/src/components/Typography/Typography.tsx b/packages/mini-apps-ui-kit-react/src/components/Typography/Typography.tsx index 613fd3c6..d49fa423 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Typography/Typography.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Typography/Typography.tsx @@ -38,10 +38,16 @@ export interface TypographyHeadingProps extends TypographyProps { level?: 1 | 2 | 3; } +export interface TypographyLabelProps extends TypographyProps { + variant?: "label"; + level?: 1 | 2; +} + export type TypographyComponentProps = | TypographyNumberProps | TypographySubtitleBodyMonoProps - | TypographyHeadingProps; + | TypographyHeadingProps + | TypographyLabelProps; export const typographyVariants = cva("", { variants: { @@ -51,6 +57,7 @@ export const typographyVariants = cva("", { subtitle: "font-sans font-medium leading-narrow tracking-normal", body: "font-sans font-normal leading-compact tracking-normal", mono: "font-mono font-normal tracking-normal", + label: "font-sans font-semibold leading-narrow tracking-normal", }, level: { 1: "", @@ -167,6 +174,16 @@ export const typographyVariants = cva("", { level: 4, className: "text-[0.5rem] leading-compact", }, + { + variant: "label", + level: 1, + className: "text-[17px]", + }, + { + variant: "label", + level: 2, + className: "text-[15px]", + }, ], defaultVariants: { variant: "body", diff --git a/packages/mini-apps-ui-kit-react/src/index.ts b/packages/mini-apps-ui-kit-react/src/index.ts index fb8f39f5..786aeb71 100644 --- a/packages/mini-apps-ui-kit-react/src/index.ts +++ b/packages/mini-apps-ui-kit-react/src/index.ts @@ -13,6 +13,7 @@ export * from "./components/RadioGroup"; export * from "./components/Select"; export * from "./components/SearchField"; export * from "./components/PhoneField"; +export * from "./components/Spinner"; export * from "./components/Switch"; export * from "./components/Token"; export * from "./components/Typography"; diff --git a/packages/mini-apps-ui-kit-react/stories/Button.stories.tsx b/packages/mini-apps-ui-kit-react/stories/Button.stories.tsx index 3ce1a55f..4f36da53 100644 --- a/packages/mini-apps-ui-kit-react/stories/Button.stories.tsx +++ b/packages/mini-apps-ui-kit-react/stories/Button.stories.tsx @@ -15,9 +15,6 @@ const meta: Meta = { size: { control: "radio", }, - radius: { - control: "radio", - }, fullWidth: { control: "boolean", defaultValue: false, @@ -26,9 +23,9 @@ const meta: Meta = { control: "boolean", defaultValue: false, }, - isLoading: { - control: "boolean", - defaultValue: false, + state: { + control: "radio", + options: [undefined, "pending", "success", "failed"], }, icon: iconControl, }, @@ -49,8 +46,7 @@ export const Text: Story = { args: { children: "Button", variant: "primary", - size: "md", - radius: "md", + size: "lg", fullWidth: false, }, play: async ({ canvasElement }) => { @@ -66,8 +62,7 @@ export const TextWithIcon: Story = { icon: , children: "Button", variant: "primary", - size: "md", - radius: "md", + size: "lg", fullWidth: false, }, play: async ({ canvasElement }) => { @@ -84,8 +79,7 @@ export const Icon: Story = { args: { icon: , variant: "primary", - size: "md", - radius: "md", + size: "lg", }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); From c26a71857307e6f345e5d7f1f89a12e5fc05a82e Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Fri, 14 Mar 2025 09:29:42 -0600 Subject: [PATCH 004/116] Set TKW Lausanne as the main font in the UI Kit (#39) * feat: Add new font files for TWKLausanne family in various weights and styles * refactor: Update Typography component to include new variants and improve type definitions * feat: Introduce TypographyLabelProps and TypographyDisplayProps for additional typography variants * refactor: Consolidate Typography props and update variant options in Storybook * chore: Adjust font sizes and styles in Tailwind configuration for better consistency * chore: Remove unused Google Fonts links and add TWK Lausanne font-face definitions in preview.css * feat: Enhance typography documentation and update styles * Updated font weights for TWK Lausanne in preview.css for consistency. * Added Typography.mdx for comprehensive typography documentation in Storybook. * Introduced new typography variants and adjusted levels in Typography.stories.tsx. * Created TypographyListItem component for better layout in documentation. * Improved Color component styling for better readability. * docs: Update font configuration in README.md to emphasize TWK Lausanne usage and licensing requirements * refactor: Update typography content and font settings * Changed default font to TWK Lausanne in theme.ts for consistency. * Modified text content in Typography.stories.tsx to reflect new branding messages. * Removed global font-family setting from preview.css to avoid conflicts. --- .changeset/forty-spoons-stare.md | 5 + .../.storybook/preview-head.html | 3 - .../.storybook/preview.css | 44 ++- .../.storybook/theme.ts | 3 +- packages/mini-apps-ui-kit-react/README.md | 25 +- .../public/fonts/TWKLausanne-350.woff | Bin 0 -> 43048 bytes .../public/fonts/TWKLausanne-350Italic.woff | Bin 0 -> 45636 bytes .../public/fonts/TWKLausanne-500.woff | Bin 0 -> 43052 bytes .../public/fonts/TWKLausanne-500Italic.woff | Bin 0 -> 45444 bytes .../public/fonts/TWKLausanne-600.woff | Bin 0 -> 43196 bytes .../public/fonts/TWKLausanne-600Italic.woff | Bin 0 -> 45552 bytes .../src/components/Typography/Typography.tsx | 114 ++++---- .../src/tailwind/index.ts | 19 +- .../stories/Typography.mdx | 102 +++++++ .../stories/Typography.stories.tsx | 257 +++++++++++++++--- .../documentation/components/Color.tsx | 4 +- .../components/TypographyListItem.tsx | 17 ++ .../mini-apps-ui-kit-react/stories/mdx.d.ts | 4 + 18 files changed, 481 insertions(+), 116 deletions(-) create mode 100644 .changeset/forty-spoons-stare.md create mode 100644 packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-350.woff create mode 100644 packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-350Italic.woff create mode 100644 packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-500.woff create mode 100644 packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-500Italic.woff create mode 100644 packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-600.woff create mode 100644 packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-600Italic.woff create mode 100644 packages/mini-apps-ui-kit-react/stories/Typography.mdx create mode 100644 packages/mini-apps-ui-kit-react/stories/documentation/components/TypographyListItem.tsx create mode 100644 packages/mini-apps-ui-kit-react/stories/mdx.d.ts diff --git a/.changeset/forty-spoons-stare.md b/.changeset/forty-spoons-stare.md new file mode 100644 index 00000000..b62e9915 --- /dev/null +++ b/.changeset/forty-spoons-stare.md @@ -0,0 +1,5 @@ +--- +"@worldcoin/mini-apps-ui-kit-react": patch +--- + +Update styles for Typography diff --git a/packages/mini-apps-ui-kit-react/.storybook/preview-head.html b/packages/mini-apps-ui-kit-react/.storybook/preview-head.html index b4f867c2..139597f9 100644 --- a/packages/mini-apps-ui-kit-react/.storybook/preview-head.html +++ b/packages/mini-apps-ui-kit-react/.storybook/preview-head.html @@ -1,5 +1,2 @@ - - - diff --git a/packages/mini-apps-ui-kit-react/.storybook/preview.css b/packages/mini-apps-ui-kit-react/.storybook/preview.css index ae4f762b..556220ff 100644 --- a/packages/mini-apps-ui-kit-react/.storybook/preview.css +++ b/packages/mini-apps-ui-kit-react/.storybook/preview.css @@ -1,3 +1,45 @@ +@font-face { + font-family: "TWK Lausanne"; + src: url("../public/fonts/TWKLausanne-350.woff") format("woff"); + font-weight: 400; + font-style: normal; +} + +@font-face { + font-family: "TWK Lausanne"; + src: url("../public/fonts/TWKLausanne-350Italic.woff") format("woff"); + font-weight: 400; + font-style: italic; +} + +@font-face { + font-family: "TWK Lausanne"; + src: url("../public/fonts/TWKLausanne-500.woff") format("woff"); + font-weight: 500; + font-style: normal; +} + +@font-face { + font-family: "TWK Lausanne"; + src: url("../public/fonts/TWKLausanne-500Italic.woff") format("woff"); + font-weight: 500; + font-style: italic; +} + +@font-face { + font-family: "TWK Lausanne"; + src: url("../public/fonts/TWKLausanne-600.woff") format("woff"); + font-weight: 600; + font-style: normal; +} + +@font-face { + font-family: "TWK Lausanne"; + src: url("../public/fonts/TWKLausanne-600Italic.woff") format("woff"); + font-weight: 600; + font-style: italic; +} + h1, h2, h3, @@ -6,7 +48,7 @@ h5, h6, strong, b { - font-weight: 500 !important; + font-weight: 600 !important; } .sbdocs-content a, diff --git a/packages/mini-apps-ui-kit-react/.storybook/theme.ts b/packages/mini-apps-ui-kit-react/.storybook/theme.ts index 73c2230e..70038a42 100644 --- a/packages/mini-apps-ui-kit-react/.storybook/theme.ts +++ b/packages/mini-apps-ui-kit-react/.storybook/theme.ts @@ -2,8 +2,7 @@ import { create } from "@storybook/theming/create"; export default create({ base: "light", - fontBase: "'Rubik', sans-serif", - fontCode: "'DM Mono', monospace", + fontBase: "'TWK Lausanne', sans-serif", brandTitle: "Mini App UI Kit", brandUrl: "https://docs.world.org", diff --git a/packages/mini-apps-ui-kit-react/README.md b/packages/mini-apps-ui-kit-react/README.md index 6152959a..8715ee72 100644 --- a/packages/mini-apps-ui-kit-react/README.md +++ b/packages/mini-apps-ui-kit-react/README.md @@ -59,29 +59,20 @@ export default tseslint.config({ ## Font Configuration -The library uses three fonts: +The library uses the following font **[TWK Lausanne](https://weltkern.com/typefaces/lausanne)** as the sans-serif font for all text `(--font-sans)`. -- **[Rubik](https://fonts.google.com/specimen/Rubik)** as the sans-serif font for body text and subtitles `(--font-sans)` -- **[Sora](https://fonts.google.com/specimen/Sora)** as the display font for headings and numbers `(--font-display)` -- **[DM Mono](https://fonts.google.com/specimen/DM+Mono)** as the monospace font `(--font-mono)` +> **⚠️ License Notice**: TWK Lausanne is a commercial font that requires a license. Make sure you have obtained the appropriate license from [Weltkern](https://weltkern.com/typefaces/lausanne) before using it in your project. -Embed the following code in the `` of your html to load the fonts: - -```html - - - -``` - -Or use the following code to load the fonts via CSS: +By default, the library sets `--font-sans` to **TWK Lausanne**, but you can override this CSS variable to use any other font of your choice: ```css -@import url("https://fonts.googleapis.com/css2?family=DM+Mono:ital@0;1&family=Rubik:ital,wght@0,300..900;1,300..900&family=Sora:wght@100..800&display=swap"); +:root { + --font-sans: 'Your Font Name', sans-serif; +} ``` +You must import the font in your application before using it. The library does not include the font files - you need to handle the font loading yourself according to your license agreement. + ## Importing Styles To use the UI Kit components with their proper styling, you need to import the styles in your application. Add the following import statement to your application's entry point (e.g., `app/layout.tsx` for Next.js or `main.tsx` for Vite): diff --git a/packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-350.woff b/packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-350.woff new file mode 100644 index 0000000000000000000000000000000000000000..457e41310ed3daec5722918fe6dd06af580034e9 GIT binary patch literal 43048 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 X)ubl~00000-0&&m00000-22bRsqnc& literal 0 HcmV?d00001 diff --git a/packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-350Italic.woff b/packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-350Italic.woff new file mode 100644 index 0000000000000000000000000000000000000000..46e4ed700bd9a31716331670ec47a467bce120a8 GIT binary patch literal 45636 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 + + +## Headings + +
+ + + + + + + + + + + + +
+ + + +## Subtitles + +
+ + + + + + + + + + + + +
+ + +## Labels + +
+ + + + + + +
+ + +## Body + +
+ + + + + + + + + + + + +
diff --git a/packages/mini-apps-ui-kit-react/stories/Typography.stories.tsx b/packages/mini-apps-ui-kit-react/stories/Typography.stories.tsx index 0bb7050d..569a3802 100644 --- a/packages/mini-apps-ui-kit-react/stories/Typography.stories.tsx +++ b/packages/mini-apps-ui-kit-react/stories/Typography.stories.tsx @@ -1,10 +1,22 @@ import type { Meta, StoryObj } from "@storybook/react"; -import { Typography } from "../src/components/Typography"; +import { + Typography, + TypographyCommonProps, + TypographyDisplayProps, + TypographyLabelProps, + TypographyNumberProps, +} from "../src/components/Typography"; +import TypographyDocs from "./Typography.mdx"; const meta: Meta = { title: "components/Typography", component: Typography, + parameters: { + docs: { + page: TypographyDocs, + }, + }, argTypes: { as: { table: { @@ -13,7 +25,7 @@ const meta: Meta = { }, variant: { control: "radio", - options: ["number", "heading", "subtitle", "body", "mono"], + options: ["display", "heading", "subtitle", "body", "label"], table: { readonly: true, }, @@ -23,39 +35,41 @@ const meta: Meta = { export default meta; -type Story = StoryObj; - -export const Default: Story = { +// Main stories for sidebar +export const Display: StoryObj = { args: { - children: "Typography", + variant: "display", + level: 1, + children: "The real human network", }, argTypes: { level: { control: "radio", - options: [1, 2, 3, 4], + options: [1], }, }, }; -export const Number: Story = { +export const Heading: StoryObj = { args: { - variant: "number", - level: 6, - children: "Number Display", + variant: "heading", + level: 1, + children: "Identity, finance and community for every human.", }, argTypes: { level: { control: "radio", - options: [1, 2, 3, 4, 5, 6], + options: [1, 2, 3, 4], }, }, }; -export const Heading: Story = { +export const Subtitle: StoryObj = { args: { - variant: "heading", - level: 4, - children: "Heading", + variant: "subtitle", + level: 1, + children: + "In the age of AI, World is a network of real humans built on an anonymous proof of human and a globally inclusive financial network.", }, argTypes: { level: { @@ -65,26 +79,28 @@ export const Heading: Story = { }, }; -export const Subtitle: Story = { +export const Label: StoryObj = { args: { - variant: "subtitle", - level: 2, - children: "Subtitle", + variant: "label", + level: 1, + children: "Unique humans", }, argTypes: { level: { control: "radio", - options: [1, 2, 3, 4], + options: [1, 2], }, }, }; -export const Body: Story = { +export const Body: StoryObj = { args: { variant: "body", - level: 2, - children: "Body", + level: 1, + children: + "World ID allows you to anonymously and securely verify that you are a real and unique human (and not a bot) for easy online verification like signing into social apps and ensuring fair online activities like voting or buying concert tickets.", }, + tags: ["!autodocs"], argTypes: { level: { control: "radio", @@ -92,16 +108,193 @@ export const Body: Story = { }, }, }; -export const Mono: Story = { + +// Display levels +export const Display1: StoryObj = { args: { - variant: "mono", + variant: "display", level: 1, - children: "Mono", + children: "Welcome to Mini Apps", }, - argTypes: { - level: { - control: "radio", - options: [1, 2, 3, 4], - }, + tags: ["!dev"], +}; + +// Heading levels +export const Heading1: StoryObj = { + args: { + variant: "heading", + level: 1, + children: "Build Beautiful User Interfaces", + }, + tags: ["!dev"], +}; + +export const Heading2: StoryObj = { + args: { + variant: "heading", + level: 2, + children: "Craft Engaging Experiences", + }, + tags: ["!dev"], +}; + +export const Heading3: StoryObj = { + args: { + variant: "heading", + level: 3, + children: "Design with Confidence", + }, + tags: ["!dev"], +}; + +export const Heading4: StoryObj = { + args: { + variant: "heading", + level: 4, + children: "Perfect Every Detail", + }, + tags: ["!dev"], +}; + +// Subtitle levels +export const Subtitle1: StoryObj = { + args: { + variant: "subtitle", + level: 1, + children: "Modern Components for React Applications", + }, + tags: ["!dev"], +}; + +export const Subtitle2: StoryObj = { + args: { + variant: "subtitle", + level: 2, + children: "Flexible and Easy to Customize", + }, + tags: ["!dev"], +}; + +export const Subtitle3: StoryObj = { + args: { + variant: "subtitle", + level: 3, + children: "Built with Developer Experience in Mind", + }, + tags: ["!dev"], +}; + +export const Subtitle4: StoryObj = { + args: { + variant: "subtitle", + level: 4, + children: "Optimized for Performance", + }, + tags: ["!dev"], +}; + +// Label levels +export const Label1: StoryObj = { + args: { + variant: "label", + level: 1, + children: "Important Information", + }, + tags: ["!dev"], +}; + +export const Label2: StoryObj = { + args: { + variant: "label", + level: 2, + children: "Additional Details", + }, + tags: ["!dev"], +}; + +// Body levels +export const Body1: StoryObj = { + args: { + variant: "body", + level: 1, + children: + "Create stunning web applications with our comprehensive UI kit. Start building faster and smarter today.", + }, + tags: ["!dev"], +}; + +export const Body2: StoryObj = { + args: { + variant: "body", + level: 2, + children: + "Our components are designed to work seamlessly together, providing a consistent and polished look across your entire application.", + }, + tags: ["!dev"], +}; + +export const Body3: StoryObj = { + args: { + variant: "body", + level: 3, + children: + "Focus on what matters most - building great features. Let our UI kit handle the visual details.", + }, + tags: ["!dev"], +}; + +export const Body4: StoryObj = { + args: { + variant: "body", + level: 4, + children: + "Simple, intuitive, and powerful. Everything you need to create professional-looking interfaces.", + }, + tags: ["!dev"], +}; + +// Number levels (hidden from sidebar) +export const Number1: StoryObj = { + args: { + variant: "number", + level: 1, + children: "2,500+ Components", + }, + tags: ["!dev"], +}; + +export const Number2: StoryObj = { + args: { + variant: "number", + level: 2, + children: "99.9% Uptime", + }, + tags: ["!dev"], +}; + +export const Number3: StoryObj = { + args: { + variant: "number", + level: 3, + children: "4.9/5 Rating", + }, + tags: ["!dev"], +}; + +export const Number4: StoryObj = { + args: { + variant: "number", + level: 4, + children: "50K+ Downloads", + }, + tags: ["!dev"], +}; + +export const Number5: StoryObj = { + args: { + variant: "number", + level: 5, + children: "24/7 Support", }, + tags: ["!dev"], }; diff --git a/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx b/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx index 3e2d0b2a..3d68eccd 100644 --- a/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx +++ b/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx @@ -13,8 +13,8 @@ export const Color = ({ name, color }: ColorProps) => { >
- {nameWithoutPrefix} - {color.toUpperCase()} + {nameWithoutPrefix} + {color.toUpperCase()}
); diff --git a/packages/mini-apps-ui-kit-react/stories/documentation/components/TypographyListItem.tsx b/packages/mini-apps-ui-kit-react/stories/documentation/components/TypographyListItem.tsx new file mode 100644 index 00000000..36ec8dde --- /dev/null +++ b/packages/mini-apps-ui-kit-react/stories/documentation/components/TypographyListItem.tsx @@ -0,0 +1,17 @@ +interface TypographyListItemProps { + children: React.ReactNode; +} + +export const TypographyListItem = ({ children }: TypographyListItemProps) => { + return ( +
+ {children} +
+ ); +}; diff --git a/packages/mini-apps-ui-kit-react/stories/mdx.d.ts b/packages/mini-apps-ui-kit-react/stories/mdx.d.ts new file mode 100644 index 00000000..98255047 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/stories/mdx.d.ts @@ -0,0 +1,4 @@ +declare module "*.mdx" { + const component: any; + export default component; +} From a7c076d87af2076aa1abde28f390db0946e9f0d2 Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Fri, 14 Mar 2025 09:49:17 -0600 Subject: [PATCH 005/116] Add Toast component (#40) * refactor: Update PasteButtonProps to omit onPaste attribute for improved type safety (#36) * feat: Add Toast component using Sonner for notifications * Implement Toast component with customizable options * Update package.json to include Sonner dependency * Add Toast stories for Storybook documentation * Create index file for Toast component export * feat: Integrate Toast component with Radix UI and enhance UI kit * Add Toast and Toaster components for notifications using Radix UI * Update layout to include Toaster in the Next.js example * Modify Button component to use new toast functionality * Include tailwindcss-animate for improved animations * Update package.json to include new dependencies * Enhance Toast stories for better documentation in Storybook * feat: Introduce enhanced Toast component with customizable title and duration * Add new Toast component to the UI kit for notifications * Update Next.js example to utilize the new useToast hook * Refactor Toast and Toaster components for improved functionality * Enhance Storybook documentation with updated Toast stories * Modify Toast component to support success and error variants with customizable titles * chore: Remove Sonner dependency from mini-apps-ui-kit-react * Delete Sonner from package.json and pnpm-lock.yaml * Refactor use-toast.tsx to use React hooks directly instead of importing the entire React module --- .changeset/weak-dryers-behave.md | 5 + examples/nextjs/app/layout.tsx | 2 + examples/nextjs/app/page.tsx | 19 +- packages/mini-apps-ui-kit-react/package.json | 6 + .../src/components/Button/Button.tsx | 3 +- .../src/components/Button/icons/index.ts | 2 - .../{Button/icons => Icons}/Fail.tsx | 2 +- .../{Button/icons => Icons}/Success.tsx | 2 +- .../components/PasteButton/PasteButton.tsx | 2 +- .../components/SearchField/SearchField.tsx | 2 + .../src/components/Toast/Toast.tsx | 68 +++++++ .../src/components/Toast/Toaster.tsx | 17 ++ .../src/components/Toast/index.ts | 3 + .../src/components/Toast/use-toast.tsx | 190 ++++++++++++++++++ packages/mini-apps-ui-kit-react/src/index.ts | 1 + .../stories/Toast.stories.tsx | 83 ++++++++ .../mini-apps-ui-kit-react/tailwind.config.ts | 2 +- pnpm-lock.yaml | 186 ++++++++++++++++- 18 files changed, 583 insertions(+), 12 deletions(-) create mode 100644 .changeset/weak-dryers-behave.md delete mode 100644 packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts rename packages/mini-apps-ui-kit-react/src/components/{Button/icons => Icons}/Fail.tsx (97%) rename packages/mini-apps-ui-kit-react/src/components/{Button/icons => Icons}/Success.tsx (97%) create mode 100644 packages/mini-apps-ui-kit-react/src/components/Toast/Toast.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Toast/Toaster.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Toast/index.ts create mode 100644 packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx create mode 100644 packages/mini-apps-ui-kit-react/stories/Toast.stories.tsx diff --git a/.changeset/weak-dryers-behave.md b/.changeset/weak-dryers-behave.md new file mode 100644 index 00000000..3cd006e8 --- /dev/null +++ b/.changeset/weak-dryers-behave.md @@ -0,0 +1,5 @@ +--- +"@worldcoin/mini-apps-ui-kit-react": minor +--- + +Add Toast component diff --git a/examples/nextjs/app/layout.tsx b/examples/nextjs/app/layout.tsx index 2629dae3..473e7b4b 100644 --- a/examples/nextjs/app/layout.tsx +++ b/examples/nextjs/app/layout.tsx @@ -1,3 +1,4 @@ +import { Toaster } from "@worldcoin/mini-apps-ui-kit-react"; import "@worldcoin/mini-apps-ui-kit-react/styles.css"; import type { Metadata } from "next"; import { DM_Mono, Rubik, Sora } from "next/font/google"; @@ -36,6 +37,7 @@ export default function RootLayout({ return ( {children} + ); } diff --git a/examples/nextjs/app/page.tsx b/examples/nextjs/app/page.tsx index ce750004..b1ea2854 100644 --- a/examples/nextjs/app/page.tsx +++ b/examples/nextjs/app/page.tsx @@ -24,9 +24,11 @@ import { Switch, Token, Typography, + useToast, } from "@worldcoin/mini-apps-ui-kit-react"; export default function Home() { + const { toast } = useToast(); return (
@@ -41,7 +43,7 @@ export default function Home() {
- +
@@ -119,18 +121,29 @@ export default function Home() { - + Drawer title Drawer content
- Drawer Content + Drawer Content List Item Example
+ + {/* Toast Example */} +
); } diff --git a/packages/mini-apps-ui-kit-react/package.json b/packages/mini-apps-ui-kit-react/package.json index a0f1e8f0..2793882c 100644 --- a/packages/mini-apps-ui-kit-react/package.json +++ b/packages/mini-apps-ui-kit-react/package.json @@ -97,6 +97,10 @@ "types": "./dist/components/Spinner/index.d.ts", "default": "./dist/components/Spinner/index.js" }, + "./Toast": { + "types": "./dist/components/Toast/index.d.ts", + "default": "./dist/components/Toast/index.js" + }, "./tailwind": { "types": "./dist/tailwind/index.d.ts", "default": "./dist/tailwind/index.js" @@ -153,6 +157,7 @@ "rollup-preserve-directives": "^1.1.3", "storybook": "^8.4.7", "tailwindcss": "^3.4.15", + "tailwindcss-animate": "^1.0.7", "typescript": "~5.6.2", "typescript-eslint": "^8.11.0", "vite": ">=5.4.12", @@ -165,6 +170,7 @@ "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-switch": "^1.1.1", + "@radix-ui/react-toast": "^1.2.6", "@uidotdev/usehooks": "^2.4.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx b/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx index 7ffd0a30..ad7ef5ff 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Button/Button.tsx @@ -5,9 +5,10 @@ import { Slot } from "@radix-ui/react-slot"; import { type VariantProps, cva } from "class-variance-authority"; import { ButtonHTMLAttributes, forwardRef } from "react"; +import { Fail } from "../Icons/Fail"; +import { Success } from "../Icons/Success"; import { Spinner } from "../Spinner"; import { Typography } from "../Typography"; -import { Fail, Success } from "./icons"; const buttonVariants = cva( "flex items-center justify-center rounded-full gap-1 font-display leading-[1.2] tracking-normal transition-colors", diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts b/packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts deleted file mode 100644 index a1198e39..00000000 --- a/packages/mini-apps-ui-kit-react/src/components/Button/icons/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./Fail"; -export * from "./Success"; diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/icons/Fail.tsx b/packages/mini-apps-ui-kit-react/src/components/Icons/Fail.tsx similarity index 97% rename from packages/mini-apps-ui-kit-react/src/components/Button/icons/Fail.tsx rename to packages/mini-apps-ui-kit-react/src/components/Icons/Fail.tsx index 620e5946..adbfc772 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Button/icons/Fail.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Icons/Fail.tsx @@ -1,4 +1,4 @@ -import { cn } from "../../../lib/utils"; +import { cn } from "../../lib/utils"; interface FailProps { /** diff --git a/packages/mini-apps-ui-kit-react/src/components/Button/icons/Success.tsx b/packages/mini-apps-ui-kit-react/src/components/Icons/Success.tsx similarity index 97% rename from packages/mini-apps-ui-kit-react/src/components/Button/icons/Success.tsx rename to packages/mini-apps-ui-kit-react/src/components/Icons/Success.tsx index c2df2d32..13b95313 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Button/icons/Success.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Icons/Success.tsx @@ -1,4 +1,4 @@ -import { cn } from "../../../lib/utils"; +import { cn } from "../../lib/utils"; interface SuccessProps { /** diff --git a/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx b/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx index 72af44f2..1a64e731 100644 --- a/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx @@ -4,7 +4,7 @@ import * as React from "react"; import { cn } from "../../lib/utils"; import { Typography } from "../Typography"; -interface PasteButtonProps extends ButtonHTMLAttributes { +interface PasteButtonProps extends Omit, "onPaste"> { /** * Reference to an input element that will receive the pasted text */ diff --git a/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx b/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx index 593ddd1e..bcad8cdf 100644 --- a/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx @@ -1,3 +1,5 @@ +"use client"; + import { createChangeEvent } from "@/lib/utils"; import { forwardRef, useImperativeHandle, useRef, useState } from "react"; diff --git a/packages/mini-apps-ui-kit-react/src/components/Toast/Toast.tsx b/packages/mini-apps-ui-kit-react/src/components/Toast/Toast.tsx new file mode 100644 index 00000000..f0a18238 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Toast/Toast.tsx @@ -0,0 +1,68 @@ +"use client"; + +import { cn } from "@/lib/utils"; +import * as ToastPrimitives from "@radix-ui/react-toast"; +import * as React from "react"; + +import { Fail } from "../Icons/Fail"; +import { Success } from "../Icons/Success"; +import { Typography } from "../Typography"; + +const ToastProvider = ToastPrimitives.Provider; + +const ToastViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +ToastViewport.displayName = ToastPrimitives.Viewport.displayName; + +const Toast = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + variant: "success" | "error"; + } +>(({ className, title, variant, ...props }, ref) => { + return ( + +
+ {variant === "success" ? : } +
+ + {title} + +
+
+
+ ); +}); +Toast.displayName = ToastPrimitives.Root.displayName; + +type ToastProps = React.ComponentPropsWithoutRef; + +export { type ToastProps, ToastProvider, ToastViewport, Toast }; diff --git a/packages/mini-apps-ui-kit-react/src/components/Toast/Toaster.tsx b/packages/mini-apps-ui-kit-react/src/components/Toast/Toaster.tsx new file mode 100644 index 00000000..4d1aa2ce --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Toast/Toaster.tsx @@ -0,0 +1,17 @@ +"use client"; + +import { Toast, ToastProvider, ToastViewport } from "./Toast"; +import { useToast } from "./use-toast"; + +export function Toaster({ duration }: { duration?: number }) { + const { toasts } = useToast(); + + return ( + + {toasts.map(({ id, ...props }) => ( + + ))} + + + ); +} diff --git a/packages/mini-apps-ui-kit-react/src/components/Toast/index.ts b/packages/mini-apps-ui-kit-react/src/components/Toast/index.ts new file mode 100644 index 00000000..d21acc2d --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Toast/index.ts @@ -0,0 +1,3 @@ +export * from "./Toast"; +export * from "./Toaster"; +export * from "./use-toast"; diff --git a/packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx b/packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx new file mode 100644 index 00000000..5775e9de --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx @@ -0,0 +1,190 @@ +"use client"; + +import { useEffect, useId, useState } from "react"; + +import type { ToastProps } from "./Toast"; + +const TOAST_LIMIT = 1; +const TOAST_REMOVE_DELAY = 1000000; + +type ToasterToast = ToastProps & { + id: string; +}; + +const actionTypes = { + ADD_TOAST: "ADD_TOAST", + UPDATE_TOAST: "UPDATE_TOAST", + DISMISS_TOAST: "DISMISS_TOAST", + REMOVE_TOAST: "REMOVE_TOAST", +} as const; + +let count = 0; + +function genId() { + count = (count + 1) % Number.MAX_SAFE_INTEGER; + return count.toString(); +} + +type ActionType = typeof actionTypes; + +type Action = + | { + type: ActionType["ADD_TOAST"]; + toast: ToasterToast; + } + | { + type: ActionType["UPDATE_TOAST"]; + toast: Partial; + } + | { + type: ActionType["DISMISS_TOAST"]; + toastId?: ToasterToast["id"]; + } + | { + type: ActionType["REMOVE_TOAST"]; + toastId?: ToasterToast["id"]; + }; + +interface State { + toasts: ToasterToast[]; +} + +const toastTimeouts = new Map>(); + +const addToRemoveQueue = (toastId: string) => { + if (toastTimeouts.has(toastId)) { + return; + } + + const timeout = setTimeout(() => { + toastTimeouts.delete(toastId); + dispatch({ + type: "REMOVE_TOAST", + toastId: toastId, + }); + }, TOAST_REMOVE_DELAY); + + toastTimeouts.set(toastId, timeout); +}; + +export const reducer = (state: State, action: Action): State => { + switch (action.type) { + case "ADD_TOAST": + return { + ...state, + toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT), + }; + + case "UPDATE_TOAST": + return { + ...state, + toasts: state.toasts.map((t) => + t.id === action.toast.id ? { ...t, ...action.toast } : t, + ), + }; + + case "DISMISS_TOAST": { + const { toastId } = action; + + // ! Side effects ! - This could be extracted into a dismissToast() action, + // but I'll keep it here for simplicity + if (toastId) { + addToRemoveQueue(toastId); + } else { + state.toasts.forEach((toast) => { + addToRemoveQueue(toast.id); + }); + } + + return { + ...state, + toasts: state.toasts.map((t) => + t.id === toastId || toastId === undefined + ? { + ...t, + open: false, + } + : t, + ), + }; + } + case "REMOVE_TOAST": + if (action.toastId === undefined) { + return { + ...state, + toasts: [], + }; + } + return { + ...state, + toasts: state.toasts.filter((t) => t.id !== action.toastId), + }; + } +}; + +const listeners: Array<(state: State) => void> = []; + +let memoryState: State = { toasts: [] }; + +function dispatch(action: Action) { + memoryState = reducer(memoryState, action); + listeners.forEach((listener) => { + listener(memoryState); + }); +} + +type Toast = Omit; + +const toast = ({ ...props }: Toast) => { + const id = genId(); + + const update = (props: ToasterToast) => + dispatch({ + type: "UPDATE_TOAST", + toast: { ...props, id }, + }); + const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id }); + + dispatch({ + type: "ADD_TOAST", + toast: { + ...props, + id, + open: true, + onOpenChange: (open) => { + if (!open) dismiss(); + }, + }, + }); + + return { + id: id, + dismiss, + update, + }; +}; + +function useToast() { + const [state, setState] = useState(memoryState); + + useEffect(() => { + listeners.push(setState); + return () => { + const index = listeners.indexOf(setState); + if (index > -1) { + listeners.splice(index, 1); + } + }; + }, [state]); + + return { + ...state, + toast: { + success: (props: Omit) => toast({ ...props, variant: "success" }), + error: (props: Omit) => toast({ ...props, variant: "error" }), + }, + dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }), + }; +} + +export { useToast, toast }; diff --git a/packages/mini-apps-ui-kit-react/src/index.ts b/packages/mini-apps-ui-kit-react/src/index.ts index 786aeb71..d60a66a3 100644 --- a/packages/mini-apps-ui-kit-react/src/index.ts +++ b/packages/mini-apps-ui-kit-react/src/index.ts @@ -16,6 +16,7 @@ export * from "./components/PhoneField"; export * from "./components/Spinner"; export * from "./components/Switch"; export * from "./components/Token"; +export * from "./components/Toast"; export * from "./components/Typography"; export * from "./components/Drawer"; diff --git a/packages/mini-apps-ui-kit-react/stories/Toast.stories.tsx b/packages/mini-apps-ui-kit-react/stories/Toast.stories.tsx new file mode 100644 index 00000000..29c05521 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/stories/Toast.stories.tsx @@ -0,0 +1,83 @@ +import { Button } from "@/index"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { Toaster, useToast } from "../src/components/Toast"; + +const ToastDemo = ({ + variant, + title, + duration, +}: { + variant: "success" | "error"; + title: string; + duration: number; +}) => { + const defaultTitle = variant === "success" ? "Something went good" : "Something went wrong"; + const { toast } = useToast(); + return ( +
+ + +
+ ); +}; + +const meta: Meta = { + title: "Components/Toast", + component: ToastDemo, + parameters: { + layout: "centered", + docs: { + description: { + component: + "Toast component for displaying temporary notifications. Supports success and error variants with customizable duration and title content.", + }, + }, + }, + argTypes: { + variant: { + control: "select", + options: ["success", "error"], + description: "Type of notification to show", + }, + duration: { + control: "number", + description: "Duration of the toast", + }, + title: { + control: "text", + description: "Message to display in the toast", + }, + }, +}; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + args: { + variant: "success", + title: "", + duration: 3000, + }, +}; diff --git a/packages/mini-apps-ui-kit-react/tailwind.config.ts b/packages/mini-apps-ui-kit-react/tailwind.config.ts index 79a5dd59..35e34b28 100644 --- a/packages/mini-apps-ui-kit-react/tailwind.config.ts +++ b/packages/mini-apps-ui-kit-react/tailwind.config.ts @@ -9,7 +9,7 @@ const config: Config = { "./.storybook/**/*.{js,ts,jsx,tsx}", "./stories/**/*.{mdx,md}", ], - plugins: [uiKitTailwindPlugin], + plugins: [uiKitTailwindPlugin, require("tailwindcss-animate")], }; export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aeeadcd4..252cce51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,6 +84,9 @@ importers: '@radix-ui/react-switch': specifier: ^1.1.1 version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-toast': + specifier: ^1.2.6 + version: 1.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@uidotdev/usehooks': specifier: ^2.4.1 version: 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -193,6 +196,9 @@ importers: tailwindcss: specifier: ^3.4.15 version: 3.4.17 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.17) typescript: specifier: ~5.6.2 version: 5.6.3 @@ -747,6 +753,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-collection@1.1.2': + resolution: {integrity: sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-compose-refs@1.1.1': resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} peerDependencies: @@ -800,6 +819,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-dismissable-layer@1.1.5': + resolution: {integrity: sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-focus-guards@1.1.1': resolution: {integrity: sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==} peerDependencies: @@ -883,6 +915,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-portal@1.1.4': + resolution: {integrity: sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-presence@1.1.2': resolution: {integrity: sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==} peerDependencies: @@ -909,6 +954,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-primitive@2.0.2': + resolution: {integrity: sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-radio-group@1.2.2': resolution: {integrity: sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==} peerDependencies: @@ -957,6 +1015,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-switch@1.1.2': resolution: {integrity: sha512-zGukiWHjEdBCRyXvKR6iXAQG6qXm2esuAD6kDOi9Cn+1X6ev3ASo4+CsYaD6Fov9r/AQFekqnD/7+V0Cs6/98g==} peerDependencies: @@ -970,6 +1037,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-toast@1.2.6': + resolution: {integrity: sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: @@ -1046,6 +1126,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.1.2': + resolution: {integrity: sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} @@ -3698,6 +3791,11 @@ packages: tailwind-merge@2.6.0: resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + tailwindcss@3.4.17: resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} @@ -4741,6 +4839,18 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-collection@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 @@ -4794,6 +4904,19 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.18)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-focus-guards@1.1.1(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 @@ -4869,6 +4992,16 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-portal@1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-presence@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) @@ -4888,6 +5021,15 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-primitive@2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.1.2(@types/react@18.3.18)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-radio-group@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -4959,6 +5101,13 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + '@radix-ui/react-slot@1.1.2(@types/react@18.3.18)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.18 + '@radix-ui/react-switch@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -4974,6 +5123,26 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-toast@1.2.6(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.1 + '@radix-ui/react-collection': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.4(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.18)(react@18.3.1)': dependencies: react: 18.3.1 @@ -5029,6 +5198,15 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-visually-hidden@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/rect@1.1.0': {} '@rollup/pluginutils@5.1.4(rollup@4.27.3)': @@ -6466,7 +6644,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: @@ -6488,7 +6666,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.2(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -8176,6 +8354,10 @@ snapshots: tailwind-merge@2.6.0: {} + tailwindcss-animate@1.0.7(tailwindcss@3.4.17): + dependencies: + tailwindcss: 3.4.17 + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 From bfb6b79b6094c6e4fcf906c8041e059b8c34864d Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Fri, 14 Mar 2025 13:02:32 -0600 Subject: [PATCH 006/116] fix: allow opacity transformations to colors (#43) --- .../src/tailwind/index.ts | 186 +++++++++--------- .../documentation/components/Color.tsx | 6 +- 2 files changed, 96 insertions(+), 96 deletions(-) diff --git a/packages/mini-apps-ui-kit-react/src/tailwind/index.ts b/packages/mini-apps-ui-kit-react/src/tailwind/index.ts index b2616809..d20238a0 100644 --- a/packages/mini-apps-ui-kit-react/src/tailwind/index.ts +++ b/packages/mini-apps-ui-kit-react/src/tailwind/index.ts @@ -1,64 +1,64 @@ import plugin from "tailwindcss/plugin"; export const gray = { - "--gray-0": "#FFFFFF", - "--gray-50": "#FAFAFA", - "--gray-100": "#F5F5F5", - "--gray-200": "#E9EAEB", - "--gray-300": "#D5D7DA", - "--gray-350": "#B1B8C2", - "--gray-400": "#A4A7AE", - "--gray-500": "#717680", - "--gray-700": "#414651", - "--gray-900": "#181818", + "--gray-0": "255 255 255", + "--gray-50": "249 250 251", + "--gray-100": "243 244 245", + "--gray-200": "235 236 239", + "--gray-300": "214 217 221", + "--gray-350": "177 184 194", + "--gray-400": "155 163 174", + "--gray-500": "113 118 128", + "--gray-700": "60 66 75", + "--gray-900": "24 24 24", }; export const success = { - "--success-100": "#E6F9EC", - "--success-200": "#CCF3D9", - "--success-300": "#99E8B3", - "--success-400": "#66DC8D", - "--success-500": "#33D167", - "--success-600": "#00C230", - "--success-700": "#009B26", - "--success-800": "#00741D", - "--success-900": "#004D13", + "--success-100": "230 249 236", + "--success-200": "204 243 217", + "--success-300": "153 232 179", + "--success-400": "102 220 141", + "--success-500": "51 209 103", + "--success-600": "0 194 48", + "--success-700": "0 155 38", + "--success-800": "0 116 29", + "--success-900": "0 77 19", }; export const error = { - "--error-100": "#FEE9E7", - "--error-200": "#FDD3CF", - "--error-300": "#FBA79F", - "--error-400": "#F97B6F", - "--error-500": "#F7503F", - "--error-600": "#F2280D", - "--error-700": "#C2200A", - "--error-800": "#911808", - "--error-900": "#611005", + "--error-100": "254 233 231", + "--error-200": "253 211 207", + "--error-300": "251 167 159", + "--error-400": "249 123 111", + "--error-500": "247 80 63", + "--error-600": "242 40 13", + "--error-700": "194 32 10", + "--error-800": "145 24 8", + "--error-900": "97 16 5", }; export const warning = { - "--warning-100": "#FFF6E6", - "--warning-200": "#FFEDCC", - "--warning-300": "#FFDB99", - "--warning-400": "#FFC966", - "--warning-500": "#FFB833", - "--warning-600": "#FFAE00", - "--warning-700": "#CC8B00", - "--warning-800": "#996800", - "--warning-900": "#664600", + "--warning-100": "255 246 230", + "--warning-200": "255 237 204", + "--warning-300": "255 219 153", + "--warning-400": "255 201 102", + "--warning-500": "255 184 51", + "--warning-600": "255 174 0", + "--warning-700": "204 139 0", + "--warning-800": "153 104 0", + "--warning-900": "102 70 0", }; export const info = { - "--info-100": "#E6F0FF", - "--info-200": "#CCE0FF", - "--info-300": "#99C2FF", - "--info-400": "#66A3FF", - "--info-500": "#3385FF", - "--info-600": "#005CFF", - "--info-700": "#004ACC", - "--info-800": "#003799", - "--info-900": "#002466", + "--info-100": "230 240 255", + "--info-200": "204 224 255", + "--info-300": "153 194 255", + "--info-400": "102 163 255", + "--info-500": "51 133 255", + "--info-600": "0 92 255", + "--info-700": "0 74 204", + "--info-800": "0 55 153", + "--info-900": "0 36 102", }; const uiKitTailwindPlugin = plugin( @@ -83,61 +83,61 @@ const uiKitTailwindPlugin = plugin( transparent: "transparent", current: "currentColor", gray: { - 900: "var(--gray-900)", - 800: "var(--gray-800)", - 700: "var(--gray-700)", - 500: "var(--gray-500)", - 400: "var(--gray-400)", - 350: "var(--gray-350)", - 300: "var(--gray-300)", - 200: "var(--gray-200)", - 100: "var(--gray-100)", - 50: "var(--gray-50)", - 0: "var(--gray-0)", + 900: "rgb(var(--gray-900) / )", + 800: "rgb(var(--gray-800) / )", + 700: "rgb(var(--gray-700) / )", + 500: "rgb(var(--gray-500) / )", + 400: "rgb(var(--gray-400) / )", + 350: "rgb(var(--gray-350) / )", + 300: "rgb(var(--gray-300) / )", + 200: "rgb(var(--gray-200) / )", + 100: "rgb(var(--gray-100) / )", + 50: "rgb(var(--gray-50) / )", + 0: "rgb(var(--gray-0) / )", }, success: { - 900: "var(--success-900)", - 800: "var(--success-800)", - 700: "var(--success-700)", - 600: "var(--success-600)", - 500: "var(--success-500)", - 400: "var(--success-400)", - 300: "var(--success-300)", - 200: "var(--success-200)", - 100: "var(--success-100)", + 900: "rgb(var(--success-900) / )", + 800: "rgb(var(--success-800) / )", + 700: "rgb(var(--success-700) / )", + 600: "rgb(var(--success-600) / )", + 500: "rgb(var(--success-500) / )", + 400: "rgb(var(--success-400) / )", + 300: "rgb(var(--success-300) / )", + 200: "rgb(var(--success-200) / )", + 100: "rgb(var(--success-100) / )", }, error: { - 900: "var(--error-900)", - 800: "var(--error-800)", - 700: "var(--error-700)", - 600: "var(--error-600)", - 500: "var(--error-500)", - 400: "var(--error-400)", - 300: "var(--error-300)", - 200: "var(--error-200)", - 100: "var(--error-100)", + 900: "rgb(var(--error-900) / )", + 800: "rgb(var(--error-800) / )", + 700: "rgb(var(--error-700) / )", + 600: "rgb(var(--error-600) / )", + 500: "rgb(var(--error-500) / )", + 400: "rgb(var(--error-400) / )", + 300: "rgb(var(--error-300) / )", + 200: "rgb(var(--error-200) / )", + 100: "rgb(var(--error-100) / )", }, warning: { - 900: "var(--warning-900)", - 800: "var(--warning-800)", - 700: "var(--warning-700)", - 600: "var(--warning-600)", - 500: "var(--warning-500)", - 400: "var(--warning-400)", - 300: "var(--warning-300)", - 200: "var(--warning-200)", - 100: "var(--warning-100)", + 900: "rgb(var(--warning-900) / )", + 800: "rgb(var(--warning-800) / )", + 700: "rgb(var(--warning-700) / )", + 600: "rgb(var(--warning-600) / )", + 500: "rgb(var(--warning-500) / )", + 400: "rgb(var(--warning-400) / )", + 300: "rgb(var(--warning-300) / )", + 200: "rgb(var(--warning-200) / )", + 100: "rgb(var(--warning-100) / )", }, info: { - 900: "var(--info-900)", - 800: "var(--info-800)", - 700: "var(--info-700)", - 600: "var(--info-600)", - 500: "var(--info-500)", - 400: "var(--info-400)", - 300: "var(--info-300)", - 200: "var(--info-200)", - 100: "var(--info-100)", + 900: "rgb(var(--info-900) / )", + 800: "rgb(var(--info-800) / )", + 700: "rgb(var(--info-700) / )", + 600: "rgb(var(--info-600) / )", + 500: "rgb(var(--info-500) / )", + 400: "rgb(var(--info-400) / )", + 300: "rgb(var(--info-300) / )", + 200: "rgb(var(--info-200) / )", + 100: "rgb(var(--info-100) / )", }, }, lineHeight: { diff --git a/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx b/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx index 3d68eccd..3b51d7fb 100644 --- a/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx +++ b/packages/mini-apps-ui-kit-react/stories/documentation/components/Color.tsx @@ -6,15 +6,15 @@ interface ColorProps { export const Color = ({ name, color }: ColorProps) => { const nameWithoutPrefix = name.split("-").pop() || ""; + console.log(color); return (
-
-
+
+
{nameWithoutPrefix} - {color.toUpperCase()}
); From 2e8e3260f550d630d0bb365353f5c74590301453 Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Mon, 17 Mar 2025 08:45:55 -0600 Subject: [PATCH 007/116] refactor: Update RadioGroupItem styles and enhance documentation (#51) * Modify RadioGroupItem component styles for improved visual consistency and accessibility. * Add descriptive documentation for the RadioGroup component in Storybook. --- .../src/components/RadioGroup/RadioGroupItem.tsx | 2 +- .../mini-apps-ui-kit-react/stories/RadioGroup.stories.tsx | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/mini-apps-ui-kit-react/src/components/RadioGroup/RadioGroupItem.tsx b/packages/mini-apps-ui-kit-react/src/components/RadioGroup/RadioGroupItem.tsx index 6d5d4035..6dfc7e9f 100644 --- a/packages/mini-apps-ui-kit-react/src/components/RadioGroup/RadioGroupItem.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/RadioGroup/RadioGroupItem.tsx @@ -21,7 +21,7 @@ export const RadioGroupItem = forwardRef diff --git a/packages/mini-apps-ui-kit-react/stories/RadioGroup.stories.tsx b/packages/mini-apps-ui-kit-react/stories/RadioGroup.stories.tsx index 45b7a0f9..71d928ea 100644 --- a/packages/mini-apps-ui-kit-react/stories/RadioGroup.stories.tsx +++ b/packages/mini-apps-ui-kit-react/stories/RadioGroup.stories.tsx @@ -11,6 +11,14 @@ const meta: Meta = { subcomponents: { RadioGroupItem: RadioGroupItem as React.ComponentType, }, + parameters: { + docs: { + description: { + component: + "A radio group component that extends [Radix's RadioGroup](https://www.radix-ui.com/primitives/docs/components/radio-group) primitive, allowing users to select a single option from a list of options.", + }, + }, + }, argTypes: { defaultValue: { control: false, From 849ee7db44e59d89e5a769e493dab173e275503f Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Mon, 17 Mar 2025 08:49:58 -0600 Subject: [PATCH 008/116] Enhance Checkbox component with new props and improved styling (#50) * feat: Enhance Checkbox component with additional props and improve Tick icon styling - Added new props: asChild, defaultChecked, required, name, and value to Checkbox for better customization. - Updated Checkbox's default checked state documentation. - Improved Tick icon's stroke width and line cap for better visual consistency. - Enhanced Checkbox story documentation for clarity. * fix: Update Checkbox documentation to clarify prop usage - Changed the documentation for the `asChild` prop to specify its purpose of forwarding the root element instead of indicating default checked state. --- .../src/components/Checkbox/Checkbox.tsx | 41 +++++++++++++++---- .../src/components/Icons/Tick.tsx | 7 ++-- .../stories/Checkbox.stories.tsx | 8 ++++ 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/packages/mini-apps-ui-kit-react/src/components/Checkbox/Checkbox.tsx b/packages/mini-apps-ui-kit-react/src/components/Checkbox/Checkbox.tsx index 438b33f1..843f0e28 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Checkbox/Checkbox.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Checkbox/Checkbox.tsx @@ -7,31 +7,58 @@ import { Tick } from "../Icons/Tick"; export interface CheckboxProps extends Omit { /** - * The checked state of the checkbox. + * Whether to forward the root element * @default false */ + asChild?: boolean; + + /** + * The initial checked state when the checkbox is uncontrolled + */ + defaultChecked?: boolean; + + /** + * The controlled checked state of the checkbox + */ checked?: boolean; + /** - * Callback function that is triggered when the checked state changes. + * Event handler called when the checked state changes */ onChange?: (checked: boolean) => void; + /** - * The disabled state of the checkbox. - * @default false + * Whether the checkbox is disabled */ disabled?: boolean; + + /** + * Whether the checkbox is required + */ + required?: boolean; + + /** + * The name of the checkbox + */ + name?: string; + + /** + * The value of the checkbox + * @default "" + */ + value?: string; } export const Checkbox = forwardRef( - ({ checked, onChange: onCheckedChange, disabled = false, ...rest }, ref) => { + ({ checked, onChange: onCheckedChange, disabled = false, ...props }, ref) => { return ( diff --git a/packages/mini-apps-ui-kit-react/src/components/Icons/Tick.tsx b/packages/mini-apps-ui-kit-react/src/components/Icons/Tick.tsx index e71943cf..bdbc6980 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Icons/Tick.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Icons/Tick.tsx @@ -19,11 +19,10 @@ export function Tick({ className }: TickProps) { data-testid="tick-icon" > ); diff --git a/packages/mini-apps-ui-kit-react/stories/Checkbox.stories.tsx b/packages/mini-apps-ui-kit-react/stories/Checkbox.stories.tsx index 19a7db2d..4fc4ebe7 100644 --- a/packages/mini-apps-ui-kit-react/stories/Checkbox.stories.tsx +++ b/packages/mini-apps-ui-kit-react/stories/Checkbox.stories.tsx @@ -7,6 +7,14 @@ import { Checkbox } from "../src/components/Checkbox"; const meta: Meta = { title: "components/Checkbox", component: Checkbox, + parameters: { + docs: { + description: { + component: + "A checkbox component that allows users to select one or multiple options. Built on top of [Radix UI's Checkbox](https://www.radix-ui.com/primitives/docs/components/checkbox) primitive for accessibility and customization.", + }, + }, + }, }; export default meta; From 5de6fd5883312c5f2ecbc79453d44ad46c52dd47 Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Mon, 17 Mar 2025 08:52:16 -0600 Subject: [PATCH 009/116] feat: add Progress component to UI kit (#45) - Introduced a new Progress component for visualizing task completion. - Updated package.json to include @radix-ui/react-progress dependency. - Added Progress stories for documentation in Storybook. - Exported Progress component in the main index file. - Refactored use-toast.tsx to remove unused imports. --- packages/mini-apps-ui-kit-react/package.json | 5 +++ .../src/components/Progress/Progress.tsx | 40 +++++++++++++++++ .../src/components/Progress/index.ts | 1 + .../src/components/Toast/use-toast.tsx | 2 +- packages/mini-apps-ui-kit-react/src/index.ts | 1 + .../stories/Progress.stories.tsx | 45 +++++++++++++++++++ pnpm-lock.yaml | 28 +++++++++++- 7 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 packages/mini-apps-ui-kit-react/src/components/Progress/Progress.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Progress/index.ts create mode 100644 packages/mini-apps-ui-kit-react/stories/Progress.stories.tsx diff --git a/packages/mini-apps-ui-kit-react/package.json b/packages/mini-apps-ui-kit-react/package.json index 2793882c..06a79a27 100644 --- a/packages/mini-apps-ui-kit-react/package.json +++ b/packages/mini-apps-ui-kit-react/package.json @@ -101,6 +101,10 @@ "types": "./dist/components/Toast/index.d.ts", "default": "./dist/components/Toast/index.js" }, + "./Progress": { + "types": "./dist/components/Progress/index.d.ts", + "default": "./dist/components/Progress/index.js" + }, "./tailwind": { "types": "./dist/tailwind/index.d.ts", "default": "./dist/tailwind/index.js" @@ -166,6 +170,7 @@ "dependencies": { "@radix-ui/react-checkbox": "^1.1.2", "@radix-ui/react-form": "^0.1.0", + "@radix-ui/react-progress": "^1.1.2", "@radix-ui/react-radio-group": "^1.2.1", "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-slot": "^1.1.0", diff --git a/packages/mini-apps-ui-kit-react/src/components/Progress/Progress.tsx b/packages/mini-apps-ui-kit-react/src/components/Progress/Progress.tsx new file mode 100644 index 00000000..15f729bc --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Progress/Progress.tsx @@ -0,0 +1,40 @@ +import { cn } from "@/lib/utils"; +import * as RadixProgress from "@radix-ui/react-progress"; + +interface ProgressProps { + /** Value between 0 and 100 representing the progress percentage */ + value: number; + /** Whether to use the child element as the progress indicator */ + asChild?: boolean; + /** Maximum value of the progress bar */ + max?: number; + /** A function to get the accessible label text representing the current value in a human-readable format. If not provided, the value label will be read as the numeric value as a percentage of the max value. */ + getValueLabel?: (value: number) => string; + /** The class name of the progress bar. To customize the background color of the progress bar, use background utility classes. To customize the indicator color, use text color utility classes. */ + className?: string; +} + +export const Progress = ({ value, asChild, max, getValueLabel, className }: ProgressProps) => { + return ( + + + + ); +}; diff --git a/packages/mini-apps-ui-kit-react/src/components/Progress/index.ts b/packages/mini-apps-ui-kit-react/src/components/Progress/index.ts new file mode 100644 index 00000000..2a7a3993 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Progress/index.ts @@ -0,0 +1 @@ +export * from "./Progress"; diff --git a/packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx b/packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx index 5775e9de..8121848a 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Toast/use-toast.tsx @@ -1,6 +1,6 @@ "use client"; -import { useEffect, useId, useState } from "react"; +import { useEffect, useState } from "react"; import type { ToastProps } from "./Toast"; diff --git a/packages/mini-apps-ui-kit-react/src/index.ts b/packages/mini-apps-ui-kit-react/src/index.ts index d60a66a3..e1dc9d96 100644 --- a/packages/mini-apps-ui-kit-react/src/index.ts +++ b/packages/mini-apps-ui-kit-react/src/index.ts @@ -19,5 +19,6 @@ export * from "./components/Token"; export * from "./components/Toast"; export * from "./components/Typography"; export * from "./components/Drawer"; +export * from "./components/Progress"; export { default as uiKitTailwindPlugin } from "./tailwind"; diff --git a/packages/mini-apps-ui-kit-react/stories/Progress.stories.tsx b/packages/mini-apps-ui-kit-react/stories/Progress.stories.tsx new file mode 100644 index 00000000..a541a9b5 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/stories/Progress.stories.tsx @@ -0,0 +1,45 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { expect, within } from "@storybook/test"; + +import { Progress } from "../src/components/Progress"; + +const meta: Meta = { + title: "components/Progress", + component: Progress, + parameters: { + docs: { + description: { + component: + "A progress indicator component that shows the completion status of a task or process. The progress is represented by a horizontal bar that fills from left to right based on the provided value between 0 and 100. The background color of the progress bar can be customized using background utility classes, while the indicator color can be customized using text color utility classes.", + }, + }, + }, + argTypes: { + value: { + control: { type: "range", min: 0, max: 100, step: 1 }, + defaultValue: 0, + }, + }, + decorators: [ + (Story) => ( +
+ +
+ ), + ], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + value: 33, + }, + play: async ({ canvasElement }: { canvasElement: HTMLElement }) => { + const canvas = within(canvasElement); + const progress = canvas.getByRole("progressbar"); + expect(progress).toBeInTheDocument(); + expect(progress).toHaveAttribute("data-value", "100"); + }, +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 252cce51..382a5449 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,6 +72,9 @@ importers: '@radix-ui/react-form': specifier: ^0.1.0 version: 0.1.1(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-progress': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-radio-group': specifier: ^1.2.1 version: 1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -800,7 +803,7 @@ packages: '@radix-ui/react-direction@1.1.0': resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} peerDependencies: - '@types/react': '*' + '@types/react': 18.2.0 react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': @@ -967,6 +970,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-progress@1.1.2': + resolution: {integrity: sha512-u1IgJFQ4zNAUTjGdDL5dcl/U8ntOR6jsnhxKb5RKp5Ozwl88xKR9EqRZOe/Mk8tnx0x5tNUe2F+MzsyjqMg0MA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-radio-group@1.2.2': resolution: {integrity: sha512-E0MLLGfOP0l8P/NxgVzfXJ8w3Ch8cdO6UDzJfDChu4EJDy+/WdO5LqpdY8PYnCErkmZH3gZhDL1K7kQ41fAHuQ==} peerDependencies: @@ -5030,6 +5046,16 @@ snapshots: '@types/react': 18.3.18 '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-progress@1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-context': 1.1.1(@types/react@18.3.18)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.18 + '@types/react-dom': 18.3.5(@types/react@18.3.18) + '@radix-ui/react-radio-group@1.2.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 From a36ef79bc3ee0c9933887605f857e0848a51692e Mon Sep 17 00:00:00 2001 From: Daniel Polo Date: Mon, 17 Mar 2025 09:11:10 -0600 Subject: [PATCH 010/116] Refactor Input and OTPField components for better styling and error handling (#46) * refactor: Update Input and OTPField components for improved styling and error handling - Adjusted Input component styles to refine border and error color definitions. - Modified OTPField component to enhance layout spacing and error handling logic. * feat: Add PasswordField component with show/hide password functionality (#52) - Introduced PasswordField component that allows users to toggle password visibility using an Eye icon. - Created Eye icon component for visual representation. - Added Storybook stories for PasswordField to demonstrate usage and styling. * feat: Add TextArea component to UI kit (#49) - Introduced TextArea component for multi-line text input with customizable error and focus states. - Updated package.json to export TextArea component. - Enhanced index.ts to include TextArea in the main exports. - Added Storybook stories for TextArea showcasing various states (default, error, disabled, focused, with value). - Refactored Input component styles for improved border handling. * Update SearchField (#47) * feat: Enhance ClearButton and add MagicWand icon - Updated ClearButton component to use a new Clear icon with improved dimensions and styling. - Introduced MagicWand icon component for use in the UI kit. - Adjusted Magnifier icon dimensions and styling for consistency. - Enhanced PasteButton to include the new MagicWand icon and updated its layout. - Modified SearchField to support a placeholder prop and improved event handling for paste functionality. * feat: Add WalletAddressField component to UI kit (#48) - Introduced WalletAddressField component for entering wallet addresses with error and validation states. - Updated package.json to include new component exports. - Enhanced Input component styles for better user experience. - Added Storybook stories for WalletAddressField to demonstrate various states and usage. * feat: Add TextArea component to UI kit (#49) - Introduced TextArea component for multi-line text input with customizable error and focus states. - Updated package.json to export TextArea component. - Enhanced index.ts to include TextArea in the main exports. - Added Storybook stories for TextArea showcasing various states (default, error, disabled, focused, with value). - Refactored Input component styles for improved border handling. * refactor: Update Input component styles for improved focus handling - Refined focus border styling for the Input component to enhance user experience. - Adjusted class names for better clarity and consistency in styling. * chore: Remove TextArea component export from package.json - Deleted TextArea component export from package.json as part of the ongoing refactor of the UI kit. - This change streamlines the component exports and focuses on the remaining components. --- packages/mini-apps-ui-kit-react/package.json | 8 ++ .../src/components/ClearButton/Clear.tsx | 16 +-- .../components/ClearButton/ClearButton.tsx | 2 +- .../src/components/Form/Form.tsx | 2 +- .../src/components/Icons/Eye.tsx | 36 ++++++ .../src/components/Icons/MagicWand.tsx | 47 +++++++ .../src/components/Icons/Magnifier.tsx | 38 +++--- .../src/components/Input/Input.tsx | 27 +++- .../src/components/OTPField/OTPField.tsx | 4 +- .../PasswordField/PasswordField.tsx | 63 +++++++++ .../src/components/PasswordField/index.ts | 1 + .../components/PasteButton/PasteButton.tsx | 8 +- .../components/SearchField/SearchField.tsx | 15 ++- .../src/components/TextArea/TextArea.tsx | 43 +++++++ .../src/components/TextArea/index.ts | 1 + .../WalletAddressField/WalletAddressField.tsx | 120 ++++++++++++++++++ .../components/WalletAddressField/index.ts | 1 + packages/mini-apps-ui-kit-react/src/index.ts | 4 +- .../stories/PasswordField.stories.tsx | 33 +++++ .../stories/TextArea.stories.tsx | 61 +++++++++ .../stories/WalletAddressField.stories.tsx | 99 +++++++++++++++ 21 files changed, 587 insertions(+), 42 deletions(-) create mode 100644 packages/mini-apps-ui-kit-react/src/components/Icons/Eye.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/Icons/MagicWand.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/PasswordField/PasswordField.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/PasswordField/index.ts create mode 100644 packages/mini-apps-ui-kit-react/src/components/TextArea/TextArea.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/TextArea/index.ts create mode 100644 packages/mini-apps-ui-kit-react/src/components/WalletAddressField/WalletAddressField.tsx create mode 100644 packages/mini-apps-ui-kit-react/src/components/WalletAddressField/index.ts create mode 100644 packages/mini-apps-ui-kit-react/stories/PasswordField.stories.tsx create mode 100644 packages/mini-apps-ui-kit-react/stories/TextArea.stories.tsx create mode 100644 packages/mini-apps-ui-kit-react/stories/WalletAddressField.stories.tsx diff --git a/packages/mini-apps-ui-kit-react/package.json b/packages/mini-apps-ui-kit-react/package.json index 06a79a27..6e56e604 100644 --- a/packages/mini-apps-ui-kit-react/package.json +++ b/packages/mini-apps-ui-kit-react/package.json @@ -105,6 +105,14 @@ "types": "./dist/components/Progress/index.d.ts", "default": "./dist/components/Progress/index.js" }, + "./TextArea": { + "types": "./dist/components/TextArea/index.d.ts", + "default": "./dist/components/TextArea/index.js" + }, + "./WalletAddressField": { + "types": "./dist/components/WalletAddressField/index.d.ts", + "default": "./dist/components/WalletAddressField/index.js" + }, "./tailwind": { "types": "./dist/tailwind/index.d.ts", "default": "./dist/tailwind/index.js" diff --git a/packages/mini-apps-ui-kit-react/src/components/ClearButton/Clear.tsx b/packages/mini-apps-ui-kit-react/src/components/ClearButton/Clear.tsx index 3444e596..802c9daf 100644 --- a/packages/mini-apps-ui-kit-react/src/components/ClearButton/Clear.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/ClearButton/Clear.tsx @@ -10,18 +10,18 @@ interface ClearProps { export function Clear({ className }: ClearProps) { return ( ); diff --git a/packages/mini-apps-ui-kit-react/src/components/ClearButton/ClearButton.tsx b/packages/mini-apps-ui-kit-react/src/components/ClearButton/ClearButton.tsx index b6b20e8e..dea8619d 100644 --- a/packages/mini-apps-ui-kit-react/src/components/ClearButton/ClearButton.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/ClearButton/ClearButton.tsx @@ -37,7 +37,7 @@ const ClearButton = React.forwardRef( onMouseDown={handleClear} {...props} > - + ); }, diff --git a/packages/mini-apps-ui-kit-react/src/components/Form/Form.tsx b/packages/mini-apps-ui-kit-react/src/components/Form/Form.tsx index 617cf74a..4cc1f66d 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Form/Form.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Form/Form.tsx @@ -32,7 +32,7 @@ export const Message = forwardRef< variant: "body", level: 3, }), - error ? "text-error-700" : "text-gray-500", + error ? "text-error-600" : "text-gray-500", )} {...props} /> diff --git a/packages/mini-apps-ui-kit-react/src/components/Icons/Eye.tsx b/packages/mini-apps-ui-kit-react/src/components/Icons/Eye.tsx new file mode 100644 index 00000000..8ceb9d5d --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Icons/Eye.tsx @@ -0,0 +1,36 @@ +import { cn } from "../../lib/utils"; + +interface EyeProps { + /** + * Additional CSS classes to apply to the Eye icon + */ + className?: string; +} + +export function Eye({ className }: EyeProps) { + return ( + + + + + ); +} diff --git a/packages/mini-apps-ui-kit-react/src/components/Icons/MagicWand.tsx b/packages/mini-apps-ui-kit-react/src/components/Icons/MagicWand.tsx new file mode 100644 index 00000000..e3c61bd8 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/Icons/MagicWand.tsx @@ -0,0 +1,47 @@ +import { cn } from "../../lib/utils"; + +interface MagicWandProps { + /** + * Additional CSS classes to apply to the icon + */ + className?: string; +} + +export function MagicWand({ className }: MagicWandProps) { + return ( + + + + + + + + ); +} diff --git a/packages/mini-apps-ui-kit-react/src/components/Icons/Magnifier.tsx b/packages/mini-apps-ui-kit-react/src/components/Icons/Magnifier.tsx index a8784f77..4f9497e6 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Icons/Magnifier.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Icons/Magnifier.tsx @@ -2,7 +2,7 @@ import { cn } from "../../lib/utils"; interface MagnifierProps { /** - * Additional CSS classes to apply to the Magnifier icon + * Additional CSS classes to apply to the icon */ className?: string; } @@ -10,27 +10,27 @@ interface MagnifierProps { export function Magnifier({ className }: MagnifierProps) { return ( - - - - - - - - + + ); } diff --git a/packages/mini-apps-ui-kit-react/src/components/Input/Input.tsx b/packages/mini-apps-ui-kit-react/src/components/Input/Input.tsx index 8adb0c7e..04747fad 100644 --- a/packages/mini-apps-ui-kit-react/src/components/Input/Input.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/Input/Input.tsx @@ -4,18 +4,26 @@ import * as React from "react"; import { cn } from "../../lib/utils"; import { Tick } from "../Icons/Tick"; +import { typographyVariants } from "../Typography"; const DEFAULT_ADORNMENT_WIDTH = 1.5; export const inputVariants = cva( - "peer h-[3.125rem] font-sans w-full rounded-xl border-2 border-gray-100 bg-gray-100 px-2.5 py-4 text-base leading-none text-gray-900 outline-none transition duration-300 file:hidden placeholder:focus:border-gray-200 focus:bg-gray-0 focus:shadow-card focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50", + cn( + "peer h-[3.5rem] w-full rounded-[0.625rem] border border-gray-100 bg-gray-100 px-4 py-4 outline-none transition duration-300", + "file:hidden", + "invalid:border-error-600 invalid:focus:border-error-600 invalid:bg-gray-0", + "placeholder:text-gray-500", + "focus:border-gray-300 focus:bg-gray-0 focus-visible:outline-none ", + "disabled:cursor-not-allowed disabled:opacity-50", + ), { variants: { error: { - true: "border-error-700 bg-error-100 focus:border-error-700 focus:bg-error-100", + true: "border-error-600 focus:border-error-600 bg-gray-0", }, isFocused: { - true: "border-gray-200 bg-gray-0 shadow-card", + true: "border-gray-200 bg-gray-0", false: "", }, }, @@ -34,7 +42,7 @@ export const iconVariants = cva( true: "text-gray-300 cursor-not-allowed", }, error: { - true: "text-error-700", + true: "text-error-600", }, position: { start: "left-1", @@ -89,6 +97,10 @@ export interface InputProps * @default false */ isFocused?: boolean; + /** + * Additional class name for the input + */ + className?: string; } export const Input = React.forwardRef( @@ -103,6 +115,7 @@ export const Input = React.forwardRef( endAdornmentWidth = DEFAULT_ADORNMENT_WIDTH, isFocused = false, disabled, + className, ...props }, ref, @@ -121,7 +134,11 @@ export const Input = React.forwardRef( ref={ref} type={type} disabled={disabled} - className={cn(inputVariants({ error, isFocused }))} + className={cn( + inputVariants({ error, isFocused }), + typographyVariants({ variant: "body", level: 3 }), + className, + )} {...props} style={{ ...(startAdornment && { diff --git a/packages/mini-apps-ui-kit-react/src/components/OTPField/OTPField.tsx b/packages/mini-apps-ui-kit-react/src/components/OTPField/OTPField.tsx index 12108b08..468ab5ae 100644 --- a/packages/mini-apps-ui-kit-react/src/components/OTPField/OTPField.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/OTPField/OTPField.tsx @@ -100,7 +100,7 @@ export const OTPField = React.forwardRef, OTPF maxLength={maxLength} inputMode={inputModeDictionary[mode]} pattern={pattern || patternDictionary[mode]} - containerClassName="flex items-center gap-1 has-[:disabled]:opacity-50" + containerClassName="flex items-center gap-2 has-[:disabled]:opacity-50" render={({ slots }) => ( <> {slots.map(({ isActive, char }, idx) => ( @@ -112,7 +112,7 @@ export const OTPField = React.forwardRef, OTPF inputVariants({ error }), typographyVariants({ variant: "body", level: 2 }), "w-12 h-[4.25rem] rounded-lg flex items-center justify-center", - isActive && "z-10 bg-gray-0 shadow-card", + (isActive || error) && "z-10 bg-gray-0", )} > {char} diff --git a/packages/mini-apps-ui-kit-react/src/components/PasswordField/PasswordField.tsx b/packages/mini-apps-ui-kit-react/src/components/PasswordField/PasswordField.tsx new file mode 100644 index 00000000..0b932e07 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/PasswordField/PasswordField.tsx @@ -0,0 +1,63 @@ +"use client"; + +import { forwardRef, useState } from "react"; + +import { Eye } from "../Icons/Eye"; +import { Input, InputProps } from "../Input"; + +export interface PasswordFieldProps + extends Omit { + /** + * If true, the input will display in an error state with error styling + */ + error?: boolean; + /** + * If true, the input will display in a valid state with success styling + */ + isValid?: boolean; +} + +export const PasswordField = forwardRef( + ( + { + isValid, + disabled, + type = "password", + autoComplete = "current-password", + spellCheck = "false", + inputMode = "text", + autoCapitalize = "off", + autoCorrect = "off", + endAdornment: endAdornmentProp, + endAdornmentWidth: endAdornmentWidthProp, + ...props + }, + ref, + ) => { + const [showPassword, setShowPassword] = useState(false); + return ( + setShowPassword(!showPassword)}> + + + } + type={showPassword ? "text" : "password"} + autoComplete={autoComplete} + spellCheck={spellCheck} + inputMode={inputMode} + autoCapitalize={autoCapitalize} + autoCorrect={autoCorrect} + /> + ); + }, +); + +PasswordField.displayName = "PasswordField"; + +export default PasswordField; diff --git a/packages/mini-apps-ui-kit-react/src/components/PasswordField/index.ts b/packages/mini-apps-ui-kit-react/src/components/PasswordField/index.ts new file mode 100644 index 00000000..38740ce3 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/PasswordField/index.ts @@ -0,0 +1 @@ +export * from "./PasswordField"; diff --git a/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx b/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx index 1a64e731..0a936de7 100644 --- a/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/PasteButton/PasteButton.tsx @@ -2,6 +2,7 @@ import type { ButtonHTMLAttributes } from "react"; import * as React from "react"; import { cn } from "../../lib/utils"; +import { MagicWand } from "../Icons/MagicWand"; import { Typography } from "../Typography"; interface PasteButtonProps extends Omit, "onPaste"> { @@ -20,7 +21,7 @@ interface PasteButtonProps extends Omit, onPaste?: (value: string) => void; } -export const PASTE_BUTTON_WIDTH = 3.875; +export const PASTE_BUTTON_WIDTH = 5; const PasteButton = React.forwardRef( ({ children, inputRef, label = "Paste", className, onPaste, ...props }, ref) => { @@ -42,14 +43,15 @@ const PasteButton = React.forwardRef( ref={ref} className={cn( className, - "flex h-full w-full items-center justify-center rounded-lg px-4 text-base font-medium text-gray-500 transition duration-300 bg-gray-0 group-focus-within:bg-gray-100 disabled:cursor-not-allowed", + "flex h-full w-full items-center justify-center px-4 gap-1 text-gray-900 transition duration-300 bg-transparent disabled:cursor-not-allowed", )} onClick={handlePaste} {...props} > - + {label} + ); }, diff --git a/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx b/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx index bcad8cdf..56142812 100644 --- a/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx +++ b/packages/mini-apps-ui-kit-react/src/components/SearchField/SearchField.tsx @@ -28,6 +28,11 @@ export interface SearchFieldProps * @default "Paste" */ pasteButtonLabel?: string; + /** + * Placeholder text for the input + * @default "Search" + */ + placeholder?: string; } export const SearchField = forwardRef( @@ -42,17 +47,19 @@ export const SearchField = forwardRef( spellCheck = "false", endAdornment: endAdornmentProp, endAdornmentWidth: endAdornmentWidthProp, + placeholder = "Search", ...props }, forwardedRef, ) => { const inputRef = useRef(null); const [isFocused, setIsFocused] = useState(false); + const [isPasted, setIsPasted] = useState(false); useImperativeHandle(forwardedRef, () => inputRef.current!); let endAdornment = endAdornmentProp; let endAdornmentWidth = endAdornmentWidthProp; - if (showPasteButton && !disabled) { + if (showPasteButton && !disabled && !isPasted) { endAdornment = ( ( if (inputRef.current) { const event = createChangeEvent(inputRef.current); props.onChange?.(event); + setIsPasted(true); } }} /> @@ -78,7 +86,7 @@ export const SearchField = forwardRef( }} /> ); - endAdornmentWidth = 1.25; + endAdornmentWidth = 2.3; } return ( @@ -88,6 +96,7 @@ export const SearchField = forwardRef( startAdornment={} isValid={isValid} disabled={disabled} + startAdornmentWidth={2.3} endAdornmentWidth={endAdornmentWidth} endAdornment={endAdornment} type={type} @@ -97,10 +106,12 @@ export const SearchField = forwardRef( setIsFocused(true); props.onFocus?.(e); }} + placeholder={placeholder} onBlur={(e) => { setIsFocused(false); props.onBlur?.(e); }} + className="rounded-full" /> ); }, diff --git a/packages/mini-apps-ui-kit-react/src/components/TextArea/TextArea.tsx b/packages/mini-apps-ui-kit-react/src/components/TextArea/TextArea.tsx new file mode 100644 index 00000000..11983fe3 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/src/components/TextArea/TextArea.tsx @@ -0,0 +1,43 @@ +import type { VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "../../lib/utils"; +import { inputVariants } from "../Input/Input"; +import { typographyVariants } from "../Typography"; + +export interface TextAreaProps + extends Omit, "className" | "style">, + VariantProps { + /** + * If true, the textarea will display in an error state with error styling + */ + error?: boolean; + /** + * If true, the textarea will display in a focused state with focus styling + * @default false + */ + isFocused?: boolean; +} + +export const TextArea = React.forwardRef( + ({ error, isFocused = false, disabled, ...props }, ref) => { + return ( +
+

f6LzXS>No0L^}hN87!;0+X_;%+BuDhJ8%S-OHX5ka`y&SK$Nn~Z*AvQp*VZ6~tA1lk_M)3)Zz4X$? zvF9bm;fut#FgA-_G}gk8kzFs=|KI)&ilOdD@c=6;f!_tjZQ#~c<6G)7?uJQw#(S;< zeXKn)-_mTwnJ#E`PZQHi(p0;h@mgt18*aO_C~C zIWaK+5a37Zf&d6V1yIP%f3^Rgh>0o7{P4_v+Hn3uY#h0fxQM720N?}rQ=j-TM(2uS z4HlP|Qvv{jP5=NJUjV=z)?05XLR?8j=!dro0DvO`0I+duMT%;2O7u)WHj6*D>Oatr z)i=;KvNo^-03iMV0KiuO04Uk==l-Fof#Z+P2lR&n`5(T&0U)MU?j`^L{2%~eP!0gh zj5G_gLnEfb!ba6j*;vbM8k%8fwSv$G?_@@B?z&L)~%{u7R z)LPjZ{qUfbfBLlkf!ARRX0x?{+fTnhjX!qyKOg`O1{m8ISQ`TXc0YR1lpp?)TvMEd zovou20O0&HHpo{100~=_SRwa+a|#Rq2wt!S=ppbt0$~0dIsmYF!w~zw@_lCFoAOH% zIvdgx0Q~b`KivPsZQV%!kG}r%Tk3Fc@8fgNk(_n4J1ixv5UhmXZ)`vc0=UZmF1b~ClgHu34J*(=Q{n`C|&e=NG!vX;jC*Jo40}mM^;3QKmRuYi(7lZ^H zwjkuVtw*bROQ@LQ_-sFSUURw<6^!XT)irnHB*rn4>=7|xC{%oQl?RJE8<9?S#JRvuU&xNd zPs$^1VwdYPjEqOYi#g+yho@X6TP9pCgySWU`<6-uqdThh(RXG3{I|we*_TpP&squI zA!KJP(laRg6jQ$O$C0!mc%yK)2qDf9uhQik4-BbIEed(@u!@IAnI3O3hbhb^I zQGuIY$aWl~C>60=`@XePMwwFdMw$C;GfY;jN1R(MJsC&9!%ih`W`>xVZC}C6F+y6{ zOf!|xXMvpM%eQ#vgGXnmnPchARxMUygGS5-`({m(CeDLV#?^sb1goY_&R+1+!r1$|<%_+L}bgz`o)GVSaq?T~_ zJ>-?D9l#t^noE9m>*U$>UPc8(=_6txm+@O$=wbT(pN4Ijss+==E&+VuO(_C8$649M zTJ{#MjXBvxj*T@-go1246{PMJ@%T(fcyeR3nWimi31bVLU&&{Iac5!nq?YTtP_)=%W35k-+k&VbR?H9 z#CNGnz7oaZt}f7H__k#d3%(+rCZ4;)|3IBQ&^axd=F{|G`G=l9PcP~m`}CKi&`Xd{ zRin{EMcxkP#zKkb7lYANL5$DN{594k*IQE<%n{bHbzZBH%_!Q1l6_Jb5XoP%!Zdcc zb|^UAgq_GeskWuY@tit2-CfT7O-nG=gZpVAmb?5lVd(Aj>!IcWVFcwhHrMK zKfT}J5Sumexnd9)C9)Rje=2=ycPshjlpS@Q?SEFl`XSsAJVj|{$06HZw&owVm(y*# zXbn18Wh5hPIv=Cn0nBc-I>~Z`AtQ{DVRach{~i*2I@09#FQ@77X}9&E1y5-;W1NxO z=VzQZb2mbph_Ie%N9lS7f_w1oQkF&$#8P?Cyjks(3FS^g2dMT6VZ_rt8YKqA-z=og z_w}boz8^)Ij>oR*-!G=kO)Bqy7eHE@?_$3$tY$c89Gj0jyFI&eK+<4iNkn!S6CNZ( zmXU^cBdO}$g4{jWLM&uw$(QCyx*6xvtT!31GLViW92+r>WLZr!94AfggWTsjajYQm z;J++Hwd_^%(HgC&*Cbn*szg;&BUJX2s}fYosg#S({4A6%%U9Sg{BVs&R&QPMaT}E` zNL|vqT*jyP;bxvc`AM8bDn8G0xhg&IPUbXoZd!EnoH6HzzNfy|dXDrSYhJc|nsbgu+@p1i)K1XcUUg$q zPm4Sj`al0k{hPKM>Fx6W^0#Q&q;-_qT(YUtIyh=yy9$`Cnk}9kmKQDMX{2JIPP%%L zU47kp9pXI0v4`iZl8szAxNtoC+mgjYemvbJP-Ab?O8mWn#y|vt-!JS8IUJb&iob)g zjhTmnst-!+o+Kg0sOjoRqrfA^!Z?U5&a;mp2aF=|Cx3dIB!H)yySg@g5=ELYojiS9 ziAM%{!7W62UgB7z_#THjZH&f*ITV&Dy<&kY2aINM%scy+Tf8XE5ox_fzoPCDT1xzY zgTt5+*ek01XhrAnIci;k3Ti_JvZRJE=3!^vxovKI>`M@t=4*!SYe)gkK6lJQ-}76} zNnxaotV0BztYe7ov_lMjTd$n3a7 z>Xe}W1Rs2WRg505{kMnV?f0fAfCB(-+$XyyCnwnkeqKLc7ba{MYdqL3yqW3gBNz8; z2_#ig2_!o0DRf=F67!@wmcJ8Hs!4w*(3$^kFD$bB?a@&!mGH2wXWN4h9%%3>7hb22 z&alSAV9S2Za19Rt(B*Sa^TxQr4Hi$t8=5%4RHNu^b-3*`vK=K_5`B1S=xq1I#-rPQhvPe-VqKD57KeM$q9zd94%+NvMYr zcdC<=ViDqzi9_i zDsUCU3JuEle@Bko-6A`cwjHZVm$lyIE}?RIS8hQ*h`+A63h8v8N#tP+18f71J)A#9 zyvx60A_EU$+8EJIU_*qUfR5N2TvPrzc zwV3GF5^#Q3lhP|TE7Lwo8qK?(#;{NqOf1%yT8XA4=!{++lC(*{k0ZT8xNCQl@~h~h zG7Sa&%%Np5duGOQ#&Z%zkyu-0rv*||R1;1q233uPZnF7MqoyXg=FAe#Vzym*@XG2raX7W)=GDi@Fnx5=OqGHH(jpO8QlX%m%8ne+^O0_ z=vxl%BD~IsHhHnqTH8kOc|eCEc!Z!a1~UzYD(vrpIzl5ipwnFF3os-**enqCUfdhl zPH_Bar-IQ^*7m6VVOFDYH>*w-zBCcCQ1kIdOOG>ECpqV9VGIcvLU|m`U}Sk{t`H`9 zbPqPANiWAxPK#{T8jV);;GsYE8p|{-ycyZ@GbS_6HLb4uyicDA$%dc$pH^G-+3MGo z^lTY2W(#Zi&Bj{mDS>0Pz#;#j+@Q8YW_Gi1YaK6iJty&6$S)}0!#_hmV?i9ExLj~j zV|?Esy#x4Mclz}@yvb#I%beb_ET_+XWP9p&=6W`B>>0JgEQgzp+HrE>2|&XA_x&ri zPIaA3!8rq``%ZS>cBghD#V;@)Y22nmM}>8StMguF*JgS9#WqJt9Q-=rsY7H2myyqhgtlwBH?u4y4zEF$LV(7iM~$F**$)D{u2Gp@Llme;eXzF(F3XU zW3I)K0G;=b?7b$SErk^lB;ml-hO+@f5MGUAe&9@k#0{Ai?&;5}CAxr)4LRPe zj^cl3ro}EOZDsL0z(@N|CZ@mvmcGaVMu>q3=pd5Vfugd2$p4jFApsIMY!MQ0q-&5{ zNIb$p3`113n$}?qqp0)xYR2kwETgEov`YKvzVxH>t7mX<9K?_7=XW1H*xX6aEtRFE zpU0UY_xA)t{y;ugG4?>MgJo0GrmRg>ZHnWK1PxDqWcbpM0BG!aK9Q5c4F^cNK#2dq z%{|d@k^!K?4%C7mxncJ-`_ccF-s$@hEQY*6`v?-k`Gce${QZZN^7q zy__4cg+9MsP1q&AhJeZMXl7T#Sizq~Q@!Hh{p=(7Z}PWyD8!>Z-V(dJv0l$+tO=Ok zyPpz&6>c*BVv~M*VopcLOpyM` z77t6Fz}AkgAyAT`=|>A7S{V+NKwuwVz^)$P_k|TG^G%y_itl<4kP`#_U9?6_1R-f{ zT41=*eaPtu561r~Ua>5B5d_ri_m8sNFPqO{X$A z*Ra_QdDMq%PWe_SxCSWF^-V|yC}WOjt<^}bmJ6q9J0{vvI(_k z!=Pvf@POceJHY^ENYN!@?Ob>8*m_C(oU#_;vU!n-Lu9wu_zoix@*@`%1GcuGaC!b* zzVc3hPyG&qaT0niHj!>)!O;QyMk!9qcw$ld?FAS;B2na)TlxA7?bjQwLVMqMeTKJ( zgUT7aUj}Ig=Th7*$%<|Bc~$7YIcPv+iBt)*VM2ew$8!_Kh}MK9-OCmLAG{xN_XIxr zNKSm_(V->opR45WRXd?{`)JvTdwc#oVR#cq!|X8!&j1tu$JlNp1ior!l`Cm&OWZeL zRnfE3;wmwG2zKlJ*8PGt^+wm3=R5G!4btnYh* zgeqL}-fI+0CH`1A6rv1f;kob@PyZ$@XwC-#|5DudFV))vG8D5*pRO|o(@lPm! z3h@mUg?QVFJRL<3xZ_N|bnPe2YK#Hz?4Tbo0a+sfHz&TpB4Dsx3|O48)F@FO?>k+@ z2Y{z~vZudoewWVqg}(Ta%>x;U$%BkUpIcV?dnzUD)9noyjAuT#Yn|Zf9mP;1VaEw! zBH>;dp_u)vv4=UbEljEPRbWyJXGXZP2W<@v@hhc`-!drjd{^T-drViAe`SZ%>WI5! zu4-=+>Ts+N-uF*;>bjg0-yhA>l$U__Z=P-wr;9fwTiVyxoRRJ5x%SH)Hs|LZ?E2o_ zd59CJkY{AwNT<#t6IkLACMn_OOsrzwO5x;YBWQGKhxdSnvXpXW@%vW$P|;LO`Y0_x z!PSfbhW}tdqCQbj1WR5qkExU_C&(ec4G@Qq>uK-hZ_ELY-gik_(>ZQ0v#&`gy7bR| zmA;rO^sNZT<4)5V3wog27JOQ+F2Xrl1zwu*^ZwTSte2#JK=bm)K(c%e*L*%P4GwCw zgpJW7o;A`=;ipnZuH@WPk_WICR-D1q6^auVWwir{5-drYs2EZ=naFk})jUG{zov!w zKm6X{kol3_KN`(P+TG2!d12lLW8oF2$1>^{RVUq7e0`r7Jdn?wD_gHPOO?5{b?W}~ zF}V%SZ}IE?<#Y6@1gRljOoL~pn4%yDZX&o%b|@2y{`IM#60P;P8%kJ;aWT#Sgt@XR zWWB7R48=6vFAy<;dzD*?CnYo)SxF-x7Do^;2vHzNnkOKEhG<{ZE=+3I2cgHSaWfLy zHgZJ%!1gKHT-DlW@;PrFdfF*tr(w;Uz?f2-CkG1=eERhrIVd%J=}Sp zq0@-L_Aj!|A0EhqdHHy(hF{CrG)H8r0j8lY&4>%~hk12}<`P4f{a2rcN0nSW-u)Tj z{~~N$WiGst140glV{gvuKGw?V7pUa-eI9hC5BS+;HtqT7*bDFI?N%1wP|(2sW&cwu z38DG`)&Y;9*JOG_QF0jy?hKTXo;ySsF!`0k$wf8u&C`=J!H8Sowhe+aKxKsytxbF! zk%7VD^dP6y%gujkh<3p$`(9N|Uk((dfO8WaIbNTlM- z*X!%YZD}bWTV~B18kXmB*Sshn+BLzXnqSk{z(0vgiICIaHF}UP@TH^eA~95Um%cHh zLWkW|>EJUzuah6S9bY!acb)ZQS3dCq&wGx|OzmrSk@0YIWs{6D^YP+f`+{2YnY@2| z5tQ(fG~XYesH(uH5qA0oI#4!<6$|9V-O#Bxd?r+RN8pKFu4DW}B+Ss}s4D2V{AF$K zpfN5l?aIu(Qx{0IgN1UsRPb_4k4Jv}@-C#`l`GJ}Zlh~9^g6{%J=1UmW9zNO8BE?` z8#mD#v;>13+-s@GVJqqx&t{DYq)Nd7Usn@t$T2ZO_ZnpamkUaC{-rogv5H* zpK(b@1wr5B{e|rPwWdOYI(EO#AVEspBYth~FrA3R97Wj(^5vI!{;{i4h3}ahE%TqpNhbVx$1z9n$0UUvKcxuxj&Nh2Eug0haL-g z8`h$*YmfRu&yW@6igv#MUa8lKq1P1@rw`wmhv~4XlzEFfMPq94Jlv-5qj`?H_l?AN<;=5;assf1$?e*TACu|x0?MCp$U69GRLlF>cpO@;n+}z zNa9z-)bOyr*+@BkKEKUvL5G>#!$`(FBBF|GMC9UxpSmU!;Umod>(jw0yG&y+gz)xznnVYa$*Xw}91eJyAWTk}*K_X{ufaQbQB4(Q#NGU%O_It>!FvRkCx7svs0 z7s)fQ|0+RiGoAO7mgjiNWRE(3^@qY(n!V^ifzE7G$9QyI!!i7=cHO^(QrV()wt|bC zr@Q2~k?*Sdu0fa7cR5H-$G*ii-}yNEeMKuxe(9b}BwV4fGM3l>l|_W;AgU zxeGI!9met#;H`lQsQ+5vpYMuKk9)$WZ^G6P`uYEVI^h#j9Vae?2Z)ARZYRq_&t8F*4fn%S11VY|1 z@0S%Qi5t`leeagi*&dNWyif}V_%dbFEg<5oI?p^+frqo{=2~aOm$}H2pfmh*QkBA) zGTtslv4u3VGu~ZAt*|5$dLde!LPWGNPEtfwM_2^|wRCJ;8{ZMlh4|7yy%!$ zAp^%|&83&|?DbgdYc+Xvf%W;IJW8MXX)S^^$R%$o=&+^+| zN^%6cHNpZ+yADp&irL|AFQ!M}M6}t){s{)4HyJz>w4>h*pQzm;>xNMN*i6f33>tqt zCj7!|St)0DYx?xU%-Ga;^E;@i_ic_Cmfy-Un{SP~e`0F*;U<#UMcDD_IQzRSbPPp4 zA^Uof-6So;dXWhX0v+z{R2jBF4`EIPPmI$aepKdmI}X4Pydm^ryIUg#s&azF^^6Tp zkB+xowUiy80{7O0y5LC7tFUJb>tT<*Ox5)J&sNRpNUGbOY2|2pc%hqBuyR3frW_&R z1Oz&M0FpkZkeuxEfs-3hjGfDfsPm06SxW(9h9jkCdM_@Or+W$Ja)}!aW}PTt8zj#U zXW*b0qP*5PrVJZ2K(MnYb~EDKNZ}2Z&noGs%Id1JltllIZ!wg zDuZvv#brAZyC5MdW%W*m&Z=mHH=0VECLZS6!jl#f<)E=rnX)t_T7(=mh0G8inZTJW zh?&U0t&q+u>5*q2dnQMqvQ=~vCsiG!yKS+1r@gSf`x_I$847#PkbHQ+21aoxv0c(a zkkY5Ux-pbeIYxfT1X}1N#p|L|GSX&Y$mzZz!yv-w)lKS}l-$U_0;Dm^vNQwI z=+cUED|3Bhdz&m?0l|sM$s$BBLOwC7ZNaX^Xdvg_Ij)ZQX^fz}$V+e&8jK(6ffebA zN`8h;_>XgniAyVv_0Go{_P6cXXS?0god^Y|Y_9m{r}`hU&2-RStD(rSst*%5yD+gb(Uu(l9jQ00YknY>D+zeTs41W)l zdkm;^M#X}iViTkk@>hMo?L#|!FW05SulRhfs){%AEk3en>+Zr9{X~3j#>w>r`@&HP}=-P8+Vf`NrtT8#x1xy$B{LORyE3 zK+|wh23Yi~y<=<)DdQ$_&7%B28pw`5wuffM7qJMuASyetQ|wpOxq)+0MnnUn2_y-J z`6v9KBsqfNGdb-_^U!gdhp<=gE;OF_H76WR*LIq=6d*Ye^v*~qAhXC#p9V0pwK{2( z(i8>7zGH)p&1kd3fb;;#)sRWKzIl4_>|U@v^Sq%ZT=aiooaVL;5C3uUh=J9Zf@U$0 z&Hz=sBWeS~x4Sdz?k*%%1FDy+7nTMf&!~Hk3MKk_0+IR`$)U%?tL9#*IZyJV4QQ3= zXY}^1uwr^TxBYT_LuLeG8Rd{_a8ugUZN~o{fj5_Ho=G|8Q3-(#XQRn&L;_;B;E4b+7ar`xKn|fAQ zK@tL)w413GK1!MR6H$-BocCWp8M`+I-xa*ApYj3^Y5cnjv70Tj5hC!-O-yy zf0Pn9Je)4;)CCMZer%M9Y#R{BPH5O`%5pj0Ft5IHR0-h4&aB{&{#hljOaSHyD2)t28xRy0XBoGRm2QUC9vpJ)Uo4%Exq}|SvkXW{7cUjt|G65G-UG7^#{Uv#(B*#)J_FCPIuH>8RK!eG&(wjJmqiQTNa?EMU$dSSlYY zLpGoaVRvUvLG>#0nTTc7L$q?dq!ZNvk;KPW7z8e$iH#iK5#C!%co|HzS`*s~2`5CG zv5oHVV?nQ4mwvb3xBNnN)2XwL$k!{qsvM9`rPWl*r3HJm?YPPKWp0f|1zyBzwM}ns z%8Ij4m*_6bP}zK{W`wS20~eCh`jTO4eZr!=%ve_HVPK)?2M9d5XmuRP>=v!>u2ru+ zI6iuH8))hQob8h!m|uymI$8I!Re=l4)^Fo2$5*l5Efn2oYit-1Td4adUizaw zMMl%Qyhol!K8o@CzAC=N){B$cUcJ+nkBb-ezhL|Rd!3P=fX{0otrjRsm?ZkDSiSV> z*GkJc|JlC}Y@r!p+RHZ;RPQfO>NSV%i{u-zWd!Ipa zk!2DAV*5mWh3J(%(^O13UiK(F7VVT?N(;WTCxTwb3E;xsYYvtzBYMO2cPLWuN$CjQ|gyN3r)pMY3>n;$J}^kGLL8M#0ImIvJ$pu8dDj3Zr^EW8R16vC%*%?AhAL+|=^4y})8&ZrE$Vho_g2gANjoR6ASEnc*h`*3BYv=7V&laTeXW}L&#X?EIQW8AWzmd6HA2DX`xZskgglL60%;eR64 zN~9w-eHcJw7q&RmZWJ1oZuJ{P2Z-&1sbS z!E!+&JJCBm3(`@MU-OGDv@vC8D>f0!hYA@cYVIn5#d{m*FE2>*%dWHc0A}x+2_D_U|J>S)AwPF6(~-SlJ+1Z``6W ztQ}1txKF{k58M1L+FY7YxIy|8J)N-J$}{fVsWOJd3_Pa;H@PHl`g9GCCk;HqEjSV2 zkOZ;nr5Qa#JUP$j%lE9J^&dcYbaYlyLWBKBvgOs&iNcUnGGII$bX%N6Q)JT@P#5`i0 zm@$=lN+`#5S@Zj1H}vWzif%)&(+FuX|I$h0$F|mLye;r2_UgMS-4v9qR6k&HvOopFYwX-UBfMD2-#Rof#%wtB3FLG$Q|n4y zr#3vPe&h4;4na8j^q)~+`@=!%dmQsD$G&Hp+@R3G4vTfahki>}VbE;D3w>k(2EiPE z*u84<4wsY3m>S7~H@g!7g<{iOmoo1t*ufIsfsWDPk%T`9t3a9$3t8+dEqOnooq@LZzG!C2#y# zUR%$0X_MS=EIlkYTw!BEFaxE7mOgGfNGgY^w^uR!B(3daKDNmT zCY4&EDcT0!=Jt4DK!ns6Wl`rkn6O*s$@HPO*`V2MC79i1>pSCrMMt(ohSwL`{35BX zjT)0v?9nlJd5(8-QUi;{(ce%L&>{@a@VJR~g|{!kY33(ZM2MB89koZy+=fXCkW$V# z^280;xHSg@v+a7{eo}#ffu3K0xr3IZeomU2naNqd8QYlP<7#azMc3W_yy|}iQ&QZ~ z0ZB*vdQxPQu$zWa09{qXmo8tRtF7`ui|irasiPz z`Rs1PN<`pXFEt(qQH8MVNm)O%8&}@BKRxiAGx@HyabWfX*ZN@CSqkyH51B@;3DBak z>N}ZQfs($ubG0tOenPww+rw;6|Wvq(oVaO<9&(66iV0kd}9NKGQ{OP*}86RipFv zdd&Y7(VfkN^h$xWb3MGUzOc$m8^93W&i20=G$k$YhjoK!#>rTG@EWk$h`#zTdc8Ye z&4LB5_SI{?xIWog|1R$F^?j}P{0TsaKUY}Jc7c@USuBx{^PVlCpwnhBI0SenpVuXn zTl&Cs1C4*G2>2NH1yG;JF8Mf}XM$C#jMd;5miXRSj*ST1e!ZVOjV!_0(vQ=o^ExJz z*%{2KM45u3O!1l88ny+nCM1F0QM_Cu5nNJnDLFr8-Jq=dMN%Nbf$H7ypW^OYUlE*3 zeUvHsI$Y{abK(X>#-70Y>)`GjI!-w`8on|9BUul85x+!LKmLjP1q30+=_Aw)rYo(l zuR5N6T>-JB1>mJs8%hf~sP9|3CC))mx$E8oZ=%~HXiZQ_m357-@9;N6bI@)e{vvX2 zZcgmM@!)5w>x3s2t$^|uMGAH_2+N* z!q5T#S{&&gUo*2OZKF?}$CV7T0Wx0&LfZ66|Cp_!?ssm|yqe4aOhsGU(zGh=qJ z39$;$it9?G#6adSlXg|;tAAEAnOx&(KelVSAAU#}BSZ&s$>!bMy8L8Oh*zdhGPoxI zomm>Oqw}B*W_$#jQULFyEr?}wyJ&U&7h%0WFtC)9Qu#TEg|}y=DnbqmC)*eSErrRF z`@MT5udE>7{>Q`6BsQDb$n;vhPQ>Id3K|ndrISQ$i*IfXR2^DEE0#-&oo?d(f&o*l zP;zJ(dDycQYc7oqVRN9>X?WpUA4OUv)iQSP$Xfm48fV8Aa!yv~@nVh1aHqT%0Bz|s z0-fer4j>emY>fB-rt=!0t^Nd zWzRXay^N((D}qV^xf8|DxOOlgdOQkdHt0npqKyx)%j>h5P7l^t*N7}5GlWc5q%NXu zx+@FkFD>$Tn|3vKRPX7^s49Hq;2|s_-mM}cB^Vw~w)+N|vvH5k%Rnnwd}6px zz~Kl`*9QY>j6xITSAt<(%#${l@b`x`BTab#Tj#^<5!(b}OqtnygtutP4bRc4 zssl?J96g9UG!OxDuvk$FRd1Ud7+_l9QFLpicMi(Sp3hkNT1Aus3zwf=R8KA=P#x9kxwp&V#&B+A~_(6U}MJ zHh$Ia?z#JE6{bHsbbRnaW@7@$ocnO%tqHgye<8#7IeX}7g-E-=)5KH6(Irtm zrB#ED0FNB+&mK7x6Zo;!@elUpJjRYFeV{HWmDL-4gi)+xwwJbFf*Uxm83#ZdRtA|s zzkjDQae}Y&@2VzR`>UkBpF4Zc31N2)ICw6`&hd8hFFkCGT9XAYk^0(KbW1)vvIUHV#eYz-TbmuLrh`gato}a*&-*MW*s!| z*gr#ce#1CMa-l^Lm7#xnkWN!MI1Pv6t%j2+vM%+vCT9I&Vw#98r!KcxGFG8Zkk3CE z>69HwQm{?`m-ZH>+^-;%8xI96+1($ssiCBeI>r9*A|)w%pePD?JSIxzq?E6pEu@A8gFw-=AV%=Z z31l%~$Q@c?3oXeVQ&a~?g#xX(Z|MLYe`tOc!r^&Y3~yh_#M2)!i*$Cv!p+VjtA{M< z*RpK4k2|(6RqPdqfFbhwy*N?Qqq|D}%&D&3#T9aaKT3;}i9PtdZfncI)$d6+S@tNW zIKv|r~g8u&>JBh%*m z5!?dLrd7KU1|gdmLT2M-7!L$C=3VKTrGFqCA&Vc9?1&LG<0XlO5SfU;C}X$}p%(?C zWigzV*$YjtVvsMood*+(SY+2#BM<$^O9M+pY}Aw#^jETez}ZZv72R;xp$(7TeXGRKD0t361(58!qN-DgDFaVW}a#{_{rO5JkIsu2(HOi{vI~hBwh&aylW9If`0>MAXl8xR=0;&YZLu;Y>QksD!XitDJHLxsG*k|DNe*yg`^nY!Z&Yl= zR!R0#e&e>lXEec>fl+r|H~L9xOBNVh8YVs)=U#^_Z)VyRv`bo7ih?Lzg~`1RhY3%u z*T9o`m+1O_#zG1{1{TBYzGlpv9wTxzx+-yblqE^6fd{EdztzRj(=#> z=p-`)I+3u}=~Z$|p7zx&jZlC@Ap(jKD>OGvz`dnT6QQftZDWLcngld~(lKZNv%8f#}2ZuGJ&oy-*1$0yfG^!Pe= zSJw5ydzzi60E0)^9O8C(vg z`8-fDI4f{)g*0P$B6FILQi+*SfU8!c1hl5J&@Nl1CJt zFn#}>oJ=--Wq+_HtMlJi@cc_Ml!a8RQslhL6dvKVyX+ZG1{&|Zjyeo3ge*3j;aO)w z>hoB}tQ-0q7}gBaOEi%tgFl)r-cmi5gp@@G-g?hYpJ$H14|O(OTlx3F>ydGqh8 zxtQvLUOM0{DCDXY{gccppk4^~}Fd1BiyVyxbz(UMl+P#3zXYn7bc!q z(rG4fQJq%m6*J>9>!5RmFr`XGyo;^hZcLQx+r#g)ruhZtn7r4-s^`gC_5tNMC)=1U z!zI=wzK=(6jLUDlZ&SZWj;KB4p(yWr6-!Q!ir|Ll%z|Zo4Nh~zlp<$RzI?O~r@^#T$R0{1UR<*peRpWXy3*`Tf$9YV<2_DWfEBZJZm7oEM0|w!+5X)5F8JRz`(r_68NY(56kg*#|&;& zMt2BBpw!k=pS_Hvycn{rAx-ONQrl=>wZ{cKC%cK%aeLo|7#v>x^(3SebUNLJ5jt&1 z-=HTlO!uG5Nspi?%;Q5`>_SzJHFc>;b!r*6-_9=yr-bCO?@?oPG?5Q<8_ZPTD)iG@ zX%GPr(f0TXJbc@Asr~(QSWbGK?!@?kp@!zL*&*AMEv;~<)>&|Pm%~S3+q@Z@do(vT z`_`==t8SCq{vPKqCa!{!zJ2KGISk07BX@PqEH2CGo77G?I^v5m`6z7lKF~d$|l^Z2Gl; zw-1`=85BKle|cZF`vu~r6y-#MV3Io+fwADZrH&=NC>st4iTw+?^`=L(xJ#a1^{|(DK0lD3DwA_DxPgS0pqxJaiZxL5wlWixNjW}9Zo%;Ybn)4ZU zs=kHn#prOTloRg&@3664E)mNIZkxa)6)`}+g-$#)0%e3<{=hq@kc_*!dLjl>GctK8 zEU*(?PNeflJt6_uhj0X@_pjheL+85PT=vjCw6sHWaeP-22j=e2+ThC4q+_r?Z+q`C zu_2D!1|skuR_!Lv71H|2d}gd#8Q5o?JtdWXN2Fb{?TyI|Yo7?!(O>_=h^~!fD(Kzz z5>&y`$^4wU0W{#tAAxU&k>-D zaKgakdff86z!aaKcE8^NI^q7F3d-R%av$cG>dgrpE~pRY6RJ#1yDO&`#o9iLNy3$V zs7pRsID<901G0MpO4{7Z@7nkqC(~iIJ=(?XmsHK5J8I@6NTGGR7~RWh!4@g*g%ckZ z#DkhirS(p6SbKX5TQdL8^?}iNGgbuMmma1i1Kt@yz9&UF_JX<8!CW(T;08^(Ry7dD zHW;3N`U|uyf!u+|C%>KG!yi4oV;~qJKPaJHh~_}102{hF7k$nB3uU;{k7_=bhSccN zUcw*j+6mPql;HhkSK*uMYnz%TZ~+dR}-Xu-38h?S(G?k*;Cm zZ1L%}&hGlG2F&;6P05t5Ge}NCiei&-vAFI=`^V;I&QEW&olm#aQ>R z(l&*{#J;c0Q=;%bgmrm~iF~zFVR?1(^wT?nOg4HFf7Ry;V`?TfjnU!DY2H4BuTAXi zPs*3U_T#!ieK$wO^U%CD6V}ezQ-&3j;ka{_LdY4YuMT&*v6aw7oBzlb&i?j$Q|oz6 z8CN);CgrA_v$S7d!1ZPv`1s1a-%28Gf}pDm2SKw`D9NWrX(W#TT>{tdpvUse@|fG$ z4)+GBbGaC^8jbJ!@*0&(qOPp${r1Ky3(VU+XOFFCercL7jmWPPMBDI{yTjNtx@zuV zPzv2ZK1W{b4Y-FJF;9}+`DR;jdJON6z|y2)rP(My7b;^3cW5VN2H{&r!&_n6vRnN| zJ8)$rr_)!_EP?|^D!rV!-+KePiA!S|qMJ0A1WhQi-~)4G-}HN!5?5!W7A@{r`jWtp zb$>;ec)7<7R0=kjcF$fGZxgms;c!VBfM+@{H|}-Gx)Wxp2FLZe&yrg+83@?Xm+GhR zx`~+~&DR2}O3}YnRF6MQY1q=a{;@KVH!Hk%bEjkoOx^OK3*r76z$jEjk3+JeJEP52 z;tWm>QTY9P5PV#x=?!fsYsIq5Fyu&i#0DPfN)CryKb@$%Pcvv~ttbDvW; zxU(bhkz0jICtL^wDd##x%#m5-SoWTy42?h1q{!5fn%^);eGw|q5R4Jzw0Mr%!=Ovb z#2f4K{M4h~KrqH%Fjni@k7Z)c;0#5WVlE(skvg-0R+f5g&y1o!F#Ke95xJ2*hLknX zTy<8u0bD13K#y;JE0H8*P3+Osry@&)eH3S!w}jT^h>0uVR3ful_#UrUea|v|cFB`{WX|H6g)vsO+%%$Z*Jk! z`kR(pQm}d-{el!nG(s|#J8=+1mtre-PWPN3sh{1M=v0NtPA6$a+`z_s9Zwh z@Y{tqm|B7Cg<&Xs@Fs*r4wf&^JpkFj=Y!@i!dUI2G`X7?oUxBK=`uTw5pC3lWX=sU zDhg}-C^s0jIchuDHG+0kk7KYJWw&a-b!na*Im!xRybO->ue#AAdaF!pwb`V=J%Swm zzELgr9tIwt7FucV(6N=8rYkn`C8&mPt$nb87-dU;nFR$JvqIJ$k}CSJZ*>;I((hnSI_OT25q?jb1M_G>Hd~t2ONxaO1zw7!#?rNF}^p z68bGR?ex$K6YxeV=)sNtPZ6}!E5HlSb$^&to#P{sv{l` zws(P{f5NS)&}go+X8-D$&CmHXoy2`j16N>&AX#yYtEjIfw4CDp4`bidoeR@M8Rx{d zZQHhO+qP|;*tYHD#5SJTwvBne`2n-$vR7TStGlcBuH6_M-*}?`-DM>9SlxWwq&|Yz zDx;$com5IGUU9iJ@FpJpRiP8-pm-IO+lyBi9-&KwCT>CY?f z6awxKzVAcxm$Gk_Vnw3O=B351(01ZKhg77;f1-XOQ6!a;F%$|EU_w z^Fn`N!vl8PamJE7h%v`*w=b=9918LsFbCvR$9!N7msq&RD&bFnLL<|z=MldXnPv59 z@-1T3kl_I8mL!Ytdvs%RQFu?)0y>)l12u_tzNn-(N%>Ko5@_s|zC! zxR(}#1oRNva1Ls{jn;vbKEsXPx5{3cvYH+=eA)@HNo13=9PFJ~_2{b4ostKadgF(K z?1mc6o}&Q>p<{$9D9&@gg}GL96ArcOk}W@ z^mZ9$$C4h8j6agz+*=2!O$No%vK}(4)zI))zuI&Q3kOtQi@&hY&xET_vPVF2#P8prUuQ7_0OdQx6u!r3!po*(X>NvOTnRcu z!@gRi)%ddh3tMLF^ly0^M!SY4m6ygQRD>w04U z9wEld`fw$1<q~C-T@*x9>5xyvc?TSfa9+=N}Vk z{yd~zWlrgF+-O9XJW?0S8?~ouv-DLX`I#D_qBD);X!9qagMK7mJVn~tFrJ4MwR0eb zjg0$eG3OBT9zJK{O?&+1y!u)m6@HJWMNWgL#$n2sjb3rXh(hDpx?&v7Mb9iBsOE;bB+GPPw99xBowJBF!P(%nB1o_^b~ zP2zPaIYhFuzOrzp;nn7C0N z^`Y@!Y3ir&{yx-2y(Fr&y^(FmMIOv$1ZGAZSTc}!%RrKar|03%BVo3&U3@+WwRT$d z??1#{+R2i~e%+ews(;5JcHMBgq4ui6<;ADoSQ;9yT|_Q#kG&9ACM$GmZ(oG3S|a&d zdTvtNloJO`T~{Y0TQlIq zNK|Z_)({rrMlP7v$j~*~+E#1xtkzat|A8{76}qka*eKozK^?QvbB@^3dGITHa`VyV zmP=xB+q73{_$xqr*)4x=vzPP(hFf00wALm9%y)u)sSK3&0I3~f501NhO5O&8F?xg6 zAzx`gFbX2I87YCYjfQ7=(x%v81 zoj+g5LQxYN`XU+S7SDzGfn}SO2oTe_Fee}Ey71AVxr~T?uhIs<)X!Dv-6MwcYuVCppwZ(D8mrBm%8pnX3>HCa)d$n%pEQ{Agf z(6v;-LJNI-)_>=w%Se#SO;eH`{4G_Ep;DvzJ+!7{@haSZ6`+UKgFnBtCo?)&mFfm-MU4Tc2pf@MFDH9xN;%a zFG9zTY5eh9=2n^2vi+%!b0lV*R$2b1)f#C(U*Y_ zbKU{yyxjXcUmPgqMVq5&bCYV`t=KM;&iC#Dg@8Ib;5ZgM zt538sFtjAIJ!%(h9Rn5~gbr(@Bw|qc2049uYwT_%as9E|YxM)*U21K;oW|!0 zcIu&gDREU|9eW7z>&Fs3bpd1_-c-_g{~2LC&2mrTqazX)7CH`NNP@`h`H~vT&X)#0 z`8~$Ra%hU!qpA~ErFK5>QYXPcI}6_&@UA0ASQ3eKy9K8Y_7%T4b;i)Qk3D@@A7l7M znVWcfqftscWBk#Ttzl(rgVl6#_k@#NWTy2{aqVDwLG=ka^^^30F(AfQY89_@YR4C> zQcJSY3wKZY``4YjgenvKCp9um-mnhz!_0QQvVTVJ`|-wf*|QWf+5MdvF4TB z%(urJHgL#B-2qrc8vkmFAfx4c>MEdMGVuVrVFr&gH=Z^R3%%_rJ2kF(9#%MelQM?p zq98xIs5F1_&EO)y@#1wLwr76)<+JjQWBV9;ox(LC`g*8g7175svDL-A`H&p zu-6YEjPh^)nBBcXhsU5m5Z#SDH-)qncrCz-T-&&Tr*Xl4x0$qeSdh-Z2D7f9GtHzP9v)3j=4b(RdFQ>NpPR_b;?O^`95kG{@GZ+Bc5RGX`N6Y80!yfbZQbfTf1sZMToo#0zg+ z!@oxaXWL)Tf-1&C--cny(LcSlBco&P*0l~FWk>Rwdqnn4SgYQ9SQOwHVE6ewb!I_4 zmNs|MNd;=4-s(%vWc7ZPrHS%-iniY@a^=*a>l&W^i+QLWstEd%iy6>{`5U_s5Kd;w z8dxFZDh`M|KIebJJz~**z`Bn;N=j(q?wcdQPwti3P5x8-SDuI6)btu{*)bKi-iFlR zOMm#Wp_OhfnUHS!+Lb-g3GJ8AWpT`CDTo|m2gG<_6)|td!3&i&0XF0L3{_*|Rb`X{ zyi&V^Lbo1hM9G6#C<%nF*ZmYb+ZW1KR4ZM-%%$6NogRHBS=myX9^?3na7(y_6$Q1k zP;BTHRw5>~fD?soF=2xIa#mm1%alj^ckC7Shl~$EgV;Qjod><4gP+>!VL%VNa5Ei-hqtAdeQpj%6 z$(l5z{rK~r_Z8>ioS8%CRjsyxCc;)1ka%bHFdoFZS>FgdX5Ejnxs% zf5Lt~e4R1U|A?e@hATC@x$Ty2Q|Qusa|1jsGHYUz-C|Bp=Vx0TXv}_+ps#>m2gLe+ z+;%H38ToVn44r;Mq3^A$C7HCG*_rhgDvD}bIr#VODBGdk)Q3xq0ns7f4bWJtZ63v4 zmc$cbQ4z9V*j+MMYNZvnMJ(A}^w`@W_2rT<874WcAFdA7{|NW0G4gEi=ziiSSqrWj zwj^D0G|r1aQgNa+j%KQB;^g?851?JupHrmxb+{A!!|s{6IWZ!N&-DsBo5p=Fd`~DF z*WbKl$cA2CJo}M=a2TMPPk)&M-4^(7Z19BPOJ=#CKk}do?91T+5gIqA)-bIjffw)j z4w3n8w1xIQt@&;RP}>r+OMG<^XUzN)##HvT%Q|a0WF_eQ=T;Ym_w$m0;+k?$4Y^m& zR;Oiby|lsN^b;~zXZF|lT-B7{irewXF7mp-@I3tP9JkkaX@*eLbAn|rTcBq+*+wqHSC?c)6u{Kfr4&UAb(4=Z7FHdNBNZ)Md)2sXjEY^zs z!ooy+11NxG&N@4cFO@A@LI2h2D5;QT<+cz{xxJ@B>HKWl(9f)_{VdJjX_PAHId7QC>3`N|G|{+8te^_FUsRGqY5QwBjLr2G;k1**#Yc9Ycd zNIQ3PU+BIwxAK|le8?GBim#e>HIS2@`a5p^1cQRG{*Tx^f6<49@y!>U$ZdG{s*#09 zPM@Ik2}l*2g?G*2oEG?y9XS(Ay2&4{kdVV?GF(n6nddiZ9Pks7XxA<=P==B=yBjNtWEetL^EK08hL$RMse|L%i%I7e zy0pOUABJJ_1QM_Gr2KS71s{@*>_{Q!D{A0$0Exf}O8`mqiV4`fNYaNYXN^KLS z3Iad$c=uRKsqc-lQ7ozs&Ttmo7AVq`&ZZkoB2D~5#|x12r?2eCwTx6b{i6{L;XpoT z50O7mlD&83u2(^CiNiUxsl1s*9~0$}FkK4FtZoD%dB!X#uF=U!St3>r0JoaB86QZW^d02nt+SuoMey4x7x1+ANJ@>k_`s7r~u&IM* z@KHI8EnN0yZaW;%DxlsZ-<7)sV@D{v_|uT<)+L`GFqjg99*sNkD9t4Vp;;{kt}T#J z_iY4u>Dl|meW_a53kkLJdf(jn)r=hrMAWzq>Y3|SGmKD@-i+b4^0a>maVf-{O11VO zHehfNGag4ARY??Ks8$ zj@OF=>j<-_TU;Y#SFEjuKx_XZ&1`jL&w=ASW221KDXAiZKqY)2IjOLg%8rY{u?(a? zqJRIjEx5T0`|Fxq2bh1eW;08_#|Va|^yM_y+S)ZYw-1c|ks4z=|>VEA1;j-VG)}Z7iXbNl=>vvRx4L zfgV)b5zUS=1glH$xIlvVLF9ne5tKEB2;MaP-2L3W2J{6=vL>P$F+t3?7Zcyc_&Dh} zT;VRoR!t;?9nCb=XmnFT(DUB;k7svww$s}Er=6K3WH#b_1C`(CSN}+ysswy_9~GWunM)K$u49w2pp^pw}o(9 z{P-tYbiW%IcKcUFd#ZRbFQIQ9yFdzOZynsTH+v zK=w?GX4Zq?7=C@8I)pWCSA}T=d~pvehi~!FcT~de>y1J?IblzyPT^|8>06Aq?}x7N zu2s5vo?u12NqtG-O}*!#6NDwe#7mt{hLJbOgsj$Zj57LQf^j}>2YFN`VZ@)p-Gw8- z=BFCyK%P!<2z%gqLQWFsH#?3VcbxmojyD(tOxWm7 zH%;gNERIKn_xA6e`UEsjR|Ni;h$rpr4o6UOM;fsZeGx$t7u=0GYykPzt?)^3%wqt! z!rFp9YnULKn&t2O=Uh)>&&Y8S>@xYM37v%t#YW6Low96>t7$p?Ql;UzsG`IM-FWCa zQhxTm^P@yiR{ShpXX!Lwot{5xij!9+m*-V?%ES$^UCM7tzR_pQD&5J$u{zZvwZ$plch9eN%BCf_P zo*{P)mMv^4VLOy0U5Lby(x%wxLNd6$PdhoR7>gMmAx=FSo#D8a*2Tl@cGdgOXQV?a z(H&1=OqRQ0^S9{0H%esb_&i3Xe(4d|##5dU>`@PQufpoG(bczm|M3xPDd)Yp z3*Y&V0dfuh_1e%ByYBpzKm#$?0OOJOr0gRGyY1y{`F1zJU7btu`Sy&(ulYu&U%gm% zsEdXn@ufqY3X$)^rWqn_hCGdP1fyy{=?8*rUR0>4)oaCdCxOL6SiXsi=5u{zFdO`@ zBjOEmfGQ@*Wh4h~_f=G+3-=AQ`{o~g%;o(9MO{Q&655oFP2q&s-u*}?3&z{0&)2Ne zH;W8r^^k@)3(=xJnoQUKXq-j5j0v^AY0fSHD}0R zeSxN92Yv?#!4rp4u6&`&K=xgmd=TwFl{=8Rzj3>K^vmhaC9jnbO2)paRD@6Zz(MdU zYGKfBsy$-u#SbKC3GTKj4q%%X1S_v++h-$awzd5Dsi>~P-QX;DQ=2Uyi>VO^OunY^ zStr=);^u_rmG=t(6RAkW%|@xn48$09nOlx$yx{xDGG9(?nXeLJkk%=@dY-c?p|5o` z-pvtSCdvD*L#nFJIT@k@*yABhP2=bM-?K})g)9j=KKoE+33FjH679J^h+CpK_b&Lg zOwBepjsWGBDZ~W~$KSAM&|?XY3Qe~hGbwts-QBg1}f7P#5LW@#@(h>8sn9SDAxCqfqtYhfzj z9WUDG_L!NWL9rBSs%>^YP&I1+Ki(Ya0?YWHH-Ms zxvH=ov1RsSyssyxw3t+z5og67@aqN~6-CC0>x1o&4{!FUzPG<5kB9=_Mhj-jK0*D( zgP6%3G8dA_R>E>&vsvXiK@SA&K)C(gu6r*fu||A*ex+&6XL$Uq0ViPT(?9oBh7ukz z_9LAxJIxl2&tyL@#bV_gq+MiH5n^6?m>MZ4`OLh6*cZJ2CM0gQ$L5^WZ>q>l{beoc z3Q-<+*>eIwGJnU?-g7P9;?%&C-Zk7g`{gimcgLE|emre0QlsdT#)YV$#9P~&k&{B$ z%N@`~|-uq6ngR{Wn@nwtHA_^T7QMBp|6y zP35$#X-;}B`vrV3`J$e=)pcKSRjKiA>ol7Tv3QNoZwTt;^SK08gW3z57;#rH;g!9D zBSLcC)&amE(`2jop3vgZGr$6Oy3#t?Ea-`8j~c;3k2E{7!B%<{t68 zSX*ny(-53Yd2j6xlmeAqCbQLP^aQB4L~MT2YX3@2=&VUY4;NWiq#JT&F%or=dU5dT zq+!$}%*MJf^3X-0$D5)~fYGZzlZ!fD9>3Adu%lReH~9-cl#qz?p~Ty>=8x@4x)oZ5 zlfVbP#REaM#SJGxI*#%?Mu&~{cT{w+}3mYW6!w4oI3kzesAQpd-=<29k<_GISQ z7EoPqz_*D8HuzMdM}Wrqzv0x{y${M^MEZXzCVf>0X2g4#>PAC|23Q))!v%%K0a+kB z?@}1mhV@Px4sL!*bedo^eV>1OUU4t|lQnjIBzJuTcX6ICd}vYRUXR2^!DS+Xy#4-t z?qh-z7{gV@%=WtFVuPmRF3azvVP7&U21A?(7qaR?rRfo zjUMkrtFVuq@B*27AFzky>Sj|Qq&S+q>%ks$wmz%0S#CfUB+1fHnull#ZHYz(nt6)i43ptbaz z*_p2U{j|)NecMgxXFs#m!PNie09MfE7;szW_p(kfp7Mb^M@PE^OuN)zSGQ?)V3Anq zkR$7|1rq$%ElNNkpHh_t=>j?PK3@18BK%+?PpkVhtg@7NZWlp(+X#l$1$q!4`0CBZ ziX=FZf~PdPb4$?c@ZL;|BAR74_BEg2-FW8bVm#edTBE-~@bCkXz|!8v`};z|tFW^^ zyGfp4yKix0=daVAVl?++17qpMpOMtd3JBc@xT8!B^T%2sKb?sJ$os!rq332$ohc-o zRY4MaRFf8&gQukFzViMm+)1kygC`7Gm$E&Q=Pp9;qyWVRfbpDIA29wfN9b4=Q&nKA zXH99m$;=ro(+4{X!m`VB{pz5PDp`FpufyNnAz56k;W5>}FVagt29#qw1(7%PdzV`w z&qCMfx=jYotxDCeiW0Oy8uX|3_f!ilR&~BMh+EnNyR{#9TKcX9+WVkBW&MTb8+T1 zI1hb6OMjo&bt=mkkdHz=C(5Gz+{mk(+!ktd`x)$Rjmpt))6+*HXjO;R(g@;qdKm7L z*=+pNji)K~F|zd6Qk8oHOgzn$P7aPdMVQ|lUmw-ZWej%TZQm}w(u)sZw0b%r{AJw^ z&*}puM!oP0PBUnNh6fOHaRbq3AxQ*8CpC{9IpEkOAiZ-i$`?<%I~>2(pe|EP|5ACru;9|yHgp8sx!1@0J83COr= zrmC->Enf6Wq13`Xxh4cOADjUq1f=AU-eJEtik9zM#SoOMsyW0}(ah-QN%=8sh5z+* zH~#mpL0{8vTO-i~{}Hzn23lduzShQQ+poxu)~19t;%;v_d)O$a-U?|6InZVeyQ#%) zYhp=pvgjcKs@XuV%8$}^2-T+GFt#S|{lT;reo57aAn@xtxV(1Ku|TvIJ?719dny}Y zccK9#*cIyc^zT079K%n+pbJOJk%C>D$cM9mz$2SVuT|*+;*F?w&ToQPsVlZQ3<;t zwx=oWwlaFxE0&23wW$+N(WhR86T;rthe<0aurkAG>%kVKzFn>qFu3NAZ6E&n60_b< zv1V^-;SE3FQW5-k+~Qg%_oOxpd&6>wmz)s9QI)Y5wk!wHu}uKQrBE~0&CVCBwg1UI z^x7w$uFwm^x*&tumjD+##&JdwV>-+aau+&pmJAHvXMV+ZL4(&k};K6IZ$E54v^x5ZKW>71P$O-}|u-=9a8^YE6i^f?UM)ITm9?d?X|Lvej^+l`NJ;YY2*;a81Wv z!Bzu7;R5%v&%}r>-vReN20y~vARk@^PD)omt{lk^PDVw z48&+P=oe#$pYGYA4!V^4-9VL!P4lcMeV-P??Y48VZ~l;-g_yjn$?Lb>hwDab{xmNN zf*myrZ5;X72Pr1C!a|w^Dn>myM!Fl>5fclEhbK7`cF6EEvG^_gp%^TT|cr3QFz*;e1ckuctM&cQF|0c{aUTh;y%;u0<15Me=!gvr$1axR74XnP zerfmMC%;ja9B|k>G80^Xv_S&Ulx=+>&uiZ(PTOxRlh)+kZMUr!JiUQ$Zl0$a;UDE& z2|H6yX0RSgwoqNvAIXMyIKLo#4$_$&E;mZz!+itGV*IzNXFsNB2eY{G&ZrPp3-Bp3 zTE$zI)op10v@p=FnZk0%&?FODN!20HTF=9TZ@`ycu!_j@K#Xk6vh(TfX;&!e2pz_g zz0eJ?y*|C9lA^M&?)ifTlh`XEre>Y??<$gBMk&G~J>$9Te+hA-?Qo1)n=EwMpj#CJ zwUsnqZs_59Nc150tPA0nNrpTLzVb;4dIoMnZh_Fo3ATx!JH%*b{~IAak?OgnwH0AcuA}~O_A16*_6OP-O(|^fDlsA^r zT*oN}-18ss49X?ZMHq>L&$~z}QU)>Gsu3!Z24UDo_mZzPYY}b!J`R>%@BQ&q^EKGw zCiM5s=9ghh&>wSu;=z`QVyY1I21hR7{Y*{+S}Ny&_{)mHE%JkL^o@@T!80OqKw}U? z0Xfl;`j&TY%2AoXY>5BQV@#7xERRf1*Xp`>L|9!*I|Gw0&Go+O5 zl=EfQ7;*K$DLoMljY0DfD6VtZrVXb>?5k!kF8uh`n>T3z-bJg{YcKdWu zBKmJiq9aD?qq5!_vPXj1oOfphy6J@LskJnuOS>NREP?Dcp8L)5%C!-WFxz9nzt1o` zZKu9WzWn$fw4J1F!as|NB7cvp!NgS$AQ%z8Bm@oW-`krYa}%hwV28|fJrJs8(tJqj zZUBJIauAD=Ular8N44A`)AMXPeu;k3tPDfgwI^# zN9GH`(k6Qy0@BTt9gJJKr$4&*BQrZSJ0-<<=ZcVsk}k-ngMCy9KWpXJ( zt9)Uwf#X1EEeP3QCMKH@rO$Vod-&B9=f`=h!L=sta$#E{`U8Ny=g|>#uR(qop&yL{ z@Tq6}bDVl5gUF;JBwdr;C*QS*im}x+u@cUG0)#;C;pA_^8`b_5xM8gihDeHiu~p|1 z*BU-TlOc$WJRE^CJ6hebWSsDO-&&DrnI6vv?sGH`Ea1Ap>e%$9a0H(jA)YsR~%HN8|vf1 zFzH&CP~L}33yp`t&9HZe{#=8%7sbUBWEEkfLMejmEc(|@ZrBL_lQ$Y$s}6R zn(+$MQ6Yr39%ZZz7G!^|MS5{9)2BiLF@ExiSpNj7WM9DlDA?6{BFHpjp_>>vH-V&A zrUvif2AzNa0Sou+k!GJ>-ri0Pb;ki&;Nc2AM#zN2a`@SXQ$8}u(Kd5P2d&p&y4GS?Wj^ylOb3x9ncy3!Sc%Smt zq1K@1VXu)WN5#cW8NexR>ZJSqGgPfOGa7VdL6B3C%$RpM$Bq!UqKGcB9e+ap^0sda zj(Dkm%;1SDqJV=znqp_CqjR z>bwe2#c+g0ZXwV>DAVB`CX||V6-(9wtI-5pZg3}zopo;LU)Tt*O=1|)nTFOAyr%MEyK+32R|+)%&D?)&!p48kh&N9EHV4y4}ifaYPOmq|T}dC=2d zMWqR2vd$_a6Y-KLJvOyeKB=XkW9sMh?m}OWk8s@>sBorBu3Q9<6P;G_EaW>FN;TZZ z=^*cVA4J;Ez38@7%T;&siFfZpo2h{BkXDP`z2iwG9ziY)vhR`wJdVZH$B_-ijc#ik&|M zW6Y+Y>qGS?E?WY?tb%o@|I>zPRok}55kuv-;SrEuOqBeB8K_WRK__cFtcqHWE^3pe zkwi_UCWgk4Jlt;Nd+_vV<-q|UIgapgI8L$k26F60I35g4Ref{9BM`t{n=mf z?&ETq&2*TZqeap~=qnEt?}vO!9RsdixW!Mm%=>xiki7-(#@9HD+v7<%Ju|;cAA5Y# zK1WHwuxx&c8H;Jr_8&QW_w8{UI#jD-_&K@9 zu2tQA@yt!DA_z26tTcWBZ+7D(6cX^!4F(AC(l3P=&K^RqfE?fB;(-Zx^D5k?+k5s1 z=BIMwGc59y3h>n}ULJe=S4aI+0>7L7qg@(PW1zO(7y@) z#DjCo5K(C2M%TbHAp~A~=k7T#y_S6V56iS{Sg~Il(|yJ^?Tot{f2Ta7n}5u;VjA-m zxO}-XJ2M-(t$mGu&OK z+iX18MXTq@k#%Nr>AIw8>u`Z*Y{~Rvnxz<3m&Y=c5Sl_a(owh8Ezfl&jaaZM`=-5# zt>#pb^$u*r-+`XwGh+j@OmRhO6wJt9jw*+bdiXoT6u0tRS6@n8W?$PypMN)`e%a@0 z@7gY_>;Pgayy+L|?#V6=PANGzL5g^5YRSQ$z&~&&d^@b+q{D@ujE(Fww=0+K8C4sC zSeq(Zx-clTaBr1DKE6jgNB?H~U{VJP(0QWy#v0Itk1k9Cb1;0bf)lvvKwxkYTi{DJOzNL1O}IQ{Ir0=peF-X8OAmOa9g3vNG?@uUXd`WhDcwAVJtD(+ zrt9UG&OGgCVBu#gqxrZ6lAU z523x`)Ap(j!Fg|6o$(2rEX6uJdX#O|qC8OxJW`{{lG;?lk|ptKq!1hKZoEn;c6O@t%Q5q)NP+@Uu09oq zvk=}2C!H7VvH2rSbCm5;5QL6w<>2ZfET|8n)+9ROP&WWt4~V2$yE2_Hw+-g_2J;*i zS5ID4F!jRP2>xOpd@ ziI2q@QES01B&CBvm;!z?#W5t+oDj_K-O4WJ{1|>&3w|2c9}n+~r7wh2W8T>R`6WAb zNLL&+^xoI8Bw_$(;p+}l+7UEZA|991A1G2LqQcNd)-;MF)=A0eLm-*kUV1x^bJ~Wd z9iQ9(3V?0!wAopPv~a#R+_~P{-`5|%+waU@aNw^Oyt^sloM?eJ6qPSXB1%ShHp~RX z!HmE^)=ClHtOZDN8Ik6)gQhj1sg2O;Bi5RDHimLFVXckut0Uf;1UQBwwxMy2Q0yb- zYq&awGPYs03&D2t(UiuK#c(IAFw$=W+TE`h&y?Ja)jW zJB*DRqTxg-f9x6V$UDRd{dy=T|L^z>eRq#XH<0F@5`R<;QxuwlC~nN?5Q#Uu{2nZC zSmg~npQPfIrrwr_O86KU=c9QKgKH>kJ~6F!YFg7$$Efj+GW2th1GX^=T~Pla|2 zI@VYKH}KmDW_B#-4F!I1;0@Q{fL&a3ihH#=DDDlszbOi3eOl@*ZqKxCIQ73NR_nyp zIK|dYwsEqn8*=N!2aLVG1>rb~*bm2bLUA0MZ{_GX%Gi(8t`FL+O;Y*~%fvFxvbQyd z&@~<*9UldK}4nV%#zf;J-LiCtn@1%3BCnI9kje(dUe;cR&D~HEu?^a;Cg+ z_il3L_&R_D_APo65IPcloEdIr{5m2(7Y_(kWS345S#ZmSMsx>hU8a{tu4x^q_|Wf( z_y@^o8>h{1_nqUN!Cw!5cmo3lr#vC+_uYDe+V7!v4uW_iAs-R(Cx<*a6ZVpLqa_|O z@uv_rcygQvJ?Od2-e733!s#AFT9*10J~b=Wskp91doB z!rC9$cV>A!DQ1uKIB_iYX?A9O9GT|)9#}Apb1IMy#Uw*Vz>tty zi{zJMAQmXIhD8@>$)hHW$r_t9#cHV4QL1CuhO><68rw7_YG_tbE@R+^!;MKA8`nf_ zso7DoW9Wv{jAMTMUt^_kR2 z#qu-Ay-!1@yvkeI7OWksM)NWTItJWBw)aJ6rM>L=ZLMI*AozST@tROW{~Pp~O_{;8 z(XO48!_vvl!kXS5dbQ)$UaNM~Qf2o()$FSI`Q;R{bXl8>i+YFDK`9bToPiSb7PMvZ zYM6C2Z22r!+ql9K{RMSJ4!T5D^2Ftq3+>Dc?WQ|RT60Ey4n9Oa-D9>TNVM)EU3p%ynaL8P?}#~M;rY4JmslUMZ~x=fx9 zX4@FqW2TckKT4k6q>G$avzu34aQOPrvG3@^WM_>UJzIwm4XXr=5Ad-0*W7`U4Y=rz?(fDiYyy4$eGqpPD7fLFm@QObTkaHpVYrvO+*XkC@DfQFI=Q(%wl zefq7*mmT)2F3Wiy8X+T&Hk%{BpKvS*$N+J#SPfshf=0Knz}@IsO;@QDDl^Qzftoc( z(z?ZVJ9mAgMh$m$tJZlXRkLNvuzes@=(}wAAU7%2g05M`-k!1OfKUPTAw=RqJ@qD`MAdTNIlwj0*C*efl2O% z3p?od9vkk=L#6v4iw(bI*7`L#&S`P?A4R{&$8kuFymNRH8zQ9*#>c|7|7GF7oM_?s z3z+ioz+{bb^}xDf&tP3ESIXb#7l#{#&2mMtgV==2dPXt-#z)yTIq;F~=>s)p>K$Y1 zw-2FC=rc7i5HYTqqEl}}b<%FKr{-~(ojnXkhkO5x|ILT1Z{TYu<0)xmMOC6CAnK3$ z2@PIUtY9VHMokGPuW0*dBPuPtOVoKe;)X80e$`$_{(dWJ)*Y3(J5+l$>mmP%+<@jP zis~2MQG&9>ovP8qrZ6T%t6^TM6>d}umuiGb*F&51 zQmgu?RlHOwo~H_&5pZx-mulL^eXw4h=qRf%*wb!sNn|^hP3Y%MYID6mSDc@en!T@d zy-$uG1z&U7Yv&dJbZ4oXxP=_suF_la^IjO(Y_!kLmVcWp-RXvLpwrIv+kf9`WXesd z64dA6Kix8SbJtE^Jc(K{G|Hewn6oIlW%jgOrF|h#Rb(YPtGs{h$iabAD|Ch_)i-&`<>fj>cg-!< zaZpt4tP8j4sw%;ukY(1aHw=W}JsK?TFn{(38;VZ7 z^C-l{4wz&WOEKO}O(v=xvgcr+^)OdRMB__<`%T&J|Ei7y0sp6|4&u3i7cU?WqJ$f2 zadPc$Xe@jOs~yOGMR2t&4YRsd-M}hbNGd&#qv?${BDu$jAG)4C!SLRc`Mwj32oL0Y z0P}kS9|^NtisBeX@i+~Yak&0<07iRf?e7ATrkS~$8;GDE(zE|32#w~E&gL;?_k^I1 z=;vXsXMeS4iKzl5*C+dp0kwXHXQ%t|pM=90F3El<%B#($@~e;jvm5leET~HvtWc*j zDYa^cO4ZYA;S3dKFP#AZ7rXwmsnrW|0T5j_)WNd>nnHwc`QLpmRo%i-RSos0ubE87 zTQZ20lvap4G!*?`g(*-e^pL2SsH2o17V=*sl#&WiN_0_GQBl<=NP!e5aZ^R4AR$pf z(UM58bGa}?N4*T2C0)8(6+EQJNvysu9X$1A>GTx&{@jnH@P(+{}7-E@*k78+_{GqUX7* zC*C&hf2k_W$!8Di+=G(4r9nRGtlDynrZU@d?4~-~axA98f|k0~*B>9-dhiqN%jtMF znqugD)|wRlp?K8!)btwnFZ52QnPEdBU>es)&^8?d+P2K5aDqI&t~fly&n8Za(m98z zpn8b+Q1y@5q*6_#k`V75p-v)YwiXisWa>qv^4NFbqK^bpDWv?v_*WD9i^|$kWi9FO zi|X2vE>;xhi{ecs$)+%3q{76dX`%loOfa+0Nw|daro>2XiI=*PCiTQC^|_O~xSM;p zm;1P%2Y8T&Btt#yrMVMf*F-E*HQHV@KpGxE4*Fs+hQfzo$VUMRHTr&x$8(wibFhT< z>19LS!(2YXNBI~B@^KF06CBJZIfOpuF`s^xu#{u@EXQ#?C-8Yr;$%+cXZ(T-`6U|=Q%*(}7`u1^nNwe-l&AHDt>lSO?Ez`_ft+}@W zZf@pjwX~DVxdJY3!9=yXiz{`!6(wqaH&^NSH$r>;)uRL4pyM69q`n>GMjijb%RI$H+@yZSnQF4C#j04VDy^EaYRjrA zqMrU!jGoiPm|*28;#KSUjvqz3ri<55U+I z-ECZrmXGQa71wct+M?*Bn;wQSf>DfNEaO>+iA-jS=6nOq`9^HQW^BP$ zY|TuzWqW3^6FW1T_cMoG*$cM{*PkS;S&~Qz@?L!NovpJY9pBAz5%~m3Kmf zR(keb$Dk%lR^E!TM6_Zr%^nN;Tbabg{K{e!j#8xV-0fJ@y0g4@>58+wU(~Q;@s;SQ z8k=0sFrGL~9*@^ihB<4>ZEO8+t+~0}%6F}almHjrHW%$`5j>5FDA68pPV4=G*7hY{ z)_xl&@zx#Lng#j`)lOHew>XtkwL4n2HdnE|w#vN7oI3VDx(>Solt(Jn)Z}5FGIMfD zjT+WyCl8rXl6qB52eIy~+AdbXpxhN)OF z6&qnHHqumVv|3L!RT*chqdeE0q&+IH4foB971{DHBAdg9c-rNC3y@XCxo)pDGn?(6 zJ$v^1$$-Ovh=|BT5fDUz97JLahig%mMTo`ma!By4#7BH3YK*V=C=a11ic3*kilQir z;u6B4NC+V#A{h}0;y58la3ptXYHEt2=5V>Q?)QJ)d+oJfgd|Q*PTlG1wR`pI)&2MX z{=0jDvXoK*wN$;U>{+wtEl{EFe*2O8)DTsRdgVB(20xav)kNjL`L0_oR};T>^8&ff zm+Nge--YYfzcCNj`QP|Dt_%2d!Tj5BEqcG^JOA>~eJZ~E+Yfz54PO48<=;_P;EBzr z3a!wBW7?`t`P3j4R%ta%U8TmWDQXsK{b)CxzxI%xp|jc6`sd&3-~V{({p- z?D?JDxZC6G!TSRV-*ez9`5On$9*6rbP_qX-8FuyohC|LN=WW&Oyz9K_yaIkbjwknk z#zE&Kc(Idj`UV(6PGalptKjM?h!Wj^BU#(f`tdkh~=0`6?!`6O!QU~WqAIKY1a z@S#w7B)D)SvDyRf+pC5;yMV*(fVUgv)5M_qF)V z@da5rqp_W@8BiSVLf!#+>@MI#cu|iH$yK6_G=$*3^_Cn)Ll>mIl1(VLpkmZ-1 zEwIk(oejifALq51wnVsOV4)0XiGbWn?xCb8;IE5#JScKwEQe1trHZ1)54)H9J6RM3 zo9l;OX@%z7D?DkmxZqFlDAKwWPqw4QK4&K^U>v?pJ8&3B{aH#)@4({Fc^MF{#%S;W z0LM{QhEcy4@^X+=eiAnBaX_~fblw14a}?TUlggk>?@R3BfI`>_>Yb+b?bUPx1+}Dz zE)l(V7P$43w!{`Vw&(AmsXh8|r^W`fm7PU1|b!cmTiCsLziY zzkJ{ze3x8y1P~piK5PO#1CRtCbRl&fyjWyt^=*h%1eO-G5l{A*w#%X+2Na26VCpn5 zBplZb`W*+vZ#pY+w-@`w8*?Z4q1gX z1CQH)*B1B=In!ADhBxvNlt?~W4KyEigOWbzZGV1DTpxw?=tUIbgWbpg%Uj$?BuplHdSZ#RIe#$cJ1$-<&`wVKY1!*KC zc{eQF7L2zawz*Rz9(ZpT3u9V|Wjuq_$#sb?##ZMLXSFg0>w_ zU6{d9$hL<3I`C(=+aTmgVe?!5H?-PJBua7m-B~FQN9LpcBY@XenNQ2+E4sf2GIa#= z?*5B7(O+fF;SE@^Ah0FtHYxp06(F1&Mc)r4?U7+$F zN_<~YwB@C_Pmk`VYE<^qgYBX;_>9c^jePMJ&kHjw zR6hZ3)!HUgq-~nSr(rZ@q#L?7sx>oZ)>ou$PC(Zjf)+eVT#S`M5iK>mlnA6}BF=9#u)}G3zmvwpLgxRNVTW^*xoc9=9Gx%@fuWsCn9Y8rNs7 zXI0R8&Uy~-?zVQT;np5&53awkexZg~d#$~y#oA}>Q^TzN)_yhEYPDKb&N^TnP|ems z>!2EH9kLFotkq_l1ak^||#qu3c6auIH?Cxc-Or9~kSr^?%f5)&=W=s<)MG ztFT>T*Ql6XXV)p8J;)xU{PtybK*jBPyI!U2pdD0cyTNWyNjqeRP;RsvRmcw8Vby3y z>d*(uP_QnjeNTr@o}I~~_%5_kxAmtw$OjJS`22036g z0P3VcfrzUo#ILqNiHYh~b)C9iO~UVFq-%MVbSv{T^nL|AO^F$=gmt-!yH|Nxx=GDc zvzSJ!n^C?^U5)EZ^);kf%(oyW{wK5?ujZ%;xQ^v}+-(Ez%qn8fTj^DW@vC>qO8*+n z?=|G1d>VoF*PArOr0WQKK1t7WO&WzKGs%60G|Nr5nKXm2=acflIi7hq-pc1&@$^>H zN`9|1`T7d^R$xi8GQR?gb_*x!%UoXli_sDFvxgjG*hy`lDE)H1cK05x)BkUgw#fzV7L@xK6jb{m<0J zD7VAF`Fdq8?5=XiKJXxFXu*=;E2J8kQ;;F?$M3-JKSSc`&@KSni3c6QEMm|A3BHvE z{8`Lru+h{lr0)!9!1yx384pr(0?K5y)g7$6nZWW{U#7kq;6=0 zuDPZ{y3!;I(b-nfg47g^;F)>qn`*w=roK>LT6NYS>oO}~wOAvpk=Cusp0Hb5j$S(U zEpW^{S@(zMI}ef7ONi9BI5XjO&xMD)7O}?|=dkRTajj8S@Xo-CXoe4X9OYxUJMDZQ zp2946;LkWua$o%jVwF?yGqxcfXhpo(#xc1Sf zJR`f8^nAs8?!+6X^Q#6ZH3I`8of_+L+%?ey8Hrf)6!CHj80^8dov~^=dTA%tMmdYo zchI>2iD*HKt$?PT9%Cz#ym8W5<*ZUoc%zHa0e%sEbuk@bw9v`8`UKZZ4|?~GIGSGD z+U$C+-9jnvzD0h8s}M^t^2+3U0`|f>b};vSjE42!gsNPWx`_W8FnlIl)y;Wzb2r;p zSOYX?0=Qd8T=^(7g8%(IJ7RV&$Q81u+e%sjT9F!R&5AKE&u{day};hWt_EZC;*}x2 zt8*d0&SK(tPc&dw_s?=A}X?Flbro(8lD_>?shi9w;75SCm@N(%=%FIyt*_G8f~Wvkv`7|DMvVUwDX1< z*MCf@{x_j@RzO!bJNvj^B68dddGB%#K#Pub=75vWa9!;#^gFe`zyEB1PyZRp_((u; z!Fd}q8%dtu2zW}t7} zoR^Fpko8?y2H0bLcTjd9^ja@RJjFGMJdC=w1CVEUS_x1BKC#iK(Z3%sokzlRM*k9*l)Z z?EuDZBendTRUa*lpSCh!);j{U*uC_|Fe+DD&T<7%v8Gq{j(B<}$hU*Ag0k{Gwqy;t zyj-%53~A~%7G|m%LCI+W*UHJ9(TMoQfNpESJEy?o_dw1bgjX|*Hg=;k2QW-^#+r4T zFl4s_vIlzAq@d2v1H871R$4p?Ipx-hxgGUt1I%a}<~g~dp6D%G zPpY~P0&dUiRlm2NBE5RLpjUx8tyldyuWnL*{-Zuy~9s1sQUI=z*63(>SD?FxDQ}fPH{zF(hoUv%z`X zxr-Y3ZKnwsnd#J;eMKMUuo3acF}!hrXA_q@TWMEkI!y&E@H*Ap%|b7a<9Cj8yE8(c z`hc9QARTv#ZUeMKkw%fbLzuU$3JwLNP4uD# ztJu(%2c3hmBLgf8O`F9Q$a*f%jCIo!?l$YYe(G&)IlE~etDeDfR&wvM4R0KFPlgmp zQ{f(x25td_$ITv>-^4O!OHNKTe+6p?FG04}skLg2+Jvi&wZ!$&CUNA&Tv3oei4dPr zF`YX&aRMJ+{IA~K^^m_8q`;`NOJU0wlyPhjsqfc08l6<>#dsr`&qj(PkEkN22A zF~##8z52X>tLXwRPoJ#jNB^~PF472KekkOixkz^R8oBS(J`PvskMg|oNWJC`%8%r_ z=TPBHug6kZhhz4=)V-a0N9AHCmEeW?AVqDWUtAxpp!dc9=yJX81IEiQ`2T*-d8LA8 zZ}|#V?&a*rVa8YPNk;eCdCsqJe^8&N&({@MtIneJt-l?v6UK)5O5+!Li6YIXyzy0D zYD@Rg^vPs%Q*mdd^vr09w^|;lmDtuiei-rgl#Gu*OZ^FC(h$Qs>WBTw-MFb9Wk* z=X{-+z1~Ih(CcWCee)OLtLH1!t6|Jv{N%9lZT)JhyLvK>H33p4ztcMs)^q}GzqGxB zzR6rQhi3!E{F!s4KCM&qP9nw~S^dirXBE9`u|r2H*&%c9Gj>R9)(L3f-Nk2PN=_pD z)q2ADLE!`)@<#ewZ6%!P^T4I`{a(PZjwi_X7)tx;J72)t9hLOGH(vY;A>5(Q@Oe0; zM6VY1xbwcVE3?4?)T^iHdmP~T=H2W+nD^8fcda&%oTZGu4M;-pjrje9vy~cj1npQc z&sIE@$GEoN)sLMQJ2OlFeH&M8iXxmI;>IWI+K2>FJoVM%T5rFR#1loGeg*Q# z==%gllC0_}Yv3 zvCGx28~l&{MpmVax$fOMdhNcTX}|iALH8)agg_Vx0Al>qz1mgQO5Ot z{Vj~)*g&zya@T*&3z35KkUljIX-oQ8`;h8)N52nMJUGBjFlJ1JDFQ+Q=jA%e- zyR*i~rk2j4T@BZt>#5Y6d(x|i+ay&F1cH z!_PaAHs-CJYopFM&p~20fM2FMkGt6S%0WkoW@@hF{S=}DXul(n0KdCuHQ}#0sf*dm z4xhX&-#wOT8c_H^iNwsx%VVYfIM*ZECL8`dD(kvTZM+^Zcdf<}9b)P$l9YC{n>vAM zOnC$1u0wo%|G8ehk(=z66rY>U`;33Khnw*3N`8}bmv`03)w`Y5{f>%H1d?Ly zJG9a~|J*rE=l=ZJ1ZRCkk0eyd0#%{oXzJFSN3KPO`u>V_fB;u=S3@$_JB#yQ0eZQ? zXoQjosLEI;sqs#LU$?kk!wEID2*<%9eWO=i&y?fPS!>{v(+p>;>@r`feauzlN?%2< zx^SMkr)=+A?;)EE6>BOU+#sg$Mr&d z4(tkO*x|h9EQI|mhwE^;POr+V9a7ZM6SANI7N`xS1jn24q6s-{|vP0X<-5%FNZY}+`5XUb@2MI zx!azX3#2wO=ICuuRt zq^nTAO6hZ-I@hD7-n7zXIiG$xplK<~wZM`$`!J5=K^U_%`4ejLks@}vKEh*SMLX^tt5g z_*`RY7S96R$UGY|G}~y3+o%niNV6I2<8pct&HRe&N@#+ikZPf`Skfy%`@!r}{|y74 z$Fnc}{gOp3J=Ohw$zq;vw21y!_Wb-pBM8pWfAam(5GMJ4Vy3zk+@Jq`X$Z4?!8A(E zrJj&ebNUMm{r$FmuoMmHQhcLB`4F8#rQ? zsfD{t!#z8M&D2t9mt(%lztLs-E5^Cr%2JG$bu3p^#8!&ENGSdFf$Xu!zfUROE)5<4 zP0>ubon!7aZVIb0VV({f&VO}p1gzY(%p)K}BaD60Upe`4CueADxe8Oq?^S*L)^QLm zyy*QIkj-1vw}1=zo^-bQu38Q)bH923Sdi~YZ{zo*^VGBIC+h3!E%k3|k@~6HfVLae z&+z=`>V5UR`apfC-ccV}G4)d`Vcn$Kt(&c{Sw8C)>o)5$>tC%Wtgw7%Y7OHzP%YLA zNF%K6*8j4uuzqI!yLF}YAJ+f1#=!X3SmWh8Q0sd64%C`tUuGw)8z}MDU^eqH51CUK zvNTv(w*1R6mfc&o1J~Is-&5Pde^1n}{sq@sYk~D`I2Tvh*Qk&^&Yq-V_7r;x{Txf( zhx`cg6UfgZzli)Q@>|F&k=G!vN8W_I6}|63-i`9Fkl#c8E%L|6pCbPO`3vMOo$;>_-#6l~{QmCW0^iPuTI zzD-Q{cwNHlGG52>=|Ps~@H$hjoRL-YsFVi}$$g;e24ACsmI~Mbe}Jn50dRYOycdAw z3|zs|)yU%m@cRPO1G55iSqHcRcd~Rh@;xjqMZPca2(C{Ao(;Unx>u3kVreDv8kXR> z2Q~$^26hAx4F`V3y7!QO%hJbzPXm7ld=cmhz^4x|Y76w&*VYH>!}ZB}NMHRhIuTbQ z)7sQeM4nO)3t2zAeqQ~2{4T6tge#+!dc=YC53uwY@>485kNhK+UPpeXeig23>o?T% z{BAvB@_MeX)bBz5HB0X!e^~#!`p@b=um7^1abx{iN4h+;4rOb3SqhX=0; z(jN}OcMsmk65`Y#r95~$@`B)9!NtLQQTi_H9zy;eOHT)X82oYYC&71vh<<{Mz=DY7 zgN*Ki;D#VqNQ1vb{tZhXAb%A6B>4N_AA^4iBH{_23toUBwrP$L8#a)>4WMrW>DvJM zHjuszpl`$Y2GF-*dc&*+(zoG`hC3VhZ?ZPr)3CJRK9(M7c%tE1mR@XlwSiP^SlO_q zfst4PBD#jHEP=}!xX#h=tA_U)NY#dq8$NCL14~~tbTu$qYv^m}5AjRqP#_czC0QCA z8Wy^erE5YHL-ZI!GeWaN{3FVz+xXqahZ;eT#-|&9i0hAKw8oz_zT3E(rFD%P8%dAG?Txz{ zf63Bs8b4_Kh^0>&f8Y2=mj2Y()5yK3M$jWndW1obFzFGFhqGb&sNpNZSBDv8g>MK? z4|8`eJU4ttm{JzLJA6-=C(gt7g&zq&!P2wg7sIcz^j3Ifn6ecHEy9eg!&}2U!n?!2 z3cnZrZTRExr{O<@zX*4Qd&7O<{zz>k5D7<;k-?E+kt-wDL?%Y2L}o;0N9IN5M;1mF zMV3UCMIbYg$0AQfo{vCMBCki@iL8pOMQKB1b7Wft@)6k+fow$Hm(e00BL9x1&yYW7 z>B~rWge&He^HCM0d_;rMXq47HIwU$gdKF98Mz4=jKB69JWc%17*u*qt%TN9>;1(ir6< z_DJlB8091OV(irzs#vRN!RnmF`fd}4e`d`2ABF+ML2d5JGXUKC#vUlxBL z{#cy)FaCV|NAcHLdMCar&K-{UhWO?6F*LXmWg*0s}t)IpkQK4VtZm&0<=r~Ch#GewNTjE^eLefq` zqLQIxJef^Gnvz!}uTG9nf@aC-$yv#{Nm#4ooyohC_aq@hNm45bJC&pyB|)ao;QspnIWuoUT$dIxzGOQ1?> z152<T1&=`S6wx2Iv5(!WgqCjCJgnlSxI`uFKSrXgeLp7go&g$(px#-9mg;u%<>%;lLY zGFNAy^)fePre|hlAX}L`GIwU~&cLI{EX~}Pc_afGWuDEvn0Yk=%4Ak%)@0UaK#$DU z%#O_N45*NKF9Ql>KIRrOWGF*BlYtCnxEGLt3}xs?WFSLXTAVCoC>zc~ezK6B?654P zCkyGxPRzpQWZ_F>XJ=t^vXG$c!YnLK78WPFEDNoeeJuM__IdX5qwMS1cUS_=vXrAN zXqKfPk=>Tvncb89b@u)2huPm{Kg)ie{W1%xWT_Lg=kwcvIZ!1R%z+{~&?7e_H#~P$ z4phi-%`XQ^Rfjts6IldcUKNnbk zmgP72F6(O!@ZFUxuVDGK-JbVstqD$_c*1;l7uy_Tn@3ru2Wy>SpMKWgCGXnH#6zy( zdT8x9)-yh+(O$9aoLF@)A%3%JItj_W^46eQKJ~L@;1XKiTfl=i{;+ykKFj)t3D1*k z`7--iF7-Zo?DkyN&tuPb6WT?rpU3*!Ssu;u7?y)9hgg11dbW16<~$-h%YLDDocQys znOPbM*^^j4!ukj8D8|y!$2iuXVGpk`zF=fw-NCu^^gkzKv7YlXk;O}#*LFrC7g&Ek zuk+b5(0?zkE7*Sv`)^^Cv8K?26(szpNU1S|c@5t^&-UvJ@7B&1yxD76vxtzdWO)Kx zZsA*+uf9)s^eCrv#Kih$mN|;`0?W5cKQ<#NYb!@TLJV-+T3)T=e0MI#V!7sF*7vi1 zDa&mv-|2y2jxMu*uk5@uC|FW+w5(?HAYVz%jzKLYHCqQYm(=VX1X-(FN?z?FFRkjo z-IYp@4Aw+BqPJ#oS-MNsHTsQmum?vo5wj*kHpm~ z>9a`Uyiey{^l6KXUiIl18LR5kkpgG6rxo;oSGr#isEl-b>kn6{-z0EWsNW(mn0l=N z-jp7SfS(kA!`om)d}G!qe;9PL+cZ7O@CQU zd7HMnwcriPi?y8Bcc~w|HG9iy%GOF!fqTX*)ZMZDvvWbp0wq>(wXge8)=o zVQ<~zC2h718e7ula9w*PZ=u{mX`i8X4mFRqP)7^CMD0-OA6>uEQ{Uw4ck9>JtwVjc zZv?JCU_VdRZgJZ$l6w0rED124cV?aoWGCtrdJ4JMOIyl7hPaxWJZgFHo6!4bR^G z`FTIh)OY$uxjx%A(u+Qu@etZrz7hjL}~YR zT(g>G`qFkk`+uAGpUVE(-r7hSd14=Ricpn#-9?vdDwlCfY-LP(_yU zwCE6R8H?Jl6;7zo{)F&Ah4x#8`W4#u2;D2R-y>dnh4vTfo~zjYtZ+zqdqjop72A8_ z%4!jfi7{7EKkJBQm&e0gO6qH`V2!7KIsJAWdp=Bh>DW`pJ3Dn;Pb%m(b7(sh1EVT-*bswlUnk zmSr6|UNTo3-TtTt+bcLzjqTl@NPnNF{`iH`O-vGxcrtbJeH*yE<=0)&JzK?JupH zt=rW9w*J++Po1+KupU$wte;ssRll6dvKClNxRZLLim2hJc?)?Z@*3pz$eWP2BJV)n zjr=R*_mF>!ENgMHnyq(9YgL!3QN5_|Lq_ii`fMwJ99Fef5_vGn!;r5;z6Njkk}bxP}E()*%&u4)^5VC;11`>)n|O6>QA!}MOP zy^!SrOQrWc*rLT`7OFe6&`M)>^m2wC1j?3t35P;|muc%#WbwGO^+a8lGn; zWs?af@e1t7NrInSyR3h&z^T>t^9B1>h5h_Ir`jG)&F|-1?tXrOQ!UWP0;gKwRLc^4 zPC?e3Y8y_q{(s<9wUDRF?g5t$GAA_h)U?#S^dfBPd|s7bbg8LdA=bgVPRe-q3G3_D zB5SerZF{^e=hSLgp2YtvHe^oVWQ*r-;G1s^!Sy~sFbuHFQ}Y4SBDF*ov7pDcCGFTle67%RJS+dEezIx(EHPp~h0iT{nq^upVceb_cBj z{bu_W@fhs2wC+LHJjf_CC!UA>8rRnzhLYs&QnF|E9LlfFKPe;J{{H}2avkvi0000100000)ubl~ T00000-0(1u00000-22bV^XJ#+ literal 0 HcmV?d00001 diff --git a/packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-600.woff b/packages/mini-apps-ui-kit-react/public/fonts/TWKLausanne-600.woff new file mode 100644 index 0000000000000000000000000000000000000000..1389fd359e66be0f686aec3122fd816df4b8709a GIT binary patch literal 43196 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 MmD-Cfa9)zzKt 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 { export interface TypographyNumberProps extends TypographyProps { variant?: "number"; - level?: 1 | 2 | 3 | 4 | 5 | 6; + level?: 1 | 2 | 3 | 4 | 5; } -export interface TypographySubtitleBodyMonoProps extends TypographyProps { - variant?: "subtitle" | "body" | "mono"; +export interface TypographyCommonProps extends TypographyProps { + variant?: "heading" | "subtitle" | "body"; level?: 1 | 2 | 3 | 4; } -export interface TypographyHeadingProps extends TypographyProps { - variant?: "heading"; - level?: 1 | 2 | 3; +export interface TypographyLabelProps extends TypographyProps { + variant?: "label"; + level?: 1 | 2; +} + +export interface TypographyDisplayProps extends TypographyProps { + variant?: "display"; + level?: 1; } export interface TypographyLabelProps extends TypographyProps { @@ -45,19 +50,19 @@ export interface TypographyLabelProps extends TypographyProps { export type TypographyComponentProps = | TypographyNumberProps - | TypographySubtitleBodyMonoProps - | TypographyHeadingProps - | TypographyLabelProps; + | TypographyCommonProps + | TypographyLabelProps + | TypographyDisplayProps; export const typographyVariants = cva("", { variants: { variant: { - number: "font-display font-semibold leading-narrow tracking-normal", - heading: "font-display font-semibold tracking-[-0.01em] leading-narrow", - subtitle: "font-sans font-medium leading-narrow tracking-normal", - body: "font-sans font-normal leading-compact tracking-normal", - mono: "font-mono font-normal tracking-normal", - label: "font-sans font-semibold leading-narrow tracking-normal", + display: "font-display font-semibold leading-narrow tracking-[-0.02em]", + heading: "font-display font-semibold leading-narrow tracking-[-0.01em]", + subtitle: "font-sans font-medium leading-narrow", + label: "font-sans font-semibold leading-narrow", + body: "font-sans font-normal leading-compact", + number: "font-display font-semibold", }, level: { 1: "", @@ -69,55 +74,38 @@ export const typographyVariants = cva("", { }, }, compoundVariants: [ + // Display { - variant: "number", + variant: "display", level: 1, - className: "text-[3.5rem]", - }, - { - variant: "number", - level: 2, - className: "text-[2.75rem]", - }, - { - variant: "number", - level: 3, - className: "text-[2.125rem]", - }, - { - variant: "number", - level: 4, - className: "text-[1.875rem]", - }, - { - variant: "number", - level: 5, - className: "text-[1.625rem]", - }, - { - variant: "number", - level: 6, - className: "text-[1.25rem]", + className: "text-7xl", }, + // Heading { variant: "heading", level: 1, - className: "text-[1.875rem]", + className: "text-4xl", }, { variant: "heading", level: 2, - className: "text-[1.625rem]", + className: "text-3xl", }, { variant: "heading", level: 3, - className: "text-[1.25rem]", + className: "text-2xl", + }, + { + variant: "heading", + level: 4, + className: "text-[1.375rem]", }, + // Subtitle { variant: "subtitle", level: 1, - className: "text-[1.125rem]", + className: "text-lg", }, { variant: "subtitle", @@ -134,6 +122,18 @@ export const typographyVariants = cva("", { level: 4, className: "text-xs", }, + // Label + { + variant: "label", + level: 1, + className: "text-base", + }, + { + variant: "label", + level: 2, + className: "text-sm", + }, + // Body { variant: "body", level: 1, @@ -154,25 +154,31 @@ export const typographyVariants = cva("", { level: 4, className: "text-xs", }, + // Number { - variant: "mono", + variant: "number", level: 1, - className: "text-sm leading-none", + className: "text-6xl tracking-[-0.01em]", }, { - variant: "mono", + variant: "number", level: 2, - className: "text-xs leading-narrow", + className: "text-5xl tracking-[-0.02em]", }, { - variant: "mono", + variant: "number", level: 3, - className: "text-2xs leading-narrow", + className: "text-3xl tracking-[-0.01em]", }, { - variant: "mono", + variant: "number", level: 4, - className: "text-[0.5rem] leading-compact", + className: "text-xl tracking-[-0.02em]", + }, + { + variant: "number", + level: 5, + className: "text-base tracking-[-0.02em]", }, { variant: "label", diff --git a/packages/mini-apps-ui-kit-react/src/tailwind/index.ts b/packages/mini-apps-ui-kit-react/src/tailwind/index.ts index f446554c..b2616809 100644 --- a/packages/mini-apps-ui-kit-react/src/tailwind/index.ts +++ b/packages/mini-apps-ui-kit-react/src/tailwind/index.ts @@ -65,9 +65,7 @@ const uiKitTailwindPlugin = plugin( function ({ addBase }) { addBase({ ":root": { - "--font-sans": "Rubik", - "--font-display": "Sora", - "--font-mono": "DM Mono", + "--font-sans": "TWK Lausanne", ...gray, ...success, ...error, @@ -80,8 +78,6 @@ const uiKitTailwindPlugin = plugin( theme: { fontFamily: { sans: "var(--font-sans)", - display: "var(--font-display)", - mono: "var(--font-mono)", }, colors: { transparent: "transparent", @@ -149,6 +145,19 @@ const uiKitTailwindPlugin = plugin( narrow: "1.2", compact: "1.3", }, + fontSize: { + xs: "0.8125rem", + sm: "0.9375rem", + base: "1.0625rem", + lg: "1.1875rem", + xl: "1.3125rem", + "2xl": "1.625rem", + "3xl": "1.875rem", + "4xl": "2.125rem", + "5xl": "2.5rem", + "6xl": "2.75rem", + "7xl": "3.5rem", + }, extend: { boxShadow: { card: "0 0.625rem 1.875rem 0 #191C201A", diff --git a/packages/mini-apps-ui-kit-react/stories/Typography.mdx b/packages/mini-apps-ui-kit-react/stories/Typography.mdx new file mode 100644 index 00000000..d76af4c9 --- /dev/null +++ b/packages/mini-apps-ui-kit-react/stories/Typography.mdx @@ -0,0 +1,102 @@ +import { Meta, Story, Canvas } from '@storybook/blocks'; +import { Typography } from '../src/components/Typography'; +import * as TypographyStories from './Typography.stories'; +import { TypographyListItem } from "./documentation/components/TypographyListItem"; + + + +# Typography + +Our typography system uses [TWK Lausanne](https://weltkern.com/typefaces/lausanne) font and consists of several text styles optimized for different use cases. Each style is carefully crafted to maintain readability and visual hierarchy across our applications. Please ensure you have the proper license to use [TWK Lausanne](https://weltkern.com/typefaces/lausanne) before implementing these typography styles. + +
+ +## Display + +