diff --git a/.turbo/daemon/934a1a5ec62dbadc-turbo.log.2026-03-28 b/.turbo/daemon/934a1a5ec62dbadc-turbo.log.2026-03-28 new file mode 100644 index 0000000..9cec45e --- /dev/null +++ b/.turbo/daemon/934a1a5ec62dbadc-turbo.log.2026-03-28 @@ -0,0 +1,2 @@ +2026-03-28T01:43:52.309381Z WARN daemon_server: turborepo_lib::commands::daemon: daemon already running +2026-03-28T12:18:37.344622Z WARN daemon_server: turborepo_lib::commands::daemon: daemon already running diff --git a/apps/ui-site/package.json b/apps/ui-site/package.json index 345fff4..1e291b8 100644 --- a/apps/ui-site/package.json +++ b/apps/ui-site/package.json @@ -10,9 +10,10 @@ "preview": "vite preview" }, "dependencies": { + "@base-ui/react": "^1.3.0", + "@defgov/ui": "workspace:*", "react": "^19.2.0", - "react-dom": "^19.2.0", - "@defgov/ui": "workspace:*" + "react-dom": "^19.2.0" }, "devDependencies": { "@eslint/js": "^9.39.1", diff --git a/apps/ui-site/src/App.tsx b/apps/ui-site/src/App.tsx index 1b97789..2daba22 100644 --- a/apps/ui-site/src/App.tsx +++ b/apps/ui-site/src/App.tsx @@ -1,11 +1,15 @@ -import { Skin } from "@defgov/ui"; +import { Theme } from "@defgov/ui"; import { ButtonGallery } from "./gallery/ButtonGallery"; +import { CheckboxGallery } from "./gallery/CheckboxGallery"; +import { TooltipGallery } from "./gallery/TooltipGallery"; const App = () => { return ( - + - + + + ); }; diff --git a/apps/ui-site/src/common/InnerWrap.tsx b/apps/ui-site/src/common/InnerWrap.tsx index 585795d..e539e9d 100644 --- a/apps/ui-site/src/common/InnerWrap.tsx +++ b/apps/ui-site/src/common/InnerWrap.tsx @@ -1,18 +1,20 @@ -import { type ReactNode } from "react"; +import { type CSSProperties, type ReactNode } from "react"; interface WrapProps { children: ReactNode; + style?: CSSProperties; } -export function InnerWrap({ children }: WrapProps) { +export function InnerWrap({ children, style }: WrapProps) { return (
{children} diff --git a/apps/ui-site/src/common/OuterWrap.tsx b/apps/ui-site/src/common/OuterWrap.tsx index 4a7c1c2..55e157c 100644 --- a/apps/ui-site/src/common/OuterWrap.tsx +++ b/apps/ui-site/src/common/OuterWrap.tsx @@ -9,8 +9,8 @@ export function OuterWrap({ children }: WrapProps) {
diff --git a/apps/ui-site/src/gallery/ButtonGallery.tsx b/apps/ui-site/src/gallery/ButtonGallery.tsx index 68c82f9..443546c 100644 --- a/apps/ui-site/src/gallery/ButtonGallery.tsx +++ b/apps/ui-site/src/gallery/ButtonGallery.tsx @@ -6,26 +6,40 @@ export const ButtonGallery = () => { return ( + + + - {" "} {" "} + {" "} {" "} @@ -56,7 +70,6 @@ export const ButtonGallery = () => { Buttun - + {" "} + {" "} + {" "} + ); diff --git a/apps/ui-site/src/gallery/CheckboxGallery.tsx b/apps/ui-site/src/gallery/CheckboxGallery.tsx new file mode 100644 index 0000000..be370ec --- /dev/null +++ b/apps/ui-site/src/gallery/CheckboxGallery.tsx @@ -0,0 +1,26 @@ +import { Checkbox, RulerSvg } from "@defgov/ui"; +import { InnerWrap } from "../common/InnerWrap"; +import { OuterWrap } from "../common/OuterWrap"; + +export const CheckboxGallery = () => { + return ( + + + }> + Ruler + + }> + Ruler + + } + hideIcon={true} + iconPlaceholder={true} + > + Ruler + + + + ); +}; diff --git a/apps/ui-site/src/gallery/PopoverGallery.tsx b/apps/ui-site/src/gallery/PopoverGallery.tsx new file mode 100644 index 0000000..e69de29 diff --git a/apps/ui-site/src/gallery/TooltipGallery.tsx b/apps/ui-site/src/gallery/TooltipGallery.tsx new file mode 100644 index 0000000..0039842 --- /dev/null +++ b/apps/ui-site/src/gallery/TooltipGallery.tsx @@ -0,0 +1,43 @@ +import { + BoldSvg, + Button, + Tooltip, + TooltipPopup, + TooltipTriger, +} from "@defgov/ui"; +import { InnerWrap } from "../common/InnerWrap"; +import { OuterWrap } from "../common/OuterWrap"; + +export const TooltipGallery = () => { + return ( + + + + + + + Bold + + + + + + Bold + + + + + + Bold + + + + + + + Bold + + + + ); +}; diff --git a/package.json b/package.json index 73fba74..21ca28d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "devDependencies": { "turbo": "^2.8.0" }, - "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", + "packageManager": "pnpm@10.33.1+sha512.05ba3c1d5d1c18f68df06470d74055e62d41fc110a0c660db1b2dfb2785327f04cf0f68345d4609bc52089e7fa0343c31593b2f9594e2c5d5da426230acc9820", "engines": { "node": ">=20" } diff --git a/packages/ui/package.json b/packages/ui/package.json index da6037c..cb3a19b 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -26,26 +26,19 @@ "gen-index": "ts-node scripts/generate-index.ts && ts-node scripts/generate-index-css.ts" }, "devDependencies": { - "@tsconfig/vite-react": "^7.0.2", - "@types/node": "^25.1.0", - "@types/react": "^19.2.10", + "@types/node": "^25.6.0", + "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.1.2", - "autoprefixer": "^10.4.24", - "glob": "^13.0.3", - "prettier": "^3.8.1", + "glob": "^13.0.6", "ts-node": "^10.9.2", - "typescript": "^5.9.3", - "vite": "^7.3.1", - "vite-plugin-dts": "^4.5.4" + "typescript": "^6.0.3" }, "dependencies": { - "@base-ui/react": "^1.3.0", - "@tailwindcss/vite": "^4.2.1", - "react": "^19.2.4", - "react-dom": "^19.2.4", + "@base-ui/react": "^1.4.1", + "react": "^19.2.5", + "react-dom": "^19.2.5", "tailwind-merge": "^3.5.0", "tailwind-variants": "^3.2.2", - "tailwindcss": "^4.2.1" + "tailwindcss": "^4.2.4" } } diff --git a/packages/ui/src/assets/svg/BoldSvg.tsx b/packages/ui/src/assets/svg/BoldSvg.tsx new file mode 100644 index 0000000..3f61f26 --- /dev/null +++ b/packages/ui/src/assets/svg/BoldSvg.tsx @@ -0,0 +1,12 @@ +export const BoldSvg = (props: React.SVGProps) => ( + + + +); diff --git a/packages/ui/src/assets/svg/CheckIndicatorOutlineSvg.tsx b/packages/ui/src/assets/svg/CheckIndicatorOutlineSvg.tsx deleted file mode 100644 index 00e2189..0000000 --- a/packages/ui/src/assets/svg/CheckIndicatorOutlineSvg.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export const CheckIndicatorOutlineSvg = ( - props: React.SVGProps, -) => ( - - - -); diff --git a/packages/ui/src/assets/svg/CheckIndicatorSvg.tsx b/packages/ui/src/assets/svg/CheckIndicatorSvg.tsx index 8929efe..6b63f79 100644 --- a/packages/ui/src/assets/svg/CheckIndicatorSvg.tsx +++ b/packages/ui/src/assets/svg/CheckIndicatorSvg.tsx @@ -1,14 +1,8 @@ export const CheckIndicatorSvg = (props: React.SVGProps) => ( - + ); diff --git a/packages/ui/src/assets/svg/ChevronRightSvg.tsx b/packages/ui/src/assets/svg/ChevronRightSvg.tsx index c03592d..612809c 100644 --- a/packages/ui/src/assets/svg/ChevronRightSvg.tsx +++ b/packages/ui/src/assets/svg/ChevronRightSvg.tsx @@ -1,12 +1,5 @@ - export const ChevronRightSvg = (props: React.SVGProps) => ( - + ) => ( - + ) => ( - + ); diff --git a/packages/ui/src/assets/svg/FileSvg.tsx b/packages/ui/src/assets/svg/FileSvg.tsx index 09eedd7..1edb89f 100644 --- a/packages/ui/src/assets/svg/FileSvg.tsx +++ b/packages/ui/src/assets/svg/FileSvg.tsx @@ -1,11 +1,5 @@ export const FileSvg = (props: React.SVGProps) => ( - + ) => ( - + ) => ( + + + + + + +); diff --git a/packages/ui/src/assets/svg/MoonSvg.tsx b/packages/ui/src/assets/svg/MoonSvg.tsx index a3c660a..5304a65 100644 --- a/packages/ui/src/assets/svg/MoonSvg.tsx +++ b/packages/ui/src/assets/svg/MoonSvg.tsx @@ -1,11 +1,5 @@ export const MoonSvg = (props: React.SVGProps) => ( - + ) => ( - + , -) => ( - - - -); diff --git a/packages/ui/src/assets/svg/RadioIndicatorSvg.tsx b/packages/ui/src/assets/svg/RadioIndicatorSvg.tsx deleted file mode 100644 index bfb5844..0000000 --- a/packages/ui/src/assets/svg/RadioIndicatorSvg.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export const RadioIndicatorSvg = (props: React.SVGProps) => ( - - - - -); diff --git a/packages/ui/src/assets/svg/Ruler.tsx b/packages/ui/src/assets/svg/Ruler.tsx new file mode 100644 index 0000000..7f59fdc --- /dev/null +++ b/packages/ui/src/assets/svg/Ruler.tsx @@ -0,0 +1,12 @@ +export const RulerSvg = (props: React.SVGProps) => ( + + + +); diff --git a/packages/ui/src/assets/svg/SearchSvg.tsx b/packages/ui/src/assets/svg/SearchSvg.tsx index 9b9feb7..fc05409 100644 --- a/packages/ui/src/assets/svg/SearchSvg.tsx +++ b/packages/ui/src/assets/svg/SearchSvg.tsx @@ -1,11 +1,5 @@ export const SearchSvg = (props: React.SVGProps) => ( - + ) => ( - + ) => { return ( - + ) => ( - + ) => { return ( - + ) => ( - + ); diff --git a/packages/ui/src/assets/svg/VolumeLowSvg.tsx b/packages/ui/src/assets/svg/VolumeLowSvg.tsx index ba72ffb..818b4c2 100644 --- a/packages/ui/src/assets/svg/VolumeLowSvg.tsx +++ b/packages/ui/src/assets/svg/VolumeLowSvg.tsx @@ -1,45 +1,12 @@ export const VolumeLowSvg = (props: React.SVGProps) => ( - + - - - ); diff --git a/packages/ui/src/assets/svg/VolumeMediumSvg.tsx b/packages/ui/src/assets/svg/VolumeMediumSvg.tsx deleted file mode 100644 index 9f7c70d..0000000 --- a/packages/ui/src/assets/svg/VolumeMediumSvg.tsx +++ /dev/null @@ -1,44 +0,0 @@ -export const VolumeMediumSvg = (props: React.SVGProps) => ( - - - - - - -); diff --git a/packages/ui/src/assets/svg/VolumeMuteSvg.tsx b/packages/ui/src/assets/svg/VolumeMuteSvg.tsx index 76923cf..abaff84 100644 --- a/packages/ui/src/assets/svg/VolumeMuteSvg.tsx +++ b/packages/ui/src/assets/svg/VolumeMuteSvg.tsx @@ -1,41 +1,12 @@ export const VolumeMuteSvg = (props: React.SVGProps) => ( - + - - ); diff --git a/packages/ui/src/common/CommonProps.ts b/packages/ui/src/common/CommonProps.ts deleted file mode 100644 index d0a6562..0000000 --- a/packages/ui/src/common/CommonProps.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { CSSProperties } from "react"; - -export type CommonProps = { - className?: string; - style?: CSSProperties; - children?: React.ReactNode; - key?: string | number; - disabled?: boolean; -}; diff --git a/packages/ui/src/common/Skin.tsx b/packages/ui/src/common/Skin.tsx deleted file mode 100644 index 39481f1..0000000 --- a/packages/ui/src/common/Skin.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import type { CommonProps } from "./CommonProps"; - -type SkinProps = CommonProps & { - theme?: "light" | "dark"; -}; - -export const Skin = (props: SkinProps) => { - const { theme = "light", children } = props; - return
{children}
; -}; diff --git a/packages/ui/src/component/accordion/Accordion.css b/packages/ui/src/component/accordion/Accordion.css new file mode 100644 index 0000000..0992683 --- /dev/null +++ b/packages/ui/src/component/accordion/Accordion.css @@ -0,0 +1,9 @@ +.accordion-root { + box-sizing: border-box; + display: flex; + width: 24rem; + max-width: calc(100vw - 8rem); + flex-direction: column; + justify-content: center; + color: var(--color-gray-900); +} diff --git a/packages/ui/src/component/accordion/Accordion.recipe.ts b/packages/ui/src/component/accordion/Accordion.recipe.ts new file mode 100644 index 0000000..3b998dc --- /dev/null +++ b/packages/ui/src/component/accordion/Accordion.recipe.ts @@ -0,0 +1,12 @@ +import { tv } from "tailwind-variants"; + +export const AccordionRecipe = tv({ + base: "", + variants: { + size: { + xs: "", + sm: "", + md: "", + }, + }, +}); diff --git a/packages/ui/src/component/accordion/Accordion.tsx b/packages/ui/src/component/accordion/Accordion.tsx new file mode 100644 index 0000000..f62b20b --- /dev/null +++ b/packages/ui/src/component/accordion/Accordion.tsx @@ -0,0 +1,20 @@ +import * as BUI from "@base-ui/react"; +import type { CommonProps } from "@/common/CommonProps"; +import type { ComponentProps } from "react"; +import { itemSizeRecipe } from "@/styles/recipe/ItemSize.recipe"; + +type AccordionProps = CommonProps & + ComponentProps & { + size?: "xs" | "sm" | "md" | "lg"; + chevronPosition?: "left" | "right"; + }; + +export const Accordion = (props: AccordionProps) => { + const { children, size, ...rest } = props; + const accordionRootCls = itemSizeRecipe({ size }); + return ( + + {children} + + ); +}; diff --git a/packages/ui/src/component/accordion/AccordionItem.tsx b/packages/ui/src/component/accordion/AccordionItem.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/ui/src/component/accordion/AccordionPanel.tsx b/packages/ui/src/component/accordion/AccordionPanel.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/ui/src/component/accordion/AccordionTrigger.tsx b/packages/ui/src/component/accordion/AccordionTrigger.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/ui/src/component/avatar/Avatar.css b/packages/ui/src/component/avatar/Avatar.css new file mode 100644 index 0000000..f381292 --- /dev/null +++ b/packages/ui/src/component/avatar/Avatar.css @@ -0,0 +1,15 @@ +@layer components { + .avatar-image { + object-fit: cover; + height: 100%; + width: 100%; + } + + .avatar-fallback { + align-items: center; + display: flex; + justify-content: center; + height: 100%; + width: 100%; + } +} diff --git a/packages/ui/src/component/avatar/Avatar.tsx b/packages/ui/src/component/avatar/Avatar.tsx new file mode 100644 index 0000000..be07ba6 --- /dev/null +++ b/packages/ui/src/component/avatar/Avatar.tsx @@ -0,0 +1,20 @@ +import * as BUI from "@base-ui/react"; + +type AvatarPorps = { + size?: "sm" | "md" | "lg"; + src?: string; + alt?: string; +}; + +export const Avatar = (props: AvatarPorps) => { + const { size = "md", src, alt } = props; + + + + return ( + + + + + ); +}; diff --git a/packages/ui/src/component/button/Button.tsx b/packages/ui/src/component/button/Button.tsx index ceb99d4..643e917 100644 --- a/packages/ui/src/component/button/Button.tsx +++ b/packages/ui/src/component/button/Button.tsx @@ -1,23 +1,24 @@ "use client"; -import * as BUI from "@base-ui/react/button"; -import { cn } from "tailwind-variants"; -import type { CommonProps } from "@/common/CommonProps"; -import { itemSizeRecipe } from "@/styles/recipe/ItemSize.recipe"; -import { variantRecipe } from "@/styles/recipe/variant.recipe"; import type { ReactNode } from "react"; -import { inlineSizeRecipe } from "@/styles/recipe/IinlineSize.recipe"; -import { Slot } from "@/common/Slot"; +import * as BUI from "@base-ui/react"; +import { cn } from "tailwind-variants"; +import { brandRecipe } from "../../styles/recipe/brand.recipe"; +import { itemSizeRecipe } from "../../styles/recipe/ItemSize.recipe"; +import { variantRecipe } from "../../styles/recipe/variant.recipe"; +import { inlineSizeRecipe } from "../../styles/recipe/IinlineSize.recipe"; +import { Slot } from "../../common/Slot"; +import { Icon } from "../icon/Icon"; -type ButtonProps = CommonProps & { - size?: "md" | "lg" | "xl"; - variant?: "filled" | "outline" | "subtle"; +type ButtonProps = { + size?: "xs" | "sm" | "md" | "lg"; + variant?: "filled" | "outline" | "subtle" | "ghost"; shape?: "rounded" | "square" | "circle"; brand?: "success" | "danger" | "info" | "warning" | "default"; loading?: boolean; - icon?: ReactNode; + iconSvg?: ReactNode; iconOnly?: boolean; hideIcon?: boolean; -}; +} & BUI.Button.Props; export const Button = (props: ButtonProps) => { const { @@ -29,7 +30,7 @@ export const Button = (props: ButtonProps) => { brand, loading, disabled, - icon, + iconSvg, iconOnly, hideIcon = false, } = props; @@ -38,22 +39,24 @@ export const Button = (props: ButtonProps) => { brand == undefined ? (variant == "filled" ? "info" : "default") : brand; const buttonCls = cn( - itemSizeRecipe({ size, brand: currentBrand, shape }), + itemSizeRecipe({ size, shape, iconOnly }), variantRecipe({ variant, disabled: loading || disabled }), + brandRecipe({ brand: currentBrand }), className, ); - const iconCls = cn(inlineSizeRecipe({ size, iconOnly: true })); - return ( - {!hideIcon && - (iconOnly ? ( - + {iconSvg ? ( + hideIcon ? ( + iconOnly ? ( + + ) : null ) : ( - {icon} - ))} - {children} + + ) + ) : null} + {!iconOnly && children} ); }; diff --git a/packages/ui/src/component/checkbox/Checkbox.css b/packages/ui/src/component/checkbox/Checkbox.css new file mode 100644 index 0000000..a3da84f --- /dev/null +++ b/packages/ui/src/component/checkbox/Checkbox.css @@ -0,0 +1,19 @@ +@layer components { + .checkbox-root { + &[data-unchecked] { + border: 1px solid var(--color-gray-300); + background-color: transparent; + } + &[data-checked] { + background-color: var(--brand-bg); + } + } + .checkbox-indicator { + display: flex; + color: var(--color-gray-50); + + &[data-unchecked] { + display: none; + } + } +} diff --git a/packages/ui/src/component/checkbox/Checkbox.tsx b/packages/ui/src/component/checkbox/Checkbox.tsx new file mode 100644 index 0000000..fa9b97a --- /dev/null +++ b/packages/ui/src/component/checkbox/Checkbox.tsx @@ -0,0 +1,76 @@ +"use client"; +import * as BUI from "@base-ui/react"; +import { cn } from "tailwind-variants"; +import type { CommonProps } from "@/common/CommonProps"; +import { itemSizeRecipe } from "@/styles/recipe/ItemSize.recipe"; +import { inlineSizeRecipe } from "@/styles/recipe/IinlineSize.recipe"; +import { CheckIndicatorSvg } from "@/assets/svg/CheckIndicatorSvg"; +import type { ReactNode } from "react"; +import { Slot } from "@/common/Slot"; +import { variantRecipe } from "@/styles/recipe/variant.recipe"; + +type CheckboxProps = CommonProps & { + size?: "xs" | "sm" | "md"; + shape?: "square" | "rounded"; + icon?: ReactNode; + hideIcon?: boolean; + iconPlaceholder?: boolean; +}; + +export const Checkbox = (props: CheckboxProps) => { + const { + className, + children, + size = "sm", + shape = "square", + icon, + hideIcon = false, + iconPlaceholder = false, + disabled, + } = props; + + const checkboxCls = cn( + itemSizeRecipe({ size, shape }), + variantRecipe({ variant: "ghost", disabled }), + "brand-default", + className, + ); + const checkboxRootCls = cn( + inlineSizeRecipe({ + size, + shape: "rounded", + iconOnly: true, + }), + "checkbox-root", + "brand-info", + ); + const checkIndicatorCls = cn( + inlineSizeRecipe({ + size, + shape: "rounded", + iconOnly: true, + }), + "checkbox-indicator", + ); + const checkIndicatorSvgCls = inlineSizeRecipe({ + size, + iconOnly: true, + }); + + const iconCls = cn(inlineSizeRecipe({ size, iconOnly: true })); + + return ( + + + + + + + + {icon && !hideIcon && {icon}} + {hideIcon && iconPlaceholder && } + {children} + + + ); +}; diff --git a/packages/ui/src/component/icon/Icon.tsx b/packages/ui/src/component/icon/Icon.tsx new file mode 100644 index 0000000..6379dbe --- /dev/null +++ b/packages/ui/src/component/icon/Icon.tsx @@ -0,0 +1,21 @@ +import { ReactNode } from "react"; +import { cn } from "tailwind-variants"; +import { inlineSizeRecipe } from "../../styles/recipe/IinlineSize.recipe"; +import { Slot } from "../../common/Slot"; + +type IconProps = { + size?: "xs" | "sm" | "md" | "lg"; + svg?: ReactNode; +}; + +export const Icon = (props: IconProps) => { + const { size, svg } = props; + + const iconCls = cn(inlineSizeRecipe({ size, iconOnly: true })); + + return ( + + {svg ? {svg} : null} + + ); +}; diff --git a/packages/ui/src/component/theme/Theme.tsx b/packages/ui/src/component/theme/Theme.tsx new file mode 100644 index 0000000..574d654 --- /dev/null +++ b/packages/ui/src/component/theme/Theme.tsx @@ -0,0 +1,17 @@ +import { cn } from "tailwind-variants"; +import type { CommonProps } from "../../common/CommonProps"; +import { ThemeContext } from "./ThemeContext"; + +type ThemeProps = CommonProps & { + theme?: "light" | "dark"; +}; + +export const Theme = (props: ThemeProps) => { + const { theme = "light", children, className } = props; + const themeCls = cn(theme, "brand-default", className) as string; + return ( + +
{children}
+
+ ); +}; diff --git a/packages/ui/src/component/theme/ThemeContext.tsx b/packages/ui/src/component/theme/ThemeContext.tsx new file mode 100644 index 0000000..d11f7b1 --- /dev/null +++ b/packages/ui/src/component/theme/ThemeContext.tsx @@ -0,0 +1,5 @@ +import React from "react"; + +type ThemeContextValue = { themeCls?: string }; + +export const ThemeContext = React.createContext({}); diff --git a/packages/ui/src/component/theme/useTheme.ts b/packages/ui/src/component/theme/useTheme.ts new file mode 100644 index 0000000..e9305c2 --- /dev/null +++ b/packages/ui/src/component/theme/useTheme.ts @@ -0,0 +1,6 @@ +import { useContext } from "react"; +import { ThemeContext } from "./ThemeContext"; + +export const useTheme = () => { + return useContext(ThemeContext); +}; diff --git a/packages/ui/src/component/tooltip/Tooltip.css b/packages/ui/src/component/tooltip/Tooltip.css new file mode 100644 index 0000000..ac9757c --- /dev/null +++ b/packages/ui/src/component/tooltip/Tooltip.css @@ -0,0 +1,50 @@ +@layer components { + .tooltip-arrow { + display: flex; + fill: aquamarine; + + &[data-side="top"] { + bottom: -6px; + rotate: 180deg; + } + + &[data-side="bottom"] { + top: -6px; + rotate: 0deg; + } + + &[data-side="left"] { + right: -8px; + rotate: 90deg; + } + + &[data-side="right"] { + left: -8px; + rotate: -90deg; + } + } + + .tooltip-popup { + display: flex; + background-color: var(--base-bg); + border: 1px solid color-mix(in srgb, var(--brand-bg) 40%, white); + filter: drop-shadow(var(--drop-shadow-sm)); + transform-origin: var(--transform-origin); + transition: + transform 50ms, + opacity 50ms; + &[data-starting-style], + &[data-ending-style] { + opacity: 0; + transform: scale(0.9); + } + + &[data-instant] { + transition: none; + } + } + + .tooltip-arrow-border { + fill: color-mix(in srgb, var(--brand-bg) 40%, white); + } +} diff --git a/packages/ui/src/component/tooltip/Tooltip.tsx b/packages/ui/src/component/tooltip/Tooltip.tsx new file mode 100644 index 0000000..381ee4e --- /dev/null +++ b/packages/ui/src/component/tooltip/Tooltip.tsx @@ -0,0 +1,14 @@ +"use client"; +import * as BUI from "@base-ui/react"; + +type TooltipProps = BUI.Tooltip.Root.Props; + +export const Tooltip = (props: TooltipProps) => { + const { children, open } = props; + + return ( + + {children} + + ); +}; diff --git a/packages/ui/src/component/tooltip/TooltipPopup.tsx b/packages/ui/src/component/tooltip/TooltipPopup.tsx new file mode 100644 index 0000000..6ce9da1 --- /dev/null +++ b/packages/ui/src/component/tooltip/TooltipPopup.tsx @@ -0,0 +1,53 @@ +"use client"; +import * as BUI from "@base-ui/react"; +import { cn } from "tailwind-variants"; +import { useTheme } from "../theme/useTheme"; +import { itemSizeRecipe } from "../../styles/recipe/ItemSize.recipe"; +import { ReactNode } from "react"; + +type TooltipPopupProps = { + hideArrow?: boolean; + side?: "top" | "bottom" | "left" | "right"; + children?: ReactNode; +}; + +export const TooltipPopup = (props: TooltipPopupProps) => { + const { children, hideArrow = false, side } = props; + const { themeCls } = useTheme(); + + const tooltipPopupCls = cn( + themeCls, + itemSizeRecipe({ size: "xs", shape: "rounded" }), + "tooltip-popup", + ); + + return ( + + + + {!hideArrow && ( + + + + )} + {children} + + + + ); +}; + +const PopupArrowUpSvg = (props: React.SVGProps) => ( + + + + + +); diff --git a/packages/ui/src/component/tooltip/TooltipTrigger.tsx b/packages/ui/src/component/tooltip/TooltipTrigger.tsx new file mode 100644 index 0000000..11d0b1e --- /dev/null +++ b/packages/ui/src/component/tooltip/TooltipTrigger.tsx @@ -0,0 +1,13 @@ +"use client"; +import * as BUI from "@base-ui/react"; + +type TooltipTrigerProps = BUI.Tooltip.Trigger.Props; + +export const TooltipTriger = (props: TooltipTrigerProps) => { + const { children, delay = 100 } = props; + return ( + } delay={delay}> + {children} + + ); +}; diff --git a/packages/ui/src/component/user-field/UserField.tsx b/packages/ui/src/component/user-field/UserField.tsx new file mode 100644 index 0000000..e69de29 diff --git a/packages/ui/src/index.css b/packages/ui/src/index.css index 8e17400..c6ab6f1 100644 --- a/packages/ui/src/index.css +++ b/packages/ui/src/index.css @@ -1,6 +1,10 @@ @import "tailwindcss"; +@import './component/accordion/Accordion.css'; +@import './component/checkbox/Checkbox.css'; +@import './component/tooltip/Tooltip.css'; @import './styles/theme/global.css'; @import './styles/utility/brand.css'; +@import './styles/utility/font.css'; @import './styles/utility/gap.css'; @import './styles/utility/height.css'; @import './styles/utility/loading.css'; diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 6e91a74..274932b 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -2,17 +2,17 @@ import './index.css'; -export * from './assets/svg/CheckIndicatorOutlineSvg'; +export * from './assets/svg/BoldSvg'; export * from './assets/svg/CheckIndicatorSvg'; export * from './assets/svg/ChevronRightSvg'; export * from './assets/svg/CutSvg'; export * from './assets/svg/DownloadSvg'; export * from './assets/svg/FileSvg'; export * from './assets/svg/KeySvg'; +export * from './assets/svg/MeshSvg'; export * from './assets/svg/MoonSvg'; export * from './assets/svg/PasteSvg'; -export * from './assets/svg/RadioIndicatorOutlineSvg'; -export * from './assets/svg/RadioIndicatorSvg'; +export * from './assets/svg/Ruler'; export * from './assets/svg/SearchSvg'; export * from './assets/svg/SettingSvg'; export * from './assets/svg/SpinnerSvg'; @@ -20,13 +20,25 @@ export * from './assets/svg/SunSvg'; export * from './assets/svg/UserSvg'; export * from './assets/svg/VolumeHighSvg'; export * from './assets/svg/VolumeLowSvg'; -export * from './assets/svg/VolumeMediumSvg'; export * from './assets/svg/VolumeMuteSvg'; export * from './common/Box'; -export * from './common/CommonProps'; -export * from './common/Skin'; export * from './common/Slot'; +export * from './component/accordion/Accordion.recipe'; +export * from './component/accordion/Accordion'; +export * from './component/accordion/AccordionItem'; +export * from './component/accordion/AccordionPanel'; +export * from './component/accordion/AccordionTrigger'; export * from './component/button/Button'; +export * from './component/checkbox/Checkbox'; +export * from './component/icon/Icon'; +export * from './component/theme/Theme'; +export * from './component/theme/ThemeContext'; +export * from './component/theme/useTheme'; +export * from './component/tooltip/Tooltip'; +export * from './component/tooltip/TooltipPopup'; +export * from './component/tooltip/TooltipTrigger'; +export * from './component/user-field/UserField'; export * from './styles/recipe/IinlineSize.recipe'; export * from './styles/recipe/ItemSize.recipe'; +export * from './styles/recipe/brand.recipe'; export * from './styles/recipe/variant.recipe'; diff --git a/packages/ui/src/styles/recipe/IinlineSize.recipe.ts b/packages/ui/src/styles/recipe/IinlineSize.recipe.ts index bc44fae..f6c999e 100644 --- a/packages/ui/src/styles/recipe/IinlineSize.recipe.ts +++ b/packages/ui/src/styles/recipe/IinlineSize.recipe.ts @@ -1,7 +1,7 @@ import { tv } from "tailwind-variants"; export const inlineSizeRecipe = tv({ - base: "relative overflow-hidden flex flex-nowrap", + base: "relative overflow-hidden flex flex-nowrap justify-center items-center box-border", variants: { size: { xs: "text-xs h-inline-xs", @@ -16,18 +16,6 @@ export const inlineSizeRecipe = tv({ rounded: "", circle: "rounded-full", }, - variant: { - filled: "variant-filled", - outline: "variant-outline", - subtle: "variant-subtle", - }, - brand: { - success: "brand-success", - danger: "brand-danger", - info: "brand-info", - warning: "brand-warning", - emphasis: "brand-emphasis", - }, iconOnly: { true: "", false: "", @@ -99,21 +87,5 @@ export const inlineSizeRecipe = tv({ size: "2xl", class: "w-inline-2xl", }, - // -------------------------------------------------- - { - disabled: true, - variant: "filled", - class: "variant-filled-disabled", - }, - { - disabled: true, - variant: "outline", - class: "variant-outline-disabled", - }, - { - disabled: true, - variant: "subtle", - class: "variant-subtle-disabled", - }, ], }); diff --git a/packages/ui/src/styles/recipe/ItemSize.recipe.ts b/packages/ui/src/styles/recipe/ItemSize.recipe.ts index 8e10932..4829f8d 100644 --- a/packages/ui/src/styles/recipe/ItemSize.recipe.ts +++ b/packages/ui/src/styles/recipe/ItemSize.recipe.ts @@ -1,34 +1,24 @@ import { tv } from "tailwind-variants"; export const itemSizeRecipe = tv({ - base: "relative select-none overflow-hidden flex flex-nowrap justify-center items-center", + base: "relative select-none flex flex-nowrap justify-center items-center", variants: { size: { - xs: "text-xs h-xs px-xs gap-xs", - sm: "text-sm h-sm px-sm gap-sm", - md: "text-md h-md px-md gap-md", - lg: "text-lg h-lg px-lg gap-lg", - xl: "text-xl h-xl px-xl gap-xl", - "2xl": "text-2xl h-2xl px-2xl gap-2xl", + xs: "text-xs h-item-xs px-xs gap-xs", + sm: "text-sm h-item-sm px-sm gap-sm", + md: "text-md h-item-md px-md gap-md", + lg: "text-lg h-item-lg px-lg gap-lg", + xl: "text-xl h-item-xl px-xl gap-xl", + "2xl": "text-2xl h-item-2xl px-2xl gap-2xl", }, shape: { square: "rounded-none", rounded: "", circle: "rounded-full", }, - brand: { - success: "brand-success", - danger: "brand-danger", - info: "brand-info", - warning: "brand-warning", - default: "brand-default", - }, + iconOnly: { - true: "", - false: "", - }, - hasShadow: { - true: "shadow-xl", + true: "px-none", false: "", }, disabled: { @@ -37,66 +27,62 @@ export const itemSizeRecipe = tv({ }, }, compoundVariants: [ - { - shape: "rounded", - size: "xs", - class: "rounded-xs", - }, + { shape: "rounded", size: "xs", class: "rounded-sm" }, { shape: "rounded", size: "sm", - class: "rounded-sm", - }, - { - shape: "rounded", - size: "md", class: "rounded-md", }, { shape: "rounded", - size: "lg", + size: "md", class: "rounded-lg", }, { shape: "rounded", - size: "xl", + size: "lg", class: "rounded-xl", }, { shape: "rounded", - size: "2xl", + size: "xl", class: "rounded-2xl", }, + { + shape: "rounded", + size: "2xl", + class: "rounded-3xl", + }, // -------------------------------------------------- { iconOnly: true, size: "xs", - class: "w-xs", + class: "w-item-xs", }, { iconOnly: true, size: "sm", - class: "w-sm", + class: "w-item-sm", }, { iconOnly: true, size: "md", - class: "w-md", + class: "w-item-md", }, { iconOnly: true, size: "lg", - class: "w-lg", + class: "w-item-lg", }, { iconOnly: true, size: "xl", - class: "w-xl", + class: "w-item-xl", }, { iconOnly: true, size: "2xl", - class: "w-2xl", + class: "w-item-2xl", }, ], }); diff --git a/packages/ui/src/styles/recipe/brand.recipe.ts b/packages/ui/src/styles/recipe/brand.recipe.ts new file mode 100644 index 0000000..72ad1b6 --- /dev/null +++ b/packages/ui/src/styles/recipe/brand.recipe.ts @@ -0,0 +1,13 @@ +import { tv } from "tailwind-variants"; + +export const brandRecipe = tv({ + variants: { + brand: { + success: "brand-success", + danger: "brand-danger", + info: "brand-info", + warning: "brand-warning", + default: "brand-default", + }, + }, +}); diff --git a/packages/ui/src/styles/recipe/variant.recipe.ts b/packages/ui/src/styles/recipe/variant.recipe.ts index c6ba73e..534bfd9 100644 --- a/packages/ui/src/styles/recipe/variant.recipe.ts +++ b/packages/ui/src/styles/recipe/variant.recipe.ts @@ -6,6 +6,7 @@ export const variantRecipe = tv({ filled: "variant-filled", outline: "variant-outline", subtle: "variant-subtle", + ghost: "variant-ghost", }, disabled: { true: "", @@ -28,5 +29,10 @@ export const variantRecipe = tv({ variant: "subtle", class: "variant-subtle-disabled", }, + { + disabled: true, + variant: "ghost", + class: "variant-ghost-disabled", + }, ], }); diff --git a/packages/ui/src/styles/theme/global.css b/packages/ui/src/styles/theme/global.css index e28f480..ce9877a 100644 --- a/packages/ui/src/styles/theme/global.css +++ b/packages/ui/src/styles/theme/global.css @@ -1,32 +1,44 @@ @theme { + --text-md: 1rem; + --text-md--line-height: calc(1.5 / 1); --color-transparent: transparent; + --danger-bg: var(--color-red-600); - --danger-bg-high-hover: var(--color-red-500); - --danger-bg-high-active: var(--color-red-400); - --danger-bg-low-hover: var(--color-red-100); - --danger-bg-low-active: var(--color-red-200); + --danger-bg-hover: var(--color-red-500); + --danger-bg-active: var(--color-red-400); + --danger-bg-low: var(--color-red-100); + --danger-bg-low-hover: var(--color-red-200); + --danger-bg-low-active: var(--color-red-300); --success-bg: var(--color-emerald-600); - --success-bg-high-hover: var(--color-emerald-500); - --success-bg-high-active: var(--color-emerald-400); + --success-bg-hover: var(--color-emerald-500); + --success-bg-active: var(--color-emerald-400); + --success-bg-low: var(--color-emerald-100); --success-bg-low-hover: var(--color-emerald-100); --success-bg-low-active: var(--color-emerald-200); --info-bg: var(--color-sky-600); - --info-bg-high-hover: var(--color-sky-500); - --info-bg-high-active: var(--color-sky-400); - --info-bg-low-hover: var(--color-sky-100); - --info-bg-low-active: var(--color-sky-200); + --info-bg-hover: var(--color-sky-500); + --info-bg-active: var(--color-sky-400); + --info-bg-low: var(--color-sky-100); + --info-bg-low-hover: var(--color-sky-200); + --info-bg-low-active: var(--color-sky-300); --warning-bg: var(--color-yellow-600); - --warning-bg-high-hover: var(--color-yellow-500); - --warning-bg-high-active: var(--color-yellow-400); - --warning-bg-low-hover: var(--color-yellow-100); - --warning-bg-low-active: var(--color-yellow-200); + --warning-bg-hover: var(--color-yellow-500); + --warning-bg-active: var(--color-yellow-400); + --warning-bg-low: var(--color-yellow-100); + --warning-bg-low-hover: var(--color-yellow-200); + --warning-bg-low-active: var(--color-yellow-300); - --default-bg: var(--color-neutral-800); - --default-bg-high-hover: var(--color-neutral-700); - --default-bg-high-active: var(--color-neutral-600); - --default-bg-low-hover: var(--color-neutral-100); - --default-bg-low-active: var(--color-neutral-200); + --default-bg: var(--color-neutral-700); + --default-bg-hover: var(--color-neutral-600); + --default-bg-active: var(--color-neutral-500); + --default-bg-low: var(--color-neutral-100); + --default-bg-low-hover: var(--color-neutral-200); + --default-bg-low-active: var(--color-neutral-300); + + --disabled-fg: var(--color-gray-500); + --disabled-bg: var(--color-gray-200); + --disabled-border-color: var(--color-gray-500); } diff --git a/packages/ui/src/styles/utility/brand.css b/packages/ui/src/styles/utility/brand.css index 5896618..fc31a3d 100644 --- a/packages/ui/src/styles/utility/brand.css +++ b/packages/ui/src/styles/utility/brand.css @@ -1,35 +1,40 @@ @utility brand-info { --brand-bg: var(--info-bg); - --brand-bg-high-hover: var(--info-bg-high-hover); - --brand-bg-high-active: var(--info-bg-high-active); + --brand-bg-hover: var(--info-bg-hover); + --brand-bg-active: var(--info-bg-active); + --brand-bg-low: var(--info-bg-low); --brand-bg-low-hover: var(--info-bg-low-hover); --brand-bg-low-active: var(--info-bg-low-active); } @utility brand-danger { --brand-bg: var(--danger-bg); - --brand-bg-high-hover: var(--danger-bg-high-hover); - --brand-bg-high-active: var(--danger-bg-high-active); + --brand-bg-hover: var(--danger-bg-hover); + --brand-bg-active: var(--danger-bg-active); + --brand-bg-low: var(--danger-bg-low); --brand-bg-low-hover: var(--danger-bg-low-hover); --brand-bg-low-active: var(--danger-bg-low-active); } @utility brand-success { --brand-bg: var(--success-bg); - --brand-bg-high-hover: var(--success-bg-high-hover); - --brand-bg-high-active: var(--success-bg-high-active); + --brand-bg-hover: var(--success-bg-hover); + --brand-bg-active: var(--success-bg-active); + --brand-bg-low: var(--success-bg-low); --brand-bg-low-hover: var(--success-bg-low-hover); --brand-bg-low-active: var(--success-bg-low-active); } @utility brand-warning { --brand-bg: var(--warning-bg); - --brand-bg-high-hover: var(--warning-bg-high-hover); - --brand-bg-high-active: var(--warning-bg-high-active); + --brand-bg-hover: var(--warning-bg-hover); + --brand-bg-active: var(--warning-bg-active); + --brand-bg-low: var(--warning-bg-low); --brand-bg-low-hover: var(--warning-bg-low-hover); --brand-bg-low-active: var(--warning-bg-low-active); } @utility brand-default { --brand-bg: var(--default-bg); - --brand-bg-high-hover: var(--default-bg-high-hover); - --brand-bg-high-active: var(--default-bg-high-active); + --brand-bg-hover: var(--default-bg-hover); + --brand-bg-active: var(--default-bg-active); + --brand-bg-low: var(--default-bg-low); --brand-bg-low-hover: var(--default-bg-low-hover); --brand-bg-low-active: var(--default-bg-low-active); } diff --git a/packages/ui/src/styles/utility/font.css b/packages/ui/src/styles/utility/font.css new file mode 100644 index 0000000..ed1ad0d --- /dev/null +++ b/packages/ui/src/styles/utility/font.css @@ -0,0 +1,4 @@ +@utility text-md { + font-size: var(--text-md); /* 1rem (16px) */ + line-height: var(--text-md--line-height); /* calc(1.5 / 1) */ +} diff --git a/packages/ui/src/styles/utility/gap.css b/packages/ui/src/styles/utility/gap.css index 817efa1..0163dec 100644 --- a/packages/ui/src/styles/utility/gap.css +++ b/packages/ui/src/styles/utility/gap.css @@ -2,17 +2,17 @@ gap: calc(var(--spacing) * 0.5); } @utility gap-sm { - gap: calc(var(--spacing) * 2); + gap: calc(var(--spacing) * 1); } @utility gap-md { - gap: calc(var(--spacing) * 3); + gap: calc(var(--spacing) * 1.5); } @utility gap-lg { - gap: calc(var(--spacing) * 4); + gap: calc(var(--spacing) * 2); } @utility gap-xl { - gap: calc(var(--spacing) * 5); + gap: calc(var(--spacing) * 2.5); } @utility gap-2xl { - gap: calc(var(--spacing) * 6); + gap: calc(var(--spacing) * 3); } diff --git a/packages/ui/src/styles/utility/height.css b/packages/ui/src/styles/utility/height.css index 563518f..22a7722 100644 --- a/packages/ui/src/styles/utility/height.css +++ b/packages/ui/src/styles/utility/height.css @@ -1,36 +1,40 @@ -@utility h-xs { - height: calc(var(--spacing) * 5); +@utility h-item-xs { + /* 24px minimum touch size for text line */ + height: 24px; } -@utility h-sm { - height: calc(var(--spacing) * 6); +@utility h-item-sm { + /* 30px save space for most used size */ + height: 30px; } -@utility h-md { - height: calc(var(--spacing) * 8); +@utility h-item-md { + /* 34px most used size */ + height: 34px; } -@utility h-lg { - height: calc(var(--spacing) * 9); +@utility h-item-lg { + /* 46px maximum touch size without waste */ + height: 46px; } -@utility h-xl { - height: calc(var(--spacing) * 11); +@utility h-item-xl { + height: calc(var(--spacing) * 16); } -@utility h-2xl { +@utility h-item-2xl { height: calc(var(--spacing) * 16); } @utility h-inline-xs { - height: var(--text-xs--line-height); + height: calc(var(--text-xs--line-height) * var(--text-xs)); } @utility h-inline-sm { - height: var(--text-sm--line-height); + height: calc(var(--text-sm--line-height) * var(--text-sm)); } @utility h-inline-md { - height: var(--text-base--line-height); + height: calc(var(--text-md--line-height) * var(--text-md)); } @utility h-inline-lg { - height: var(--text-lg--line-height); + height: calc(var(--text-lg--line-height) * var(--text-lg)); } @utility h-inline-xl { - height: var(--text-xl--line-height); + height: calc(var(--text-xl--line-height) * var(--text-xl)); } @utility h-inline-2xl { - height: var(--text-2xl--line-height); + height: calc(var(--text-2xl--line-height) * var(--text-2xl)); } diff --git a/packages/ui/src/styles/utility/margin.css b/packages/ui/src/styles/utility/margin.css index 69d1f89..1f6f0fd 100644 --- a/packages/ui/src/styles/utility/margin.css +++ b/packages/ui/src/styles/utility/margin.css @@ -1,7 +1,7 @@ @utility mr-none { margin-right: 0; } -@utility mr-xs { +@utility mr-sm { margin-right: calc(var(--spacing) * 1); } @utility mr-sm { diff --git a/packages/ui/src/styles/utility/padding.css b/packages/ui/src/styles/utility/padding.css index 296675c..3e5e0ba 100644 --- a/packages/ui/src/styles/utility/padding.css +++ b/packages/ui/src/styles/utility/padding.css @@ -1,36 +1,40 @@ +@utility px-none { + padding-inline: 0px; +} @utility px-xs { - padding-inline: calc(var(--spacing) * 2); + padding-inline: 6px; } @utility px-sm { - padding-inline: calc(var(--spacing) * 3); + padding-inline: 8px; } @utility px-md { - padding-inline: calc(var(--spacing) * 4); + padding-inline: 10px; } @utility px-lg { - padding-inline: calc(var(--spacing) * 5); + padding-inline: 12px; } @utility px-xl { - padding-inline: calc(var(--spacing) * 6); + padding-inline: var(--radius-xl); } @utility px-2xl { - padding-inline: calc(var(--spacing) * 8); + padding-inline: var(--radius-2xl); } @utility py-xs { - padding-block: calc(var(--spacing) * 1); + /* 2px correspond to rounded-xs */ + padding-block: var(--radius-xs); } @utility py-sm { - padding-block: calc(var(--spacing) * 2); + padding-block: var(--radius-sm); } @utility py-md { - padding-block: calc(var(--spacing) * 3); + padding-block: var(--radius-md); } @utility py-lg { - padding-block: calc(var(--spacing) * 4); + padding-block: var(--radius-lg); } @utility py-xl { - padding-block: calc(var(--spacing) * 5); + padding-block: var(--radius-xl); } @utility py-2xl { - padding-block: calc(var(--spacing) * 6); + padding-block: var(--radius-2xl); } diff --git a/packages/ui/src/styles/utility/skin.css b/packages/ui/src/styles/utility/skin.css index 0ed68ed..e52a634 100644 --- a/packages/ui/src/styles/utility/skin.css +++ b/packages/ui/src/styles/utility/skin.css @@ -1,13 +1,9 @@ @utility light { --base-fg: var(--color-gray-950); --base-bg: var(--color-white); - --base-fg-subtext: var(--color-gray-500); - --base-bg-subtext: var(--color-gray-200); } @utility dark { --base-fg: var(--color-gray-50); --base-bg: var(--color-black); - --base-fg-subtext: var(--color-gray-400); - --base-bg-subtext: var(--color-gray-600); } diff --git a/packages/ui/src/styles/utility/variant.css b/packages/ui/src/styles/utility/variant.css index f7dfd37..904ae20 100644 --- a/packages/ui/src/styles/utility/variant.css +++ b/packages/ui/src/styles/utility/variant.css @@ -3,8 +3,8 @@ --filled-fg-hover: var(--color-white); --filled-fg-active: var(--color-white); --filled-bg: var(--brand-bg); - --filled-bg-hover: var(--brand-bg-high-hover); - --filled-bg-active: var(--brand-bg-high-active); + --filled-bg-hover: var(--brand-bg-hover); + --filled-bg-active: var(--brand-bg-active); --filled-border-color: var(--color-transparent); color: var(--filled-fg); @@ -61,7 +61,7 @@ --subtle-fg: var(--brand-bg); --subtle-fg-hover: var(--brand-bg); --subtle-fg-active: var(--brand-bg); - --subtle-bg: var(--color-transparent); + --subtle-bg: var(--brand-bg-low); --subtle-bg-hover: var(--brand-bg-low-hover); --subtle-bg-active: var(--brand-bg-low-active); --subtle-border-color: var(--color-transparent); @@ -86,31 +86,60 @@ } } -@utility variant-filled-disabled { - color: var(--filled-fg); - background-color: var(--filled-bg); - border-color: var(--filled-border-color); - filter: grayscale(50%); +@utility variant-ghost { + --ghost-fg: var(--brand-bg); + --ghost-fg-hover: var(--brand-bg); + --ghost-fg-active: var(--brand-bg); + --ghost-bg: var(--color-transparent); + --ghost-bg-hover: var(--brand-bg-low); + --ghost-bg-active: var(--brand-bg-low-hover); + --ghost-border-color: var(--color-transparent); + + color: var(--ghost-fg); + background-color: var(--ghost-bg); + border-color: var(--ghost-border-color); &:hover { - color: var(--filled-fg); - background-color: var(--filled-bg); - border-color: var(--filled-border-color); - filter: grayscale(50%); + background-color: var(--ghost-bg-hover); + color: var(--ghost-fg-hover); } &:active { - color: var(--filled-fg); - background-color: var(--filled-bg); - border-color: var(--filled-border-color); - filter: grayscale(50%); + background-color: var(--ghost-bg-active); + color: var(--ghost-fg-active); + } + + &:focus-visible { + background-color: var(--ghost-bg-hover); + color: var(--ghost-fg-hover); + } +} + +@utility variant-filled-disabled { + color: var(--disabled-fg); + background-color: var(--disabled-bg); + border-color: var(--disabled-border-color); + filter: grayscale(100%); + + &:hover { + color: var(--disabled-fg); + background-color: var(--disabled-bg); + border-color: var(--disabled-border-color); + filter: grayscale(100%); + } + + &:active { + color: var(--disabled-fg); + background-color: var(--disabled-bg); + border-color: var(--disabled-border-color); + filter: grayscale(100%); } &:focus-visible { color: var(--filled-fg); background-color: var(--filled-bg); border-color: var(--filled-border-color); - filter: grayscale(50%); + filter: grayscale(100%); } } @@ -142,30 +171,30 @@ } } -@utility variant-subtle-disabled { - color: var(--subtle-fg); - background-color: var(--subtle-bg); - border-color: var(--subtle-border-color); +@utility variant-ghost-disabled { + color: var(--ghost-fg); + background-color: var(--ghost-bg); + border-color: var(--ghost-border-color); filter: grayscale(50%); &:hover { - color: var(--subtle-fg); - background-color: var(--subtle-bg); - border-color: var(--subtle-border-color); + color: var(--ghost-fg); + background-color: var(--ghost-bg); + border-color: var(--ghost-border-color); filter: grayscale(50%); } &:active { - color: var(--subtle-fg); - background-color: var(--subtle-bg); - border-color: var(--subtle-border-color); + color: var(--ghost-fg); + background-color: var(--ghost-bg); + border-color: var(--ghost-border-color); filter: grayscale(50%); } &:focus-visible { - color: var(--subtle-fg); - background-color: var(--subtle-bg); - border-color: var(--subtle-border-color); + color: var(--ghost-fg); + background-color: var(--ghost-bg); + border-color: var(--ghost-border-color); filter: grayscale(50%); } } diff --git a/packages/ui/src/styles/utility/width.css b/packages/ui/src/styles/utility/width.css index de8d87d..daee86d 100644 --- a/packages/ui/src/styles/utility/width.css +++ b/packages/ui/src/styles/utility/width.css @@ -1,36 +1,41 @@ -@utility w-xs { - width: calc(var(--spacing) * 5); -} -@utility w-sm { +@utility w-item-xs { + /* 24px minimum touch size for text line */ width: calc(var(--spacing) * 6); } -@utility w-md { - width: calc(var(--spacing) * 8); +@utility w-item-sm { + /* 30px save space for most used size */ + width: calc(var(--spacing) * 7.5); } -@utility w-lg { - width: calc(var(--spacing) * 9); +@utility w-item-md { + /* 34px most used size */ + width: calc(var(--spacing) * 8.5); } -@utility w-xl { - width: calc(var(--spacing) * 11); +@utility w-item-lg { + /* 46px maximum touch size without waste */ + width: calc(var(--spacing) * 11.5); } -@utility w-2xl { +@utility w-item-xl { width: calc(var(--spacing) * 16); } +@utility w-item-2xl { + width: calc(var(--spacing) * 16); +} +/* ---------------------------------------------------- */ @utility w-inline-xs { - width: var(--text-xs--line-height); + width: calc(var(--text-xs--line-height) * var(--text-xs)); } @utility w-inline-sm { - width: var(--text-sm--line-height); + width: calc(var(--text-sm--line-height) * var(--text-sm)); } @utility w-inline-md { - width: var(--text-base--line-height); + width: calc(var(--text-md--line-height) * var(--text-md)); } @utility w-inline-lg { - width: var(--text-lg--line-height); + width: calc(var(--text-lg--line-height) * var(--text-lg)); } @utility w-inline-xl { - width: var(--text-xl--line-height); + width: calc(var(--text-xl--line-height) * var(--text-xl)); } @utility w-inline-2xl { - width: var(--text-2xl--line-height); + width: calc(var(--text-2xl--line-height) * var(--text-2xl)); } diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 1bca00d..2004527 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,16 +1,13 @@ { - "extends": "@tsconfig/vite-react/tsconfig.json", "compilerOptions": { "composite": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - }, + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", "outDir": "./dist", "rootDir": "./src", - "declaration": true, // 补充:生成类型声明文件,供其他子包引用 - "skipLibCheck": true, // 补充:跳过第三方库类型校验,避免冲突、提升速度 - "types": ["vite/client"] + "declaration": true, + "types": ["node", "react"] }, "include": ["src"], "exclude": [ diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts deleted file mode 100644 index 4a05454..0000000 --- a/packages/ui/vite.config.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { defineConfig } from "vite"; -import react from "@vitejs/plugin-react"; -import dts from "vite-plugin-dts"; -import { resolve } from "node:path"; -import tailwindcss from "@tailwindcss/vite"; - -export default defineConfig(({ mode }) => { - const isProduction = mode === "production"; - - return { - // React 核心插件 - plugins: [ - tailwindcss(), - react(), - dts({ - include: ["src/**/*"], - exclude: ["src/**/*.test.ts", "src/**/*.stories.tsx"], - outDir: "./dist", - rollupTypes: true, // 合并类型声明文件 - }), - ], - - // 路径别名与后缀配置 - resolve: { - alias: { - "@": resolve(__dirname, "./src"), - }, - extensions: [".ts", ".tsx", ".js", ".jsx", ".json"], - }, - - // 纯 ES 模式打包配置(移除 UMD 相关) - build: { - lib: { - entry: resolve(__dirname, "./src/index.ts"), - formats: ["es"], // 仅保留 ES 模块格式 - fileName: () => "index.es.js", // 固定 ES 模式文件名 - }, - rollupOptions: { - // 排除 React 相关依赖(用户项目自行引入) - external: ["react", "react-dom"], - output: { - compact: isProduction, // 生产环境压缩代码格式 - globals: { - react: "React", - "react-dom": "ReactDOM", - }, - assetFileNames: (assetInfo) => { - if (assetInfo.name && assetInfo.name.endsWith(".css")) { - return "index.css"; - } - return assetInfo.name || "[name].[ext]"; - }, - }, - // 移除:rollupOptions 下无效的 exclude 配置 - // exclude: ["example/**/*", "scripts/**/*"], - }, - outDir: "./dist", - cssCodeSplit: false, - sourcemap: true, - minify: isProduction ? "esbuild" : false, - emptyOutDir: true, - }, - - // TS 兼容配置 - esbuild: { - ignoreAnnotations: true, - // 移除:esbuild 下无效的 exclude 配置 - // exclude: ["example/**/*", "scripts/**/*"], - }, - - // 新增:使用 Vite 官方支持的方式排除文件 - // 通过 optimizeDeps.exclude 排除依赖,通过 build.assetsInclude 反向控制, - // 同时结合 tsconfig.json 的 exclude 确保 TS 编译也排除目标文件 - optimizeDeps: { - exclude: ["example", "scripts"], - }, - }; -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c0f5c6..5613b36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: apps/ui-site: dependencies: + '@base-ui/react': + specifier: ^1.3.0 + version: 1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@defgov/ui': specifier: workspace:* version: link:../../packages/ui @@ -38,7 +41,7 @@ importers: version: 19.2.3(@types/react@19.2.14) '@vitejs/plugin-react': specifier: ^5.1.1 - version: 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)) + version: 5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.3)) eslint: specifier: ^9.39.1 version: 9.39.3(jiti@2.6.1) @@ -59,68 +62,47 @@ importers: version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) vite: specifier: ^7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3) + version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.3) packages/ui: dependencies: '@base-ui/react': - specifier: ^1.3.0 - version: 1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@tailwindcss/vite': - specifier: ^4.2.1 - version: 4.2.1(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)) + specifier: ^1.4.1 + version: 1.4.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) react: - specifier: ^19.2.4 - version: 19.2.4 + specifier: ^19.2.5 + version: 19.2.5 react-dom: - specifier: ^19.2.4 - version: 19.2.4(react@19.2.4) + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) tailwind-merge: specifier: ^3.5.0 version: 3.5.0 tailwind-variants: specifier: ^3.2.2 - version: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.1) + version: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4) tailwindcss: - specifier: ^4.2.1 - version: 4.2.1 + specifier: ^4.2.4 + version: 4.2.4 devDependencies: - '@tsconfig/vite-react': - specifier: ^7.0.2 - version: 7.0.2 '@types/node': - specifier: ^25.1.0 - version: 25.2.0 + specifier: ^25.6.0 + version: 25.6.0 '@types/react': - specifier: ^19.2.10 + specifier: ^19.2.14 version: 19.2.14 '@types/react-dom': specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) - '@vitejs/plugin-react': - specifier: ^5.1.2 - version: 5.1.4(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)) - autoprefixer: - specifier: ^10.4.24 - version: 10.4.24(postcss@8.5.6) glob: - specifier: ^13.0.3 - version: 13.0.3 - prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: ^13.0.6 + version: 13.0.6 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@25.2.0)(typescript@5.9.3) + version: 10.9.2(@types/node@25.6.0)(typescript@6.0.3) typescript: - specifier: ^5.9.3 - version: 5.9.3 - vite: - specifier: ^7.3.1 - version: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3) - vite-plugin-dts: - specifier: ^4.5.4 - version: 4.5.4(@types/node@25.2.0)(rollup@4.57.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)) + specifier: ^6.0.3 + version: 6.0.3 packages: @@ -222,6 +204,23 @@ packages: '@types/react': optional: true + '@base-ui/react@1.4.1': + resolution: {integrity: sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@date-fns/tz': ^1.2.0 + '@types/react': ^17 || ^18 || ^19 + date-fns: ^4.0.0 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@date-fns/tz': + optional: true + '@types/react': + optional: true + date-fns: + optional: true + '@base-ui/utils@0.2.6': resolution: {integrity: sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==} peerDependencies: @@ -232,6 +231,16 @@ packages: '@types/react': optional: true + '@base-ui/utils@0.2.8': + resolution: {integrity: sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ==} + peerDependencies: + '@types/react': ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + '@types/react': + optional: true + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -461,10 +470,6 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@isaacs/cliui@9.0.0': - resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} - engines: {node: '>=18'} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -484,19 +489,6 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@microsoft/api-extractor-model@7.33.1': - resolution: {integrity: sha512-KX0LI6xzI0gcBOXXmr5mnnbdhsK2W93pqvJo8OgJgWvRRh+wMEp0Ccj38h1XKeJ29E1tuAZKSUOfHUQ1WA8fZg==} - - '@microsoft/api-extractor@7.57.3': - resolution: {integrity: sha512-2+k2FNp+6zug/VmpK0wZFPQu7cKMihjHBP1iUuZs6Ep5P9uR1hD4dR5Ss7z/MiBkwVmKnUm6Pojhkz/c431SMw==} - hasBin: true - - '@microsoft/tsdoc-config@0.18.0': - resolution: {integrity: sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==} - - '@microsoft/tsdoc@0.16.0': - resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} - '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} engines: {node: '>= 10.0.0'} @@ -588,15 +580,6 @@ packages: '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} cpu: [arm] @@ -735,130 +718,6 @@ packages: cpu: [x64] os: [win32] - '@rushstack/node-core-library@5.20.1': - resolution: {integrity: sha512-QvxZyh+RsTJ77JpQkS9K9lJujh6lj5WyMxieT0bdACtwqxEkGB9zCuSMX5UlXRweaIgSpu1ztdHmhV07fKUpMg==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/problem-matcher@0.2.1': - resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/rig-package@0.7.1': - resolution: {integrity: sha512-hLwDnp4yMcAd/gcUol8NPWNctpIXzVOgMyhZ8DagnEJls9TOZd0xF//5hS+YTiX7/+4rLfBra+NoB3rtFxjDdA==} - - '@rushstack/terminal@0.22.1': - resolution: {integrity: sha512-Mdtu0VN7v31O5Zcno8ZZH5kQHF13Ez7WN9Aio7nFJVcR36i4bkERionYrWgBDQJ0JdVPLKGecZER/xRU5IvGLw==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true - - '@rushstack/ts-command-line@5.3.1': - resolution: {integrity: sha512-mid/JIZSJafwy3x9e4v0wVLuAqSSYYErEHV0HXPALYLSBN13YNkR5caOk0hf97lSRKrxhtvQjGaDKSEelR3sMg==} - - '@tailwindcss/node@4.2.1': - resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} - - '@tailwindcss/oxide-android-arm64@4.2.1': - resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.2.1': - resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.2.1': - resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} - engines: {node: '>= 20'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.2.1': - resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} - engines: {node: '>= 20'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': - resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} - engines: {node: '>= 20'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': - resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-arm64-musl@4.2.1': - resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-linux-x64-gnu@4.2.1': - resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@tailwindcss/oxide-linux-x64-musl@4.2.1': - resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} - engines: {node: '>= 20'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@tailwindcss/oxide-wasm32-wasi@4.2.1': - resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': - resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} - engines: {node: '>= 20'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.2.1': - resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} - engines: {node: '>= 20'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.2.1': - resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} - engines: {node: '>= 20'} - - '@tailwindcss/vite@4.2.1': - resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==} - peerDependencies: - vite: ^5.2.0 || ^6 || ^7 - '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -871,12 +730,6 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tsconfig/vite-react@7.0.2': - resolution: {integrity: sha512-lEj4y5SPRcH+bjw0tyuxrEnPqQUwfQzBKgd1YamD9xyet9zLwh2gwy5F8w/Nxg5DjdgYVjjKo5aLJUf0BTDz4w==} - - '@types/argparse@1.0.38': - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -898,8 +751,8 @@ packages: '@types/node@24.10.13': resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} - '@types/node@25.2.0': - resolution: {integrity: sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==} + '@types/node@25.6.0': + resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} '@types/react-dom@19.2.3': resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} @@ -974,42 +827,13 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@volar/language-core@2.4.28': - resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} - - '@volar/source-map@2.4.28': - resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} - - '@volar/typescript@2.4.28': - resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} - - '@vue/compiler-core@3.5.28': - resolution: {integrity: sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==} - - '@vue/compiler-dom@3.5.28': - resolution: {integrity: sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==} - - '@vue/compiler-vue2@2.7.16': - resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - - '@vue/language-core@2.2.0': - resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@vue/shared@3.5.28': - resolution: {integrity: sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + acorn-walk@8.3.5: + resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} acorn@8.15.0: @@ -1017,34 +841,14 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - - ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} - - alien-signals@0.4.14: - resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1052,39 +856,30 @@ packages: arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - autoprefixer@10.4.24: - resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.2: - resolution: {integrity: sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==} - engines: {node: 20 || >=22} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.21: + resolution: {integrity: sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==} + engines: {node: '>=6.0.0'} hasBin: true brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@5.0.2: - resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} - engines: {node: 20 || >=22} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1092,8 +887,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001767: - resolution: {integrity: sha512-34+zUAMhSH+r+9eKmYG+k2Rpt8XttfE4yXAjoZvkAPs15xcYQhyBYdalJ65BzivAvGRMViEjy6oKr/S91loekQ==} + caniuse-lite@1.0.30001790: + resolution: {integrity: sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1110,18 +905,9 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - confbox@0.2.4: - resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1135,9 +921,6 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -1158,20 +941,8 @@ packages: resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} - diff@8.0.3: - resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} - engines: {node: '>=0.3.1'} - - electron-to-chromium@1.5.286: - resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} - - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} - engines: {node: '>=10.13.0'} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} + electron-to-chromium@1.5.344: + resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==} esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} @@ -1239,16 +1010,10 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - exsolve@1.0.8: - resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1282,21 +1047,11 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - - fs-extra@11.3.3: - resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} - engines: {node: '>=14.14'} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -1305,9 +1060,9 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@13.0.3: - resolution: {integrity: sha512-/g3B0mC+4x724v1TgtBlBtt2hPi/EWptsIAmXUx9Z2rvBYleQcsrmaOzd5LyL50jf/Soi83ZDJmw2+XqvH/EeA==} - engines: {node: 20 || >=22} + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} @@ -1317,21 +1072,10 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - hermes-estree@0.25.1: resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} @@ -1346,25 +1090,17 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - immutable@5.1.4: - resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1376,17 +1112,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@4.2.3: - resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} - engines: {node: 20 || >=22} - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1405,9 +1134,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1416,97 +1142,87 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-android-arm64@1.31.1: - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.31.1: - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.31.1: - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.31.1: - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.31.1: - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.31.1: - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.31.1: - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.31.1: - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.31.1: - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.31.1: - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.31.1: - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.31.1: - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} - local-pkg@1.1.2: - resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} - engines: {node: '>=14'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1514,54 +1230,30 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + lru-cache@11.3.5: + resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} engines: {node: 20 || >=22} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - minimatch@10.2.1: - resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==} - engines: {node: 20 || >=22} - - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} minimatch@3.1.3: resolution: {integrity: sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==} - minimatch@9.0.6: - resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - muggle-string@0.4.1: - resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1573,8 +1265,8 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.38: + resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -1592,9 +1284,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1603,15 +1292,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1620,14 +1303,9 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} @@ -1637,23 +1315,20 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} - engines: {node: '>=14'} - hasBin: true - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - quansync@0.2.11: - resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - react-dom@19.2.4: resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: react: ^19.2.4 + react-dom@19.2.5: + resolution: {integrity: sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==} + peerDependencies: + react: ^19.2.5 + react-refresh@0.18.0: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} @@ -1662,14 +1337,14 @@ packages: resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} + react@19.2.5: + resolution: {integrity: sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==} + engines: {node: '>=0.10.0'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} @@ -1677,11 +1352,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - rollup@4.57.1: resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -1699,11 +1369,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -1721,17 +1386,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1740,14 +1394,6 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - tabbable@6.4.0: resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} @@ -1764,12 +1410,8 @@ packages: tailwind-merge: optional: true - tailwindcss@4.2.1: - resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} - - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} + tailwindcss@4.2.4: + resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==} tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} @@ -1840,25 +1482,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - ufo@1.6.3: - resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + undici-types@7.19.2: + resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} update-browserslist-db@1.2.3: resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} @@ -1877,15 +1515,6 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - vite-plugin-dts@4.5.4: - resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} - peerDependencies: - typescript: '*' - vite: '*' - peerDependenciesMeta: - vite: - optional: true - vite@7.3.1: resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1926,9 +1555,6 @@ packages: yaml: optional: true - vscode-uri@3.1.0: - resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1941,9 +1567,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -2003,7 +1626,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -2090,6 +1713,18 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@base-ui/react@1.4.1(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@babel/runtime': 7.29.2 + '@base-ui/utils': 0.2.8(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@floating-ui/react-dom': 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + '@floating-ui/utils': 0.2.11 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@base-ui/utils@0.2.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.29.2 @@ -2101,6 +1736,17 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 + '@base-ui/utils@0.2.8(@types/react@19.2.14)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@babel/runtime': 7.29.2 + '@floating-ui/utils': 0.2.11 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + reselect: 5.1.1 + use-sync-external-store: 1.6.0(react@19.2.5) + optionalDependencies: + '@types/react': 19.2.14 + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -2244,6 +1890,12 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)': + dependencies: + '@floating-ui/dom': 1.7.6 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + '@floating-ui/utils@0.2.11': {} '@humanfs/core@0.19.1': {} @@ -2257,8 +1909,6 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@isaacs/cliui@9.0.0': {} - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2283,42 +1933,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@microsoft/api-extractor-model@7.33.1(@types/node@25.2.0)': - dependencies: - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.20.1(@types/node@25.2.0) - transitivePeerDependencies: - - '@types/node' - - '@microsoft/api-extractor@7.57.3(@types/node@25.2.0)': - dependencies: - '@microsoft/api-extractor-model': 7.33.1(@types/node@25.2.0) - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.0 - '@rushstack/node-core-library': 5.20.1(@types/node@25.2.0) - '@rushstack/rig-package': 0.7.1 - '@rushstack/terminal': 0.22.1(@types/node@25.2.0) - '@rushstack/ts-command-line': 5.3.1(@types/node@25.2.0) - diff: 8.0.3 - lodash: 4.17.23 - minimatch: 10.2.1 - resolve: 1.22.11 - semver: 7.5.4 - source-map: 0.6.1 - typescript: 5.8.2 - transitivePeerDependencies: - - '@types/node' - - '@microsoft/tsdoc-config@0.18.0': - dependencies: - '@microsoft/tsdoc': 0.16.0 - ajv: 8.12.0 - jju: 1.4.0 - resolve: 1.22.11 - - '@microsoft/tsdoc@0.16.0': {} - '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -2363,7 +1977,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -2382,14 +1996,6 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.3': {} - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.57.1 - '@rollup/rollup-android-arm-eabi@4.57.1': optional: true @@ -2465,113 +2071,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.57.1': optional: true - '@rushstack/node-core-library@5.20.1(@types/node@25.2.0)': - dependencies: - ajv: 8.13.0 - ajv-draft-04: 1.0.0(ajv@8.13.0) - ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 11.3.3 - import-lazy: 4.0.0 - jju: 1.4.0 - resolve: 1.22.11 - semver: 7.5.4 - optionalDependencies: - '@types/node': 25.2.0 - - '@rushstack/problem-matcher@0.2.1(@types/node@25.2.0)': - optionalDependencies: - '@types/node': 25.2.0 - - '@rushstack/rig-package@0.7.1': - dependencies: - resolve: 1.22.11 - strip-json-comments: 3.1.1 - - '@rushstack/terminal@0.22.1(@types/node@25.2.0)': - dependencies: - '@rushstack/node-core-library': 5.20.1(@types/node@25.2.0) - '@rushstack/problem-matcher': 0.2.1(@types/node@25.2.0) - supports-color: 8.1.1 - optionalDependencies: - '@types/node': 25.2.0 - - '@rushstack/ts-command-line@5.3.1(@types/node@25.2.0)': - dependencies: - '@rushstack/terminal': 0.22.1(@types/node@25.2.0) - '@types/argparse': 1.0.38 - argparse: 1.0.10 - string-argv: 0.3.2 - transitivePeerDependencies: - - '@types/node' - - '@tailwindcss/node@4.2.1': - dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.19.0 - jiti: 2.6.1 - lightningcss: 1.31.1 - magic-string: 0.30.21 - source-map-js: 1.2.1 - tailwindcss: 4.2.1 - - '@tailwindcss/oxide-android-arm64@4.2.1': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.2.1': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.2.1': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.2.1': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.2.1': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.2.1': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.2.1': - optional: true - - '@tailwindcss/oxide@4.2.1': - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.1 - '@tailwindcss/oxide-darwin-arm64': 4.2.1 - '@tailwindcss/oxide-darwin-x64': 4.2.1 - '@tailwindcss/oxide-freebsd-x64': 4.2.1 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.1 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.1 - '@tailwindcss/oxide-linux-x64-musl': 4.2.1 - '@tailwindcss/oxide-wasm32-wasi': 4.2.1 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 - - '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3))': - dependencies: - '@tailwindcss/node': 4.2.1 - '@tailwindcss/oxide': 4.2.1 - tailwindcss: 4.2.1 - vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3) - '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -2580,10 +2079,6 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@tsconfig/vite-react@7.0.2': {} - - '@types/argparse@1.0.38': {} - '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.0 @@ -2613,9 +2108,9 @@ snapshots: dependencies: undici-types: 7.16.0 - '@types/node@25.2.0': + '@types/node@25.6.0': dependencies: - undici-types: 7.16.0 + undici-types: 7.19.2 '@types/react-dom@19.2.3(@types/react@19.2.14)': dependencies: @@ -2692,7 +2187,7 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3 - minimatch: 10.2.2 + minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -2716,7 +2211,7 @@ snapshots: '@typescript-eslint/types': 8.56.1 eslint-visitor-keys: 5.0.1 - '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3))': + '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -2724,84 +2219,21 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.3 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3))': - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) - '@rolldown/pluginutils': 1.0.0-rc.3 - '@types/babel__core': 7.20.5 - react-refresh: 0.18.0 - vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3) - transitivePeerDependencies: - - supports-color - - '@volar/language-core@2.4.28': - dependencies: - '@volar/source-map': 2.4.28 - - '@volar/source-map@2.4.28': {} - - '@volar/typescript@2.4.28': - dependencies: - '@volar/language-core': 2.4.28 - path-browserify: 1.0.1 - vscode-uri: 3.1.0 - - '@vue/compiler-core@3.5.28': - dependencies: - '@babel/parser': 7.29.0 - '@vue/shared': 3.5.28 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.28': - dependencies: - '@vue/compiler-core': 3.5.28 - '@vue/shared': 3.5.28 - - '@vue/compiler-vue2@2.7.16': - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - - '@vue/language-core@2.2.0(typescript@5.9.3)': - dependencies: - '@volar/language-core': 2.4.28 - '@vue/compiler-dom': 3.5.28 - '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.28 - alien-signals: 0.4.14 - minimatch: 9.0.6 - muggle-string: 0.4.1 - path-browserify: 1.0.1 - optionalDependencies: - typescript: 5.9.3 - - '@vue/shared@3.5.28': {} - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 - acorn-walk@8.3.4: + acorn-walk@8.3.5: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn@8.15.0: {} - ajv-draft-04@1.0.0(ajv@8.13.0): - optionalDependencies: - ajv: 8.13.0 - - ajv-formats@3.0.1(ajv@8.13.0): - optionalDependencies: - ajv: 8.13.0 + acorn@8.16.0: {} ajv@6.14.0: dependencies: @@ -2810,71 +2242,40 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - ajv@8.13.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - alien-signals@0.4.14: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 arg@4.1.3: {} - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - argparse@2.0.1: {} - autoprefixer@10.4.24(postcss@8.5.6): - dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001767 - fraction.js: 5.3.4 - picocolors: 1.1.1 - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - balanced-match@1.0.2: {} - balanced-match@4.0.2: - dependencies: - jackspeak: 4.2.3 + balanced-match@4.0.4: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.21: {} brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@5.0.2: + brace-expansion@5.0.5: dependencies: - balanced-match: 4.0.2 + balanced-match: 4.0.4 - browserslist@4.28.1: + browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001767 - electron-to-chromium: 1.5.286 - node-releases: 2.0.27 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.21 + caniuse-lite: 1.0.30001790 + electron-to-chromium: 1.5.344 + node-releases: 2.0.38 + update-browserslist-db: 1.2.3(browserslist@4.28.2) callsites@3.1.0: {} - caniuse-lite@1.0.30001767: {} + caniuse-lite@1.0.30001790: {} chalk@4.1.2: dependencies: @@ -2892,14 +2293,8 @@ snapshots: color-name@1.1.4: {} - compare-versions@6.1.1: {} - concat-map@0.0.1: {} - confbox@0.1.8: {} - - confbox@0.2.4: {} - convert-source-map@2.0.0: {} create-require@1.1.1: {} @@ -2912,28 +2307,18 @@ snapshots: csstype@3.2.3: {} - de-indent@1.0.2: {} - debug@4.4.3: dependencies: ms: 2.1.3 deep-is@0.1.4: {} - detect-libc@2.1.2: {} + detect-libc@2.1.2: + optional: true diff@4.0.4: {} - diff@8.0.3: {} - - electron-to-chromium@1.5.286: {} - - enhanced-resolve@5.19.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@7.0.1: {} + electron-to-chromium@1.5.344: {} esbuild@0.27.2: optionalDependencies: @@ -3051,12 +2436,8 @@ snapshots: estraverse@5.3.0: {} - estree-walker@2.0.2: {} - esutils@2.0.3: {} - exsolve@1.0.8: {} - fast-deep-equal@3.1.3: {} fast-json-stable-stringify@2.1.0: {} @@ -3083,45 +2464,27 @@ snapshots: flatted@3.3.3: {} - fraction.js@5.3.4: {} - - fs-extra@11.3.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - gensync@1.0.0-beta.2: {} glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - glob@13.0.3: + glob@13.0.6: dependencies: - minimatch: 10.2.2 - minipass: 7.1.2 - path-scurry: 2.0.1 + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 globals@14.0.0: {} globals@16.5.0: {} - graceful-fs@4.2.11: {} - has-flag@4.0.0: {} - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - he@1.2.0: {} - hermes-estree@0.25.1: {} hermes-parser@0.25.1: @@ -3132,7 +2495,7 @@ snapshots: ignore@7.0.5: {} - immutable@5.1.4: + immutable@5.1.5: optional: true import-fresh@3.3.1: @@ -3140,14 +2503,8 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-lazy@4.0.0: {} - imurmurhash@0.1.4: {} - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - is-extglob@2.1.1: {} is-glob@4.0.3: @@ -3156,13 +2513,8 @@ snapshots: isexe@2.0.0: {} - jackspeak@4.2.3: - dependencies: - '@isaacs/cliui': 9.0.0 - - jiti@2.6.1: {} - - jju@1.4.0: {} + jiti@2.6.1: + optional: true js-tokens@4.0.0: {} @@ -3176,83 +2528,68 @@ snapshots: json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 - kolorist@1.8.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-android-arm64@1.31.1: + lightningcss-android-arm64@1.32.0: optional: true - lightningcss-darwin-arm64@1.31.1: + lightningcss-darwin-arm64@1.32.0: optional: true - lightningcss-darwin-x64@1.31.1: + lightningcss-darwin-x64@1.32.0: optional: true - lightningcss-freebsd-x64@1.31.1: + lightningcss-freebsd-x64@1.32.0: optional: true - lightningcss-linux-arm-gnueabihf@1.31.1: + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.31.1: + lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-musl@1.31.1: + lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.31.1: + lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-x64-musl@1.31.1: + lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.31.1: + lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-x64-msvc@1.31.1: + lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.31.1: + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.31.1 - lightningcss-darwin-arm64: 1.31.1 - lightningcss-darwin-x64: 1.31.1 - lightningcss-freebsd-x64: 1.31.1 - lightningcss-linux-arm-gnueabihf: 1.31.1 - lightningcss-linux-arm64-gnu: 1.31.1 - lightningcss-linux-arm64-musl: 1.31.1 - lightningcss-linux-x64-gnu: 1.31.1 - lightningcss-linux-x64-musl: 1.31.1 - lightningcss-win32-arm64-msvc: 1.31.1 - lightningcss-win32-x64-msvc: 1.31.1 - - local-pkg@1.1.2: - dependencies: - mlly: 1.8.0 - pkg-types: 2.3.0 - quansync: 0.2.11 + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + optional: true locate-path@6.0.0: dependencies: @@ -3260,53 +2597,26 @@ snapshots: lodash.merge@4.6.2: {} - lodash@4.17.23: {} - - lru-cache@11.2.6: {} + lru-cache@11.3.5: {} lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - make-error@1.3.6: {} - minimatch@10.2.1: + minimatch@10.2.5: dependencies: - brace-expansion: 5.0.2 - - minimatch@10.2.2: - dependencies: - brace-expansion: 5.0.2 + brace-expansion: 5.0.5 minimatch@3.1.3: dependencies: brace-expansion: 1.1.12 - minimatch@9.0.6: - dependencies: - brace-expansion: 5.0.2 - - minipass@7.1.2: {} - - mlly@1.8.0: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.3 + minipass@7.1.3: {} ms@2.1.3: {} - muggle-string@0.4.1: {} - nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -3314,7 +2624,7 @@ snapshots: node-addon-api@7.1.1: optional: true - node-releases@2.0.27: {} + node-releases@2.0.38: {} optionator@0.9.4: dependencies: @@ -3337,38 +2647,21 @@ snapshots: dependencies: callsites: 3.1.0 - path-browserify@1.0.1: {} - path-exists@4.0.0: {} path-key@3.1.1: {} - path-parse@1.0.7: {} - - path-scurry@2.0.1: + path-scurry@2.0.2: dependencies: - lru-cache: 11.2.6 - minipass: 7.1.2 - - pathe@2.0.3: {} + lru-cache: 11.3.5 + minipass: 7.1.3 picocolors@1.1.1: {} picomatch@4.0.3: {} - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.8.0 - pathe: 2.0.3 - - pkg-types@2.3.0: - dependencies: - confbox: 0.2.4 - exsolve: 1.0.8 - pathe: 2.0.3 - - postcss-value-parser@4.2.0: {} + picomatch@4.0.4: + optional: true postcss@8.5.6: dependencies: @@ -3378,36 +2671,31 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.8.1: {} - punycode@2.3.1: {} - quansync@0.2.11: {} - react-dom@19.2.4(react@19.2.4): dependencies: react: 19.2.4 scheduler: 0.27.0 + react-dom@19.2.5(react@19.2.5): + dependencies: + react: 19.2.5 + scheduler: 0.27.0 + react-refresh@0.18.0: {} react@19.2.4: {} + react@19.2.5: {} + readdirp@4.1.2: optional: true - require-from-string@2.0.2: {} - reselect@5.1.1: {} resolve-from@4.0.0: {} - resolve@1.22.11: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - rollup@4.57.1: dependencies: '@types/estree': 1.0.8 @@ -3442,7 +2730,7 @@ snapshots: sass@1.97.3: dependencies: chokidar: 4.0.3 - immutable: 5.1.4 + immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 @@ -3452,10 +2740,6 @@ snapshots: semver@6.3.1: {} - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - semver@7.7.4: {} shebang-command@2.0.0: @@ -3466,37 +2750,23 @@ snapshots: source-map-js@1.2.1: {} - source-map@0.6.1: {} - - sprintf-js@1.0.3: {} - - string-argv@0.3.2: {} - strip-json-comments@3.1.1: {} supports-color@7.2.0: dependencies: has-flag: 4.0.0 - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - tabbable@6.4.0: {} tailwind-merge@3.5.0: {} - tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.1): + tailwind-variants@3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4): dependencies: - tailwindcss: 4.2.1 + tailwindcss: 4.2.4 optionalDependencies: tailwind-merge: 3.5.0 - tailwindcss@4.2.1: {} - - tapable@2.3.0: {} + tailwindcss@4.2.4: {} tinyglobby@0.2.15: dependencies: @@ -3507,21 +2777,21 @@ snapshots: dependencies: typescript: 5.9.3 - ts-node@10.9.2(@types/node@25.2.0)(typescript@5.9.3): + ts-node@10.9.2(@types/node@25.6.0)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 25.2.0 - acorn: 8.15.0 - acorn-walk: 8.3.4 + '@types/node': 25.6.0 + acorn: 8.16.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 6.0.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -3567,19 +2837,17 @@ snapshots: transitivePeerDependencies: - supports-color - typescript@5.8.2: {} - typescript@5.9.3: {} - ufo@1.6.3: {} + typescript@6.0.3: {} undici-types@7.16.0: {} - universalify@2.0.1: {} + undici-types@7.19.2: {} - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -3591,28 +2859,13 @@ snapshots: dependencies: react: 19.2.4 + use-sync-external-store@1.6.0(react@19.2.5): + dependencies: + react: 19.2.5 + v8-compile-cache-lib@3.0.1: {} - vite-plugin-dts@4.5.4(@types/node@25.2.0)(rollup@4.57.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3)): - dependencies: - '@microsoft/api-extractor': 7.57.3(@types/node@25.2.0) - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - '@volar/typescript': 2.4.28 - '@vue/language-core': 2.2.0(typescript@5.9.3) - compare-versions: 6.1.1 - debug: 4.4.3 - kolorist: 1.8.0 - local-pkg: 1.1.2 - magic-string: 0.30.21 - typescript: 5.9.3 - optionalDependencies: - vite: 7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - - vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3): + vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.32.0)(sass@1.97.3): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -3624,26 +2877,9 @@ snapshots: '@types/node': 24.10.13 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.31.1 + lightningcss: 1.32.0 sass: 1.97.3 - vite@7.3.1(@types/node@25.2.0)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.97.3): - dependencies: - esbuild: 0.27.2 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - postcss: 8.5.6 - rollup: 4.57.1 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 25.2.0 - fsevents: 2.3.3 - jiti: 2.6.1 - lightningcss: 1.31.1 - sass: 1.97.3 - - vscode-uri@3.1.0: {} - which@2.0.2: dependencies: isexe: 2.0.0 @@ -3652,8 +2888,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} - yn@3.1.1: {} yocto-queue@0.1.0: {} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..3a7e109 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "module": "nodenext", + "target": "es2022", + "lib": ["es2022", "dom"], + "jsx": "react-jsx", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noEmit": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "noErrorTruncation": false, + "allowJs": true, + "skipLibCheck": true, + "allowImportingTsExtensions": true, + "noUncheckedSideEffectImports": true, + "paths": {} + }, + "exclude": [ + "**/.*/", + "**/build", + "**/build-tests", + "**/node_modules", + "docs/export", + "**/dist", + "**/example", + "**/scripts", + "**/stories", + "**/vite.config.ts" + ] +}