@nebutra/ui 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -676
- package/README.md +81 -86
- package/dist/agent/index.d.ts +119 -0
- package/dist/agent/index.js +135 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/canonical-CrO71UPO.d.ts +4058 -0
- package/dist/components/index.d.ts +51 -56
- package/dist/components/index.js +1467 -1160
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.d.ts +62 -15
- package/dist/hooks/index.js +56 -34
- package/dist/hooks/index.js.map +1 -1
- package/dist/index-CKLIGfiU.d.ts +19 -0
- package/dist/index-Dg4jRJV2.d.ts +57 -0
- package/dist/layout/index.d.ts +5 -1
- package/dist/layout/index.js +427 -533
- package/dist/layout/index.js.map +1 -1
- package/dist/layouts/index.js +11 -9
- package/dist/layouts/index.js.map +1 -1
- package/dist/patterns/index.d.ts +128 -2
- package/dist/patterns/index.js +1478 -786
- package/dist/patterns/index.js.map +1 -1
- package/dist/primitives/canonical.d.ts +25 -0
- package/dist/primitives/canonical.js +11903 -0
- package/dist/primitives/canonical.js.map +1 -0
- package/dist/primitives/index.d.ts +577 -3545
- package/dist/primitives/index.js +8002 -6159
- package/dist/primitives/index.js.map +1 -1
- package/dist/shared/animation/css/index.d.ts +1 -0
- package/dist/shared/animation/css/index.js +14 -0
- package/dist/shared/animation/css/index.js.map +1 -0
- package/dist/shared/animation/index.d.ts +6 -0
- package/dist/shared/animation/index.js +272 -0
- package/dist/shared/animation/index.js.map +1 -0
- package/dist/shared/animation/motion/index.d.ts +4 -0
- package/dist/shared/animation/motion/index.js +205 -0
- package/dist/shared/animation/motion/index.js.map +1 -0
- package/dist/styles/brand-override.css +11 -11
- package/dist/tailwind.preset.d.ts +10 -10
- package/dist/tailwind.preset.js +7 -4
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/theme/index.d.ts +2 -2
- package/dist/tokens-EAC6uPem.d.ts +302 -0
- package/dist/typography/fonts.css +31 -12
- package/dist/typography/index.d.ts +27 -27
- package/dist/typography/index.js +24 -4
- package/dist/typography/index.js.map +1 -1
- package/dist/utils/index.d.ts +36 -14
- package/dist/utils/index.js +44 -10
- package/dist/utils/index.js.map +1 -1
- package/package.json +38 -12
- package/src/styles/brand-override.css +61 -0
- package/src/styles/preset.css +29 -0
- package/src/styles/sources.css +27 -0
- package/src/typography/fonts.css +129 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/cn.ts","../../src/patterns/Card/Card.tsx","../../src/patterns/CommandBox.tsx","../../src/primitives/badge.tsx","../../src/primitives/dropdown-menu.tsx","../../src/patterns/gallery-card.tsx","../../src/utils/slot.tsx","../../src/primitives/button.tsx","../../src/tokens/primitive.ts","../../src/tokens/components/tabs.ts","../../src/utils/primitive-props.ts","../../src/primitives/tooltip.tsx","../../src/primitives/tabs.tsx","../../src/tokens/components/textarea.ts","../../src/primitives/textarea.tsx","../../src/patterns/qa-page/markdown-renderer.tsx","../../src/patterns/qa-page/markdown-editor.tsx","../../src/primitives/card.tsx","../../src/primitives/separator.tsx","../../src/primitives/avatar.tsx","../../src/patterns/qa-page/user-info.tsx","../../src/patterns/qa-page/vote-buttons.tsx","../../src/patterns/qa-page/qa-page.tsx","../../src/primitives/collapsible.tsx","../../src/patterns/sidebar-nav/sidebar-nav.tsx","../../src/patterns/Terminal/Terminal.tsx","../../src/primitives/kbd.tsx","../../src/patterns/user-menu.tsx","../../src/patterns/workspace-switcher.tsx"],"names":["React","React2","variantStyles","jsx","jsxs","React3","BaseMenu","React4","Circle","React5","Fragment","React6","cva","React7","BaseTooltip","React8","BaseTabs","React9","React10","useState","useCallback","LinkIcon","ImageIcon","Card","React11","CardHeader","CardTitle","CardDescription","CardFooter","React12","BaseSeparator","React13","BaseAvatar","Badge","useMemo","Check","ShareIcon","Pencil","ChevronRight","React15","React16","React17","initials","React18","React19","ChevronsUpDown"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* ─────────────────────────────────────────────────────────────────────────────\n * Card Compound Component\n *\n * A flexible, composable card system following compound component pattern.\n * Supports multiple variants and semantic subcomponents.\n *\n * Usage:\n * <Card variant=\"elevated\">\n * <Card.Header>\n * <Card.Icon><IconComponent /></Card.Icon>\n * <Card.Title>Title</Card.Title>\n * </Card.Header>\n * <Card.Body>\n * <Card.Description>Description text</Card.Description>\n * </Card.Body>\n * <Card.Footer>Footer content</Card.Footer>\n * </Card>\n * ───────────────────────────────────────────────────────────────────────────── */\n\ntype CardVariant = \"default\" | \"elevated\" | \"bordered\" | \"ghost\" | \"gradient\";\ntype CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\ninterface CardContextValue {\n variant: CardVariant;\n}\n\nconst CardContext = React.createContext<CardContextValue | null>(null);\n\n// Reserved for future use when subcomponents need parent context\n// function useCardContext() {\n// const context = React.useContext(CardContext);\n// if (!context) {\n// throw new Error(\"Card subcomponents must be used within a Card component\");\n// }\n// return context;\n// }\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst paddingMap: Record<CardPadding, string> = {\n none: \"\",\n sm: \"p-4\",\n md: \"p-6\",\n lg: \"p-8\",\n};\n\nconst variantStyles: Record<CardVariant, string> = {\n default: \"bg-card border border-border\",\n elevated: \"bg-card border border-border shadow-lg\",\n bordered: \"bg-transparent border-2 border-border\",\n ghost: \"bg-transparent\",\n gradient: \"bg-gradient-to-br from-card to-muted border border-border\",\n};\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CardVariant;\n padding?: CardPadding;\n asChild?: boolean;\n}\n\nconst CardRoot = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant = \"default\", padding = \"md\", children, ...props }, ref) => {\n return (\n <CardContext.Provider value={{ variant }}>\n <div\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-xl)] transition-all duration-200\",\n variantStyles[variant],\n paddingMap[padding],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </CardContext.Provider>\n );\n },\n);\nCardRoot.displayName = \"Card\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, spacing: gap = \"md\", children, ...props }, ref) => {\n const gapMap = { sm: \"gap-2\", md: \"gap-3\", lg: \"gap-4\" };\n\n return (\n <div ref={ref} className={cn(\"flex items-start\", gapMap[gap], className)} {...props}>\n {children}\n </div>\n );\n },\n);\nCardHeader.displayName = \"Card.Header\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type CardBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardBody = React.forwardRef<HTMLDivElement, CardBodyProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"mt-4\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nCardBody.displayName = \"Card.Body\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type CardFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"mt-6 pt-4 border-t border-border/50\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nCardFooter.displayName = \"Card.Footer\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardIconProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst CardIcon = React.forwardRef<HTMLDivElement, CardIconProps>(\n ({ className, size = \"md\", children, ...props }, ref) => {\n const sizeMap = {\n sm: \"w-8 h-8\",\n md: \"w-10 h-10\",\n lg: \"w-12 h-12\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-center rounded-[var(--radius-lg)] bg-muted/50 shrink-0\",\n sizeMap[size],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nCardIcon.displayName = \"Card.Icon\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n as?: \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n}\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, as: Tag = \"h3\", children, ...props }, ref) => {\n return (\n <Tag ref={ref} className={cn(\"text-lg font-semibold text-foreground\", className)} {...props}>\n {children}\n </Tag>\n );\n },\n);\nCardTitle.displayName = \"Card.Title\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement | HTMLDivElement> {\n as?: React.ElementType;\n}\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement | HTMLDivElement,\n CardDescriptionProps\n>(({ className, as: Tag = \"p\", children, ...props }, ref) => {\n return React.createElement(\n Tag,\n {\n ref,\n className: cn(\"text-sm text-muted-foreground leading-relaxed\", className),\n ...props,\n },\n children,\n );\n});\nCardDescription.displayName = \"Card.Description\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n// Compound component assembly\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Body: CardBody,\n Footer: CardFooter,\n Icon: CardIcon,\n Title: CardTitle,\n Description: CardDescription,\n});\n\n// Named exports for direct imports\nexport { CardBody, CardDescription, CardFooter, CardHeader, CardIcon, CardRoot, CardTitle };\n","\"use client\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n/* ─────────────────────────────────────────────────────────────────────────────\n * CommandBox Component\n *\n * A copyable command input with click-to-copy functionality.\n * Used for installation commands, code snippets, etc.\n *\n * Usage:\n * <CommandBox command=\"npm install @nebutra/ui\" />\n * <CommandBox command=\"pnpm add @nebutra/ui\" prefix=\"$\" />\n * ───────────────────────────────────────────────────────────────────────────── */\nexport interface CommandBoxProps extends React.HTMLAttributes<HTMLDivElement> {\n command: string;\n prefix?: string;\n showCopyButton?: boolean;\n variant?: \"default\" | \"minimal\" | \"pill\";\n onCopy?: () => void;\n}\nexport const CommandBox = React.forwardRef<HTMLDivElement, CommandBoxProps>(\n (\n {\n className,\n command,\n prefix = \"$\",\n showCopyButton = true,\n variant = \"default\",\n onCopy,\n ...props\n },\n ref,\n ) => {\n const [copied, setCopied] = React.useState(false);\n const handleCopy = React.useCallback(async () => {\n try {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n onCopy?.();\n setTimeout(() => setCopied(false), 2000);\n } catch (_err) {}\n }, [command, onCopy]);\n const variantStyles = {\n default: \"bg-[var(--neutral-2)] border border-[var(--neutral-7)] rounded-[var(--radius-lg)]\",\n minimal: \"bg-[var(--neutral-1)] border border-[var(--neutral-7)] rounded-[var(--radius-md)]\",\n pill: \"bg-[var(--neutral-2)] border border-[var(--neutral-7)] rounded-full\",\n };\n return (\n // biome-ignore lint/a11y/useSemanticElements: ARIA pattern\n <div\n ref={ref}\n className={cn(\n \"group relative flex items-center gap-3 px-4 py-2.5 font-mono text-sm cursor-pointer transition-all hover:bg-[var(--neutral-3)]\",\n variantStyles[variant],\n className,\n )}\n onClick={handleCopy}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy();\n }\n }}\n aria-label={`Copy command: ${command}`}\n {...props}\n >\n {/* Prefix */}\n <span className=\"text-emerald-400 shrink-0 select-none\">{prefix}</span>\n {/* Command text */}\n <span className=\"flex-1 text-[var(--neutral-11)] truncate\">{command}</span>\n {/* Copy indicator */}\n {showCopyButton && (\n <span\n className={cn(\n \"shrink-0 text-xs transition-colors\",\n copied\n ? \"text-emerald-400\"\n : \"text-[var(--neutral-9)] group-hover:text-[var(--neutral-11)]\",\n )}\n >\n {copied ? <CopiedIcon className=\"w-4 h-4\" /> : <CopyIcon className=\"w-4 h-4\" />}\n </span>\n )}\n {/* Copy tooltip */}\n <span\n className={cn(\n \"absolute -top-8 left-1/2 -translate-x-1/2 px-2 py-1 text-xs rounded bg-zinc-700 text-[var(--neutral-11)] opacity-0 transition-opacity pointer-events-none\",\n \"group-hover:opacity-100\",\n copied && \"opacity-100\",\n )}\n >\n {copied ? \"Copied!\" : \"Click to copy\"}\n </span>\n </div>\n );\n },\n);\nCommandBox.displayName = \"CommandBox\";\n/* ─────────────────────────────────────────────────────────────────────────── */\nfunction CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\nfunction CopiedIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\nconst badgeVariants = cva(\n \"inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-transparent\",\n {\n variants: {\n variant: {\n // ─── Semantic / brand variants ────────────────────────────────────────\n default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"border-border text-foreground\",\n success: \"border-transparent bg-success text-success-foreground hover:bg-success/80\",\n warning: \"border-transparent bg-warning text-warning-foreground hover:bg-warning/80\",\n info: \"border-transparent bg-info text-info-foreground hover:bg-info/80\",\n error:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n // ─── Geist-style color palette ────────────────────────────────────────\n gray: \"bg-geist-gray-700 text-white fill-white\",\n \"gray-subtle\":\n \"bg-geist-gray-200 text-geist-gray-1000 fill-geist-gray-1000 border-transparent\",\n blue: \"bg-blue-700 text-white fill-white\",\n \"blue-subtle\": \"bg-blue-200 text-blue-900 fill-blue-900 border-transparent\",\n purple: \"bg-purple-700 text-white fill-white\",\n \"purple-subtle\": \"bg-purple-200 text-purple-900 fill-purple-900 border-transparent\",\n amber: \"bg-amber-700 text-black fill-black\",\n \"amber-subtle\": \"bg-amber-200 text-amber-900 fill-amber-900 border-transparent\",\n red: \"bg-red-700 text-white fill-white\",\n \"red-subtle\": \"bg-red-200 text-red-900 fill-red-900 border-transparent\",\n pink: \"bg-pink-700 text-white fill-white\",\n \"pink-subtle\": \"bg-pink-300 text-pink-900 fill-pink-900 border-transparent\",\n green: \"bg-green-700 text-white fill-white\",\n \"green-subtle\": \"bg-green-200 text-green-900 fill-green-900 border-transparent\",\n teal: \"bg-teal-700 text-white fill-white\",\n \"teal-subtle\": \"bg-teal-300 text-teal-900 fill-teal-900 border-transparent\",\n inverted: \"bg-geist-gray-1000 text-geist-gray-100 fill-geist-gray-100\",\n trial: \"bg-gradient-to-br from-trial-start to-trial-end text-white fill-white\",\n turbo: \"bg-gradient-to-br from-turbo-start to-turbo-end text-white fill-white\",\n pill: \"bg-background text-foreground fill-foreground !border-gray-alpha-400 hover:bg-muted/50 focus-visible:bg-muted/50 dark:!border-border\",\n // ─── Semantic tone variants (nav badges, ownership, featured) ─────────\n beta: \"border-transparent bg-muted text-muted-foreground\",\n new: \"border-transparent bg-blue-100 text-blue-700 dark:bg-blue-950/50 dark:text-blue-300\",\n owner: \"border-border bg-transparent text-foreground\",\n featured:\n \"border-transparent text-white bg-[image:var(--brand-gradient)] [text-shadow:0_0_1px_rgba(0,0,0,0.2)]\",\n \"coming-soon\": \"border-transparent bg-muted/60 text-muted-foreground italic\",\n },\n size: {\n sm: \"text-[11px] h-5 px-1.5 tracking-[0.2px] gap-[3px] [&_svg]:h-[11px] [&_svg]:w-[11px]\",\n md: \"text-[12px] h-6 px-2.5 tracking-normal gap-1 [&_svg]:h-[14px] [&_svg]:w-[14px]\",\n lg: \"text-[14px] h-8 px-3 tracking-normal gap-1.5 [&_svg]:h-[16px] [&_svg]:w-[16px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nconst dotColorMap: Partial<Record<NonNullable<BadgeProps[\"variant\"]>, string>> = {\n success: \"bg-success-foreground\",\n warning: \"bg-warning-foreground\",\n info: \"bg-info-foreground\",\n error: \"bg-destructive-foreground\",\n destructive: \"bg-destructive-foreground\",\n \"gray-subtle\": \"bg-geist-gray-500\",\n \"green-subtle\": \"bg-green-500\",\n \"amber-subtle\": \"bg-amber-500\",\n \"red-subtle\": \"bg-red-500\",\n \"blue-subtle\": \"bg-blue-500\",\n \"purple-subtle\": \"bg-purple-500\",\n \"pink-subtle\": \"bg-pink-500\",\n \"teal-subtle\": \"bg-teal-500\",\n default: \"bg-primary-foreground\",\n secondary: \"bg-secondary-foreground\",\n outline: \"bg-muted-foreground\",\n};\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof badgeVariants> {\n /** @deprecated Prefer Status Dot for dot-only indicators. Keep text labels redundant with color. */\n dot?: boolean;\n /** Icon element rendered before the label. Decorative icons are hidden from assistive tech. */\n icon?: React.ReactNode;\n /** Render as child element — use with `<a>` for link badges */\n asChild?: boolean;\n}\n\nfunction Badge({\n className,\n variant = \"default\",\n size = \"md\",\n dot,\n icon,\n asChild,\n children,\n ...props\n}: BadgeProps) {\n const badgeClassName = cn(badgeVariants({ variant, size }), className);\n const renderContent = (label: React.ReactNode) => (\n <>\n {dot && (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"h-1.5 w-1.5 shrink-0 rounded-full\",\n dotColorMap[variant ?? \"default\"] ?? \"bg-current\",\n )}\n />\n )}\n {icon && (\n <span aria-hidden=\"true\" className=\"shrink-0 flex items-center justify-center\">\n {icon}\n </span>\n )}\n {label}\n </>\n );\n\n if (asChild) {\n const childArray = React.Children.toArray(children);\n const child = childArray.length === 1 ? childArray[0] : null;\n\n if (React.isValidElement(child)) {\n const childProps = child.props as React.HTMLAttributes<HTMLElement> & {\n children?: React.ReactNode;\n };\n\n return React.cloneElement(child, {\n ...props,\n ...childProps,\n \"data-slot\": \"badge\",\n className: cn(badgeClassName, childProps.className),\n style: { ...props.style, ...childProps.style },\n children: renderContent(childProps.children),\n } as React.HTMLAttributes<HTMLElement>);\n }\n }\n\n return (\n <span data-slot=\"badge\" className={badgeClassName} {...props}>\n {renderContent(children)}\n </span>\n );\n}\n\nexport { Badge, badgeVariants };\n","\"use client\";\n\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport { Check, ChevronRight, Status as Circle } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nconst DropdownMenu = BaseMenu.Root;\n\ntype DropdownMenuTriggerProps = React.ComponentProps<typeof BaseMenu.Trigger> & {\n asChild?: boolean;\n};\n\nconst DropdownMenuTrigger = React.forwardRef<HTMLButtonElement, DropdownMenuTriggerProps>(\n ({ asChild, children, render, ...props }, ref) => {\n const renderElement = asChild && React.isValidElement(children) ? children : render;\n return (\n <BaseMenu.Trigger\n ref={ref}\n render={renderElement as React.ComponentProps<typeof BaseMenu.Trigger>[\"render\"]}\n {...(renderElement ? props : { ...props, children })}\n />\n );\n },\n);\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\nconst DropdownMenuGroup = BaseMenu.Group;\n\nconst DropdownMenuPortal = BaseMenu.Portal;\n\nconst DropdownMenuSub = BaseMenu.SubmenuRoot;\n\nconst DropdownMenuRadioGroup = BaseMenu.RadioGroup;\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof BaseMenu.SubmenuTrigger>,\n React.ComponentPropsWithoutRef<typeof BaseMenu.SubmenuTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <BaseMenu.SubmenuTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center rounded-[var(--radius-md)] px-2 py-1.5 text-sm outline-none focus:bg-accent data-[popup-open]:bg-accent\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4\" />\n </BaseMenu.SubmenuTrigger>\n));\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\";\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof BaseMenu.Popup>,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Popup>\n>(({ className, ...props }, ref) => (\n <BaseMenu.Portal>\n <BaseMenu.Positioner>\n <BaseMenu.Popup\n ref={ref}\n className={cn(\n \"z-50 min-w-32 overflow-hidden rounded-xl border bg-background/90 backdrop-blur-md p-1 text-popover-foreground shadow-xl transition-[opacity,transform,display] duration-flow ease-out data-[starting-style]:zoom-out-95 data-[ending-style]:zoom-out-95 data-[starting-style]:fade-out-0 data-[ending-style]:fade-out-0\",\n className,\n )}\n {...props}\n />\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n));\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\";\n\nexport interface DropdownMenuContentProps\n extends React.ComponentPropsWithoutRef<typeof BaseMenu.Popup> {\n align?: React.ComponentProps<typeof BaseMenu.Positioner>[\"align\"];\n sideOffset?: React.ComponentProps<typeof BaseMenu.Positioner>[\"sideOffset\"];\n alignOffset?: React.ComponentProps<typeof BaseMenu.Positioner>[\"alignOffset\"];\n side?: React.ComponentProps<typeof BaseMenu.Positioner>[\"side\"];\n}\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof BaseMenu.Popup>,\n DropdownMenuContentProps\n>(\n (\n { className, sideOffset = 4, align = \"center\", alignOffset = 0, side = \"bottom\", ...props },\n ref,\n ) => (\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n side={side}\n >\n <BaseMenu.Popup\n ref={ref}\n className={cn(\n \"z-50 min-w-32 overflow-hidden rounded-xl border bg-background/90 backdrop-blur-md p-1 text-popover-foreground shadow-xl transition-[opacity,transform,display] duration-flow ease-out outline-none data-[starting-style]:zoom-out-95 data-[ending-style]:zoom-out-95 data-[starting-style]:fade-out-0 data-[ending-style]:fade-out-0\",\n className,\n )}\n {...props}\n />\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n ),\n);\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof BaseMenu.Item>,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <BaseMenu.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-[var(--radius-md)] px-2 py-1.5 text-sm outline-none transition-colors data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof BaseMenu.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof BaseMenu.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <BaseMenu.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-[var(--radius-md)] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...(checked !== undefined && { checked })}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <BaseMenu.CheckboxItemIndicator>\n <Check className=\"size-4\" />\n </BaseMenu.CheckboxItemIndicator>\n </span>\n {children}\n </BaseMenu.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof BaseMenu.RadioItem>,\n React.ComponentPropsWithoutRef<typeof BaseMenu.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <BaseMenu.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-[var(--radius-md)] py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <BaseMenu.RadioItemIndicator>\n <Circle className=\"size-2 fill-current\" />\n </BaseMenu.RadioItemIndicator>\n </span>\n {children}\n </BaseMenu.RadioItem>\n));\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\";\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof BaseMenu.GroupLabel>,\n React.ComponentPropsWithoutRef<typeof BaseMenu.GroupLabel> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <BaseMenu.GroupLabel\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof BaseMenu.Separator>,\n React.ComponentPropsWithoutRef<typeof BaseMenu.Separator>\n>(({ className, orientation = \"horizontal\", ...props }, ref) => (\n <BaseMenu.Separator\n ref={ref}\n orientation={orientation}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)} {...props} />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","\"use client\";\n\nimport { MoreHorizontal, Pin } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { Badge } from \"../primitives/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { cn } from \"../utils/cn\";\n\n/* ─────────────────────────────────────────────────────────────────────────────\n * GalleryCard\n *\n * Discovery card pattern modelled on MiniMax / OpenAI GPT Store / Vercel\n * templates. Renders an icon tile, title, description, metadata strip (author\n * + metric + optional trailing slot), action menu, and featured / pinned\n * indicators.\n *\n * The card can render as one of:\n * - <a> (when `href` is provided — accessible link, full-card clickable)\n * - <button> (when only `onClick` is provided)\n * - <div> (no interaction)\n *\n * The action menu always stops propagation so it never triggers card\n * navigation when clicked.\n * ───────────────────────────────────────────────────────────────────────── */\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type GalleryCardIconTone =\n | \"neutral\"\n | \"blue\"\n | \"cyan\"\n | \"purple\"\n | \"amber\"\n | \"green\"\n | \"pink\";\n\nexport type GalleryCardBadgeTone = \"beta\" | \"new\" | \"owner\" | \"featured\" | \"coming-soon\";\n\nexport interface GalleryCardMetadata {\n /** Author / publisher name, e.g. \"By MiniMax\" */\n author?: string;\n /** Pre-formatted secondary metric, e.g. \"710478 浏览量\" or \"1.2k uses\" */\n metric?: string;\n /** Custom metadata slot at end (e.g. star count, last updated) */\n trailing?: React.ReactNode;\n}\n\nexport interface GalleryCardBadge {\n label: string;\n tone: GalleryCardBadgeTone;\n}\n\nexport interface GalleryCardAction {\n id: string;\n label: string;\n onSelect: () => void;\n destructive?: boolean;\n}\n\nexport interface GalleryCardRenderLinkProps {\n href: string;\n children: React.ReactNode;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport interface GalleryCardProps {\n title: string;\n description?: string;\n /** Icon at top-left (16-24px). Common: emoji, lucide icon, or 32x32 avatar */\n icon?: React.ReactNode;\n /** Color hint for the icon background tile */\n iconTone?: GalleryCardIconTone;\n /** Optional badge rendered inline next to title (e.g. \"Featured\", \"Beta\") */\n badge?: GalleryCardBadge;\n /** Pin/star indicator at top-right (boolean) — renders a small Pin icon */\n pinned?: boolean;\n metadata?: GalleryCardMetadata;\n /** Dropdown action menu items at top-right (••• kebab) */\n actions?: GalleryCardAction[];\n /** Click handler for the whole card — makes the card behave as a button */\n onClick?: () => void;\n /** If provided, makes the card a link (renders <a> with onClick, accessible) */\n href?: string;\n /** Replace the rendered link element (e.g. Next.js Link) */\n renderLink?: (props: GalleryCardRenderLinkProps) => React.ReactElement;\n className?: string;\n}\n\n// ─── Token maps ───────────────────────────────────────────────────────────────\n\n/**\n * Icon tile color pairs. Each tone resolves to a (background, foreground) pair\n * that works in both light and dark mode using semantic Tailwind palette steps.\n * `neutral` falls back to muted tokens so it always blends with the card.\n */\nconst iconToneStyles: Record<GalleryCardIconTone, string> = {\n neutral: \"bg-muted text-muted-foreground\",\n blue: \"bg-blue-50 text-blue-700 dark:bg-blue-950/40 dark:text-blue-300\",\n cyan: \"bg-cyan-50 text-cyan-700 dark:bg-cyan-950/40 dark:text-cyan-300\",\n purple: \"bg-purple-50 text-purple-700 dark:bg-purple-950/40 dark:text-purple-300\",\n amber: \"bg-amber-50 text-amber-700 dark:bg-amber-950/40 dark:text-amber-300\",\n green: \"bg-green-50 text-green-700 dark:bg-green-950/40 dark:text-green-300\",\n pink: \"bg-pink-50 text-pink-700 dark:bg-pink-950/40 dark:text-pink-300\",\n};\n\nconst badgeToneToVariant: Record<\n GalleryCardBadgeTone,\n \"beta\" | \"new\" | \"owner\" | \"featured\" | \"coming-soon\"\n> = {\n beta: \"beta\",\n new: \"new\",\n owner: \"owner\",\n featured: \"featured\",\n \"coming-soon\": \"coming-soon\",\n};\n\n// ─── Shared className ─────────────────────────────────────────────────────────\n\nconst cardClassName = cn(\n \"group relative block rounded-xl border border-border bg-card text-card-foreground p-5 text-left\",\n \"transition-all duration-150\",\n \"hover:border-neutral-7 hover:shadow-sm hover:-translate-y-px\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n);\n\n// ─── Subcomponents ────────────────────────────────────────────────────────────\n\ninterface GalleryCardActionsMenuProps {\n actions: GalleryCardAction[];\n title: string;\n}\n\n/**\n * Action menu trigger + popup. Mounted in a wrapper that stops both pointer\n * down and click events so the surrounding link / button never fires when the\n * user opens the menu or selects an item.\n */\nfunction GalleryCardActionsMenu({ actions, title }: GalleryCardActionsMenuProps) {\n const stop = React.useCallback((event: React.SyntheticEvent) => {\n event.stopPropagation();\n }, []);\n\n return (\n <div onClickCapture={stop} onPointerDownCapture={stop}>\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <button\n type=\"button\"\n aria-label={`Actions for ${title}`}\n className={cn(\n \"inline-flex h-7 w-7 items-center justify-center rounded-md\",\n \"text-muted-foreground transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </button>\n }\n />\n <DropdownMenuContent align=\"end\" sideOffset={6}>\n {actions.map((action) => (\n <DropdownMenuItem\n key={action.id}\n onClick={(event) => {\n event.stopPropagation();\n action.onSelect();\n }}\n className={cn(\n action.destructive &&\n \"text-destructive data-[highlighted]:bg-destructive/10 data-[highlighted]:text-destructive\",\n )}\n >\n {action.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n\ninterface GalleryCardBodyProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n iconTone: GalleryCardIconTone;\n badge?: GalleryCardBadge;\n pinned?: boolean;\n metadata?: GalleryCardMetadata;\n actions?: GalleryCardAction[];\n}\n\n/**\n * Inner card body — does not include the outer interactive wrapper. Pure\n * presentation, identical regardless of whether the card is link, button or\n * div on the outside.\n */\nfunction GalleryCardBody({\n title,\n description,\n icon,\n iconTone,\n badge,\n pinned,\n metadata,\n actions,\n}: GalleryCardBodyProps) {\n const hasActions = Boolean(actions && actions.length > 0);\n const hasMetadataStrip = Boolean(metadata?.author || metadata?.metric || metadata?.trailing);\n\n return (\n <>\n {/* Top row: icon + (pin, actions) */}\n <div className=\"mb-3 flex items-start justify-between gap-2\">\n {icon ? (\n <div\n className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg text-base\",\n iconToneStyles[iconTone],\n )}\n aria-hidden=\"true\"\n >\n {icon}\n </div>\n ) : (\n <span className=\"h-10 w-10 shrink-0\" aria-hidden=\"true\" />\n )}\n\n {(pinned || hasActions) && (\n <div className=\"flex items-center gap-1\">\n {pinned && (\n <Pin className=\"h-3.5 w-3.5 fill-amber-400 text-amber-500\" aria-label=\"Pinned\" />\n )}\n {hasActions && actions ? (\n <GalleryCardActionsMenu actions={actions} title={title} />\n ) : null}\n </div>\n )}\n </div>\n\n {/* Title + optional inline badge */}\n <div className=\"mb-1.5 flex items-center gap-2\">\n <h3 className=\"line-clamp-1 text-[15px] font-semibold leading-tight\">{title}</h3>\n {badge && (\n <Badge variant={badgeToneToVariant[badge.tone]} size=\"sm\">\n {badge.label}\n </Badge>\n )}\n </div>\n\n {/* Description (always reserves space so cards align in a grid) */}\n <p className=\"mb-4 line-clamp-2 min-h-[2.5rem] text-sm text-muted-foreground\">\n {description ?? \" \"}\n </p>\n\n {/* Metadata strip */}\n {hasMetadataStrip && (\n <div className=\"flex items-center justify-between gap-2 border-t border-border pt-3 text-xs text-muted-foreground\">\n <span className=\"truncate\">{metadata?.author ?? \"\"}</span>\n <span className=\"flex items-center gap-2\">\n {metadata?.metric && <span className=\"tabular-nums\">{metadata.metric}</span>}\n {metadata?.trailing}\n </span>\n </div>\n )}\n </>\n );\n}\n\n// ─── Public component ─────────────────────────────────────────────────────────\n\nexport function GalleryCard(props: GalleryCardProps): React.ReactElement {\n const {\n title,\n description,\n icon,\n iconTone = \"neutral\",\n badge,\n pinned,\n metadata,\n actions,\n onClick,\n href,\n renderLink,\n className,\n } = props;\n\n const body = (\n <GalleryCardBody\n title={title}\n description={description}\n icon={icon}\n iconTone={iconTone}\n badge={badge}\n pinned={pinned}\n metadata={metadata}\n actions={actions}\n />\n );\n\n const composedClassName = cn(cardClassName, \"cursor-pointer\", className);\n\n // 1. Link variant (preferred for navigation — accessible, right-clickable)\n if (href) {\n if (renderLink) {\n return renderLink({\n href,\n className: composedClassName,\n \"aria-label\": title,\n children: body,\n });\n }\n return (\n <a href={href} aria-label={title} className={composedClassName} onClick={onClick}>\n {body}\n </a>\n );\n }\n\n // 2. Button variant — full-card click without navigation\n if (onClick) {\n return (\n <button type=\"button\" aria-label={title} className={composedClassName} onClick={onClick}>\n {body}\n </button>\n );\n }\n\n // 3. Static variant — no interaction; keep hover affordance off\n return <div className={cn(cardClassName, \"cursor-default\", className)}>{body}</div>;\n}\n\nGalleryCard.displayName = \"GalleryCard\";\n","\"use client\";\n\nimport * as React from \"react\";\n\nexport interface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/**\n * Custom Slot implementation to remove @radix-ui/react-slot dependency.\n * Merges props from the Slottable parent onto the immediate child element.\n */\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(\n ({ children, className, style, ...props }, ref) => {\n // Resolve the single child without using React.Children.only — which throws\n // when children is a single-element array, fragment, or a string. Prerender\n // pipelines sometimes wrap JSX children in arrays of length 1, which passes\n // React.Children.count(=== 1) but trips React.Children.only.\n const childArray = React.Children.toArray(children);\n const child = childArray.length === 1 ? childArray[0] : null;\n\n if (child == null || !React.isValidElement(child)) {\n // 0 / 2+ / non-element child — graceful span wrapper instead of throwing.\n return (\n <span ref={ref} className={className} style={style} {...props}>\n {children}\n </span>\n );\n }\n\n const childProps = child.props as React.HTMLAttributes<HTMLElement>;\n const mergedRef = (node: HTMLElement | null) => {\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n\n const childRef = (child as React.ReactElement & { ref?: React.Ref<HTMLElement> }).ref;\n if (typeof childRef === \"function\") childRef(node);\n else if (childRef && \"current\" in childRef) {\n (childRef as React.MutableRefObject<HTMLElement | null>).current = node;\n }\n };\n // Order matters: slot's props seed → child's existing props override →\n // explicit className/style/ref take precedence over both (so the slot's\n // className/style merge with the child's, not the child's alone).\n const mergedClass = [className, childProps.className].filter(Boolean).join(\" \");\n const merged: Record<string, unknown> = {\n ...childProps,\n ...props,\n ref: mergedRef,\n className: mergedClass,\n style: { ...childProps.style, ...style },\n };\n return React.cloneElement(\n child,\n merged as React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>,\n );\n },\n);\n\nSlot.displayName = \"Slot\";\n\n/**\n * Slottable acts as a marker. In this simple implementation,\n * we just resolve it as a fragment wrapper. For deeper `asChild` composition,\n * complex logic is usually required, but most primitives just need `Slot`.\n */\nexport const Slottable: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n return <>{children}</>;\n};\n","\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Slot } from \"../utils/slot\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n// Heights: tiny=24px sm=32px md=40px lg=48px (Geist-matching)\n// Focus ring uses CSS variable from globals.css — brand-blue, 2px ring, 2px offset\n\nconst buttonVariants = cva(\n [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap\",\n \"rounded-[var(--radius-md)] text-sm font-medium\",\n \"transition-colors duration-150 ease-out\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"aria-busy:cursor-wait\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n ink: \"bg-[var(--neutral-12)] text-[var(--neutral-1)] ring-1 ring-inset ring-white/[0.04] hover:bg-[var(--neutral-11)] hover:-translate-y-px active:translate-y-0 transition-[transform,background-color] duration-150\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n tertiary:\n \"border border-transparent bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground hover:border-input\",\n warning: \"bg-warning text-warning-foreground hover:bg-warning/90\",\n },\n size: {\n tiny: \"h-6 rounded-[var(--radius-sm)] px-2 text-[11px]\", // 24px\n sm: \"h-8 rounded-[var(--radius-sm)] px-3 text-xs\", // 32px\n default: \"h-10 px-4 py-2\", // 40px\n lg: \"h-12 rounded-[var(--radius-lg)] px-5 text-base\", // 48px\n icon: \"h-10 w-10\", // 40×40px (kept for backward compat)\n },\n shape: {\n default: \"\",\n square: \"\",\n circle: \"\",\n },\n },\n compoundVariants: [\n // shape=\"square\" — width = height, no horizontal padding\n { shape: \"square\", size: \"tiny\", className: \"w-6 px-0\" },\n { shape: \"square\", size: \"sm\", className: \"w-8 px-0\" },\n { shape: \"square\", size: \"default\", className: \"w-10 px-0\" },\n { shape: \"square\", size: \"lg\", className: \"w-12 px-0\" },\n // shape=\"circle\" — width = height + rounded-full\n { shape: \"circle\", size: \"tiny\", className: \"w-6 px-0 rounded-full\" },\n { shape: \"circle\", size: \"sm\", className: \"w-8 px-0 rounded-full\" },\n { shape: \"circle\", size: \"default\", className: \"w-10 px-0 rounded-full\" },\n { shape: \"circle\", size: \"lg\", className: \"w-12 px-0 rounded-full\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n// ─── Spinner ──────────────────────────────────────────────────────────────────\n// Uses @keyframes spinner from globals.css\n\nfunction Spinner({ className }: { className?: string }) {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"block rounded-full border-2 border-current border-t-transparent animate-[spinner_0.6s_linear_infinite]\",\n className,\n )}\n />\n );\n}\n\n// ─── Icon size class mapping ──────────────────────────────────────────────────\n\nfunction getIconSizeClass(size: string | null | undefined): string {\n switch (size) {\n case \"tiny\":\n return \"[&>svg]:size-3\"; // 12px\n case \"sm\":\n return \"[&>svg]:size-3.5\"; // 14px\n case \"lg\":\n return \"[&>svg]:size-4.5\"; // 18px\n default:\n return \"[&>svg]:size-4\"; // 16px\n }\n}\n\nfunction getSpinnerSizeClass(size: string | null | undefined): string {\n switch (size) {\n case \"tiny\":\n return \"size-3\"; // 12px\n case \"sm\":\n return \"size-3.5\"; // 14px\n case \"lg\":\n return \"size-4.5\"; // 18px\n default:\n return \"size-4\"; // 16px\n }\n}\n\n// ─── Shadow class mapping ─────────────────────────────────────────────────────\n\nconst SHADOW_CLASSES: Record<string, string> = {\n sm: \"shadow-sm\",\n md: \"shadow-md\",\n lg: \"shadow-lg\",\n};\n\nfunction resolveShadowClass(shadow: boolean | \"sm\" | \"md\" | \"lg\" | undefined): string | undefined {\n if (!shadow) return undefined;\n const level = shadow === true ? \"md\" : shadow;\n return SHADOW_CLASSES[level];\n}\n\n// ─── ButtonContent (shared between Button & ButtonLink) ───────────────────────\n\ninterface ButtonContentProps {\n loading: boolean;\n prefix?: React.ReactNode | undefined;\n suffix?: React.ReactNode | undefined;\n size?: string | null | undefined;\n children?: React.ReactNode | undefined;\n}\n\nfunction ButtonContent({ loading, prefix, suffix, size, children }: ButtonContentProps) {\n const iconSizeClass = getIconSizeClass(size);\n\n return (\n <>\n {loading && <Spinner className={getSpinnerSizeClass(size)} />}\n {prefix != null && (\n <span aria-hidden=\"true\" className={cn(\"shrink-0\", iconSizeClass)}>\n {prefix}\n </span>\n )}\n {children}\n {suffix != null && (\n <span aria-hidden=\"true\" className={cn(\"shrink-0\", iconSizeClass)}>\n {suffix}\n </span>\n )}\n </>\n );\n}\n\n// ─── Button ───────────────────────────────────────────────────────────────────\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"prefix\">,\n VariantProps<typeof buttonVariants> {\n /** Render as a child element (Radix Slot — polymorphic) */\n asChild?: boolean;\n /** Show loading spinner and disable interaction */\n loading?: boolean;\n /** Icon or element rendered before children */\n prefix?: React.ReactNode;\n /** Icon or element rendered after children */\n suffix?: React.ReactNode;\n /** Elevation shadow level. `true` resolves to `\"md\"` */\n shadow?: boolean | \"sm\" | \"md\" | \"lg\";\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n shape,\n asChild = false,\n loading = false,\n disabled,\n prefix,\n suffix,\n shadow,\n children,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const isDisabled = disabled ?? loading;\n const shadowClass = resolveShadowClass(shadow);\n\n return (\n <Comp\n ref={ref}\n className={cn(buttonVariants({ variant, size, shape }), shadowClass, className)}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <ButtonContent loading={loading} prefix={prefix} suffix={suffix} size={size}>\n {children}\n </ButtonContent>\n )}\n </Comp>\n );\n },\n);\nButton.displayName = \"Button\";\n\n// ─── ButtonLink ───────────────────────────────────────────────────────────────\n\nexport interface ButtonLinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"prefix\">,\n VariantProps<typeof buttonVariants> {\n /** Icon or element rendered before children */\n prefix?: React.ReactNode;\n /** Icon or element rendered after children */\n suffix?: React.ReactNode;\n /** Elevation shadow level. `true` resolves to `\"md\"` */\n shadow?: boolean | \"sm\" | \"md\" | \"lg\";\n /** Show loading spinner */\n loading?: boolean;\n}\n\nconst ButtonLink = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>(\n (\n {\n className,\n variant,\n size,\n shape,\n prefix,\n suffix,\n shadow,\n loading = false,\n children,\n ...props\n },\n ref,\n ) => {\n const shadowClass = resolveShadowClass(shadow);\n\n const loadingProps = loading\n ? {\n \"aria-busy\": \"true\" as const,\n \"aria-disabled\": \"true\" as const,\n tabIndex: -1,\n }\n : {};\n\n return (\n <a\n ref={ref}\n className={cn(\n buttonVariants({ variant, size, shape }),\n shadowClass,\n loading && \"pointer-events-none opacity-50\",\n className,\n )}\n {...loadingProps}\n {...props}\n >\n <ButtonContent loading={loading} prefix={prefix} suffix={suffix} size={size}>\n {children}\n </ButtonContent>\n </a>\n );\n },\n);\nButtonLink.displayName = \"ButtonLink\";\n\nexport { Button, ButtonLink, buttonVariants };\n","/**\n * Primitive Design Tokens — Layer 1\n *\n * Raw values only. No CSS variable references, no semantic meaning.\n * These are the \"atoms\" of the design system.\n *\n * Color source: @nebutra/brand `colors` → @nebutra/design-tokens `tokens/core.json` (SSOT).\n * Typography: Geist + Geist Mono (Vercel) with Noto Sans SC + PingFang SC + Microsoft YaHei CJK fallbacks.\n * Aligned with @nebutra/design-tokens SSOT.\n */\n\nimport { colors } from \"@nebutra/brand\";\n\n// ─── Color Palette ────────────────────────────────────────────────────────────\n\nexport const primitiveColors = {\n // Nebutra Blue (云毓蓝) — technology & trust — VI: #0033FE\n blue50: colors.primary[50],\n blue100: colors.primary[100],\n blue200: colors.primary[200],\n blue300: colors.primary[300],\n blue400: colors.primary[400],\n blue500: colors.primary[500], // brand primary\n blue600: colors.primary[600],\n blue700: colors.primary[700],\n blue800: colors.primary[800],\n blue900: colors.primary[900],\n blue950: colors.primary[950],\n\n // Nebutra Cyan (云毓青) — data flow & intelligence — VI: #0BF1C3\n cyan50: colors.accent[50],\n cyan100: colors.accent[100],\n cyan200: colors.accent[200],\n cyan300: colors.accent[300],\n cyan400: colors.accent[400],\n cyan500: colors.accent[500], // brand secondary\n cyan600: colors.accent[600],\n cyan700: colors.accent[700],\n cyan800: colors.accent[800],\n cyan900: colors.accent[900],\n cyan950: colors.accent[950],\n\n // Neutral (blue-undertone gray scale)\n neutral50: colors.neutral[50],\n neutral100: colors.neutral[100],\n neutral200: colors.neutral[200],\n neutral300: colors.neutral[300],\n neutral400: colors.neutral[400],\n neutral500: colors.neutral[500],\n neutral600: colors.neutral[600],\n neutral700: colors.neutral[700],\n neutral800: colors.neutral[800],\n neutral900: colors.neutral[900],\n neutral950: colors.neutral[950], // deepest — used as dark background\n\n // Semantic raw colors — VI §Color Specifications\n // NOTE: info = brand blue (#0033FE), not sky/teal\n red500: \"#ef4444\",\n red600: \"#dc2626\",\n green500: \"#22c55e\", // VI manual specifies this exact value for success\n green600: \"#16a34a\",\n amber500: \"#f59e0b\",\n amber600: \"#d97706\",\n\n white: colors.white,\n black: colors.black,\n} as const;\n\nexport type PrimitiveColor = keyof typeof primitiveColors;\n\n// ─── Brand Gradients — VI §Brand Gradients (first-class design assets) ────────\n\nexport const primitiveGradients = {\n /** Hero sections, primary CTA buttons, logo fills — VI signature gradient */\n primary: colors.gradient.primary,\n /** Hover states, secondary gradient elements */\n reverse: colors.gradient.primaryReverse,\n /** Vertical layout dividers, page section separators */\n vertical: colors.gradient.primaryVertical,\n /** Background halos, focus glow effects, radial emphasis */\n radial: colors.gradient.primaryRadial,\n /** Dark mode card surfaces — deep brand-blue tinted */\n darkCard: \"linear-gradient(135deg, #020617 0%, #0a1628 100%)\",\n} as const;\n\nexport type PrimitiveGradient = keyof typeof primitiveGradients;\n\n// ─── Spacing Scale (px values) ────────────────────────────────────────────────\n\nexport const primitiveSpacing = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n 14: 56,\n 16: 64,\n 20: 80,\n 24: 96,\n} as const;\n\nexport type PrimitiveSpacing = keyof typeof primitiveSpacing;\n\n// ─── Layout Containers (px) — max-width standards ────────────────────────────\n// Use `text` for text-heavy sections (hero copy, CTA), `content` for general\n// sections, and `wide` for full-bleed feature bento grids.\n\nexport const primitiveContainer = {\n /** Text-focused: hero headlines, CTA copy, FAQ — optimized for reading */\n text: 896, // ~56rem / max-w-4xl\n /** Standard content sections: pricing, architecture, blog */\n content: 1152, // ~72rem / max-w-6xl\n /** Wide sections: feature bento, testimonials, product demos */\n wide: 1400, // ~87.5rem — Vercel/Supabase standard\n} as const;\n\nexport type PrimitiveContainer = keyof typeof primitiveContainer;\n\n// ─── Sizing Scale — component heights (px) ────────────────────────────────────\n\nexport const primitiveSizing = {\n xs: 20,\n /** Geist button-specific size (24px). Larger than xs by design. */\n tiny: 24,\n sm: 32,\n md: 40,\n lg: 48,\n xl: 56,\n \"2xl\": 80,\n} as const;\n\nexport type PrimitiveSizing = keyof typeof primitiveSizing;\n\n// ─── Border Radius (px) ───────────────────────────────────────────────────────\n\nexport const primitiveRadius = {\n none: 0,\n sm: 4,\n md: 6, // Geist default — slightly more rounded than 4px\n lg: 8,\n xl: 12,\n \"2xl\": 16,\n full: 9999,\n} as const;\n\nexport type PrimitiveRadius = keyof typeof primitiveRadius;\n\n// ─── Font Sizes (px) ──────────────────────────────────────────────────────────\n\nexport const primitiveFontSize = {\n xs: 12,\n sm: 14,\n base: 16,\n lg: 18,\n xl: 20,\n \"2xl\": 24,\n \"3xl\": 30,\n \"4xl\": 36,\n} as const;\n\nexport type PrimitiveFontSize = keyof typeof primitiveFontSize;\n\n// ─── Font Weights ─────────────────────────────────────────────────────────────\n\nexport const primitiveFontWeight = {\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n} as const;\n\nexport type PrimitiveFontWeight = keyof typeof primitiveFontWeight;\n\n// ─── Font Families — VI §Typography ──────────────────────────────────────────\n// Aligned with @nebutra/design-tokens SSOT (tokens/core.json fontFamily.*).\n// EN primary: Geist (Vercel variable, 100–900)\n// EN mono: Geist Mono\n// CN primary: Noto Sans SC → PingFang SC → Microsoft YaHei → vivo Sans (print)\n\nexport const primitiveFontFamily = {\n /** Default body/UI stack — Geist with CJK auto-fallbacks */\n sans: '\"Geist\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif',\n /** Chinese body/UI stack */\n cnSans: '\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif',\n /** Display / hero headlines */\n display: '\"Geist\", \"Noto Sans SC\", sans-serif',\n /** Heading (alias of display) */\n heading: '\"Geist\", \"Noto Sans SC\", sans-serif',\n /** Code / monospace — Geist Mono pairs with Geist for full family coverage */\n mono: '\"Geist Mono\", \"Fira Code\", ui-monospace, Consolas, \"Courier New\", monospace',\n} as const;\n\nexport type PrimitiveFontFamily = keyof typeof primitiveFontFamily;\n\n// ─── Shadows ──────────────────────────────────────────────────────────────────\n\nexport const primitiveShadow = {\n none: \"none\",\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n xl: \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n /** Brand glow — blue tone for focus/highlight states */\n brandGlow: \"0 0 0 3px rgb(0 51 254 / 0.15)\",\n} as const;\n\nexport type PrimitiveShadow = keyof typeof primitiveShadow;\n\n// ─── Transition ───────────────────────────────────────────────────────────────\n\n/**\n * Primitive transition tokens — aligned with the four-rail motion scale\n * (SSOT: @nebutra/design-tokens core.json → duration.*).\n * Keys mirror semantic.json motion.duration.*; values are in ms.\n */\nexport const primitiveTransition = {\n duration: {\n micro: 100, // hover, focus, small state changes\n flow: 200, // standard state transitions (default)\n reveal: 300, // larger motion (accordion, modal, drawer)\n cinematic: 500, // hero entrance, big delight moments\n },\n easing: {\n default: \"ease-out\",\n spring: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n} as const;\n\n// ─── Focus Ring ───────────────────────────────────────────────────────────────\n\nexport const primitiveFocusRing = {\n width: 2, // px\n offset: 2, // px — gap between element and ring\n} as const;\n","/**\n * Tabs Component Tokens — Layer 3\n *\n * Same-scope view switching for 2–7 sibling panels. Route navigation belongs\n * in menus or side navigation, while boolean settings belong in Switch/Toggle.\n */\n\nimport {\n primitiveFocusRing,\n primitiveFontSize,\n primitiveRadius,\n primitiveSizing,\n primitiveSpacing,\n primitiveTransition,\n} from \"../primitive\";\n\nexport const tabsSizes = {\n xs: {\n height: primitiveSizing.tiny,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[2],\n gap: primitiveSpacing[1],\n triggerGap: primitiveSpacing[1],\n iconSize: primitiveFontSize.sm,\n fontSize: primitiveFontSize.xs,\n minWidth: 56,\n },\n sm: {\n height: primitiveSizing.sm,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[3],\n gap: primitiveSpacing[1],\n triggerGap: primitiveSpacing[1] + primitiveSpacing[1] / 2,\n iconSize: primitiveFontSize.sm,\n fontSize: primitiveFontSize.xs,\n minWidth: 64,\n },\n md: {\n height: primitiveSizing.md,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[3],\n gap: primitiveSpacing[2],\n triggerGap: primitiveSpacing[1] + primitiveSpacing[1] / 2,\n iconSize: primitiveFontSize.base,\n fontSize: primitiveFontSize.sm,\n minWidth: 72,\n },\n lg: {\n height: primitiveSizing.lg,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[4],\n gap: primitiveSpacing[2] + primitiveSpacing[1] / 2,\n triggerGap: primitiveSpacing[2],\n iconSize: primitiveFontSize.lg,\n fontSize: primitiveFontSize.sm,\n minWidth: 88,\n },\n} as const;\n\nexport type TabsSize = keyof typeof tabsSizes;\n\nexport const tabsTokens = {\n radius: primitiveRadius.lg,\n triggerRadius: primitiveRadius.md,\n pillRadius: primitiveRadius.full,\n lineThickness: 2,\n panelGap: primitiveSpacing[3],\n badgeHeight: primitiveSpacing[5],\n badgePaddingX: primitiveSpacing[1] + primitiveSpacing[1] / 2,\n badgeFontSize: primitiveFontSize.xs,\n focusRingWidth: primitiveFocusRing.width,\n focusRingOffset: primitiveFocusRing.offset,\n motion: {\n duration: primitiveTransition.duration.flow,\n easing: primitiveTransition.easing.inOut,\n },\n} as const;\n","import type * as React from \"react\";\n\nexport type PrimitiveProps<T> = React.PropsWithChildren<T & { className?: string | undefined }>;\n\nexport type PrimitiveComponent<TElement, TProps> = React.ForwardRefExoticComponent<\n PrimitiveProps<TProps> & React.RefAttributes<TElement>\n>;\n\n/**\n * Resolve the HTMLElement type for a given intrinsic element tag.\n */\ntype ElementForTag<E extends keyof React.JSX.IntrinsicElements> = E extends \"button\"\n ? HTMLButtonElement\n : E extends \"span\"\n ? HTMLSpanElement\n : E extends \"img\"\n ? HTMLImageElement\n : E extends \"label\"\n ? HTMLLabelElement\n : E extends \"input\"\n ? HTMLInputElement\n : E extends \"a\"\n ? HTMLAnchorElement\n : E extends \"p\"\n ? HTMLParagraphElement\n : E extends \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\"\n ? HTMLHeadingElement\n : HTMLElement;\n\n/**\n * Workaround for Radix UI types not resolving HTML element props (className,\n * children, etc.) with React 19 + exactOptionalPropertyTypes.\n *\n * The optional second type parameter `Extra` allows preserving Radix-specific\n * props (e.g. `asChild`, `align`, `sideOffset`) that are not standard HTML attrs.\n *\n * Usage:\n * const Header = withHtmlProps<\"h3\">(AccordionPrimitive.Header);\n * const Trigger = withHtmlProps<\"button\", { asChild?: boolean }>(DialogPrimitive.Trigger);\n * const Content = withHtmlProps<\"div\", { align?: string; sideOffset?: number }>(PopoverPrimitive.Content);\n */\n\nexport function withHtmlProps<E extends keyof React.JSX.IntrinsicElements, Extra = object>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Component: any,\n): React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<E> & Extra & React.RefAttributes<ElementForTag<E>>\n> {\n return Component;\n}\n","\"use client\";\n\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport * as React from \"react\";\n\nimport { cn } from \"../utils/cn\";\n\n/* -------------------------------------------------------------------------- *\\\n * Tooltip — Base UI tooltip wrapper, used across the design system.\n *\n * Geist behavior contract (verified in this wrapper, document at top so\n * drift gets called out at code review):\n * - Opens on hover AND keyboard focus (Base UI default — don't override).\n * - Default entry delay ≈ 150ms so the tooltip doesn't flicker on a\n * sweeping mouse. Provider-level default set below; caller can override.\n * - Escape closes the tooltip and returns focus to the trigger (Base UI).\n *\n * Content rules (Geist):\n * - Explains *why* something exists, not *what* it is. The visible label\n * names the thing; the tooltip adds the constraint, scope, or limit.\n * - One sentence or fragment, sentence case, no terminal period for a\n * single fragment.\n * - Don't repeat the visible label (`text=\"Rate Limit\"` on a Rate Limit\n * button) and don't describe the interaction (`\"Click to override\"`).\n * - Lifecycle tooltips: `{Label}: {one-line meaning}. {Specific limit}.`\n *\n * Don'ts (caller responsibility):\n * - Don't wrap a labelled Input in a Tooltip — the trigger lands on the\n * <label>, not the field, and the body becomes a phantom second label.\n * Put help on a sibling icon button instead.\n * - Keep primary actions outside the Tooltip; touch users can't reach a\n * hover-revealed control.\n * - Icon-only triggers MUST carry their own `aria-label` naming the\n * action — the tooltip body adds context, it doesn't replace the label.\n\\* -------------------------------------------------------------------------- */\n\n// Geist-standard delay; matches the platform Best Practices.\nconst DEFAULT_TOOLTIP_DELAY_MS = 150;\n\n// We expose Base UI's native Provider to pass global `delayDuration` downwards.\n// Default landed at 150ms so isolated `<Tooltip>` usage matches Geist out of\n// the box — explicit callers can still override per provider scope.\nconst TooltipProvider = ({\n children,\n delayDuration = DEFAULT_TOOLTIP_DELAY_MS,\n}: {\n children: React.ReactNode;\n delayDuration?: number;\n}) => {\n return <BaseTooltip.Provider delay={delayDuration}>{children}</BaseTooltip.Provider>;\n};\n\nconst Tooltip = ({\n delayDuration,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseTooltip.Root> & {\n delayDuration?: number;\n children?: React.ReactNode;\n}) => {\n // Standalone `<Tooltip>` (no enclosing Provider) gets the Geist default;\n // any explicit `delayDuration` wins.\n const delay = delayDuration ?? DEFAULT_TOOLTIP_DELAY_MS;\n return (\n <BaseTooltip.Provider delay={delay}>\n <BaseTooltip.Root {...props}>{children}</BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n};\n\nconst TooltipTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof BaseTooltip.Trigger> & { asChild?: boolean }\n>(({ asChild, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseTooltip.Trigger\n ref={ref}\n {...props}\n render={children as React.ReactElement<Record<string, unknown>>}\n />\n );\n }\n return (\n <BaseTooltip.Trigger ref={ref} {...props}>\n {children}\n </BaseTooltip.Trigger>\n );\n});\nTooltipTrigger.displayName = \"TooltipTrigger\";\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof BaseTooltip.Popup>,\n React.ComponentPropsWithoutRef<typeof BaseTooltip.Popup> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n alignOffset?: number;\n }\n>(\n (\n { className, side = \"top\", align = \"center\", sideOffset = 4, alignOffset = 0, ...props },\n ref,\n ) => (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n className=\"z-50\"\n >\n <BaseTooltip.Popup\n ref={ref}\n className={cn(\n \"z-50 overflow-hidden rounded-xl border bg-background/90 backdrop-blur-md px-3 py-1.5 text-sm text-popover-foreground shadow-xl transition-[opacity,transform,display] duration-200 data-starting-style:animate-in data-starting-style:fade-in-0 data-starting-style:zoom-in-95 data-ending-style:animate-out data-ending-style:fade-out-0 data-ending-style:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n {...props}\n />\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n ),\n);\nTooltipContent.displayName = \"TooltipContent\";\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","\"use client\";\n\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { type TabsSize, tabsSizes, tabsTokens } from \"../tokens/components/tabs\";\nimport { cn } from \"../utils\";\nimport { withHtmlProps } from \"../utils/primitive-props\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\";\n\ntype BaseTabsRootChangeDetails = {\n activationDirection: \"left\" | \"right\" | \"up\" | \"down\" | \"none\";\n};\n\nconst BaseRoot = withHtmlProps<\n \"div\",\n {\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string, eventDetails: BaseTabsRootChangeDetails) => void) | undefined;\n orientation?: \"horizontal\" | \"vertical\" | undefined;\n value?: string | null | undefined;\n }\n>(BaseTabs.Root);\nconst BaseList = withHtmlProps<\n \"div\",\n {\n activateOnFocus?: boolean | undefined;\n loopFocus?: boolean | undefined;\n }\n>(BaseTabs.List);\nconst BaseTrigger = withHtmlProps<\n \"button\",\n {\n value: string;\n }\n>(BaseTabs.Tab);\nconst BaseContent = withHtmlProps<\n \"div\",\n {\n keepMounted?: boolean | undefined;\n value: string;\n }\n>(BaseTabs.Panel);\nconst BaseIndicator = withHtmlProps<\"span\">(BaseTabs.Indicator);\n\nexport type TabsVariant = \"default\" | \"button\" | \"line\" | \"secondary\";\nexport type TabsShape = \"default\" | \"pill\";\nexport type TabsActivationMode = \"automatic\" | \"manual\";\n\ntype TabsCssVar =\n | \"--tabs-height\"\n | \"--tabs-padding\"\n | \"--tabs-gap\"\n | \"--tabs-trigger-gap\"\n | \"--tabs-trigger-padding-x\"\n | \"--tabs-trigger-min-width\"\n | \"--tabs-icon-size\"\n | \"--tabs-font-size\"\n | \"--tabs-radius\"\n | \"--tabs-trigger-radius\"\n | \"--tabs-pill-radius\"\n | \"--tabs-line-thickness\"\n | \"--tabs-focus-ring-width\"\n | \"--tabs-focus-ring-offset\"\n | \"--tabs-panel-gap\"\n | \"--tabs-badge-height\"\n | \"--tabs-badge-padding-x\"\n | \"--tabs-badge-font-size\"\n | \"--tabs-duration\"\n | \"--tabs-easing\";\n\ntype TabsCssVars = React.CSSProperties & Record<TabsCssVar, string>;\n\nconst tabsListVariants = cva(\n \"relative z-0 inline-flex max-w-full shrink-0 items-center overflow-x-auto overscroll-x-contain scrollbar-none\",\n {\n variants: {\n variant: {\n default:\n \"gap-[var(--tabs-gap)] rounded-[var(--tabs-radius)] border border-border bg-muted p-[var(--tabs-padding)] text-muted-foreground\",\n button: \"gap-[var(--tabs-gap)] text-muted-foreground\",\n line: \"gap-[calc(var(--tabs-gap)*3)] border-b border-border text-muted-foreground\",\n secondary:\n \"gap-[var(--tabs-gap)] rounded-[var(--tabs-radius)] bg-transparent text-muted-foreground\",\n },\n shape: {\n default: \"\",\n pill: \"[&_[role=tab]]:rounded-[var(--tabs-pill-radius)]\",\n },\n },\n compoundVariants: [\n {\n variant: \"default\",\n shape: \"pill\",\n className: \"rounded-[var(--tabs-pill-radius)]\",\n },\n {\n variant: \"button\",\n shape: \"pill\",\n className: \"[&_[role=tab]]:rounded-[var(--tabs-pill-radius)]\",\n },\n {\n variant: \"secondary\",\n shape: \"pill\",\n className: \"rounded-[var(--tabs-pill-radius)]\",\n },\n ],\n defaultVariants: {\n shape: \"default\",\n variant: \"default\",\n },\n },\n);\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 [&_svg]:size-[var(--tabs-icon-size)] [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:text-foreground data-[active]:text-foreground\",\n button:\n \"border border-border bg-background text-muted-foreground shadow-[var(--shadow-xs)] hover:border-ring/40 hover:text-foreground data-[active]:border-ring/40 data-[active]:text-foreground\",\n line: \"min-w-0 rounded-none px-0 hover:text-foreground data-[active]:text-foreground\",\n secondary:\n \"hover:bg-muted hover:text-foreground data-[active]:bg-muted data-[active]:text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst tabsIndicatorVariants = cva(\n \"pointer-events-none absolute transition-[left,top,width,height,bottom,background-color] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] motion-reduce:transition-none\",\n {\n variants: {\n variant: {\n default:\n \"z-[-1] rounded-[var(--tabs-trigger-radius)] bg-background shadow-[var(--shadow-xs)]\",\n button: \"z-[-1] rounded-[var(--tabs-trigger-radius)] bg-muted\",\n line: \"bottom-0 h-[var(--tabs-line-thickness)] rounded-[var(--tabs-pill-radius)] bg-foreground\",\n secondary: \"z-[-1] rounded-[var(--tabs-trigger-radius)] bg-muted\",\n },\n shape: {\n default: \"\",\n pill: \"rounded-[var(--tabs-pill-radius)]\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n variant: \"default\",\n },\n },\n);\n\nconst tabsContentVariants = cva(\n \"mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background\",\n {\n variants: {\n variant: {\n default: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ntype TabsContextValue = {\n activationMode: TabsActivationMode;\n disabled: boolean;\n shape: TabsShape;\n size: TabsSize;\n variant: TabsVariant;\n};\n\nconst TabsContext = React.createContext<TabsContextValue>({\n activationMode: \"manual\",\n disabled: false,\n shape: \"default\",\n size: \"md\",\n variant: \"default\",\n});\n\nexport interface TabsItem {\n badge?: React.ReactNode;\n content?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n title: React.ReactNode;\n tooltip?: React.ReactNode;\n value: string;\n}\n\nexport interface TabsProps\n extends Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\" | \"defaultValue\" | \"onChange\"> {\n activationMode?: TabsActivationMode;\n defaultValue?: string;\n disabled?: boolean;\n listClassName?: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n selected?: string;\n setSelected?: (value: string) => void;\n shape?: TabsShape;\n size?: TabsSize;\n tabs?: readonly TabsItem[];\n value?: string;\n variant?: TabsVariant;\n children?: React.ReactNode;\n}\n\nexport interface TabsListProps\n extends React.ComponentPropsWithoutRef<\"div\">,\n VariantProps<typeof tabsListVariants> {\n activateOnFocus?: boolean;\n loop?: boolean;\n}\n\nexport interface TabsTriggerProps\n extends Omit<React.ComponentPropsWithoutRef<\"button\">, \"children\"> {\n badge?: React.ReactNode;\n icon?: React.ReactNode;\n value: string;\n children?: React.ReactNode;\n}\n\nexport interface TabsContentProps\n extends React.ComponentPropsWithoutRef<\"div\">,\n VariantProps<typeof tabsContentVariants> {\n forceMount?: true;\n keepMounted?: boolean;\n value: string;\n}\n\nfunction getTabsStyle(size: TabsSize, style: React.CSSProperties | undefined): TabsCssVars {\n const token = tabsSizes[size];\n\n return {\n \"--tabs-height\": `${token.height}px`,\n \"--tabs-padding\": `${token.padding}px`,\n \"--tabs-gap\": `${token.gap}px`,\n \"--tabs-trigger-gap\": `${token.triggerGap}px`,\n \"--tabs-trigger-padding-x\": `${token.paddingX}px`,\n \"--tabs-trigger-min-width\": `${token.minWidth}px`,\n \"--tabs-icon-size\": `${token.iconSize}px`,\n \"--tabs-font-size\": `${token.fontSize}px`,\n \"--tabs-radius\": `${tabsTokens.radius}px`,\n \"--tabs-trigger-radius\": `${tabsTokens.triggerRadius}px`,\n \"--tabs-pill-radius\": `${tabsTokens.pillRadius}px`,\n \"--tabs-line-thickness\": `${tabsTokens.lineThickness}px`,\n \"--tabs-focus-ring-width\": `${tabsTokens.focusRingWidth}px`,\n \"--tabs-focus-ring-offset\": `${tabsTokens.focusRingOffset}px`,\n \"--tabs-panel-gap\": `${tabsTokens.panelGap}px`,\n \"--tabs-badge-height\": `${tabsTokens.badgeHeight}px`,\n \"--tabs-badge-padding-x\": `${tabsTokens.badgePaddingX}px`,\n \"--tabs-badge-font-size\": `${tabsTokens.badgeFontSize}px`,\n \"--tabs-duration\": `${tabsTokens.motion.duration}ms`,\n \"--tabs-easing\": tabsTokens.motion.easing,\n ...style,\n };\n}\n\nfunction getFirstEnabledValue(tabs: readonly TabsItem[] | undefined) {\n return tabs?.find((tab) => !tab.disabled)?.value;\n}\n\nfunction Tabs({\n \"aria-label\": ariaLabel,\n activationMode = \"manual\",\n className,\n defaultValue,\n disabled = false,\n listClassName,\n onValueChange,\n orientation = \"horizontal\",\n selected,\n setSelected,\n shape = \"default\",\n size = \"md\",\n style,\n tabs,\n value,\n variant = \"default\",\n children,\n ...props\n}: TabsProps) {\n const rootValue = selected ?? value;\n const rootDefaultValue = defaultValue ?? getFirstEnabledValue(tabs);\n const context = React.useMemo<TabsContextValue>(\n () => ({ activationMode, disabled, shape, size, variant }),\n [activationMode, disabled, shape, size, variant],\n );\n\n function handleValueChange(nextValue: string) {\n onValueChange?.(nextValue);\n setSelected?.(nextValue);\n }\n\n return (\n <TabsContext.Provider value={context}>\n <BaseRoot\n data-slot=\"tabs\"\n data-disabled={disabled ? \"\" : undefined}\n value={rootValue}\n defaultValue={rootValue === undefined ? rootDefaultValue : undefined}\n onValueChange={handleValueChange}\n orientation={orientation}\n className={cn(\"w-full\", className)}\n style={getTabsStyle(size, style)}\n {...props}\n >\n {tabs ? (\n <TabsCollection\n tabs={tabs}\n ariaLabel={ariaLabel}\n className={listClassName}\n variant={variant}\n shape={shape}\n disabled={disabled}\n />\n ) : (\n children\n )}\n </BaseRoot>\n </TabsContext.Provider>\n );\n}\n\nfunction TabsCollection({\n ariaLabel,\n tabs,\n className,\n variant,\n shape,\n disabled,\n}: {\n ariaLabel?: string | undefined;\n className?: string | undefined;\n disabled: boolean;\n shape: TabsShape;\n tabs: readonly TabsItem[];\n variant: TabsVariant;\n}) {\n const hasTooltip = tabs.some((tab) => tab.tooltip);\n const list = (\n <TabsList\n aria-label={ariaLabel ?? \"Sections\"}\n className={className}\n variant={variant}\n shape={shape}\n >\n {tabs.map((tab) => (\n <TabsCollectionTrigger key={tab.value} disabled={disabled} tab={tab} />\n ))}\n </TabsList>\n );\n\n return (\n <>\n {hasTooltip ? <TooltipProvider delayDuration={150}>{list}</TooltipProvider> : list}\n {tabs.map((tab) =>\n tab.content === undefined ? null : (\n <TabsContent key={tab.value} value={tab.value}>\n {tab.content}\n </TabsContent>\n ),\n )}\n </>\n );\n}\n\nfunction TabsCollectionTrigger({ tab, disabled }: { disabled: boolean; tab: TabsItem }) {\n const trigger = (\n <TabsTrigger\n value={tab.value}\n disabled={disabled || tab.disabled}\n icon={tab.icon}\n badge={tab.badge}\n >\n {tab.title}\n </TabsTrigger>\n );\n\n if (!tab.tooltip) return trigger;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex\">{trigger}</span>\n </TooltipTrigger>\n <TooltipContent>{tab.tooltip}</TooltipContent>\n </Tooltip>\n );\n}\n\nfunction TabsList({\n activateOnFocus,\n className,\n loop = true,\n shape,\n variant,\n children,\n ...props\n}: TabsListProps) {\n const context = React.useContext(TabsContext);\n const resolvedVariant = variant ?? context.variant;\n const resolvedShape = shape ?? context.shape;\n const resolvedActivateOnFocus = activateOnFocus ?? context.activationMode === \"automatic\";\n const listContext = React.useMemo<TabsContextValue>(\n () => ({ ...context, shape: resolvedShape, variant: resolvedVariant }),\n [context, resolvedShape, resolvedVariant],\n );\n\n return (\n <TabsContext.Provider value={listContext}>\n <BaseList\n data-slot=\"tabs-list\"\n activateOnFocus={resolvedActivateOnFocus}\n loopFocus={loop}\n className={cn(\n tabsListVariants({ variant: resolvedVariant, shape: resolvedShape }),\n className,\n )}\n {...props}\n >\n <BaseIndicator\n aria-hidden=\"true\"\n data-slot=\"tabs-indicator\"\n className={tabsIndicatorVariants({ variant: resolvedVariant, shape: resolvedShape })}\n style={{\n left: \"var(--active-tab-left)\",\n top: resolvedVariant === \"line\" ? \"auto\" : \"var(--active-tab-top)\",\n bottom: resolvedVariant === \"line\" ? \"0\" : \"auto\",\n width: \"var(--active-tab-width)\",\n height:\n resolvedVariant === \"line\"\n ? \"var(--tabs-line-thickness)\"\n : \"var(--active-tab-height)\",\n }}\n />\n {children}\n </BaseList>\n </TabsContext.Provider>\n );\n}\n\nfunction TabsTrigger({ badge, children, className, disabled, icon, ...props }: TabsTriggerProps) {\n const context = React.useContext(TabsContext);\n const isDisabled = disabled ?? context.disabled;\n\n return (\n <BaseTrigger\n data-slot=\"tabs-trigger\"\n disabled={isDisabled}\n className={cn(tabsTriggerVariants({ variant: context.variant }), className)}\n {...props}\n >\n {icon}\n <span className=\"truncate\">{children}</span>\n {badge ? (\n <span className=\"inline-flex h-[var(--tabs-badge-height)] items-center rounded-[var(--tabs-pill-radius)] bg-muted px-[var(--tabs-badge-padding-x)] text-[length:var(--tabs-badge-font-size)] text-muted-foreground\">\n {badge}\n </span>\n ) : null}\n </BaseTrigger>\n );\n}\n\nfunction TabsContent({ className, forceMount, keepMounted, variant, ...props }: TabsContentProps) {\n return (\n <BaseContent\n data-slot=\"tabs-content\"\n keepMounted={keepMounted ?? forceMount}\n className={cn(tabsContentVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n tabsContentVariants,\n tabsIndicatorVariants,\n tabsListVariants,\n tabsTriggerVariants,\n};\n","/**\n * Textarea Component Tokens — Layer 3\n *\n * Mirrors the Input focus and radius contract while preserving textarea-specific\n * vertical sizing.\n */\n\nimport { primitiveFontSize, primitiveRadius, primitiveSpacing } from \"../primitive\";\n\nexport type TextareaSize = \"sm\" | \"md\" | \"lg\";\n\nexport const textareaTokens = {\n sizes: {\n sm: {\n minHeight: primitiveSpacing[20],\n paddingX: primitiveSpacing[2],\n paddingY: primitiveSpacing[2],\n fontSize: primitiveFontSize.xs,\n radius: primitiveRadius.md,\n },\n md: {\n minHeight: primitiveSpacing[24],\n paddingX: primitiveSpacing[3],\n paddingY: primitiveSpacing[2],\n fontSize: primitiveFontSize.sm,\n radius: primitiveRadius.md,\n },\n lg: {\n minHeight: primitiveSpacing[24],\n paddingX: primitiveSpacing[4],\n paddingY: primitiveSpacing[3],\n fontSize: primitiveFontSize.base,\n radius: primitiveRadius.lg,\n },\n },\n labelSize: primitiveFontSize.sm,\n focusRingWidth: 3,\n fieldGap: primitiveSpacing[2] - primitiveSpacing[1] / 2,\n messageGap: primitiveSpacing[1],\n} as const;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { type TextareaSize, textareaTokens } from \"../tokens/components/textarea\";\nimport { cn } from \"../utils/cn\";\n\ntype NativeTextareaProps = Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">;\n\ntype LabelledTextareaProps = {\n /** Visible label. Type-level nudge keeps labelled fields explicitly addressable. */\n label: string;\n id: string;\n};\n\ntype UnlabelledTextareaProps = {\n label?: undefined;\n id?: string;\n};\n\ntype TextareaOwnProps = {\n /** Visual size variant. Uses the same compact form scale as Input. */\n size?: TextareaSize;\n /** Helper text associated through aria-describedby. Replaced by string errors. */\n description?: string;\n /** Boolean marks invalid state; string also renders an inline field error. */\n error?: string | boolean;\n /** Value-first change callback for consumers that do not need the native event. */\n onValueChange?: (value: string) => void;\n /** Applied to the label/helper/error field wrapper. */\n fieldClassName?: string;\n};\n\nexport type TextareaProps = NativeTextareaProps &\n TextareaOwnProps &\n (LabelledTextareaProps | UnlabelledTextareaProps);\n\ntype TextareaCssVars = React.CSSProperties & {\n \"--textarea-min-height\"?: string;\n \"--textarea-padding-x\"?: string;\n \"--textarea-padding-y\"?: string;\n \"--textarea-font-size\"?: string;\n \"--textarea-radius\"?: string;\n \"--textarea-focus-ring-width\"?: string;\n};\n\ntype TextareaFieldCssVars = React.CSSProperties & {\n \"--textarea-field-gap\"?: string;\n \"--textarea-label-size\"?: string;\n};\n\nconst fieldMessageClassName = \"text-xs text-muted-foreground\";\nconst fieldErrorClassName = \"text-xs font-medium text-destructive\";\n\nfunction getTextareaStyle(\n size: TextareaSize,\n style: React.CSSProperties | undefined,\n): TextareaCssVars {\n const token = textareaTokens.sizes[size];\n\n return {\n \"--textarea-min-height\": `${token.minHeight}px`,\n \"--textarea-padding-x\": `${token.paddingX}px`,\n \"--textarea-padding-y\": `${token.paddingY}px`,\n \"--textarea-font-size\": `${token.fontSize}px`,\n \"--textarea-radius\": `${token.radius}px`,\n \"--textarea-focus-ring-width\": `${textareaTokens.focusRingWidth}px`,\n borderRadius: \"var(--textarea-radius)\",\n outline: \"none\",\n ...style,\n };\n}\n\nfunction getTextareaFieldStyle(): TextareaFieldCssVars {\n return {\n \"--textarea-field-gap\": `${textareaTokens.fieldGap}px`,\n \"--textarea-label-size\": `${textareaTokens.labelSize}px`,\n };\n}\n\nfunction joinDescriptionIds(...ids: Array<string | undefined>) {\n return ids.filter(Boolean).join(\" \") || undefined;\n}\n\nfunction isInvalid(\n error: string | boolean | undefined,\n ariaInvalid: NativeTextareaProps[\"aria-invalid\"],\n) {\n return (\n error === true || typeof error === \"string\" || ariaInvalid === true || ariaInvalid === \"true\"\n );\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n style,\n size = \"md\",\n label,\n description,\n error,\n fieldClassName,\n id,\n onChange,\n onValueChange,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...props\n },\n ref,\n ) => {\n const baseId = React.useId();\n const textareaId =\n id ?? (label || description || typeof error === \"string\" ? baseId : undefined);\n const resolvedInvalid = isInvalid(error, ariaInvalid);\n const descriptionId = description && textareaId ? `${textareaId}-description` : undefined;\n const errorId = typeof error === \"string\" && textareaId ? `${textareaId}-error` : undefined;\n const describedBy = joinDescriptionIds(ariaDescribedBy, descriptionId, errorId);\n\n const handleChange = React.useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onValueChange?.(event.currentTarget.value);\n onChange?.(event);\n },\n [onChange, onValueChange],\n );\n\n const control = (\n <textarea\n className={cn(\n \"flex min-h-[var(--textarea-min-height)] w-full resize-y rounded-[var(--textarea-radius)] border border-input bg-background\",\n \"px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] text-[length:var(--textarea-font-size)] text-foreground shadow-[var(--shadow-xs)]\",\n \"transition-[background-color,border-color,box-shadow,color] duration-micro ease-out placeholder:text-muted-foreground\",\n \"outline-none focus:border-ring focus:ring-[length:var(--textarea-focus-ring-width)] focus:ring-ring/30\",\n \"disabled:cursor-not-allowed disabled:opacity-50 read-only:cursor-default read-only:bg-muted/70\",\n \"aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20\",\n className,\n )}\n ref={ref}\n id={textareaId}\n aria-invalid={resolvedInvalid || undefined}\n aria-describedby={describedBy}\n style={getTextareaStyle(size, style)}\n onChange={handleChange}\n {...props}\n />\n );\n\n if (!label && !description && typeof error !== \"string\" && !fieldClassName) {\n return control;\n }\n\n return (\n <div\n data-slot=\"textarea-field\"\n className={cn(\"grid gap-[var(--textarea-field-gap)]\", fieldClassName)}\n style={getTextareaFieldStyle()}\n >\n {label && (\n <label\n htmlFor={textareaId}\n className=\"text-[length:var(--textarea-label-size)] font-medium text-foreground\"\n >\n {label}\n </label>\n )}\n\n {control}\n\n {description && !error && (\n <p id={descriptionId} className={fieldMessageClassName}>\n {description}\n </p>\n )}\n\n {typeof error === \"string\" && (\n <p id={errorId} role=\"alert\" className={fieldErrorClassName}>\n {error}\n </p>\n )}\n </div>\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { cn } from \"../../utils/cn\";\n\n/* -------------------------------------------------------------------------- *\\\n * MarkdownRenderer — react-markdown wrapper for Q&A posts.\n *\n * Why react-markdown (not the runtime-injected CDN script the source used):\n * - SSR-safe (no DOM access at import time)\n * - No `dangerouslySetInnerHTML` — react-markdown emits real React nodes,\n * so the XSS surface that the original `window.marked` + innerHTML\n * pipeline opened is structurally absent.\n * - Tree-shakable / cacheable / CSP-friendly.\n *\n * Why not Streamdown:\n * Streamdown is our chat-AI markdown engine — optimized for streaming\n * text from a model. Q&A posts are static long-form prose, so plain\n * react-markdown + GFM is the right shape.\n\\* -------------------------------------------------------------------------- */\n\nexport interface MarkdownRendererProps {\n /** Markdown source. */\n content: string;\n className?: string;\n}\n\nexport function MarkdownRenderer({ content, className }: MarkdownRendererProps) {\n return (\n <div className={cn(\"prose prose-sm dark:prose-invert max-w-none\", className)}>\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n // Inline + block code use semantic tokens so they read in light + dark\n // themes without hardcoded slate/blue.\n code(props) {\n const { className: codeClassName, children, ...rest } = props;\n const isBlock = /language-/.test(codeClassName ?? \"\");\n if (isBlock) {\n return (\n <code\n {...rest}\n className={cn(\n \"block overflow-x-auto rounded-[var(--radius-md)] border border-border bg-muted p-4 font-mono text-foreground text-sm\",\n codeClassName,\n )}\n >\n {children}\n </code>\n );\n }\n return (\n <code\n {...rest}\n className={cn(\n \"rounded bg-muted px-1.5 py-0.5 font-mono text-foreground text-sm\",\n codeClassName,\n )}\n >\n {children}\n </code>\n );\n },\n // Anchor: open external links in a new tab; protect against\n // tabnabbing with rel=\"noopener noreferrer\".\n a({ href, children, ...rest }) {\n const external = typeof href === \"string\" && /^https?:/.test(href);\n return (\n <a\n href={href}\n className=\"text-primary underline-offset-4 hover:underline\"\n {...(external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n {...rest}\n >\n {children}\n </a>\n );\n },\n blockquote({ children, ...rest }) {\n return (\n <blockquote\n {...rest}\n className=\"my-4 border-primary border-l-4 bg-muted py-2 pl-4 text-foreground italic\"\n >\n {children}\n </blockquote>\n );\n },\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n Code,\n FileText,\n Hash,\n Image as ImageIcon,\n Link as LinkIcon,\n ListUnordered,\n Pencil,\n TextBold,\n TextItalic,\n} from \"@nebutra/icons\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { Button } from \"../../primitives/button\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../primitives/tabs\";\nimport { Textarea } from \"../../primitives/textarea\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownRenderer } from \"./markdown-renderer\";\n\n/* -------------------------------------------------------------------------- *\\\n * MarkdownEditor — tab-switchable write/preview composer with a toolbar.\n *\n * Toolbar buttons insert markdown around the current selection (or at the\n * caret if no selection) via a single `insertMarkdown` helper. No global\n * state, no DOM lookup outside the textarea ref.\n *\n * The Quote toolbar button uses a small inline SVG glyph because the Geist\n * icon set doesn't ship a dedicated Quote — the AI-marketing Phosphor escape\n * hatch doesn't apply to a forum surface, so we render a typographic mark.\n\\* -------------------------------------------------------------------------- */\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface MarkdownEditorProps {\n value: string;\n onChange: (next: string) => void;\n placeholder?: string;\n /** @default 250 */\n minHeight?: number;\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Quote glyph — inline SVG (no Geist equivalent; Phosphor escape hatch is\n// reserved for AI-brand marketing surfaces, not forum chrome)\n// ---------------------------------------------------------------------------\n\nfunction QuoteGlyph(props: { className?: string }) {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" className={props.className}>\n <title>Block quote</title>\n <path d=\"M4 4h2l-1.5 4H6v4H2V8l2-4Zm6 0h2l-1.5 4H12v4H8V8l2-4Z\" />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function MarkdownEditor({\n value,\n onChange,\n placeholder = \"Write your answer here…\",\n minHeight = 250,\n className,\n}: MarkdownEditorProps) {\n const [tab, setTab] = useState<\"write\" | \"preview\">(\"write\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const insertMarkdown = useCallback(\n (before: string, after = \"\", forceNewLine = false) => {\n const el = textareaRef.current;\n if (!el) return;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n const selected = value.slice(start, end);\n const needsLeadingNl = forceNewLine && start > 0 && value[start - 1] !== \"\\n\";\n const insert = (needsLeadingNl ? \"\\n\" : \"\") + before + selected + after;\n const next = value.slice(0, start) + insert + value.slice(end);\n onChange(next);\n // Re-focus and place caret inside the inserted boundaries.\n requestAnimationFrame(() => {\n el.focus();\n const caretStart = start + (needsLeadingNl ? 1 : 0) + before.length;\n el.setSelectionRange(caretStart, caretStart + selected.length);\n });\n },\n [value, onChange],\n );\n\n return (\n <div\n className={cn(\"overflow-hidden rounded-[var(--radius-md)] border border-border\", className)}\n >\n <Tabs value={tab} onValueChange={(v) => setTab(v as \"write\" | \"preview\")} className=\"w-full\">\n <div className=\"flex items-center justify-between gap-2 border-border border-b bg-muted/30 px-3 py-2\">\n <TabsList className=\"grid w-fit grid-cols-2\">\n <TabsTrigger value=\"write\" className=\"text-xs\">\n <Pencil className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n Write\n </TabsTrigger>\n <TabsTrigger value=\"preview\" className=\"text-xs\">\n <FileText className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n Preview\n </TabsTrigger>\n </TabsList>\n\n <div className=\"flex flex-wrap items-center gap-1\">\n <ToolbarButton aria-label=\"Bold (Ctrl+B)\" onClick={() => insertMarkdown(\"**\", \"**\")}>\n <TextBold className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Italic (Ctrl+I)\" onClick={() => insertMarkdown(\"*\", \"*\")}>\n <TextItalic className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Inline code\" onClick={() => insertMarkdown(\"`\", \"`\")}>\n <Code className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Heading\" onClick={() => insertMarkdown(\"\\n## \", \"\", true)}>\n <Hash className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton\n aria-label=\"Block quote\"\n onClick={() => insertMarkdown(\"\\n> \", \"\", true)}\n >\n <QuoteGlyph className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton\n aria-label=\"Bullet list\"\n onClick={() => insertMarkdown(\"\\n- \", \"\", true)}\n >\n <ListUnordered className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Link\" onClick={() => insertMarkdown(\"[\", \"](url)\")}>\n <LinkIcon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Image\" onClick={() => insertMarkdown(\"\")}>\n <ImageIcon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton\n aria-label=\"Fenced code block\"\n onClick={() => insertMarkdown(\"\\n```javascript\\n\", \"\\n```\\n\", true)}\n >\n <FileText className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n </div>\n </div>\n\n <TabsContent value=\"write\" className=\"mt-0\">\n <Textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className=\"resize-none rounded-none border-0 font-mono text-sm shadow-none focus-visible:ring-0\"\n style={{ minHeight }}\n />\n </TabsContent>\n <TabsContent value=\"preview\" className=\"mt-0\">\n <div className=\"bg-background p-4\" style={{ minHeight }}>\n {value ? (\n <MarkdownRenderer content={value} />\n ) : (\n <div className=\"flex h-32 items-center justify-center text-muted-foreground text-sm italic\">\n Nothing to preview.\n </div>\n )}\n </div>\n </TabsContent>\n </Tabs>\n\n <div className=\"flex items-center justify-between border-border border-t bg-muted/30 px-3 py-2 text-muted-foreground text-xs\">\n <span>Markdown supported</span>\n <span>{value.length} characters</span>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Toolbar button — local helper, keeps the toolbar a single declarative grid\n// ---------------------------------------------------------------------------\n\nfunction ToolbarButton({\n children,\n onClick,\n \"aria-label\": ariaLabel,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n \"aria-label\": string;\n}) {\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n onClick={onClick}\n aria-label={ariaLabel}\n >\n {children}\n </Button>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-lg)] border border-border bg-card text-card-foreground shadow-sm\",\n className,\n )}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, children, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)}\n {...props}\n >\n {children}\n </h3>\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement | HTMLDivElement> {\n as?: React.ElementType;\n}\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement | HTMLDivElement,\n CardDescriptionProps\n>(({ className, as: Tag = \"p\", ...props }, ref) => {\n return React.createElement(Tag, {\n ref,\n className: cn(\"text-sm text-muted-foreground\", className),\n ...props,\n });\n});\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n ),\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n","\"use client\";\n\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\n// Base UI natively supports exactOptionalPropertyTypes and doesn't need withHtmlProps.\n\nconst Separator = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseSeparator> & { decorative?: boolean }\n>(({ className, orientation = \"horizontal\", decorative: _decorative = true, ...props }, ref) => (\n <BaseSeparator\n ref={ref}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className,\n )}\n {...props}\n />\n));\nSeparator.displayName = \"Separator\";\n\nexport { Separator };\n","\"use client\";\n\nimport { Avatar as BaseAvatar } from \"@base-ui/react/avatar\";\nimport * as React from \"react\";\nimport { type AvatarSize as AvatarPresetSize, avatarTokens } from \"../tokens/components/avatar\";\nimport { cn } from \"../utils/cn\";\n\nexport type AvatarSize = AvatarPresetSize | number;\n\nconst sizeClasses = {\n xs: { root: \"h-5 w-5\", fallback: \"text-[8px]\" },\n sm: { root: \"h-8 w-8\", fallback: \"text-xs\" },\n md: { root: \"h-10 w-10\", fallback: \"text-sm\" },\n lg: { root: \"h-14 w-14\", fallback: \"text-xl\" },\n xl: { root: \"h-20 w-20\", fallback: \"text-2xl\" },\n} as const;\n\nconst numericAvatarClass = \"h-[var(--avatar-size)] w-[var(--avatar-size)]\";\n\ntype AvatarContextValue = {\n size: AvatarSize;\n title?: string;\n};\n\nconst AvatarContext = React.createContext<AvatarContextValue | null>(null);\n\nfunction isPresetSize(size: AvatarSize): size is AvatarPresetSize {\n return typeof size === \"string\";\n}\n\nexport function getAvatarSizePx(size: AvatarSize): number {\n if (typeof size === \"number\") return size;\n return avatarTokens.size[size].dimension;\n}\n\nfunction getAvatarRootClass(size: AvatarSize): string {\n return isPresetSize(size) ? sizeClasses[size].root : numericAvatarClass;\n}\n\nfunction getAvatarFallbackClass(size: AvatarSize): string {\n return isPresetSize(size) ? sizeClasses[size].fallback : \"text-[var(--avatar-font-size)]\";\n}\n\nfunction getAvatarStyle(\n size: AvatarSize,\n style?: React.CSSProperties,\n): React.CSSProperties | undefined {\n if (typeof size !== \"number\") return style;\n return {\n \"--avatar-size\": `${size}px`,\n \"--avatar-font-size\": `${Math.max(10, Math.round(size * 0.375))}px`,\n ...style,\n } as React.CSSProperties;\n}\n\nexport function getAvatarInitials(value: string): string {\n const cleaned = value.trim();\n if (!cleaned) return \"\";\n\n const parts = cleaned.split(/[\\s._-]+/).filter(Boolean);\n if (parts.length === 1) return (parts[0] ?? \"\").slice(0, 2).toUpperCase();\n\n return parts\n .slice(0, 2)\n .map((part) => part[0] ?? \"\")\n .join(\"\")\n .toUpperCase();\n}\n\nfunction githubAvatarSrc(username: string, size: AvatarSize): string {\n return `https://github.com/${username}.png?size=${getAvatarSizePx(size) * 2}`;\n}\n\nfunction normalizeAvatarLabel({\n alt,\n title,\n username,\n}: {\n alt?: string | undefined;\n title?: string | undefined;\n username?: string | undefined;\n}): string {\n return title ?? alt ?? username ?? \"Avatar\";\n}\n\n// ─── Avatar ───────────────────────────────────────────────────────────────────\n\nexport type AvatarProps = Omit<\n React.ComponentPropsWithoutRef<typeof BaseAvatar.Root>,\n \"children\"\n> & {\n /** Size preset or explicit pixel size. */\n size?: AvatarSize;\n /** Convenience image source. For composition, use AvatarImage as a child. */\n src?: string;\n /** Image alt text. Prefer title for entity name and alt for explicit image labels. */\n alt?: string;\n /** Literal entity name used for fallback initials and accessible labels. */\n title?: string;\n /** Explicit initials fallback. Keep this to 1-2 uppercase characters. */\n letter?: string;\n /** Convenience username fallback. */\n username?: string;\n /** Loading shell. Do not use as permanent fallback. */\n placeholder?: boolean;\n /** Delay before fallback appears. */\n fallbackDelayMs?: number;\n children?: React.ReactNode;\n};\n\nconst Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n className,\n size = \"md\",\n src,\n alt,\n title,\n letter,\n username,\n placeholder,\n fallbackDelayMs,\n children,\n style,\n ...props\n },\n ref,\n ) => {\n const label = normalizeAvatarLabel({ alt, title, username });\n const fallback = letter ?? getAvatarInitials(title ?? username ?? alt ?? \"\");\n const contextTitle = title ?? alt ?? username;\n const contextValue: AvatarContextValue =\n contextTitle === undefined ? { size } : { size, title: contextTitle };\n const shouldRenderConvenienceContent =\n children === undefined && (src !== undefined || placeholder === true || fallback.length > 0);\n\n return (\n <AvatarContext.Provider value={contextValue}>\n <BaseAvatar.Root\n ref={ref}\n className={cn(\n \"relative flex shrink-0 overflow-hidden rounded-full bg-muted\",\n getAvatarRootClass(size),\n className,\n )}\n style={getAvatarStyle(size, style)}\n {...props}\n >\n {shouldRenderConvenienceContent ? (\n <>\n {src && <AvatarImage src={src} alt={label} />}\n <AvatarFallback size={size} delay={fallbackDelayMs}>\n {placeholder ? <span className=\"sr-only\">Loading avatar</span> : fallback}\n </AvatarFallback>\n </>\n ) : (\n children\n )}\n </BaseAvatar.Root>\n </AvatarContext.Provider>\n );\n },\n);\nAvatar.displayName = \"Avatar\";\n\n// ─── AvatarImage ──────────────────────────────────────────────────────────────\n\nconst AvatarImage = React.forwardRef<\n HTMLImageElement,\n React.ComponentPropsWithoutRef<typeof BaseAvatar.Image>\n>(({ className, ...props }, ref) => (\n <BaseAvatar.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\n// ─── AvatarFallback ───────────────────────────────────────────────────────────\n\nexport type AvatarFallbackProps = React.ComponentPropsWithoutRef<typeof BaseAvatar.Fallback> & {\n /** Pass the same size as the parent Avatar for correct font size */\n size?: AvatarSize;\n};\n\nconst AvatarFallback = React.forwardRef<HTMLSpanElement, AvatarFallbackProps>(\n ({ className, size, children, \"aria-label\": ariaLabel, style, ...props }, ref) => {\n const context = React.useContext(AvatarContext);\n const resolvedSize = size ?? context?.size ?? \"md\";\n const fallbackLabel =\n ariaLabel ??\n (typeof children === \"string\" && children.trim().length > 0\n ? `Avatar with initials: ${children}`\n : context?.title);\n\n return (\n <BaseAvatar.Fallback\n ref={ref}\n aria-label={fallbackLabel}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted font-medium text-muted-foreground\",\n getAvatarFallbackClass(resolvedSize),\n className,\n )}\n style={getAvatarStyle(resolvedSize, style)}\n {...props}\n >\n {children}\n </BaseAvatar.Fallback>\n );\n },\n);\nAvatarFallback.displayName = \"AvatarFallback\";\n\n// ─── AvatarGroup ──────────────────────────────────────────────────────────────\n\nexport interface AvatarGroupItem {\n src?: string;\n alt?: string;\n fallback?: string;\n title?: string;\n username?: string;\n}\n\nexport interface AvatarGroupProps {\n /** Nebutra composable API. */\n items?: AvatarGroupItem[];\n /** Geist-compatible API. */\n members?: AvatarGroupItem[];\n /** Maximum avatars to show before collapsing to \"+N\" */\n max?: number;\n /** Geist-compatible alias for max. */\n limit?: number;\n /** Size of each avatar in the group */\n size?: AvatarSize;\n className?: string;\n \"aria-label\"?: string;\n}\n\nfunction normalizeGroupItem(item: AvatarGroupItem, size: AvatarSize): Required<AvatarGroupItem> {\n const label = normalizeAvatarLabel({\n alt: item.alt,\n title: item.title,\n username: item.username,\n });\n return {\n alt: label,\n title: item.title ?? label,\n fallback: item.fallback ?? getAvatarInitials(label),\n username: item.username ?? \"\",\n src: item.src ?? (item.username ? githubAvatarSrc(item.username, size) : \"\"),\n };\n}\n\nfunction AvatarGroup({\n items,\n members,\n max,\n limit,\n size = \"sm\",\n className,\n \"aria-label\": ariaLabel,\n}: AvatarGroupProps) {\n const sourceItems = items ?? members ?? [];\n const resolvedMax = Math.max(1, max ?? limit ?? 4);\n const normalizedItems = sourceItems.map((item) => normalizeGroupItem(item, size));\n // Show max-1 real avatars; if items.length === max show last one too,\n // if items.length > max show +N badge instead of last slot.\n // Use built-in Tailwind z-index utilities (z-10..z-60) so they are\n // guaranteed to exist without arbitrary-value scanning.\n const Z = [\"z-10\", \"z-20\", \"z-30\", \"z-40\", \"z-50\", \"z-60\"] as const;\n const visibleCount =\n normalizedItems.length >= resolvedMax ? resolvedMax - 1 : normalizedItems.length;\n const visible = normalizedItems.slice(0, visibleCount);\n const lastItem = normalizedItems.length === resolvedMax ? normalizedItems[resolvedMax - 1] : null;\n const overflowCount =\n normalizedItems.length > resolvedMax ? normalizedItems.length - resolvedMax + 1 : 0;\n const lastZ = Z[Math.min(resolvedMax - 1, Z.length - 1)];\n const groupLabel =\n ariaLabel ?? `${normalizedItems.length} ${normalizedItems.length === 1 ? \"member\" : \"members\"}`;\n\n return (\n <div role=\"img\" aria-label={groupLabel} className={cn(\"flex items-center\", className)}>\n {visible.map((item, index) => (\n // relative is required for z-index to take effect on non-flex-item contexts\n <span\n key={item.alt}\n aria-hidden=\"true\"\n className={cn(\"relative inline-flex items-center\", index !== 0 && \"-ml-2\", Z[index])}\n >\n <Avatar size={size} className=\"border border-border bg-background\">\n {item.src && <AvatarImage src={item.src} alt=\"\" />}\n <AvatarFallback size={size}>{item.fallback}</AvatarFallback>\n </Avatar>\n </span>\n ))}\n\n {/* Exact limit: show the last real avatar */}\n {lastItem && (\n <span aria-hidden=\"true\" className={cn(\"relative inline-flex items-center -ml-2\", lastZ)}>\n <Avatar size={size} className=\"border border-border bg-background\">\n {lastItem.src && <AvatarImage src={lastItem.src} alt=\"\" />}\n <AvatarFallback size={size}>{lastItem.fallback}</AvatarFallback>\n </Avatar>\n </span>\n )}\n\n {/* Over limit: +N overflow badge */}\n {overflowCount > 0 && (\n <span aria-hidden=\"true\" className={cn(\"relative inline-flex items-center -ml-2\", lastZ)}>\n <Avatar size={size} className=\"border border-border\">\n <AvatarFallback\n size={size}\n className=\"bg-muted text-[0.625rem] font-semibold leading-none text-foreground\"\n >\n +{overflowCount}\n </AvatarFallback>\n </Avatar>\n </span>\n )}\n </div>\n );\n}\n\nexport { Avatar, AvatarFallback, AvatarGroup, AvatarImage };\n","\"use client\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../primitives/avatar\";\nimport { cn } from \"../../utils/cn\";\nimport type { Author } from \"./types\";\n\n/* -------------------------------------------------------------------------- *\\\n * UserInfo — author + timestamp + reputation + badges row.\n *\n * Displayed in the bottom-right of a question or answer card. Visual chrome\n * only — semantics live on the surrounding question/answer container.\n *\n * Avatar fallback: when the author has no avatar URL, render initials. The\n * prior implementation reached for `api.dicebear.com` as a default which is\n * a hidden third-party network call — removed.\n\\* -------------------------------------------------------------------------- */\n\nexport interface UserInfoProps {\n author: Author;\n timestamp: string;\n /** Verb shown before the timestamp. @default \"asked\" */\n verb?: string;\n className?: string;\n}\n\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .map((part) => part.charAt(0).toUpperCase())\n .join(\"\")\n .slice(0, 2);\n}\n\nexport function UserInfo({ author, timestamp, verb = \"asked\", className }: UserInfoProps) {\n return (\n <div\n className={cn(\"flex items-start gap-3 rounded-[var(--radius-md)] bg-muted/40 p-3\", className)}\n >\n <Avatar className=\"h-8 w-8 shrink-0\">\n {author.avatar && <AvatarImage src={author.avatar} alt={author.name} />}\n <AvatarFallback>{initials(author.name)}</AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-muted-foreground text-xs\">\n {verb} {timestamp}\n </span>\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-foreground text-sm\">{author.name}</span>\n <span className=\"font-bold text-muted-foreground text-xs tabular-nums\">\n {author.reputation.toLocaleString()}\n </span>\n {author.badges.gold > 0 && (\n <Badge color=\"bg-yellow-500\" count={author.badges.gold} label=\"gold\" />\n )}\n {author.badges.silver > 0 && (\n <Badge color=\"bg-gray-400\" count={author.badges.silver} label=\"silver\" />\n )}\n {author.badges.bronze > 0 && (\n <Badge color=\"bg-amber-600\" count={author.badges.bronze} label=\"bronze\" />\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction Badge({ color, count, label }: { color: string; count: number; label: string }) {\n return (\n <span className=\"flex items-center gap-1\">\n <span aria-hidden=\"true\" className={cn(\"h-2 w-2 rounded-full\", color)} />\n <span className=\"text-muted-foreground text-xs\">\n <span className=\"sr-only\">{label} badges: </span>\n {count}\n </span>\n </span>\n );\n}\n","\"use client\";\n\nimport { ChevronDown, ChevronUp } from \"@nebutra/icons\";\nimport { Button } from \"../../primitives/button\";\nimport { cn } from \"../../utils/cn\";\nimport type { VoteType } from \"./types\";\n\n/* -------------------------------------------------------------------------- *\\\n * VoteButtons — vertical up/down vote control for a question or answer.\n *\n * Net score is computed locally as `votes + delta(userVote)` so the\n * optimistic UI matches the post's stored count without round-tripping.\n\\* -------------------------------------------------------------------------- */\n\nexport interface VoteButtonsProps {\n votes: number;\n userVote: VoteType;\n onVote: (next: \"up\" | \"down\") => void;\n /** @default \"default\" */\n size?: \"default\" | \"large\";\n /** Label that describes what is being voted on (for screen readers). */\n label?: string;\n}\n\nfunction voteDelta(userVote: VoteType): number {\n if (userVote === \"up\") return 1;\n if (userVote === \"down\") return -1;\n return 0;\n}\n\nexport function VoteButtons({\n votes,\n userVote,\n onVote,\n size = \"default\",\n label = \"post\",\n}: VoteButtonsProps) {\n const iconSize = size === \"large\" ? \"h-5 w-5\" : \"h-4 w-4\";\n const scoreSize = size === \"large\" ? \"text-lg\" : \"text-base\";\n const score = votes + voteDelta(userVote);\n\n return (\n <fieldset className=\"flex flex-col items-center gap-2\">\n <legend className=\"sr-only\">Vote on {label}</legend>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size={size === \"large\" ? \"default\" : \"sm\"}\n aria-label={`Upvote ${label}`}\n aria-pressed={userVote === \"up\"}\n onClick={() => onVote(\"up\")}\n className={cn(\"p-2\", userVote === \"up\" && \"bg-primary/10 text-primary hover:bg-primary/15\")}\n >\n <ChevronUp className={iconSize} aria-hidden=\"true\" />\n </Button>\n <span\n className={cn(\n \"font-bold tabular-nums\",\n scoreSize,\n userVote === \"up\" && \"text-primary\",\n userVote === \"down\" && \"text-muted-foreground\",\n )}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {score}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size={size === \"large\" ? \"default\" : \"sm\"}\n aria-label={`Downvote ${label}`}\n aria-pressed={userVote === \"down\"}\n onClick={() => onVote(\"down\")}\n className={cn(\n \"p-2\",\n userVote === \"down\" && \"bg-muted text-muted-foreground hover:bg-muted\",\n )}\n >\n <ChevronDown className={iconSize} aria-hidden=\"true\" />\n </Button>\n </fieldset>\n );\n}\n","\"use client\";\n\nimport {\n Bookmark,\n Calendar,\n Check,\n Eye,\n Flag,\n Pencil,\n Share as ShareIcon,\n StarFill,\n} from \"@nebutra/icons\";\nimport { Fragment, useMemo, useState } from \"react\";\nimport { Badge } from \"../../primitives/badge\";\nimport { Button } from \"../../primitives/button\";\nimport { Card, CardContent, CardHeader } from \"../../primitives/card\";\nimport { Separator } from \"../../primitives/separator\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownEditor } from \"./markdown-editor\";\nimport { MarkdownRenderer } from \"./markdown-renderer\";\nimport type { AnswerType, QuestionType, VoteType } from \"./types\";\nimport { UserInfo } from \"./user-info\";\nimport { VoteButtons } from \"./vote-buttons\";\n\n/* -------------------------------------------------------------------------- *\\\n * QAPage — Stack Overflow-style question + answers surface.\n *\n * Composed from @nebutra/ui primitives (Button, Card, Badge, Separator)\n * plus sibling Q&A pieces (VoteButtons, UserInfo, MarkdownRenderer,\n * MarkdownEditor). All icons from @nebutra/icons per the icon governance\n * three-tier hierarchy — no lucide-react, no Phosphor (this isn't an\n * AI-brand surface).\n *\n * State ownership:\n * The composition is uncontrolled by default — pass `initialQuestion` and\n * `initialAnswers`, the component holds the optimistic vote / bookmark /\n * accept / draft state. Provide `onVote*` / `onAccept` / `onSubmitAnswer`\n * callbacks to persist upstream.\n *\n * Submit semantics:\n * `onSubmitAnswer` is invoked with the markdown source; the host owns\n * persistence + author resolution. The pattern stamps a `Date.now()` id\n * for the optimistic row only — replace with the server id on round-trip.\n\\* -------------------------------------------------------------------------- */\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport interface QAPageProps {\n initialQuestion: QuestionType;\n initialAnswers: AnswerType[];\n /** Author resolved upstream for new answer drafts. */\n currentAuthor?: AnswerType[\"author\"];\n /** Called when the user submits a new answer. Markdown source. */\n onSubmitAnswer?: (content: string) => void;\n /** Called when the user votes on the question. */\n onVoteQuestion?: (vote: VoteType) => void;\n /** Called when the user votes on an answer. */\n onVoteAnswer?: (id: AnswerType[\"id\"], vote: VoteType) => void;\n /** Called when the user accepts/unaccepts an answer. */\n onAcceptAnswer?: (id: AnswerType[\"id\"]) => void;\n /** Called when the user toggles the question bookmark. */\n onBookmark?: (next: boolean) => void;\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function QAPage({\n initialQuestion,\n initialAnswers,\n currentAuthor = {\n name: \"you\",\n reputation: 0,\n badges: { gold: 0, silver: 0, bronze: 0 },\n },\n onSubmitAnswer,\n onVoteAnswer,\n onVoteQuestion,\n onAcceptAnswer,\n onBookmark,\n className,\n}: QAPageProps) {\n const [question, setQuestion] = useState(initialQuestion);\n const [answers, setAnswers] = useState(initialAnswers);\n const [draft, setDraft] = useState(\"\");\n\n const handleQuestionVote = (next: \"up\" | \"down\") => {\n const userVote = question.userVote === next ? null : next;\n setQuestion((q) => ({ ...q, userVote }));\n onVoteQuestion?.(userVote);\n };\n\n const handleAnswerVote = (id: AnswerType[\"id\"], next: \"up\" | \"down\") => {\n setAnswers((list) =>\n list.map((a) => (a.id === id ? { ...a, userVote: a.userVote === next ? null : next } : a)),\n );\n const fresh = answers.find((a) => a.id === id);\n const userVote = fresh && fresh.userVote === next ? null : next;\n onVoteAnswer?.(id, userVote);\n };\n\n const handleAccept = (id: AnswerType[\"id\"]) => {\n setAnswers((list) =>\n list.map((a) => ({ ...a, isAccepted: a.id === id ? !a.isAccepted : false })),\n );\n onAcceptAnswer?.(id);\n };\n\n const handleBookmarkToggle = () => {\n setQuestion((q) => {\n const next = !q.bookmarked;\n onBookmark?.(next);\n return { ...q, bookmarked: next };\n });\n };\n\n const handleSubmit = () => {\n const trimmed = draft.trim();\n if (!trimmed) return;\n const newAnswer: AnswerType = {\n id: Date.now(),\n content: trimmed,\n author: currentAuthor,\n votes: 0,\n timestamp: \"just now\",\n isAccepted: false,\n userVote: null,\n };\n setAnswers((list) => [...list, newAnswer]);\n setDraft(\"\");\n onSubmitAnswer?.(trimmed);\n };\n\n // Sort: accepted first, then by score descending (with userVote applied)\n const sortedAnswers = useMemo(() => {\n return [...answers].sort((a, b) => {\n if (a.isAccepted !== b.isAccepted) return a.isAccepted ? -1 : 1;\n const aScore = a.votes + (a.userVote === \"up\" ? 1 : a.userVote === \"down\" ? -1 : 0);\n const bScore = b.votes + (b.userVote === \"up\" ? 1 : b.userVote === \"down\" ? -1 : 0);\n return bScore - aScore;\n });\n }, [answers]);\n\n return (\n <div className={cn(\"mx-auto w-full max-w-5xl p-4 md:p-6\", className)}>\n {/* ── Header ────────────────────────────────────────────────────── */}\n <header className=\"mb-6\">\n <h1 className=\"mb-4 font-bold text-2xl leading-tight text-foreground\">{question.title}</h1>\n <div className=\"mb-4 flex items-center gap-4 text-muted-foreground text-sm\">\n <span className=\"flex items-center gap-1\">\n <Calendar aria-hidden=\"true\" className=\"h-4 w-4\" />\n Asked {question.timestamp}\n </span>\n <span className=\"flex items-center gap-1\">\n <Eye aria-hidden=\"true\" className=\"h-4 w-4\" />\n Viewed {question.views.toLocaleString()} times\n </span>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {question.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </header>\n\n {/* ── Question card ─────────────────────────────────────────────── */}\n <Card className=\"mb-8\">\n <CardContent className=\"flex gap-6 p-6\">\n <div className=\"flex flex-col items-center gap-4\">\n <VoteButtons\n votes={question.votes}\n userVote={question.userVote}\n onVote={handleQuestionVote}\n size=\"large\"\n label=\"question\"\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={question.bookmarked ? \"Remove bookmark\" : \"Bookmark question\"}\n aria-pressed={question.bookmarked}\n onClick={handleBookmarkToggle}\n className={cn(\"p-2\", question.bookmarked && \"bg-warning/10 text-warning\")}\n >\n <Bookmark className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <MarkdownRenderer content={question.content} />\n <PostActions\n className=\"mt-6\"\n author={question.author}\n timestamp={question.timestamp}\n verb=\"asked\"\n shareLabel=\"Share Question\"\n editLabel=\"Edit Question\"\n flagLabel=\"Flag Question\"\n />\n </div>\n </CardContent>\n </Card>\n\n {/* ── Answers ──────────────────────────────────────────────────── */}\n <div className=\"mb-6 flex items-center justify-between\">\n <h2 className=\"font-semibold text-foreground text-xl\">\n {answers.length} {answers.length === 1 ? \"Answer\" : \"Answers\"}\n </h2>\n </div>\n\n <div className=\"mb-8\">\n {sortedAnswers.map((answer, index) => (\n <Fragment key={answer.id}>\n <Card className={cn(\"mb-6\", answer.isAccepted && \"ring-2 ring-success/40\")}>\n <CardContent className=\"flex gap-6 p-6\">\n <div className=\"flex flex-col items-center gap-4\">\n <VoteButtons\n votes={answer.votes}\n userVote={answer.userVote}\n onVote={(v) => handleAnswerVote(answer.id, v)}\n size=\"large\"\n label=\"answer\"\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={answer.isAccepted ? \"Unaccept this answer\" : \"Accept this answer\"}\n aria-pressed={answer.isAccepted}\n onClick={() => handleAccept(answer.id)}\n className={cn(\"p-2\", answer.isAccepted && \"bg-success/10 text-success\")}\n >\n <Check className=\"h-5 w-5\" aria-hidden=\"true\" />\n </Button>\n {answer.isAccepted && (\n <div className=\"text-center\">\n <StarFill aria-hidden=\"true\" className=\"mx-auto mb-1 h-4 w-4 text-success\" />\n <span className=\"font-medium text-success text-xs\">Accepted</span>\n </div>\n )}\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <MarkdownRenderer content={answer.content} />\n <PostActions\n className=\"mt-6\"\n author={answer.author}\n timestamp={answer.timestamp}\n verb=\"answered\"\n shareLabel=\"Share Answer\"\n editLabel=\"Edit Answer\"\n flagLabel=\"Flag Answer\"\n />\n </div>\n </CardContent>\n </Card>\n {index < sortedAnswers.length - 1 && <Separator className=\"mb-6\" />}\n </Fragment>\n ))}\n </div>\n\n {/* ── Compose new answer ───────────────────────────────────────── */}\n <Card>\n <CardHeader>\n <h3 className=\"font-semibold text-foreground text-lg\">Your Answer</h3>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <MarkdownEditor value={draft} onChange={setDraft} placeholder=\"Write your answer here…\" />\n <div className=\"flex items-center justify-between\">\n <p className=\"text-muted-foreground text-xs\">Thanks for contributing an answer!</p>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setDraft(\"\")}\n disabled={!draft}\n >\n Discard Draft\n </Button>\n <Button type=\"button\" onClick={handleSubmit} disabled={!draft.trim()}>\n Post Your Answer\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// PostActions — share / edit / flag triad + author chrome\n// ---------------------------------------------------------------------------\n\nfunction PostActions({\n author,\n timestamp,\n verb,\n shareLabel,\n editLabel,\n flagLabel,\n className,\n}: {\n author: AnswerType[\"author\"];\n timestamp: string;\n verb: string;\n shareLabel: string;\n editLabel: string;\n flagLabel: string;\n className?: string;\n}) {\n return (\n <div className={cn(\"flex flex-wrap items-center justify-between gap-3\", className)}>\n <div className=\"flex items-center gap-1\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n <ShareIcon className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n {shareLabel}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n <Pencil className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n {editLabel}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n <Flag className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n {flagLabel}\n </Button>\n </div>\n <UserInfo author={author} timestamp={timestamp} verb={verb} />\n </div>\n );\n}\n","\"use client\";\n\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nconst CollapsibleContext = React.createContext<{\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean | undefined;\n}>({});\n\nconst Collapsible = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n }\n>(({ className, open: openProp, defaultOpen, onOpenChange, disabled, children, ...props }, ref) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen || false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : uncontrolledOpen;\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n return (\n <CollapsibleContext.Provider value={{ open, onOpenChange: handleOpenChange, disabled }}>\n <div\n ref={ref}\n className={className}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n});\nCollapsible.displayName = \"Collapsible\";\n\nconst CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean }\n>(({ className, asChild, children, ...props }, ref) => {\n const { open, onOpenChange, disabled } = React.useContext(CollapsibleContext);\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onOpenChange?.(!open);\n props.onClick?.(e);\n },\n [disabled, open, onOpenChange, props.onClick],\n );\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n ref,\n onClick: handleClick,\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : undefined,\n \"aria-expanded\": open,\n \"aria-controls\": props[\"aria-controls\"],\n disabled: disabled || props.disabled,\n ...props,\n });\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleClick}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n aria-expanded={open}\n disabled={disabled || props.disabled}\n className={className}\n {...props}\n >\n {children}\n </button>\n );\n});\nCollapsibleTrigger.displayName = \"CollapsibleTrigger\";\n\nconst CollapsibleContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { open } = React.useContext(CollapsibleContext);\n\n return (\n <AnimatePresence initial={false}>\n {open && (\n <motion.div\n key=\"content\"\n initial=\"collapsed\"\n animate=\"open\"\n exit=\"collapsed\"\n variants={{\n open: { opacity: 1, height: \"auto\" },\n collapsed: { opacity: 0, height: 0 },\n }}\n transition={{ duration: 0.3, ease: [0.04, 0.62, 0.23, 0.98] }}\n className=\"overflow-hidden\"\n >\n <div ref={ref} data-state=\"open\" className={cn(\"\", className)} {...props}>\n {children}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n },\n);\nCollapsibleContent.displayName = \"CollapsibleContent\";\n\nexport { Collapsible, CollapsibleContent, CollapsibleTrigger };\n","\"use client\";\n\nimport { ChevronRight } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { Badge } from \"../../primitives/badge\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../primitives/collapsible\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../../primitives/tooltip\";\nimport { cn } from \"../../utils/cn\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SidebarNavBadgeTone = \"beta\" | \"new\" | \"owner\" | \"featured\" | \"coming-soon\";\n\nexport interface SidebarNavBadge {\n label: string;\n tone: SidebarNavBadgeTone;\n}\n\nexport type SidebarNavIcon = React.ComponentType<{ className?: string }>;\n\nexport interface SidebarNavItem {\n id: string;\n label: string;\n href?: string;\n icon?: SidebarNavIcon;\n badge?: SidebarNavBadge;\n isActive?: boolean;\n external?: boolean;\n onClick?: () => void;\n /** Nested children — 1 level deep max */\n children?: SidebarNavItem[];\n disabled?: boolean;\n}\n\nexport interface SidebarNavSection {\n id: string;\n /** Group label, e.g. \"MiniMax 实验室\". Hidden when collapsed. */\n label?: string;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarNavRenderLinkProps {\n href: string;\n children: React.ReactNode;\n className?: string;\n \"aria-current\"?: \"page\" | undefined;\n \"aria-label\"?: string;\n onClick?: () => void;\n}\n\nexport interface SidebarNavProps {\n sections: SidebarNavSection[];\n /** Icon-only mode. Section labels hidden; items show tooltip on hover. */\n collapsed?: boolean;\n className?: string;\n itemClassName?: string;\n /** Slot rendered above sections (e.g. logo + workspace switcher). */\n header?: React.ReactNode;\n /** Slot rendered below sections (e.g. theme toggle, sign-out). */\n footer?: React.ReactNode;\n /** When provided, this is used to render link items. Default: <a>. */\n renderLink?: (props: SidebarNavRenderLinkProps) => React.ReactElement;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nconst ITEM_BASE_CLASSES =\n \"flex items-center gap-2 rounded-md px-2.5 py-1.5 text-[13px] leading-5 transition-colors\";\nconst ITEM_DEFAULT_CLASSES = \"text-foreground hover:bg-accent hover:text-accent-foreground\";\nconst ITEM_ACTIVE_CLASSES = \"bg-accent text-accent-foreground font-medium\";\nconst ITEM_DISABLED_CLASSES = \"opacity-50 pointer-events-none\";\nconst ITEM_COLLAPSED_CLASSES = \"justify-center px-0 size-8 mx-auto\";\nconst ICON_CLASSES = \"size-3.5 shrink-0\";\n\nfunction defaultRenderLink({\n href,\n children,\n className,\n \"aria-current\": ariaCurrent,\n \"aria-label\": ariaLabel,\n onClick,\n}: SidebarNavRenderLinkProps): React.ReactElement {\n return (\n <a\n href={href}\n className={className}\n aria-current={ariaCurrent}\n aria-label={ariaLabel}\n onClick={onClick}\n >\n {children}\n </a>\n );\n}\n\ninterface ItemContentProps {\n item: SidebarNavItem;\n collapsed: boolean;\n showChevron?: boolean;\n chevronOpen?: boolean;\n}\n\nfunction ItemContent({\n item,\n collapsed,\n showChevron,\n chevronOpen,\n}: ItemContentProps): React.ReactElement {\n const Icon = item.icon;\n\n if (collapsed) {\n return (\n <>\n {Icon ? <Icon className={ICON_CLASSES} /> : null}\n <span className=\"sr-only\">{item.label}</span>\n </>\n );\n }\n\n return (\n <>\n {Icon ? <Icon className={ICON_CLASSES} /> : null}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.badge ? (\n <Badge variant={item.badge.tone} size=\"sm\">\n {item.badge.label}\n </Badge>\n ) : null}\n {showChevron ? (\n <ChevronRight\n className={cn(\n \"h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform\",\n chevronOpen && \"rotate-90\",\n )}\n aria-hidden=\"true\"\n />\n ) : null}\n </>\n );\n}\n\ninterface InteractiveItemProps {\n item: SidebarNavItem;\n collapsed: boolean;\n itemClassName?: string;\n renderLink: (props: SidebarNavRenderLinkProps) => React.ReactElement;\n /** Indent for nested children. */\n nested?: boolean;\n}\n\nfunction InteractiveItem({\n item,\n collapsed,\n itemClassName,\n renderLink,\n nested = false,\n}: InteractiveItemProps): React.ReactElement {\n const isActive = item.isActive === true;\n const isDisabled = item.disabled === true;\n\n const classes = cn(\n ITEM_BASE_CLASSES,\n isActive ? ITEM_ACTIVE_CLASSES : ITEM_DEFAULT_CLASSES,\n isDisabled && ITEM_DISABLED_CLASSES,\n collapsed && ITEM_COLLAPSED_CLASSES,\n !collapsed && nested && \"pl-9\",\n itemClassName,\n );\n\n const ariaCurrent = isActive ? \"page\" : undefined;\n const ariaDisabled = isDisabled ? true : undefined;\n\n const inner = <ItemContent item={item} collapsed={collapsed} />;\n\n let element: React.ReactElement;\n\n if (item.href && !isDisabled) {\n if (item.external) {\n element = (\n <a\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classes}\n aria-current={ariaCurrent}\n aria-label={collapsed ? item.label : undefined}\n onClick={item.onClick}\n >\n {inner}\n </a>\n );\n } else {\n element = renderLink({\n href: item.href,\n className: classes,\n children: inner,\n \"aria-current\": ariaCurrent,\n \"aria-label\": collapsed ? item.label : undefined,\n onClick: item.onClick,\n });\n }\n } else {\n element = (\n <button\n type=\"button\"\n className={cn(classes, \"w-full text-left\")}\n aria-current={ariaCurrent}\n aria-disabled={ariaDisabled}\n aria-label={collapsed ? item.label : undefined}\n disabled={isDisabled}\n onClick={item.onClick}\n >\n {inner}\n </button>\n );\n }\n\n if (collapsed) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{element}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {item.label}\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return element;\n}\n\ninterface ParentItemProps {\n item: SidebarNavItem;\n collapsed: boolean;\n itemClassName?: string;\n renderLink: (props: SidebarNavRenderLinkProps) => React.ReactElement;\n}\n\nfunction ParentItem({\n item,\n collapsed,\n itemClassName,\n renderLink,\n}: ParentItemProps): React.ReactElement {\n const hasActiveChild = React.useMemo(\n () => item.children?.some((c) => c.isActive === true) ?? false,\n [item.children],\n );\n const [open, setOpen] = React.useState<boolean>(item.isActive === true || hasActiveChild);\n\n // If collapsed, render parent as a flat icon-only item with tooltip (no nested expansion).\n if (collapsed) {\n return (\n <InteractiveItem\n item={item}\n collapsed\n itemClassName={itemClassName}\n renderLink={renderLink}\n />\n );\n }\n\n const isActive = item.isActive === true;\n const isDisabled = item.disabled === true;\n\n const triggerClasses = cn(\n ITEM_BASE_CLASSES,\n \"w-full text-left\",\n isActive ? ITEM_ACTIVE_CLASSES : ITEM_DEFAULT_CLASSES,\n isDisabled && ITEM_DISABLED_CLASSES,\n itemClassName,\n );\n\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <CollapsibleTrigger\n className={triggerClasses}\n aria-current={isActive ? \"page\" : undefined}\n disabled={isDisabled}\n >\n <ItemContent item={item} collapsed={false} showChevron chevronOpen={open} />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <ul className=\"mt-1 flex flex-col gap-0.5\">\n {item.children?.map((child) => (\n <li key={child.id}>\n <InteractiveItem\n item={child}\n collapsed={false}\n itemClassName={itemClassName}\n renderLink={renderLink}\n nested\n />\n </li>\n ))}\n </ul>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SidebarNav({\n sections,\n collapsed = false,\n className,\n itemClassName,\n header,\n footer,\n renderLink = defaultRenderLink,\n}: SidebarNavProps): React.ReactElement {\n return (\n <TooltipProvider delayDuration={200}>\n <nav\n aria-label=\"Sidebar\"\n className={cn(\n \"flex h-full flex-col gap-4\",\n collapsed ? \"px-2 py-2.5\" : \"px-2.5 py-3\",\n className,\n )}\n >\n {header ? <div className=\"shrink-0\">{header}</div> : null}\n\n <div className=\"flex-1 space-y-4 overflow-y-auto\">\n {sections.map((section) => (\n <div key={section.id}>\n {section.label && !collapsed ? (\n <div className=\"mb-1.5 px-2.5 text-[10px] font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {section.label}\n </div>\n ) : null}\n <ul className=\"flex flex-col gap-0.5\">\n {section.items.map((item) => {\n const hasChildren = Array.isArray(item.children) && item.children.length > 0;\n return (\n <li key={item.id}>\n {hasChildren ? (\n <ParentItem\n item={item}\n collapsed={collapsed}\n itemClassName={itemClassName}\n renderLink={renderLink}\n />\n ) : (\n <InteractiveItem\n item={item}\n collapsed={collapsed}\n itemClassName={itemClassName}\n renderLink={renderLink}\n />\n )}\n </li>\n );\n })}\n </ul>\n </div>\n ))}\n </div>\n\n {footer ? <div className=\"shrink-0 border-t border-border pt-3\">{footer}</div> : null}\n </nav>\n </TooltipProvider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* ─────────────────────────────────────────────────────────────────────────────\n * Terminal Compound Component\n *\n * A terminal/code window pattern with macOS-style controls.\n *\n * Usage:\n * <Terminal>\n * <Terminal.Header title=\"bash\" />\n * <Terminal.Body>\n * <Terminal.Line prompt=\"$\">npm install @nebutra/ui</Terminal.Line>\n * <Terminal.Line prompt=\"$\">npm run dev</Terminal.Line>\n * </Terminal.Body>\n * </Terminal>\n * ───────────────────────────────────────────────────────────────────────────── */\n\ntype TerminalVariant = \"default\" | \"minimal\" | \"glass\";\n\ninterface TerminalContextValue {\n variant: TerminalVariant;\n}\n\nconst TerminalContext = React.createContext<TerminalContextValue | null>(null);\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst variantStyles: Record<TerminalVariant, string> = {\n default: \"bg-[var(--neutral-2)] border border-[var(--neutral-7)]\",\n minimal: \"bg-[var(--neutral-1)] border border-[var(--neutral-7)]\",\n glass: \"bg-[var(--neutral-2)] backdrop-blur-md border border-[var(--neutral-7)]\",\n};\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface TerminalProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: TerminalVariant;\n}\n\nconst TerminalRoot = React.forwardRef<HTMLDivElement, TerminalProps>(\n ({ className, variant = \"default\", children, ...props }, ref) => {\n return (\n <TerminalContext.Provider value={{ variant }}>\n <div\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-xl)] overflow-hidden font-mono text-sm\",\n variantStyles[variant],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TerminalContext.Provider>\n );\n },\n);\nTerminalRoot.displayName = \"Terminal\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface TerminalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n showControls?: boolean;\n}\n\nconst TerminalHeader = React.forwardRef<HTMLDivElement, TerminalHeaderProps>(\n ({ className, title, showControls = true, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-2 px-4 py-3 border-b border-[var(--neutral-7)] bg-[var(--neutral-3)]\",\n className,\n )}\n {...props}\n >\n {showControls && (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-3 h-3 rounded-full bg-red-500/80\" aria-hidden />\n <span className=\"w-3 h-3 rounded-full bg-yellow-500/80\" aria-hidden />\n <span className=\"w-3 h-3 rounded-full bg-green-500/80\" aria-hidden />\n </div>\n )}\n {title && <span className=\"ml-2 text-xs text-[var(--neutral-9)]\">{title}</span>}\n {children}\n </div>\n );\n },\n);\nTerminalHeader.displayName = \"Terminal.Header\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type TerminalBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst TerminalBody = React.forwardRef<HTMLDivElement, TerminalBodyProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"p-4 space-y-1\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nTerminalBody.displayName = \"Terminal.Body\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface TerminalLineProps extends React.HTMLAttributes<HTMLDivElement> {\n prompt?: string;\n output?: boolean;\n highlight?: boolean;\n}\n\nconst TerminalLine = React.forwardRef<HTMLDivElement, TerminalLineProps>(\n ({ className, prompt = \"$\", output = false, highlight = false, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-start gap-2\",\n highlight && \"bg-[var(--neutral-3)] -mx-2 px-2 py-0.5 rounded\",\n className,\n )}\n {...props}\n >\n {!output && <span className=\"text-emerald-400 shrink-0 select-none\">{prompt}</span>}\n <span\n className={cn(\"flex-1\", output ? \"text-[var(--neutral-9)]\" : \"text-[var(--neutral-11)]\")}\n >\n {children}\n </span>\n </div>\n );\n },\n);\nTerminalLine.displayName = \"Terminal.Line\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n// Compound component assembly\nexport const Terminal = Object.assign(TerminalRoot, {\n Header: TerminalHeader,\n Body: TerminalBody,\n Line: TerminalLine,\n});\n\n// Named exports for direct imports\nexport { TerminalBody, TerminalHeader, TerminalLine, TerminalRoot };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\ntype Modifier = \"meta\" | \"shift\" | \"alt\" | \"ctrl\";\ntype Platform = \"apple\" | \"other\";\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** Command on macOS/iOS; Ctrl on Windows/Linux. */\n meta?: boolean;\n /** Shift modifier. */\n shift?: boolean;\n /** Option on macOS/iOS; Alt on Windows/Linux. */\n alt?: boolean;\n /** Control modifier. */\n ctrl?: boolean;\n /** Smaller size for dense surfaces. */\n small?: boolean;\n /** One key, digit, punctuation mark, or named key. */\n children?: React.ReactNode;\n className?: string;\n}\n\nconst modifierOrder = [\"meta\", \"shift\", \"alt\", \"ctrl\"] as const satisfies ReadonlyArray<Modifier>;\n\nconst appleModifierSymbols: Record<Modifier, string> = {\n meta: \"⌘\",\n shift: \"⇧\",\n alt: \"⌥\",\n ctrl: \"⌃\",\n};\n\nconst otherModifierSymbols: Record<Modifier, string> = {\n meta: \"Ctrl\",\n shift: \"Shift\",\n alt: \"Alt\",\n ctrl: \"Ctrl\",\n};\n\nconst modifierLabels: Record<Modifier, string> = {\n meta: \"Command or Control\",\n shift: \"Shift\",\n alt: \"Option or Alt\",\n ctrl: \"Control\",\n};\n\nfunction getClientPlatform(): Platform {\n const platform = window.navigator.platform.toLowerCase();\n const userAgent = window.navigator.userAgent.toLowerCase();\n const isApple = /mac|iphone|ipad|ipod/.test(platform) || /mac|iphone|ipad|ipod/.test(userAgent);\n\n return isApple ? \"apple\" : \"other\";\n}\n\nfunction subscribePlatform(): () => void {\n return () => undefined;\n}\n\nfunction usePlatform(): Platform {\n return React.useSyncExternalStore(subscribePlatform, getClientPlatform, () => \"apple\");\n}\n\nfunction normalizeKey(children: React.ReactNode): React.ReactNode {\n if (typeof children !== \"string\") {\n return children;\n }\n\n const trimmed = children.trim();\n\n if (/^[a-z]$/.test(trimmed)) {\n return trimmed.toUpperCase();\n }\n\n return trimmed;\n}\n\nfunction getModifierSymbols(platform: Platform): Record<Modifier, string> {\n return platform === \"apple\" ? appleModifierSymbols : otherModifierSymbols;\n}\n\nconst Kbd = React.forwardRef<HTMLElement, KbdProps>(\n (\n { meta, shift, alt, ctrl, small, children, className, \"aria-label\": ariaLabel, ...props },\n ref,\n ) => {\n const platform = usePlatform();\n const symbols = getModifierSymbols(platform);\n const activeModifiers = modifierOrder.filter((modifier) => {\n if (modifier === \"meta\") return meta;\n if (modifier === \"shift\") return shift;\n if (modifier === \"alt\") return alt;\n return ctrl;\n });\n const normalizedKey = normalizeKey(children);\n const visualParts = [\n ...activeModifiers.map((modifier) => symbols[modifier]),\n normalizedKey,\n ].filter(Boolean);\n const accessibleName =\n ariaLabel ??\n [\n ...activeModifiers.map((modifier) => modifierLabels[modifier]),\n typeof normalizedKey === \"string\" ? normalizedKey : undefined,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <kbd\n ref={ref as React.Ref<HTMLElement>}\n aria-label={accessibleName || undefined}\n className={cn(\n \"inline-flex select-none items-center justify-center gap-0.5 rounded-[var(--radius-sm)] border border-border bg-muted font-mono font-medium leading-none text-muted-foreground tabular-nums\",\n small ? \"min-h-4 min-w-4 px-1 py-0 text-xs\" : \"min-h-5 min-w-5 px-1.5 py-0.5 text-xs\",\n className,\n )}\n {...props}\n >\n {visualParts.join(\"\")}\n </kbd>\n );\n },\n);\nKbd.displayName = \"Kbd\";\n\nexport { Kbd };\n","\"use client\";\n\nimport type { Icon as LucideIcon } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../primitives/avatar\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { Kbd } from \"../primitives/kbd\";\nimport { cn } from \"../utils/cn\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UserMenuUser {\n id?: string;\n name: string;\n email?: string;\n avatarUrl?: string;\n /** Initials fallback — defaults to first 2 chars of name */\n initials?: string;\n}\n\nexport interface UserMenuItem {\n id: string;\n label: string;\n icon?: LucideIcon | React.ComponentType<{ className?: string }>;\n /** Keyboard shortcut hint, e.g. \"⌘,\" — rendered with <Kbd> */\n shortcut?: string;\n onSelect?: () => void;\n /** If present, item renders as a link */\n href?: string;\n /** Destructive items render in red (e.g. \"Sign out\") */\n destructive?: boolean;\n disabled?: boolean;\n}\n\nexport interface UserMenuGroup {\n id: string;\n label?: string;\n items: UserMenuItem[];\n}\n\nexport interface UserMenuProps {\n user: UserMenuUser;\n /** Groups of action items (e.g. [{ items: [Profile, Settings] }, { items: [Signout] }]) */\n groups: UserMenuGroup[];\n /** Slot rendered above groups — typically a <WorkspaceSwitcher /> or \"Workspaces\" section */\n workspaceSlot?: React.ReactNode;\n /** Optional render override for the trigger — default is Avatar */\n renderTrigger?: (user: UserMenuUser) => React.ReactNode;\n /** Optional render override for links (e.g. Next.js Link) */\n renderLink?: (props: { href: string; children: React.ReactNode }) => React.ReactElement;\n className?: string;\n /** Dropdown align (default \"end\") */\n align?: \"start\" | \"center\" | \"end\";\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction computeInitials(user: UserMenuUser): string {\n if (user.initials && user.initials.trim().length > 0) {\n return user.initials.toUpperCase().slice(0, 2);\n }\n const source = (user.name ?? \"\").trim() || (user.email ?? \"\").trim();\n if (!source) return \"?\";\n const tokens = source.split(/\\s+/).filter(Boolean);\n if (tokens.length >= 2) {\n const first = tokens[0]?.[0] ?? \"\";\n const second = tokens[1]?.[0] ?? \"\";\n return (first + second).toUpperCase();\n }\n return source.slice(0, 2).toUpperCase();\n}\n\nfunction DefaultTrigger({ user }: { user: UserMenuUser }) {\n const initials = computeInitials(user);\n return (\n <button\n type=\"button\"\n aria-label=\"Open user menu\"\n className={cn(\n \"inline-flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full\",\n \"outline-none transition-all hover:opacity-90\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"hover:ring-1 hover:ring-border\",\n )}\n >\n <Avatar size=\"sm\">\n {user.avatarUrl ? <AvatarImage src={user.avatarUrl} alt={user.name} /> : null}\n <AvatarFallback size=\"sm\" className=\"bg-[image:var(--brand-gradient)] text-white\">\n {initials}\n </AvatarFallback>\n </Avatar>\n </button>\n );\n}\n\ninterface UserMenuItemContentProps {\n item: UserMenuItem;\n}\n\nfunction UserMenuItemContent({ item }: UserMenuItemContentProps) {\n const Icon = item.icon;\n return (\n <>\n {Icon ? <Icon className=\"mr-2 h-4 w-4 shrink-0\" aria-hidden /> : null}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.shortcut ? (\n <Kbd className=\"ml-2\" small>\n {item.shortcut}\n </Kbd>\n ) : null}\n </>\n );\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function UserMenu(props: UserMenuProps): React.ReactElement {\n const {\n user,\n groups,\n workspaceSlot,\n renderTrigger,\n renderLink,\n className,\n align = \"end\",\n } = props;\n\n const initials = computeInitials(user);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {renderTrigger ? renderTrigger(user) : <DefaultTrigger user={user} />}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent align={align} sideOffset={8} className={cn(\"w-[280px] p-1\", className)}>\n {/* ─── User info header ───────────────────────────────────────── */}\n <div className=\"flex items-center gap-3 p-3\">\n <Avatar size=\"md\">\n {user.avatarUrl ? <AvatarImage src={user.avatarUrl} alt={user.name} /> : null}\n <AvatarFallback size=\"md\" className=\"bg-[image:var(--brand-gradient)] text-white\">\n {initials}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">{user.name}</span>\n {user.email ? (\n <span className=\"truncate text-xs text-muted-foreground\">{user.email}</span>\n ) : null}\n </div>\n </div>\n\n <DropdownMenuSeparator />\n\n {/* ─── Workspace slot ─────────────────────────────────────────── */}\n {workspaceSlot ? (\n <>\n <div className=\"px-1 py-1\">{workspaceSlot}</div>\n <DropdownMenuSeparator />\n </>\n ) : null}\n\n {/* ─── Action groups ──────────────────────────────────────────── */}\n {groups.map((group, groupIndex) => {\n const isLastGroup = groupIndex === groups.length - 1;\n return (\n <React.Fragment key={group.id}>\n {group.label ? (\n <div className=\"px-2 py-1 text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {group.label}\n </div>\n ) : null}\n\n {group.items.map((item) => {\n const itemClassName = cn(\n \"flex w-full cursor-pointer items-center\",\n item.destructive &&\n \"text-destructive focus:bg-destructive focus:text-destructive-foreground data-[highlighted]:bg-destructive data-[highlighted]:text-destructive-foreground\",\n );\n\n // Link variant\n if (item.href && !item.disabled) {\n const linkContent = <UserMenuItemContent item={item} />;\n const linkElement = renderLink ? (\n renderLink({ href: item.href, children: linkContent })\n ) : (\n <a href={item.href}>{linkContent}</a>\n );\n return (\n <DropdownMenuItem\n key={item.id}\n className={itemClassName}\n onClick={item.onSelect}\n render={linkElement}\n />\n );\n }\n\n // Action variant\n return (\n <DropdownMenuItem\n key={item.id}\n className={itemClassName}\n disabled={item.disabled}\n onClick={() => {\n if (!item.disabled) item.onSelect?.();\n }}\n >\n <UserMenuItemContent item={item} />\n </DropdownMenuItem>\n );\n })}\n\n {!isLastGroup ? <DropdownMenuSeparator /> : null}\n </React.Fragment>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nUserMenu.displayName = \"UserMenu\";\n","\"use client\";\n\nimport { Check, ChevronUpDown as ChevronsUpDown } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../primitives/avatar\";\nimport { Badge } from \"../primitives/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { cn } from \"../utils/cn\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type WorkspaceRole = \"owner\" | \"admin\" | \"member\" | \"guest\";\n\nexport interface Workspace {\n id: string;\n name: string;\n slug?: string;\n /** Avatar URL — fallback to gradient initials if absent */\n avatarUrl?: string;\n /** Initials/abbreviation — defaults to first 2 chars of name */\n initials?: string;\n /** User's role in this workspace */\n role?: WorkspaceRole;\n /** Plan tier — rendered as a subtle subline (\"Pro\", \"Free\") */\n plan?: string;\n}\n\nexport interface WorkspaceSwitcherProps {\n workspaces: Workspace[];\n activeWorkspaceId: string;\n onSwitch: (workspaceId: string) => void | Promise<void>;\n /** Compact = avatar + chevron only; Expanded = avatar + name + role */\n variant?: \"compact\" | \"expanded\";\n /** Bottom of dropdown — e.g. <Link href=\"/workspaces/new\">Create workspace</Link> */\n footerSlot?: React.ReactNode;\n /** Optional header in dropdown above the workspace list */\n headerSlot?: React.ReactNode;\n className?: string;\n /** Show \"Owner\" badge next to active workspace name in trigger */\n showRoleBadge?: boolean;\n /** Disable trigger (e.g. only one workspace) */\n disabled?: boolean;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getInitials(workspace: Workspace): string {\n if (workspace.initials) return workspace.initials.slice(0, 2).toUpperCase();\n const trimmed = workspace.name.trim();\n if (!trimmed) return \"??\";\n const parts = trimmed.split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) {\n return `${parts[0][0] ?? \"\"}${parts[1][0] ?? \"\"}`.toUpperCase();\n }\n return trimmed.slice(0, 2).toUpperCase();\n}\n\nfunction roleLabel(role: WorkspaceRole): string {\n switch (role) {\n case \"owner\":\n return \"Owner\";\n case \"admin\":\n return \"Admin\";\n case \"member\":\n return \"Member\";\n case \"guest\":\n return \"Guest\";\n }\n}\n\n// ─── Subcomponents ────────────────────────────────────────────────────────────\n\ninterface WorkspaceAvatarProps {\n workspace: Workspace;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nfunction WorkspaceAvatar({ workspace, size = \"sm\", className }: WorkspaceAvatarProps) {\n const initials = getInitials(workspace);\n return (\n <Avatar size={size} className={cn(\"rounded-md\", className)}>\n {workspace.avatarUrl && (\n <AvatarImage src={workspace.avatarUrl} alt={workspace.name} className=\"rounded-md\" />\n )}\n <AvatarFallback\n size={size}\n className=\"rounded-md bg-[image:var(--brand-gradient)] text-white font-semibold\"\n >\n {initials}\n </AvatarFallback>\n </Avatar>\n );\n}\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\ninterface TriggerProps {\n activeWorkspace: Workspace;\n variant: \"compact\" | \"expanded\";\n showRoleBadge: boolean;\n disabled: boolean;\n className?: string;\n}\n\nconst TriggerButton = React.forwardRef<HTMLButtonElement, TriggerProps>(\n ({ activeWorkspace, variant, showRoleBadge, disabled, className }, ref) => {\n const isOwner = activeWorkspace.role === \"owner\";\n\n if (variant === \"compact\") {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Switch workspace\"\n disabled={disabled}\n className={cn(\n \"inline-flex items-center gap-1 rounded-md p-1 outline-none transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <WorkspaceAvatar workspace={activeWorkspace} size=\"sm\" />\n <ChevronsUpDown aria-hidden=\"true\" className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </button>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Switch workspace\"\n disabled={disabled}\n className={cn(\n \"inline-flex w-full items-center gap-2 rounded-md border border-border bg-background px-2 py-1 text-left outline-none transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <WorkspaceAvatar workspace={activeWorkspace} size=\"sm\" />\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate font-medium text-[13px] text-foreground\">\n {activeWorkspace.name}\n </span>\n {showRoleBadge && isOwner && (\n <Badge variant=\"owner\" size=\"sm\">\n Owner\n </Badge>\n )}\n </div>\n <ChevronsUpDown aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </button>\n );\n },\n);\nTriggerButton.displayName = \"WorkspaceSwitcherTrigger\";\n\n// ─── Workspace List Item ──────────────────────────────────────────────────────\n\ninterface WorkspaceItemProps {\n workspace: Workspace;\n isActive: boolean;\n onSelect: () => void;\n}\n\nfunction WorkspaceItem({ workspace, isActive, onSelect }: WorkspaceItemProps) {\n return (\n <DropdownMenuItem\n onClick={onSelect}\n aria-current={isActive ? \"true\" : undefined}\n className=\"flex items-center gap-2 py-1.5\"\n >\n <WorkspaceAvatar workspace={workspace} size=\"sm\" />\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span\n className={cn(\n \"truncate text-sm text-foreground\",\n isActive ? \"font-semibold\" : \"font-medium\",\n )}\n >\n {workspace.name}\n </span>\n {workspace.plan && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {workspace.plan}\n {workspace.role && workspace.role !== \"owner\" ? ` · ${roleLabel(workspace.role)}` : \"\"}\n </span>\n )}\n {!workspace.plan && workspace.role && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {roleLabel(workspace.role)}\n </span>\n )}\n </div>\n {isActive && (\n <Check aria-hidden=\"true\" className=\"ml-auto h-4 w-4 shrink-0 text-foreground\" />\n )}\n </DropdownMenuItem>\n );\n}\n\n// ─── Main Component ───────────────────────────────────────────────────────────\n\nexport function WorkspaceSwitcher({\n workspaces,\n activeWorkspaceId,\n onSwitch,\n variant = \"expanded\",\n footerSlot,\n headerSlot,\n className,\n showRoleBadge = true,\n disabled = false,\n}: WorkspaceSwitcherProps): React.ReactElement {\n const activeWorkspace = workspaces.find((ws) => ws.id === activeWorkspaceId) ?? workspaces[0];\n\n const handleSelect = (id: string) => {\n // Fire and forget — callers may return a Promise.\n const result = onSwitch(id);\n if (result instanceof Promise) {\n result.catch((err) => {\n // Surface to console.error (allowed by Biome) — UI layer should handle errors.\n console.error(\"WorkspaceSwitcher.onSwitch failed:\", err);\n });\n }\n };\n\n if (!activeWorkspace) {\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-2 rounded-md border border-dashed border-border px-2 py-1.5 text-sm text-muted-foreground\",\n className,\n )}\n >\n No workspaces\n </div>\n );\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <TriggerButton\n activeWorkspace={activeWorkspace}\n variant={variant}\n showRoleBadge={showRoleBadge}\n disabled={disabled}\n className={className}\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n sideOffset={6}\n className=\"w-[min(20rem,calc(100vw-2rem))] p-1\"\n >\n {headerSlot && (\n <>\n <div className=\"px-2 py-1.5\">{headerSlot}</div>\n <DropdownMenuSeparator />\n </>\n )}\n\n <div className=\"px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Workspaces\n </div>\n\n <div className=\"max-h-72 overflow-y-auto\">\n {workspaces.map((ws) => (\n <WorkspaceItem\n key={ws.id}\n workspace={ws}\n isActive={ws.id === activeWorkspaceId}\n onSelect={() => handleSelect(ws.id)}\n />\n ))}\n </div>\n\n {footerSlot && (\n <>\n <DropdownMenuSeparator />\n <div className=\"px-1 py-0.5\">{footerSlot}</div>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/cn.ts","../../src/patterns/artifact-shift-card.tsx","../../src/patterns/Card/Card.tsx","../../src/patterns/CommandBox.tsx","../../src/patterns/dashboard-surfaces.tsx","../../src/primitives/badge.tsx","../../src/tokens/primitive.ts","../../src/tokens/shadows.ts","../../src/tokens/components/overlay.ts","../../src/primitives/overlay.ts","../../src/primitives/dropdown-menu.tsx","../../src/patterns/gallery-card.tsx","../../src/patterns/kinetic-marketing.tsx","../../src/utils/slot.tsx","../../src/primitives/button-variants.ts","../../src/primitives/button.tsx","../../src/tokens/components/tabs.ts","../../src/utils/primitive-props.ts","../../src/primitives/tooltip.tsx","../../src/primitives/tabs.tsx","../../src/tokens/components/textarea.ts","../../src/primitives/form-control.ts","../../src/primitives/textarea.tsx","../../src/patterns/qa-page/markdown-renderer.tsx","../../src/patterns/qa-page/markdown-editor.tsx","../../src/primitives/card.tsx","../../src/primitives/separator.tsx","../../src/primitives/avatar.tsx","../../src/patterns/qa-page/user-info.tsx","../../src/patterns/qa-page/vote-buttons.tsx","../../src/patterns/qa-page/qa-page.tsx","../../src/primitives/collapsible.tsx","../../src/patterns/sidebar-nav/sidebar-nav.tsx","../../src/patterns/Terminal/Terminal.tsx","../../src/primitives/kbd.tsx","../../src/patterns/user-menu.tsx","../../src/patterns/workspace-switcher.tsx"],"names":["jsx","React2","variantStyles","jsxs","Fragment","React3","React4","BaseMenu","isValidElement","useState","Check","React5","cva","BaseTooltip","React6","BaseTabs","React7","React8","useCallback","LinkIcon","ImageIcon","Card","CardHeader","BaseSeparator","React10","BaseAvatar","Badge","useMemo","ShareIcon","Pencil","React11","ChevronRight","React12","React13","React14","initials","React15","ChevronsUpDown"],"mappings":";;;;;;;;;;;;;;;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACcO,SAAS,iBAAA,CAAkB;AAAA,EAChC,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,8XAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,oBAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,4BAEC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,0CAAA,EAA4C,gBAAgB,GAC5E,QAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,wBAAA,CAAyB;AAAA,EACvC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA,GAAW,CAAA;AAAA,EACX,OAAA,GAAU,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,CAAA;AAAA,EACrC,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkC;AAChC,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,QAAQ,CAAA;AAEhD,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,2dAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gIAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2DAAA,EAA4D,SAAA,EAAU,MACnF,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,oHAAA;AAAA,cACV,SAAA,EAAU,IAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA;AACH,SAAA,EACF,CAAA;AAAA,wBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8HAAA,EACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChB,IAAA,CAAC,KAAA,EAAA,EAA6B,SAAA,EAAU,oBAAA,EACtC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EACb,QAAA,EAAA,KAAA,GAAQ,CAAA,EACX,CAAA;AAAA,8BACC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAsC,SAAA,EAAU,IAAA,EAC7D,kBAAQ,GAAA,EACX;AAAA,SAAA,EAAA,EANQ,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAO1B,CACD,CAAA,EACH,CAAA;AAAA,4BAEC,KAAA,EAAA,EAAI,SAAA,EAAU,wCACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZ,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,qKAAA;AAAA,YAET,QAAA,EAAA;AAAA,WAAA;AAAA,UAHI;AAAA,SAKR,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,uBAAA,CAAwB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiC;AAC7F,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,ogBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AClGA,IAAM,WAAA,GAAoB,oBAAuC,IAAI,CAAA;AAarE,IAAM,UAAA,GAA0C;AAAA,EAC9C,IAAA,EAAM,EAAA;AAAA,EACN,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,IAAM,aAAA,GAA6C;AAAA,EACjD,OAAA,EAAS,8BAAA;AAAA,EACT,QAAA,EAAU,wCAAA;AAAA,EACV,QAAA,EAAU,uCAAA;AAAA,EACV,KAAA,EAAO,gBAAA;AAAA,EACP,QAAA,EAAU;AACZ,CAAA;AAUA,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,OAAA,GAAU,SAAA,EAAW,OAAA,GAAU,IAAA,EAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC/E,IAAA,uBACEA,IAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAE,OAAA,EAAQ,EACrC,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,qGAAA;AAAA,UACA,cAAc,OAAO,CAAA;AAAA,UACrB,WAAW,OAAO,CAAA;AAAA,UAClB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,MAAA;AAQvB,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,GAAA,GAAM,MAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC/D,IAAA,MAAM,SAAS,EAAE,EAAA,EAAI,SAAS,EAAA,EAAI,OAAA,EAAS,IAAI,OAAA,EAAQ;AAEvD,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,EAAA,CAAG,kBAAA,EAAoB,MAAA,CAAO,GAAG,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,OAC3E,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,aAAA;AAMzB,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA,EAAI,GAAG,KAAA,EAClD,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,WAAA;AAMvB,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA,EAAI,GAAG,KAAA,EACjF,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,aAAA;AAQzB,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,MAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACvD,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,EAAA,EAAI,SAAA;AAAA,MACJ,EAAA,EAAI,WAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,kFAAA;AAAA,UACA,QAAQ,IAAI,CAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,WAAA;AAQvB,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EACtB,CAAC,EAAE,SAAA,EAAW,EAAA,EAAI,GAAA,GAAM,MAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC1D,IAAA,uBACEA,GAAAA,CAAC,GAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,uCAAA,EAAyC,SAAS,CAAA,EAAI,GAAG,KAAA,EACnF,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,YAAA;AASxB,IAAM,eAAA,GAAwB,KAAA,CAAA,UAAA,CAG5B,CAAC,EAAE,SAAA,EAAW,EAAA,EAAI,GAAA,GAAM,GAAA,EAAK,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC3D,EAAA,OAAa,KAAA,CAAA,aAAA;AAAA,IACX,GAAA;AAAA,IACA;AAAA,MACE,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,+CAAA,EAAiD,SAAS,CAAA;AAAA,MACxE,GAAG;AAAA,KACL;AAAA,IACA;AAAA,GACF;AACF,CAAC;AACD,eAAA,CAAgB,WAAA,GAAc,kBAAA;AAKvB,IAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,QAAA,EAAU;AAAA,EAC1C,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,SAAA;AAAA,EACP,WAAA,EAAa;AACf,CAAC;ACvMM,IAAM,UAAA,GAAmBC,KAAA,CAAA,UAAA;AAAA,EAC9B,CACE;AAAA,IACE,SAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA,GAAS,GAAA;AAAA,IACT,cAAA,GAAiB,IAAA;AAAA,IACjB,OAAA,GAAU,SAAA;AAAA,IACV,MAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,eAAS,KAAK,CAAA;AAChD,IAAA,MAAM,UAAA,GAAmBA,kBAAY,YAAY;AAC/C,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,OAAO,CAAA;AAC3C,QAAA,SAAA,CAAU,IAAI,CAAA;AACd,QAAA,MAAA,IAAS;AACT,QAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,MACzC,SAAS,GAAA,EAAK;AAKZ,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,UAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,GAAG,CAAA;AAAA,QAC3D;AAAA,MACF;AAAA,IACF,CAAA,EAAG,CAAC,OAAA,EAAS,MAAM,CAAC,CAAA;AACpB,IAAA,MAAMC,cAAAA,GAAgB;AAAA,MACpB,OAAA,EAAS,0DAAA;AAAA,MACT,OAAA,EAAS,+DAAA;AAAA,MACT,IAAA,EAAM;AAAA,KACR;AACA,IAAA;AAAA;AAAA,sBAEEC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,SAAA,EAAW,EAAA;AAAA,YACT,sHAAA;AAAA,YACAD,eAAc,OAAO,CAAA;AAAA,YACrB;AAAA,WACF;AAAA,UACA,OAAA,EAAS,UAAA;AAAA,UACT,IAAA,EAAK,QAAA;AAAA,UACL,QAAA,EAAU,CAAA;AAAA,UACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,YAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,cAAA,CAAA,CAAE,cAAA,EAAe;AACjB,cAAA,UAAA,EAAW;AAAA,YACb;AAAA,UACF,CAAA;AAAA,UACA,YAAA,EAAY,iBAAiB,OAAO,CAAA,CAAA;AAAA,UACnC,GAAG,KAAA;AAAA,UAGJ,QAAA,EAAA;AAAA,4BAAAF,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,4BAEhEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAyC,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,YAEhE,kCACCA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,oCAAA;AAAA,kBACA,SACI,kBAAA,GACA;AAAA,iBACN;AAAA,gBAEC,QAAA,EAAA,MAAA,mBAASA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA,mBAAKA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,aAC/E;AAAA,4BAGFA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,wJAAA;AAAA,kBACA,yBAAA;AAAA,kBACA,MAAA,IAAU;AAAA,iBACZ;AAAA,gBAEC,mBAAS,SAAA,GAAY;AAAA;AAAA;AACxB;AAAA;AAAA;AACF;AAAA,EAEJ;AACF;AACA,UAAA,CAAW,WAAA,GAAc,YAAA;AAEzB,SAAS,QAAA,CAAS,EAAE,SAAA,EAAU,EAA2B;AACvD,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA;AAAA,MACA,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,CAAA;AAAA,wBACvDA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,yDAAA,EAA0D;AAAA;AAAA;AAAA,GACpE;AAEJ;AACA,SAAS,UAAA,CAAW,EAAE,SAAA,EAAU,EAA2B;AACzD,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA;AAAA,MACA,KAAA,EAAM,4BAAA;AAAA,MACN,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,cAAA,EAAe,OAAA;AAAA,MAEf,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA,GACpC;AAEJ;AC1IA,IAAM,iBAAA,GAAyD;AAAA,EAC7D,OAAA,EAAS,+CAAA;AAAA,EACT,IAAA,EAAM,mCAAA;AAAA,EACN,KAAA,EAAO,4CAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;AAWO,SAAS,uBAAA,CAAwB;AAAA,EACtC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAiC;AAC/B,EAAA,uBACEG,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,2BAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,qHAAA;AAAA,QACA,0KAAA;AAAA,QACA,gJAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+EAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACZ,QAAA,EAAA;AAAA,YAAA,MAAA,mBACCA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oEAAA,EAAqE,CAAA;AAAA,8BACrFA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DAA2D,QAAA,EAAA,MAAA,EAAO;AAAA,aAAA,EACjF,CAAA,GACE,IAAA;AAAA,4BACJA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mFACX,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,YACC,8BACCA,GAAAA,CAAC,OAAE,SAAA,EAAU,4DAAA,EACV,uBACH,CAAA,GACE;AAAA,WAAA,EACN,CAAA;AAAA,UACC,0BACCA,GAAAA,CAAC,SAAI,SAAA,EAAU,8CAAA,EAAgD,mBAAQ,CAAA,GACrE;AAAA,SAAA,EACN,CAAA;AAAA,QACC,2BAAWA,GAAAA,CAAC,SAAI,SAAA,EAAU,oBAAA,EAAsB,UAAS,CAAA,GAAS;AAAA;AAAA;AAAA,GACrE;AAEJ;AAYO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEG,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,yBAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA;AAAA,cACT,sGAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4DAAA,EAA8D,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gBACjF,8BACCA,GAAAA,CAAC,OAAE,SAAA,EAAU,gDAAA,EAAkD,uBAAY,CAAA,GACzE;AAAA,eAAA,EACN,CAAA;AAAA,cAAA,CACE,QAAQ,MAAA,qBACRG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0DAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,IAAA;AAAA,gBACA;AAAA,eAAA,EACH;AAAA;AAAA;AAAA,SAEJ;AAAA,QACC;AAAA;AAAA;AAAA,GACH;AAEJ;AAYO,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,EAAM,IAAA;AAAA,EACN,IAAA,GAAO,SAAA;AAAA,EACP;AACF,CAAA,EAA6B;AAC3B,EAAA,uBACEA,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,0BAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,6GAAA;AAAA,QACA,oDAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EAA8D,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACnF,uBACCA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,2FAAA;AAAA,gBACA,kBAAkB,IAAI;AAAA,eACxB;AAAA,cAEA,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,eAAa,IAAA,EAAM;AAAA;AAAA,WAChD,GACE;AAAA,SAAA,EACN,CAAA;AAAA,wBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iFACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QAAA,CACE,UAAU,MAAA,qBACVG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4DAAA,EACZ,QAAA,EAAA;AAAA,UAAA,MAAA,mBAASH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,OAAA,EAAS,kBAAO,CAAA,GAAU,IAAA;AAAA,UACnD,yBACCA,GAAAA,CAAC,UAAK,SAAA,EAAU,4CAAA,EAA8C,kBAAO,CAAA,GACnE;AAAA,SAAA,EACN;AAAA;AAAA;AAAA,GAEJ;AAEJ;ACnKA,IAAM,aAAA,GAAgB,GAAA;AAAA,EACpB,iRAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA;AAAA;AAAA,QAGP,OAAA,EAAS,4BAAA;AAAA,QACT,SAAA,EACE,iFAAA;AAAA,QACF,WAAA,EACE,uFAAA;AAAA,QACF,OAAA,EAAS,+BAAA;AAAA,QACT,OAAA,EAAS,2EAAA;AAAA,QACT,OAAA,EAAS,2EAAA;AAAA,QACT,IAAA,EAAM,kEAAA;AAAA,QACN,KAAA,EACE,uFAAA;AAAA;AAAA,QAEF,IAAA,EAAM,6CAAA;AAAA,QACN,aAAA,EAAe,mEAAA;AAAA,QACf,IAAA,EAAM,iDAAA;AAAA,QACN,aAAA,EAAe,4DAAA;AAAA,QACf,MAAA,EAAQ,qDAAA;AAAA,QACR,eAAA,EACE,2EAAA;AAAA,QACF,KAAA,EAAO,iDAAA;AAAA,QACP,cAAA,EAAgB,4DAAA;AAAA,QAChB,GAAA,EAAK,yDAAA;AAAA,QACL,YAAA,EAAc,oEAAA;AAAA,QACd,IAAA,EAAM,+CAAA;AAAA,QACN,aAAA,EAAe,qEAAA;AAAA,QACf,KAAA,EAAO,iDAAA;AAAA,QACP,cAAA,EAAgB,4DAAA;AAAA,QAChB,IAAA,EAAM,2CAAA;AAAA,QACN,aAAA,EAAe,sDAAA;AAAA,QACf,QAAA,EAAU,4CAAA;AAAA;AAAA,QAEV,KAAA,EACE,sFAAA;AAAA,QACF,KAAA,EACE,sFAAA;AAAA,QACF,IAAA,EAAM,yGAAA;AAAA,QACN,IAAA,EAAM,mDAAA;AAAA,QACN,GAAA,EAAK,+CAAA;AAAA,QACL,KAAA,EAAO,8CAAA;AAAA,QACP,QAAA,EAAU,6EAAA;AAAA,QACV,aAAA,EAAe;AAAA,OACjB;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,qFAAA;AAAA,QACJ,EAAA,EAAI,gFAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAEA,IAAM,WAAA,GAA2E;AAAA,EAC/E,OAAA,EAAS,uBAAA;AAAA,EACT,OAAA,EAAS,uBAAA;AAAA,EACT,IAAA,EAAM,oBAAA;AAAA,EACN,KAAA,EAAO,2BAAA;AAAA,EACP,WAAA,EAAa,2BAAA;AAAA,EACb,aAAA,EAAe,qBAAA;AAAA,EACf,cAAA,EAAgB,YAAA;AAAA,EAChB,cAAA,EAAgB,YAAA;AAAA,EAChB,YAAA,EAAc,gBAAA;AAAA,EACd,aAAA,EAAe,YAAA;AAAA,EACf,eAAA,EAAiB,yBAAA;AAAA,EACjB,aAAA,EAAe,sBAAA;AAAA,EACf,aAAA,EAAe,SAAA;AAAA,EACf,OAAA,EAAS,0BAAA;AAAA,EACT,QAAA,EAAU,0BAAA;AAAA,EACV,SAAA,EAAW,yBAAA;AAAA,EACX,OAAA,EAAS;AACX,CAAA;AAaA,SAAS,KAAA,CAAM;AAAA,EACb,SAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,GAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AACb,EAAA,MAAM,cAAA,GAAiB,GAAG,aAAA,CAAc,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AACrE,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,qBACrBG,KAAAC,UAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,GAAA,oBACCJ,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,UACT,mCAAA;AAAA,UACA,WAAA,CAAY,OAAA,IAAW,SAAS,CAAA,IAAK;AAAA;AACvC;AAAA,KACF;AAAA,IAED,IAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,6CAChC,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,IAED;AAAA,GAAA,EACH,CAAA;AAGF,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,UAAA,GAAmBK,KAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AAClD,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAA,KAAW,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA,GAAI,IAAA;AAExD,IAAA,IAAUA,KAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG;AAC/B,MAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AAIzB,MAAA,OAAaA,mBAAa,KAAA,EAAO;AAAA,QAC/B,GAAG,KAAA;AAAA,QACH,GAAG,UAAA;AAAA,QACH,WAAA,EAAa,OAAA;AAAA,QACb,SAAA,EAAW,EAAA,CAAG,cAAA,EAAgB,UAAA,CAAW,SAAS,CAAA;AAAA,QAClD,OAAO,EAAE,GAAG,MAAM,KAAA,EAAO,GAAG,WAAW,KAAA,EAAM;AAAA,QAC7C,QAAA,EAAU,aAAA,CAAc,UAAA,CAAW,QAAQ;AAAA,OACP,CAAA;AAAA,IACxC;AAAA,EACF;AAEA,EAAA,uBACEL,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAA,EAAU,OAAA,EAAQ,SAAA,EAAW,cAAA,EAAiB,GAAG,KAAA,EACpD,QAAA,EAAA,aAAA,CAAc,QAAQ,CAAA,EACzB,CAAA;AAEJ;CC9I+B;AAAA;AAAA,EAE7B,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,EACzB,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC3B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA;AAAA,EAG3B,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,EACxB,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA,EAC1B,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAAA;AAAA,EAG1B,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC5B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9B,UAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,EAW9B,OAAO,MAAA,CAAO,KAAA;AAAA,EACd,OAAO,MAAA,CAAO;AAChB;CAMkC;AAAA;AAAA,EAEhC,OAAA,EAAS,OAAO,QAAA,CAAS,OAAA;AAAA;AAAA,EAEzB,OAAA,EAAS,OAAO,QAAA,CAAS,cAAA;AAAA;AAAA,EAEzB,QAAA,EAAU,OAAO,QAAA,CAAS,eAAA;AAAA;AAAA,EAE1B,MAAA,EAAQ,OAAO,QAAA,CAAS,aAG1B;AAMO,IAAM,gBAAA,GAAmB;AAAA,EAE9B,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,CAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EACH,CAAA,EAAG,EAAA;AAAA,EAOH,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAqBO,IAAM,eAAA,GAAkB;AAAA,EACzB;AAAA,EAEJ,IAAA,EAAM,EAAA;AAAA,EACN,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAGN,CAAA;AAMO,IAAM,eAAA,GAAkB;AAAA,EAG7B,EAAA,EAAI,CAAA;AAAA;AAAA,EACJ,EAAA,EAAI,CAAA;AAAA,EAGJ,IAAA,EAAM;AACR,CAAA;AAMO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,EAAA,EAAI,EAAA;AAAA,EACJ,EAAA,EAAI,EAAA;AAAA,EACJ,IAAA,EAAM,EAAA;AAAA,EACN,EAAA,EAAI,EAKN,CAAA;AA0DO,IAAM,mBAAA,GAAsB;AAAA,EACjC,QAAA,EAAU;AAAA,IACD;AAAA,IACP,IAAA,EAAM,GAGR,CAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IAGN,KAAA,EAAO;AAAA;AAEX,CAAA;AAIO,IAAM,kBAAA,GAAqB;AAAA,EAChC,KAAA,EAAO,CAAA;AAAA;AAAA,EACP,MAAA,EAAQ;AAAA;AACV,CAAA;;;AC/MO,IAAM,aAAA,GAAgB;AAAA,EAI3B,EAAA,EAAI,WAAA;AAAA,EAEJ,EAAA,EAAI,WAIN,CAAA;AC5BO,IAAM,aAAA,GAAgB;AAAA,EAG3B,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAkBO,IAAM,iBAAA,GAAoB;AAAA,EAuB/B,WAAA,EAAa;AAAA,IACX,wIAAA;AAAA,IACA,aAAA,CAAc,EAAA;AAAA,IACd,mHAAA;AAAA,IACA,2HAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EAuBV,cAAA,EAAgB;AAAA,IACd,+IAAA;AAAA,IACA,aAAA,CAAc,EAAA;AAAA,IACd,sGAAA;AAAA,IACA,mHAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAYZ,CAAA;;;ACpGA,IAAM,qBAAA,GAAwB;AAAA,EAC5B,sGAAA;AAAA,EACA,wDAAA;AAAA,EACA;AACF,CAAA,CAAE,KAAK,GAAG,CAAA;AAEV,IAAM,wBAAA,GACJ,wEAAA;AAKK,IAAM,0BAAA,GAA6B;AAAA,EAIxC,WAAA,EAAa,qEAAA;AAAA,EAgBb,UAAU,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,CAAE,KAAK,GAAG,CAkCtE,CAAA;AC7DA,IAAM,mBAAA,GAA4BM,oBAA+C,IAAI,CAAA;AAIrF,SAAS,YAAA,CAAa;AAAA,EACpB,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,eAAS,WAAW,CAAA;AAC1E,EAAA,MAAM,OAAO,cAAA,IAAkB,gBAAA;AAE/B,EAAA,SAAS,OAAA,CACP,UACA,YAAA,EACA;AACA,IAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,MAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,IAC9B;AACA,IAAA,YAAA,GAAe,UAAU,YAAqB,CAAA;AAAA,EAChD;AAEA,EAAA,MAAM,YAAA,GAAyC,EAAE,OAAA,EAAQ;AAEzD,EAAA,uBACEN,GAAAA,CAAC,mBAAA,CAAoB,UAApB,EAA6B,KAAA,EAAO,cACnC,QAAA,kBAAAA,GAAAA,CAACO,IAAA,CAAS,IAAA,EAAT,EAAc,IAAA,EAAY,YAAA,EAAc,SAAU,GAAG,KAAA,EACnD,UACH,CAAA,EACF,CAAA;AAEJ;AACA,YAAA,CAAa,WAAA,GAAc,cAAA;AAM3B,IAAM,sBAAsB,CAAC;AAAA,EAC3B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAqF;AACnF,EAAA,MAAM,OAAA,GAAgBD,UAAI,mBAAmB,CAAA;AAC7C,EAAA,SAAS,eAAA,GAAkB;AACzB,IAAA,OAAA,EAAS,QAAQ,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,qBACJ,OAAA,IAAiBA,KAAA,CAAA,cAAA,CAAwC,QAAQ,CAAA,GACvDA,mBAAa,QAAA,EAAU;AAAA,IAC3B,WAAA,EAAa,CAAC,KAAA,KAAyC;AACrD,MACE,QAAA,CAAS,KAAA,CAAM,WAAA,GAGb,KAAK,CAAA;AACT,MAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,QAAA,eAAA,EAAgB;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,KAA4C;AACtD,MACE,QAAA,CAAS,KAAA,CAAM,SAAA,GAGb,KAAK,CAAA;AACT,MAAA,IAAI,CAAC,MAAM,gBAAA,KAAqB,KAAA,CAAM,QAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,CAAA,EAAM;AAC3E,QAAA,eAAA,EAAgB;AAAA,MAClB;AAAA,IACF;AAAA,GACD,CAAA,GACD,IAAA;AAEN,EAAA,MAAM,gBAAgB,kBAAA,IAAsB,MAAA;AAC5C,EAAA,uBACEN,GAAAA;AAAA,IAACO,IAAA,CAAS,OAAA;AAAA,IAAT;AAAA,MACC,GAAA;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACP,GAAI,aAAA,GAAgB,KAAA,GAAQ,EAAE,GAAG,OAAO,QAAA;AAAS;AAAA,GACpD;AAEJ,CAAA;AACA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAERA,IAAA,CAAS;AAERA,IAAA,CAAS;AAEZA,IAAA,CAAS;AAEFA,IAAA,CAAS;AAuDxC,IAAM,sBAAsB,CAAC;AAAA,EAC3B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,KAAA,GAAQ,QAAA;AAAA,EACR,WAAA,GAAc,CAAA;AAAA,EACd,IAAA,GAAO,QAAA;AAAA,EACP,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAGEP,GAAAA,CAACO,IAAA,CAAS,MAAA,EAAT,EACC,QAAA,kBAAAP,GAAAA;AAAA,EAACO,IAAA,CAAS,UAAA;AAAA,EAAT;AAAA,IACC,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IAEA,QAAA,kBAAAP,GAAAA;AAAA,MAACO,IAAA,CAAS,KAAA;AAAA,MAAT;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,iBAAA,CAAkB,WAAA;AAAA,UAClB,0BAAA,CAA2B,WAAA;AAAA,UAC3B;AAAA,SACF;AAAA,QACA,OAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,OAAA,EAAS,GAAG,KAAA,EAAM;AAAA,QAChD,GAAG;AAAA;AAAA;AACN;AACF,CAAA,EACF,CAAA;AAEF,mBAAA,CAAoB,WAAA,GAAc,qBAAA;AAElC,IAAM,mBAAmB,CAAC;AAAA,EACxB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAGEP,GAAAA;AAAA,EAACO,IAAA,CAAS,IAAA;AAAA,EAAT;AAAA,IACC,GAAA;AAAA,IACA,WAAW,EAAA,CAAG,0BAAA,CAA2B,QAAA,EAAU,KAAA,IAAS,QAAQ,SAAS,CAAA;AAAA,IAC5E,GAAG;AAAA;AACN,CAAA;AAEF,gBAAA,CAAiB,WAAA,GAAc,kBAAA;AAkE/B,IAAM,wBAAwB,CAAC;AAAA,EAC7B,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAGEP,GAAAA;AAAA,EAACO,IAAA,CAAS,SAAA;AAAA,EAAT;AAAA,IACC,GAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,IAClD,GAAG;AAAA;AACN,CAAA;AAEF,qBAAA,CAAsB,WAAA,GAAc,uBAAA;AC/LpC,IAAM,cAAA,GAAsD;AAAA,EAC1D,OAAA,EAAS,gCAAA;AAAA,EACT,IAAA,EAAM,iEAAA;AAAA,EACN,IAAA,EAAM,iEAAA;AAAA,EACN,MAAA,EAAQ,yEAAA;AAAA,EACR,KAAA,EAAO,qEAAA;AAAA,EACP,KAAA,EAAO,qEAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,kBAAA,GAGF;AAAA,EACF,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,aAAA,EAAe;AACjB,CAAA;AAIA,IAAM,aAAA,GAAgB,EAAA;AAAA,EACpB,iHAAA;AAAA,EACA,wHAAA;AAAA,EACA,gGAAA;AAAA,EACA;AACF,CAAA;AAcA,SAAS,sBAAA,CAAuB,EAAE,OAAA,EAAS,KAAA,EAAM,EAAgC;AAC/E,EAAA,SAAS,KAAK,KAAA,EAA6B;AACzC,IAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,EACxB;AAEA,EAAA,uBACEP,IAAC,KAAA,EAAA,EAAI,cAAA,EAAgB,MAAM,oBAAA,EAAsB,IAAA,EAC/C,QAAA,kBAAAG,IAAAA,CAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAH,GAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,wBACEA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAY,eAAe,KAAK,CAAA,CAAA;AAAA,YAChC,SAAA,EAAW,EAAA;AAAA,cACT,4EAAA;AAAA,cACA,yCAAA;AAAA,cACA,8CAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,QAAA,kBAAAA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACtC;AAAA,KAEJ;AAAA,oBACAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAM,KAAA,EAAM,UAAA,EAAY,CAAA,EAC1C,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,GAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,UAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,UAAA,MAAA,CAAO,QAAA,EAAS;AAAA,QAClB,CAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,OAAO,WAAA,IACL;AAAA,SACJ;AAAA,QAEC,QAAA,EAAA,MAAA,CAAO;AAAA,OAAA;AAAA,MAVH,MAAA,CAAO;AAAA,KAYf,CAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAkBA,SAAS,eAAA,CAAgB;AAAA,EACvB,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,SAAS,CAAC,CAAA;AACxD,EAAA,MAAM,mBAAmB,OAAA,CAAQ,QAAA,EAAU,UAAU,QAAA,EAAU,MAAA,IAAU,UAAU,QAAQ,CAAA;AAE3F,EAAA,uBACEG,IAAAA,CAAAC,UAAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAD,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACZ,QAAA,EAAA;AAAA,MAAA,IAAA,mBACCH,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,0FAAA;AAAA,YACA,eAAe,QAAQ;AAAA,WACzB;AAAA,UACA,aAAA,EAAY,MAAA;AAAA,UAEX,QAAA,EAAA;AAAA;AAAA,0BAGHA,GAAAA,CAAC,UAAK,SAAA,EAAU,oBAAA,EAAqB,eAAY,MAAA,EAAO,CAAA;AAAA,MAAA,CAGxD,UAAU,UAAA,qBACVG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,MAAA,oBACCH,GAAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAA4C,cAAW,QAAA,EAAS,CAAA;AAAA,QAEhF,cAAc,OAAA,mBACbA,IAAC,sBAAA,EAAA,EAAuB,OAAA,EAAkB,OAAc,CAAA,GACtD;AAAA,OAAA,EACN;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,EAAA;AAAA,sBAAAH,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,sDAAA,EAAwD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC3E,KAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAS,kBAAA,CAAmB,KAAA,CAAM,IAAI,CAAA,EAAG,IAAA,EAAK,IAAA,EAClD,QAAA,EAAA,KAAA,CAAM,KAAA,EACT;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gEAAA,EACV,yBAAe,MAAA,EAClB,CAAA;AAAA,IAGC,gBAAA,oBACCG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mGAAA,EACb,QAAA,EAAA;AAAA,sBAAAH,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,QAAA,EAAU,UAAU,EAAA,EAAG,CAAA;AAAA,sBACnDG,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,QAAA,QAAA,EAAU,0BAAUH,GAAAA,CAAC,UAAK,SAAA,EAAU,cAAA,EAAgB,mBAAS,MAAA,EAAO,CAAA;AAAA,QACpE,QAAA,EAAU;AAAA,OAAA,EACb;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAIO,SAAS,YAAY,KAAA,EAA6C;AACvE,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA,GAAW,SAAA;AAAA,IACX,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,uBACJA,GAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA;AAAA,GACF;AAGF,EAAA,MAAM,iBAAA,GAAoB,EAAA,CAAG,aAAA,EAAe,gBAAA,EAAkB,SAAS,CAAA;AAGvE,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,UAAA,CAAW;AAAA,QAChB,IAAA;AAAA,QACA,SAAA,EAAW,iBAAA;AAAA,QACX,YAAA,EAAc,KAAA;AAAA,QACd,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AACA,IAAA,uBACEA,IAAC,GAAA,EAAA,EAAE,IAAA,EAAY,cAAY,KAAA,EAAO,SAAA,EAAW,iBAAA,EAAmB,OAAA,EAC7D,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEA,GAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,cAAY,KAAA,EAAO,SAAA,EAAW,iBAAA,EAAmB,OAAA,EACpE,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,EAEJ;AAGA,EAAA,uBAAOA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,aAAA,EAAe,gBAAA,EAAkB,SAAS,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAC/E;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AC5R1B,SAAS,SAAS,IAAA,EAAc;AAC9B,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,EAAA,IAAI,QAAQ,UAAA,CAAW,IAAI,KAAK,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AACxD,IAAA,OAAO,iCAAA;AAAA,EACT;AAEA,EAAA,IAAI,wEAAA,CAAyE,IAAA,CAAK,OAAO,CAAA,EAAG;AAC1F,IAAA,OAAO,0BAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,IAAA,OAAO,wCAAA;AAAA,EACT;AAEA,EAAA,OAAO,oBAAA;AACT;AAEA,SAAS,WAAW,IAAA,EAA6B;AAC/C,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAA;AACb,IAAA,uBAAOA,GAAAA,CAAC,IAAA,EAAA,EAAK,aAAA,EAAW,IAAA,EAAC,WAAU,qBAAA,EAAsB,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAIQ,cAAAA,CAAe,IAAI,CAAA,EAAG;AACxB,IAAA,uBACER,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAW,IAAA;AAAA,QACX,SAAA,EAAU,iFAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,MAAM,YAAA,GAAe,WAAW,IAAI,CAAA;AAEpC,EAAA,uBACEG,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,6kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,6BAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU,iHAAA;AAAA,YACV,KAAA,EAAO,EAAE,SAAA,EAAW,yDAAA;AAA0D;AAAA,SAChF;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yHAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uFAAA,EACb,QAAA,EAAA,OAAA,EACH,CAAA,EACF,CAAA;AAAA,wBAEAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mDAAA,EACZ,QAAA,EAAA,YAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2PAAA,EACZ,QAAA,EAAA,YAAA,EACH,CAAA,EAEJ,CAAA;AAAA,0BAEAA,GAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,qDAAA;AAAA,cACV,KAAA,EAAO,EAAE,aAAA,EAAe,yBAAA,EAA2B,YAAY,wBAAA,EAAyB;AAAA,cAEvF,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2EACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,0BAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAgB,QAAA,EAAS;AAAA,SAAA,EAC1C;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,kBAAA,CAAmB;AAAA,EACjC,QAAA,GAAW,aAAA;AAAA,EACX,QAAA,GAAW,IAAA;AAAA,EACX,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAC1B,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,+UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+FAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,eAAW,IAAA,EAAC,CAAA;AAAA,0BACjEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,eAAW,IAAA,EAAC,CAAA;AAAA,0BACjEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,eAAW,IAAA,EAAC,CAAA;AAAA,0BACjEA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,mEAAA;AAAA,cACV,SAAA,EAAU,IAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mIACb,QAAA,EAAA,QAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChBG,IAAAA,CAAC,MAAA,EAAA,EAA8B,WAAU,oBAAA,EACvC,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+DAAA,EACb,kBAAQ,CAAA,EACX,CAAA;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,kBAAA,EAAoB,QAAA,CAAS,IAAI,CAAC,CAAA,EAAG,SAAA,EAAU,IAAA,EAChE,kBAAQ,GAAA,EACX;AAAA,SAAA,EAAA,EANS,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAO3B,CACD,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA,GAAQ,4BAAA;AAAA,EACR,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6B;AAC3B,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,kbAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,4BAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yGAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAa,eAAW,IAAA,EACrC,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oHAAA,EAAqH,CAAA;AAAA,4BACrIA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sHAAA,EAAuH,CAAA;AAAA,4BACvIA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wHAAA,EAAyH;AAAA,WAAA,EAC3I,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EACb,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sMACd,QAAA,kBAAAA,GAAAA,CAAC,UAAK,SAAA,EAAU,UAAA,EAAW,WAAU,IAAA,EAClC,QAAA,EAAA,KAAA,EACH,GACF,CAAA,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA,MAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yHAAA,EACb,QAAA,EAAA,MAAA,EACH,CAAA,EAEJ;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+GAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,MAAA;AAAA,cACZ,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,MAAA;AAAA,cACZ,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAA+B,QAAA,EAAS;AAAA,SAAA,EACzD;AAAA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,mBAAA,CAAoB;AAAA,EAClC,SAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA6B;AAC3B,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,kbAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,iBAAA,EAAiB,SAAA;AAAA,MACjB,YAAA,EAAW,uBAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU,iHAAA;AAAA,YACV,KAAA,EAAO,EAAE,SAAA,EAAW,yDAAA;AAA0D;AAAA,SAChF;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAS;AAAA;AAAA;AAAA,GAC3C;AAEJ;AAEO,SAAS,oBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA8B;AAC5B,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,uBAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,QACC,2BACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uHACZ,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,wBAEFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAS;AAAA;AAAA;AAAA,GAC3C;AAEJ;AAEO,SAAS,iBAAA,CAAkB;AAAA,EAChC,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA2B;AACzB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIS,SAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,OAAO,CAAA;AAC3C,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,MAAA,CAAO,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,GAAG,GAAI,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,uBACEN,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,sfAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,yBAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAG,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sIAAA,EACd,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,UAAO,GAAA;AAAA,UAAE;AAAA,SAAA,EACpD,CAAA;AAAA,wBACAG,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,UAAA;AAAA,YACT,SAAA,EAAU,+TAAA;AAAA,YAET,QAAA,EAAA;AAAA,cAAA,MAAA,mBAASH,GAAAA,CAACU,KAAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,CAAA,mBAAKV,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA;AAAA,cACjE,SAAS,WAAA,GAAc;AAAA;AAAA;AAAA;AAC1B;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,gBAAgB,EAAE,SAAA,EAAW,QAAA,EAAU,GAAG,OAAM,EAAyB;AACvF,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,iNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA,EAAW,mBAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAS;AAAA;AAAA;AAAA,GAC3C;AAEJ;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,IAAA,EAAM,IAAA;AAAA,EACN,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,YAAY,MAAA,CAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAE/C,EAAA,uBACEG,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,2WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iMAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,gIAAA;AAAA,cACV,aAAA,EAAW,IAAA;AAAA,cAEV,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UACC,wBACCA,GAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAW,IAAA;AAAA,cACX,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EAEJ,CAAA;AAAA,wBACAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kJACb,QAAA,EAAA,UAAA,IAAc,CAAA,MAAA,EAAS,SAAS,CAAA,CAAA,EACnC,CAAA;AAAA,wBACAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yCAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAC7DA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6DAA6D,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA;AAAA,GACxF;AAEJ;ACtaO,IAAM,IAAA,GAAaW,KAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,OAAO,GAAG,KAAA,IAAS,GAAA,KAAQ;AAKjD,IAAA,MAAM,UAAA,GAAmBA,KAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AAClD,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAA,KAAW,CAAA,GAAI,UAAA,CAAW,CAAC,CAAA,GAAI,IAAA;AAExD,IAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,CAAOA,KAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG;AAEjD,MAAA,uBACEX,IAAC,MAAA,EAAA,EAAK,GAAA,EAAU,WAAsB,KAAA,EAAe,GAAG,OACrD,QAAA,EACH,CAAA;AAAA,IAEJ;AAEA,IAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AACzB,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAA6B;AAC9C,MAAA,IAAI,OAAO,GAAA,KAAQ,UAAA,EAAY,GAAA,CAAI,IAAI,CAAA;AAAA,WAAA,IAC9B,GAAA,MAAS,OAAA,GAAU,IAAA;AAI5B,MAAA,MAAM,WACJ,UAAA,CACA,GAAA;AACF,MAAA,IAAI,OAAO,QAAA,KAAa,UAAA,EAAY,QAAA,CAAS,IAAI,CAAA;AAAA,WAAA,IACxC,QAAA,IAAY,aAAa,QAAA,EAAU;AAC1C,QAAC,SAAwD,OAAA,GAAU,IAAA;AAAA,MACrE;AAAA,IACF,CAAA;AAIA,IAAA,MAAM,WAAA,GAAc,CAAC,SAAA,EAAW,UAAA,CAAW,SAAS,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAkC;AAAA,MACtC,GAAG,UAAA;AAAA,MACH,GAAG,KAAA;AAAA,MACH,GAAA,EAAK,SAAA;AAAA,MACL,SAAA,EAAW,WAAA;AAAA,MACX,OAAO,EAAE,GAAG,UAAA,CAAW,KAAA,EAAO,GAAG,KAAA;AAAM,KACzC;AACA,IAAA,OAAaW,KAAA,CAAA,YAAA;AAAA,MACX,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AC3DZ,IAAM,cAAA,GAAiBC,GAAAA;AAAA,EAC5B;AAAA,IACE,iEAAA;AAAA,IACA,sDAAA;AAAA,IACA,gGAAA;AAAA,IACA,2CAAA;AAAA,IACA,qGAAA;AAAA,IACA,kDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EACV;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA;AAAA,QAEP,OAAA,EAAS,mBAAA;AAAA,QACT,GAAA,EAAK,iOAAA;AAAA,QACL,WAAA,EAAa,oEAAA;AAAA,QACb,OAAA,EAAS,gFAAA;AAAA,QACT,SAAA,EAAW,8DAAA;AAAA,QACX,KAAA,EAAO,8CAAA;AAAA,QACP,IAAA,EAAM,iDAAA;AAAA,QACN,QAAA,EACE,gIAAA;AAAA,QACF,OAAA,EAAS;AAAA,OACX;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,6HAAA;AAAA,QACN,EAAA,EAAI,qHAAA;AAAA,QACJ,OAAA,EACE,qHAAA;AAAA,QACF,EAAA,EAAI,kHAAA;AAAA,QACJ,IAAA,EAAM;AAAA,OACR;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,WAAW,4CAAA,EAA6C;AAAA,MACzF,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,WAAW,wCAAA,EAAyC;AAAA,MACnF,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,SAAA,EAAW,WAAW,0CAAA,EAA2C;AAAA,MAC1F,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,WAAW,wCAAA,EAAyC;AAAA,MACnF;AAAA,QACE,KAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,QACE,KAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAM,IAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,QACE,KAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAM,SAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,QACE,KAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAM,IAAA;AAAA,QACN,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT;AAEJ,CAAA;AChEA,SAAS,OAAA,CAAQ,EAAE,SAAA,EAAU,EAA2B;AACtD,EAAA,uBACEZ,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,wGAAA;AAAA,QACA;AAAA;AACF;AAAA,GACF;AAEJ;AAIA,SAAS,iBAAiB,IAAA,EAAyC;AACjE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,gBAAA;AAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,kBAAA;AAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,kBAAA;AAAA;AAAA,IACT;AACE,MAAA,OAAO,gBAAA;AAAA;AAEb;AAEA,SAAS,oBAAoB,IAAA,EAAyC;AACpE,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,QAAA;AAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,UAAA;AAAA;AAAA,IACT,KAAK,IAAA;AACH,MAAA,OAAO,UAAA;AAAA;AAAA,IACT;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;AAIA,IAAM,cAAA,GAAyC;AAAA,EAC7C,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEA,SAAS,mBAAmB,MAAA,EAAsE;AAChG,EAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,EAAA,MAAM,KAAA,GAAQ,MAAA,KAAW,IAAA,GAAO,IAAA,GAAO,MAAA;AACvC,EAAA,OAAO,eAAe,KAAK,CAAA;AAC7B;AAYA,SAAS,cAAc,EAAE,OAAA,EAAS,QAAQ,MAAA,EAAQ,IAAA,EAAM,UAAS,EAAuB;AACtF,EAAA,MAAM,aAAA,GAAgB,iBAAiB,IAAI,CAAA;AAE3C,EAAA,uBACEG,IAAAA,CAAAC,UAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,OAAA,oBAAWJ,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAW,mBAAA,CAAoB,IAAI,CAAA,EAAG,CAAA;AAAA,IAC1D,MAAA,IAAU,IAAA,oBACTA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,aAAa,CAAA,EAC7D,QAAA,EAAA,MAAA,EACH,CAAA;AAAA,IAED,QAAA;AAAA,IACA,MAAA,IAAU,IAAA,oBACTA,GAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,UAAA,EAAY,aAAa,CAAA,EAC7D,QAAA,EAAA,MAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAmBA,IAAM,SAAS,CAAC;AAAA,EACd,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAwE;AACtE,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,QAAA;AAC9B,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,IAAY,OAAO,CAAA;AAC9C,EAAA,MAAM,WAAA,GAAc,mBAAmB,MAAM,CAAA;AAE7C,EAAA,uBACEA,GAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,cAAA,CAAe,EAAE,OAAA,EAAS,MAAM,KAAA,EAAO,CAAA,EAAG,WAAA,EAAa,SAAS,CAAA;AAAA,MAC9E,QAAA,EAAU,UAAA;AAAA,MACV,aAAW,OAAA,IAAW,MAAA;AAAA,MACrB,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,OAAA,GACC,2BAEAA,GAAAA,CAAC,iBAAc,OAAA,EAAkB,MAAA,EAAgB,MAAA,EAAgB,IAAA,EAC9D,QAAA,EACH;AAAA;AAAA,GAEJ;AAEJ,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;;;ACtId,IAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI;AAAA,IACF,QAAQ,eAAA,CAAgB,IAAA;AAAA,IACxB,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAAA,IAC3B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,IAC5B,GAAA,EAAK,iBAAiB,CAAC,CAAA;AAAA,IACvB,UAAA,EAAY,iBAAiB,CAAC,CAAA;AAAA,IAC9B,UAAU,iBAAA,CAAkB,EAAA;AAAA,IAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI;AAAA,IACF,QAAQ,eAAA,CAAgB,EAAA;AAAA,IACxB,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAAA,IAC3B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,IAC5B,GAAA,EAAK,iBAAiB,CAAC,CAAA;AAAA,IACvB,YAAY,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAAA;AAAA,IACxD,UAAU,iBAAA,CAAkB,EAAA;AAAA,IAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI;AAAA,IACF,QAAQ,eAAA,CAAgB,EAAA;AAAA,IACxB,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAAA,IAC3B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,IAC5B,GAAA,EAAK,iBAAiB,CAAC,CAAA;AAAA,IACvB,YAAY,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAAA;AAAA,IACxD,UAAU,iBAAA,CAAkB,IAAA;AAAA,IAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,IAC5B,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI;AAAA,IACF,QAAQ,eAAA,CAAgB,EAAA;AAAA,IACxB,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAAA,IAC3B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,IAC5B,KAAK,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAAA;AAAA,IACjD,UAAA,EAAY,iBAAiB,CAAC,CAAA;AAAA,IAC9B,UAAU,iBAAA,CAAkB,EAAA;AAAA,IAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,IAC5B,QAAA,EAAU;AAAA;AAEd,CAAA;AAIO,IAAM,UAAA,GAAa;AAAA,EACxB,QAAQ,eAAA,CAAgB,EAAA;AAAA,EACxB,eAAe,eAAA,CAAgB,EAAA;AAAA,EAC/B,YAAY,eAAA,CAAgB,IAAA;AAAA,EAC5B,aAAA,EAAe,CAAA;AAAA,EACf,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,EAC5B,WAAA,EAAa,iBAAiB,CAAC,CAAA;AAAA,EAC/B,eAAe,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAAA;AAAA,EAC3D,eAAe,iBAAA,CAAkB,EAAA;AAAA,EACjC,gBAAgB,kBAAA,CAAmB,KAAA;AAAA,EACnC,iBAAiB,kBAAA,CAAmB,MAAA;AAAA,EACpC,MAAA,EAAQ;AAAA,IACN,QAAA,EAAU,oBAAoB,QAAA,CAAS,IAAA;AAAA,IACvC,MAAA,EAAQ,oBAAoB,MAAA,CAAO;AAAA;AAEvC,CAAA;;;AClCO,SAAS,cAEd,SAAA,EAGA;AACA,EAAA,OAAO,SAAA;AACT;ACXA,IAAM,wBAAA,GAA2B,GAAA;AAKjC,IAAM,kBAAkB,CAAC;AAAA,EACvB,QAAA;AAAA,EACA,aAAA,GAAgB;AAClB,CAAA,KAGM;AACJ,EAAA,uBAAOA,GAAAA,CAACa,SAAA,CAAY,UAAZ,EAAqB,KAAA,EAAO,eAAgB,QAAA,EAAS,CAAA;AAC/D,CAAA;AAEA,IAAM,UAAU,CAAC;AAAA,EACf,aAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAGM;AAGJ,EAAA,MAAM,QAAQ,aAAA,IAAiB,wBAAA;AAC/B,EAAA,uBACEb,GAAAA,CAACa,SAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EACpB,QAAA,kBAAAb,GAAAA,CAACa,SAAA,CAAY,IAAA,EAAZ,EAAkB,GAAG,KAAA,EAAQ,UAAS,CAAA,EACzC,CAAA;AAEJ,CAAA;AAEA,IAAM,iBAAiB,CAAC;AAAA,EACtB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAEM;AACJ,EAAA,IAAI,OAAA,IAAiBC,KAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,uBACEd,GAAAA;AAAA,MAACa,SAAA,CAAY,OAAA;AAAA,MAAZ;AAAA,QACC,GAAA;AAAA,QACC,GAAG,KAAA;AAAA,QACJ,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AACA,EAAA,uBACEb,IAACa,SAAA,CAAY,OAAA,EAAZ,EAAoB,GAAA,EAAW,GAAG,OAChC,QAAA,EACH,CAAA;AAEJ,CAAA;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAE7B,IAAM,iBAAiB,CAAC;AAAA,EACtB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,KAAA,GAAQ,QAAA;AAAA,EACR,UAAA,GAAa,CAAA;AAAA,EACb,WAAA,GAAc,CAAA;AAAA,EACd,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAMEb,GAAAA,CAACa,SAAA,CAAY,MAAA,EAAZ,EACC,QAAA,kBAAAb,GAAAA;AAAA,EAACa,SAAA,CAAY,UAAA;AAAA,EAAZ;AAAA,IACC,IAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA,EAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,OAAA,EAAQ;AAAA,IAEvC,QAAA,kBAAAb,GAAAA;AAAA,MAACa,SAAA,CAAY,KAAA;AAAA,MAAZ;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,iBAAA,CAAkB,cAAA,EAAgB,SAAS,CAAA;AAAA,QACzD,OAAO,EAAE,MAAA,EAAQ,aAAA,CAAc,OAAA,EAAS,GAAG,KAAA,EAAM;AAAA,QAChD,GAAG;AAAA;AAAA;AACN;AACF,CAAA,EACF,CAAA;AAEF,cAAA,CAAe,WAAA,GAAc,gBAAA;ACjH7B,IAAM,QAAA,GAAW,aAAA,CAQfE,MAAA,CAAS,IAAI,CAAA;AACf,IAAM,QAAA,GAAW,aAAA,CAMfA,MAAA,CAAS,IAAI,CAAA;AACf,IAAM,WAAA,GAAc,aAAA,CAKlBA,MAAA,CAAS,GAAG,CAAA;AACd,IAAM,WAAA,GAAc,aAAA,CAMlBA,MAAA,CAAS,KAAK,CAAA;AAChB,IAAM,aAAA,GAAgB,aAAA,CAAsBA,MAAA,CAAS,SAAS,CAAA;AA8B9D,IAAM,gBAAA,GAAmBH,GAAAA;AAAA,EACvB,+GAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,gIAAA;AAAA,QACF,MAAA,EAAQ,6CAAA;AAAA,QACR,IAAA,EAAM,4EAAA;AAAA,QACN,SAAA,EACE;AAAA,OACJ;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB;AAAA,QACE,OAAA,EAAS,SAAA;AAAA,QACT,KAAA,EAAO,MAAA;AAAA,QACP,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,QACE,OAAA,EAAS,QAAA;AAAA,QACT,KAAA,EAAO,MAAA;AAAA,QACP,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,QACE,OAAA,EAAS,WAAA;AAAA,QACT,KAAA,EAAO,MAAA;AAAA,QACP,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEA,IAAM,mBAAA,GAAsBA,GAAAA;AAAA,EAC1B,k3BAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,qDAAA;AAAA,QACT,MAAA,EACE,0KAAA;AAAA,QACF,IAAA,EAAM,+EAAA;AAAA,QACN,SAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEA,IAAM,qBAAA,GAAwBA,GAAAA;AAAA,EAC5B,iLAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,qEAAA;AAAA,QACT,MAAA,EAAQ,sDAAA;AAAA,QACR,IAAA,EAAM,yFAAA;AAAA,QACN,SAAA,EAAW;AAAA,OACb;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,EAAA;AAAA,QACT,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,SAAA;AAAA,MACP,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAEA,IAAM,mBAAA,GAAsBA,GAAAA;AAAA,EAC1B,wSAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS;AAAA;AACX;AAEJ,CAAA;AAUA,IAAM,cAAoBI,KAAA,CAAA,aAAA,CAAgC;AAAA,EACxD,cAAA,EAAgB,QAAA;AAAA,EAChB,QAAA,EAAU,KAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,IAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAC,CAAA;AAqDD,SAAS,YAAA,CAAa,MAAgB,KAAA,EAAqD;AACzF,EAAA,MAAM,KAAA,GAAQ,UAAU,IAAI,CAAA;AAE5B,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,EAAA,CAAA;AAAA,IAChC,gBAAA,EAAkB,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,EAAA,CAAA;AAAA,IAClC,YAAA,EAAc,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,EAAA,CAAA;AAAA,IAC1B,oBAAA,EAAsB,CAAA,EAAG,KAAA,CAAM,UAAU,CAAA,EAAA,CAAA;AAAA,IACzC,0BAAA,EAA4B,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IAC7C,0BAAA,EAA4B,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IAC7C,kBAAA,EAAoB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACrC,kBAAA,EAAoB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACrC,eAAA,EAAiB,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA,EAAA,CAAA;AAAA,IACrC,uBAAA,EAAyB,CAAA,EAAG,UAAA,CAAW,aAAa,CAAA,EAAA,CAAA;AAAA,IACpD,oBAAA,EAAsB,CAAA,EAAG,UAAA,CAAW,UAAU,CAAA,EAAA,CAAA;AAAA,IAC9C,uBAAA,EAAyB,CAAA,EAAG,UAAA,CAAW,aAAa,CAAA,EAAA,CAAA;AAAA,IACpD,yBAAA,EAA2B,CAAA,EAAG,UAAA,CAAW,cAAc,CAAA,EAAA,CAAA;AAAA,IACvD,0BAAA,EAA4B,CAAA,EAAG,UAAA,CAAW,eAAe,CAAA,EAAA,CAAA;AAAA,IACzD,kBAAA,EAAoB,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAA,EAAA,CAAA;AAAA,IAC1C,qBAAA,EAAuB,CAAA,EAAG,UAAA,CAAW,WAAW,CAAA,EAAA,CAAA;AAAA,IAChD,wBAAA,EAA0B,CAAA,EAAG,UAAA,CAAW,aAAa,CAAA,EAAA,CAAA;AAAA,IACrD,wBAAA,EAA0B,CAAA,EAAG,UAAA,CAAW,aAAa,CAAA,EAAA,CAAA;AAAA,IACrD,iBAAA,EAAmB,CAAA,EAAG,UAAA,CAAW,MAAA,CAAO,QAAQ,CAAA,EAAA,CAAA;AAAA,IAChD,eAAA,EAAiB,WAAW,MAAA,CAAO,MAAA;AAAA,IACnC,GAAG;AAAA,GACL;AACF;AAEA,SAAS,qBAAqB,IAAA,EAAuC;AACnE,EAAA,OAAO,MAAM,IAAA,CAAK,CAAC,QAAQ,CAAC,GAAA,CAAI,QAAQ,CAAA,EAAG,KAAA;AAC7C;AAEA,SAAS,IAAA,CAAK;AAAA,EACZ,YAAA,EAAc,SAAA;AAAA,EACd,cAAA,GAAiB,QAAA;AAAA,EACjB,SAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,QAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAc;AACZ,EAAA,MAAM,YAAY,QAAA,IAAY,KAAA;AAC9B,EAAA,MAAM,gBAAA,GAAmB,YAAA,IAAgB,oBAAA,CAAqB,IAAI,CAAA;AAClE,EAAA,MAAM,OAAA,GAAgBA,KAAA,CAAA,OAAA;AAAA,IACpB,OAAO,EAAE,cAAA,EAAgB,QAAA,EAAU,KAAA,EAAO,MAAM,OAAA,EAAQ,CAAA;AAAA,IACxD,CAAC,cAAA,EAAgB,QAAA,EAAU,KAAA,EAAO,MAAM,OAAO;AAAA,GACjD;AAEA,EAAA,SAAS,kBAAkB,SAAA,EAAmB;AAC5C,IAAA,aAAA,GAAgB,SAAS,CAAA;AACzB,IAAA,WAAA,GAAc,SAAS,CAAA;AAAA,EACzB;AAEA,EAAA,uBACEhB,GAAAA,CAAC,WAAA,CAAY,UAAZ,EAAqB,KAAA,EAAO,SAC3B,QAAA,kBAAAA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,MAAA;AAAA,MACV,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,MAC/B,KAAA,EAAO,SAAA;AAAA,MACP,YAAA,EAAc,SAAA,KAAc,MAAA,GAAY,gBAAA,GAAmB,MAAA;AAAA,MAC3D,aAAA,EAAe,iBAAA;AAAA,MACf,WAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,MACjC,KAAA,EAAO,YAAA,CAAa,IAAA,EAAM,KAAK,CAAA;AAAA,MAC9B,GAAG,KAAA;AAAA,MAEH,iCACCA,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,SAAA;AAAA,UACA,SAAA,EAAW,aAAA;AAAA,UACX,OAAA;AAAA,UACA,KAAA;AAAA,UACA;AAAA;AAAA,OACF,GAEA;AAAA;AAAA,GAEJ,EACF,CAAA;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAOG;AACD,EAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,OAAO,CAAA;AACjD,EAAA,MAAM,uBACJA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAY,SAAA,IAAa,UAAA;AAAA,MACzB,SAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MAEC,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACTA,GAAAA,CAAC,qBAAA,EAAA,EAAsC,QAAA,EAAoB,GAAA,EAAA,EAA/B,GAAA,CAAI,KAAqC,CACtE;AAAA;AAAA,GACH;AAGF,EAAA,uBACEG,IAAAA,CAAAC,UAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,UAAA,mBAAaJ,GAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,GAAA,EAAM,gBAAK,CAAA,GAAqB,IAAA;AAAA,IAC7E,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KACT,GAAA,CAAI,OAAA,KAAY,SAAY,IAAA,mBAC1BA,GAAAA,CAAC,WAAA,EAAA,EAA4B,OAAO,GAAA,CAAI,KAAA,EACrC,QAAA,EAAA,GAAA,CAAI,OAAA,EAAA,EADW,IAAI,KAEtB;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,qBAAA,CAAsB,EAAE,GAAA,EAAK,QAAA,EAAS,EAAyC;AACtF,EAAA,MAAM,0BACJA,GAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,QAAA,EAAU,YAAY,GAAA,CAAI,QAAA;AAAA,MAC1B,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAO,GAAA,CAAI,KAAA;AAAA,MAEV,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA,GACP;AAGF,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,EAAS,OAAO,OAAA;AAEzB,EAAA,uBACEG,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAH,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,OAAA,EAAQ,CAAA,EACzC,CAAA;AAAA,oBACAA,GAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,GAAA,CAAI,OAAA,EAAQ;AAAA,GAAA,EAC/B,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS;AAAA,EAChB,eAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,OAAA,GAAgBgB,UAAI,WAAW,CAAA;AACrC,EAAA,MAAM,eAAA,GAAkB,WAAW,OAAA,CAAQ,OAAA;AAC3C,EAAA,MAAM,aAAA,GAAgB,SAAS,OAAA,CAAQ,KAAA;AACvC,EAAA,MAAM,uBAAA,GAA0B,eAAA,IAAmB,OAAA,CAAQ,cAAA,KAAmB,WAAA;AAC9E,EAAA,MAAM,WAAA,GAAoBA,KAAA,CAAA,OAAA;AAAA,IACxB,OAAO,EAAE,GAAG,SAAS,KAAA,EAAO,aAAA,EAAe,SAAS,eAAA,EAAgB,CAAA;AAAA,IACpE,CAAC,OAAA,EAAS,aAAA,EAAe,eAAe;AAAA,GAC1C;AAEA,EAAA,uBACEhB,GAAAA,CAAC,WAAA,CAAY,UAAZ,EAAqB,KAAA,EAAO,aAC3B,QAAA,kBAAAG,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,eAAA,EAAiB,uBAAA;AAAA,MACjB,SAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,iBAAiB,EAAE,OAAA,EAAS,eAAA,EAAiB,KAAA,EAAO,eAAe,CAAA;AAAA,QACnE;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAY,MAAA;AAAA,YACZ,WAAA,EAAU,gBAAA;AAAA,YACV,WAAW,qBAAA,CAAsB,EAAE,SAAS,eAAA,EAAiB,KAAA,EAAO,eAAe,CAAA;AAAA,YACnF,KAAA,EAAO;AAAA,cACL,IAAA,EAAM,wBAAA;AAAA,cACN,GAAA,EAAK,eAAA,KAAoB,MAAA,GAAS,MAAA,GAAS,uBAAA;AAAA,cAC3C,MAAA,EAAQ,eAAA,KAAoB,MAAA,GAAS,GAAA,GAAM,MAAA;AAAA,cAC3C,KAAA,EAAO,yBAAA;AAAA,cACP,MAAA,EACE,eAAA,KAAoB,MAAA,GAChB,4BAAA,GACA;AAAA;AACR;AAAA,SACF;AAAA,QACC;AAAA;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,QAAA,EAAU,WAAW,QAAA,EAAU,IAAA,EAAM,GAAG,KAAA,EAAM,EAAqB;AAC/F,EAAA,MAAM,OAAA,GAAgBgB,UAAI,WAAW,CAAA;AACrC,EAAA,MAAM,UAAA,GAAa,YAAY,OAAA,CAAQ,QAAA;AAEvC,EAAA,uBACEb,IAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,SAAA,EAAW,GAAG,mBAAA,CAAoB,EAAE,SAAS,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA;AAAA,MACzE,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,wBACDH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAS,CAAA;AAAA,QACpC,wBACCA,GAAAA,CAAC,UAAK,SAAA,EAAU,mMAAA,EACb,iBACH,CAAA,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,UAAA,EAAY,aAAa,OAAA,EAAS,GAAG,OAAM,EAAqB;AAChG,EAAA,uBACEA,GAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,aAAa,WAAA,IAAe,UAAA;AAAA,MAC5B,WAAW,EAAA,CAAG,mBAAA,CAAoB,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MACxD,GAAG;AAAA;AAAA,GACN;AAEJ;;;ACrdO,IAAM,cAAA,GAAiB;AAAA,EAC5B,KAAA,EAAO;AAAA,IACL,EAAA,EAAI;AAAA,MACF,SAAA,EAAW,iBAAiB,EAAE,CAAA;AAAA,MAC9B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,MAC5B,QAAQ,eAAA,CAAgB;AAAA,KAC1B;AAAA,IACA,EAAA,EAAI;AAAA,MACF,SAAA,EAAW,iBAAiB,EAAE,CAAA;AAAA,MAC9B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,UAAU,iBAAA,CAAkB,EAAA;AAAA,MAC5B,QAAQ,eAAA,CAAgB;AAAA,KAC1B;AAAA,IACA,EAAA,EAAI;AAAA,MACF,SAAA,EAAW,iBAAiB,EAAE,CAAA;AAAA,MAC9B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,QAAA,EAAU,iBAAiB,CAAC,CAAA;AAAA,MAC5B,UAAU,iBAAA,CAAkB,IAAA;AAAA,MAC5B,QAAQ,eAAA,CAAgB;AAAA;AAC1B,GACF;AAAA,EACA,WAAW,iBAAA,CAAkB,EAAA;AAAA,EAC7B,cAAA,EAAgB,CAAA;AAAA,EAChB,UAAU,gBAAA,CAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,GAAI,CAExD,CAAA;;;AC1BO,IAAM,0BAAA,GAA6B;AAAA,EAGxC,QAAA,EACE,wGAGJ,CAAA;AAEO,IAAM,4BAAA,GAA+B;AAAA,EAG1C,QAAA,EACE,iHAGJ,CAAA;ACsBA,IAAM,qBAAA,GAAwB,+BAAA;AAC9B,IAAM,mBAAA,GAAsB,sCAAA;AAE5B,SAAS,gBAAA,CACP,MACA,KAAA,EACiB;AACjB,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA;AAEvC,EAAA,OAAO;AAAA,IACL,uBAAA,EAAyB,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA,EAAA,CAAA;AAAA,IAC3C,sBAAA,EAAwB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACzC,sBAAA,EAAwB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACzC,sBAAA,EAAwB,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,EAAA,CAAA;AAAA,IACzC,mBAAA,EAAqB,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,EAAA,CAAA;AAAA,IACpC,6BAAA,EAA+B,CAAA,EAAG,cAAA,CAAe,cAAc,CAAA,EAAA,CAAA;AAAA,IAC/D,YAAA,EAAc,wBAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,GAAG;AAAA,GACL;AACF;AAEA,SAAS,qBAAA,GAA8C;AACrD,EAAA,OAAO;AAAA,IACL,sBAAA,EAAwB,CAAA,EAAG,cAAA,CAAe,QAAQ,CAAA,EAAA,CAAA;AAAA,IAClD,uBAAA,EAAyB,CAAA,EAAG,cAAA,CAAe,SAAS,CAAA,EAAA;AAAA,GACtD;AACF;AAEA,SAAS,sBAAsB,GAAA,EAAgC;AAC7D,EAAA,OAAO,IAAI,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAC1C;AAEA,SAAS,SAAA,CACP,OACA,WAAA,EACA;AACA,EAAA,OACE,UAAU,IAAA,IAAQ,OAAO,UAAU,QAAA,IAAY,WAAA,KAAgB,QAAQ,WAAA,KAAgB,MAAA;AAE3F;AAEA,IAAM,WAAW,CAAC;AAAA,EAChB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,KAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,EAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA,EAAoB,eAAA;AAAA,EACpB,cAAA,EAAgB,WAAA;AAAA,EAChB,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA4E;AAC1E,EAAA,MAAM,SAAeiB,KAAA,CAAA,KAAA,EAAM;AAC3B,EAAA,MAAM,aAAa,EAAA,KAAO,KAAA,IAAS,eAAe,OAAO,KAAA,KAAU,WAAW,MAAA,GAAS,MAAA,CAAA;AACvF,EAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,KAAA,EAAO,WAAW,CAAA;AACpD,EAAA,MAAM,aAAA,GAAgB,WAAA,IAAe,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,YAAA,CAAA,GAAiB,MAAA;AAChF,EAAA,MAAM,UAAU,OAAO,KAAA,KAAU,YAAY,UAAA,GAAa,CAAA,EAAG,UAAU,CAAA,MAAA,CAAA,GAAW,MAAA;AAClF,EAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,eAAA,EAAiB,aAAA,EAAe,OAAO,CAAA;AAE9E,EAAA,MAAM,YAAA,GAAqBA,KAAA,CAAA,WAAA;AAAA,IACzB,CAAC,KAAA,KAAkD;AACjD,MAAA,aAAA,GAAgB,KAAA,CAAM,cAAc,KAAK,CAAA;AACzC,MAAA,QAAA,GAAW,KAAK,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,CAAC,UAAU,aAAa;AAAA,GAC1B;AAEA,EAAA,MAAM,0BACJjB,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,4HAAA;AAAA,QACA,iIAAA;AAAA,QACA,uHAAA;AAAA,QACA,0BAAA,CAA2B,QAAA;AAAA,QAC3B,gGAAA;AAAA,QACA,4BAAA,CAA6B,QAAA;AAAA,QAC7B;AAAA,OACF;AAAA,MACA,GAAA;AAAA,MACA,EAAA,EAAI,UAAA;AAAA,MACJ,gBAAc,eAAA,IAAmB,MAAA;AAAA,MACjC,kBAAA,EAAkB,WAAA;AAAA,MAClB,KAAA,EAAO,gBAAA,CAAiB,IAAA,EAAM,KAAK,CAAA;AAAA,MACnC,QAAA,EAAU,YAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAGF,EAAA,IAAI,CAAC,SAAS,CAAC,WAAA,IAAe,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,cAAA,EAAgB;AAC1E,IAAA,OAAO,OAAA;AAAA,EACT;AAEA,EAAA,uBACEG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,sCAAA,EAAwC,cAAc,CAAA;AAAA,MACpE,OAAO,qBAAA,EAAsB;AAAA,MAE5B,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCH,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,UAAA;AAAA,YACT,SAAA,EAAU,sEAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAGD,OAAA;AAAA,QAEA,WAAA,IAAe,CAAC,KAAA,oBACfA,GAAAA,CAAC,OAAE,EAAA,EAAI,aAAA,EAAe,SAAA,EAAW,qBAAA,EAC9B,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,QAGD,OAAO,KAAA,KAAU,QAAA,oBAChBA,GAAAA,CAAC,GAAA,EAAA,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAW,mBAAA,EACrC,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;ACxJhB,SAAS,gBAAA,CAAiB,EAAE,OAAA,EAAS,SAAA,EAAU,EAA0B;AAC9E,EAAA,uBACEA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,6CAAA,EAA+C,SAAS,GACzE,QAAA,kBAAAA,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAe,CAAC,SAAS,CAAA;AAAA,MACzB,UAAA,EAAY;AAAA;AAAA;AAAA,QAGV,KAAK,KAAA,EAAO;AACV,UAAA,MAAM,EAAE,SAAA,EAAW,aAAA,EAAe,QAAA,EAAU,GAAG,MAAK,GAAI,KAAA;AACxD,UAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,aAAA,IAAiB,EAAE,CAAA;AACpD,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,uBACEA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACE,GAAG,IAAA;AAAA,gBACJ,SAAA,EAAW,EAAA;AAAA,kBACT,sHAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAEC;AAAA;AAAA,aACH;AAAA,UAEJ;AACA,UAAA,uBACEA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACE,GAAG,IAAA;AAAA,cACJ,SAAA,EAAW,EAAA;AAAA,gBACT,kEAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAEC;AAAA;AAAA,WACH;AAAA,QAEJ,CAAA;AAAA;AAAA;AAAA,QAGA,EAAE,EAAE,IAAA,EAAM,QAAA,EAAU,GAAG,MAAK,EAAG;AAC7B,UAAA,MAAM,WAAW,OAAO,IAAA,KAAS,QAAA,IAAY,UAAA,CAAW,KAAK,IAAI,CAAA;AACjE,UAAA,uBACEA,GAAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,SAAA,EAAU,iDAAA;AAAA,cACT,GAAI,WAAW,EAAE,MAAA,EAAQ,UAAU,GAAA,EAAK,qBAAA,KAA0B,EAAC;AAAA,cACnE,GAAG,IAAA;AAAA,cAEH;AAAA;AAAA,WACH;AAAA,QAEJ,CAAA;AAAA,QACA,UAAA,CAAW,EAAE,QAAA,EAAU,GAAG,MAAK,EAAG;AAChC,UAAA,uBACEA,GAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACE,GAAG,IAAA;AAAA,cACJ,SAAA,EAAU,0EAAA;AAAA,cAET;AAAA;AAAA,WACH;AAAA,QAEJ;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AC7CA,SAAS,WAAW,KAAA,EAA+B;AACjD,EAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,cAAA,EAAe,aAAA,EAAY,MAAA,EAAO,SAAA,EAAW,KAAA,CAAM,SAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAH,GAAAA,CAAC,WAAM,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,oBAClBA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uDAAA,EAAwD;AAAA,GAAA,EAClE,CAAA;AAEJ;AAMO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,8BAAA;AAAA,EACd,SAAA,GAAY,GAAA;AAAA,EACZ;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIS,SAA8B,OAAO,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,OAA4B,IAAI,CAAA;AAEpD,EAAA,MAAM,cAAA,GAAiBS,WAAAA;AAAA,IACrB,CAAC,MAAA,EAAgB,KAAA,GAAQ,EAAA,EAAI,eAAe,KAAA,KAAU;AACpD,MAAA,MAAM,KAAK,WAAA,CAAY,OAAA;AACvB,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,MAAM,QAAQ,EAAA,CAAG,cAAA;AACjB,MAAA,MAAM,MAAM,EAAA,CAAG,YAAA;AACf,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AACvC,MAAA,MAAM,iBAAiB,YAAA,IAAgB,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,KAAM,IAAA;AACzE,MAAA,MAAM,MAAA,GAAA,CAAU,cAAA,GAAiB,IAAA,GAAO,EAAA,IAAM,SAAS,QAAA,GAAW,KAAA;AAClE,MAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,GAAI,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7D,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,qBAAA,CAAsB,MAAM;AAC1B,QAAA,EAAA,CAAG,KAAA,EAAM;AACT,QAAA,MAAM,UAAA,GAAa,KAAA,IAAS,cAAA,GAAiB,CAAA,GAAI,KAAK,MAAA,CAAO,MAAA;AAC7D,QAAA,EAAA,CAAG,iBAAA,CAAkB,UAAA,EAAY,UAAA,GAAa,QAAA,CAAS,MAAM,CAAA;AAAA,MAC/D,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,OAAO,QAAQ;AAAA,GAClB;AAEA,EAAA,uBACEf,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,iEAAA,EAAmE,SAAS,CAAA;AAAA,MAE1F,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,GAAA,EAAK,aAAA,EAAe,CAAC,CAAA,KAAM,MAAA,CAAO,CAAwB,CAAA,EAAG,SAAA,EAAU,QAAA,EAClF,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sFAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,wBAAA,EAClB,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,OAAA,EAAQ,WAAU,SAAA,EACnC,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAO,CAAA;AAAA,gBAAE;AAAA,eAAA,EAExD,CAAA;AAAA,8BACAG,IAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,SAAA,EAAU,WAAU,SAAA,EACrC,QAAA,EAAA;AAAA,gCAAAH,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAO,CAAA;AAAA,gBAAE;AAAA,eAAA,EAE1D;AAAA,aAAA,EACF,CAAA;AAAA,4BAEAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,8BAAAH,IAAC,aAAA,EAAA,EAAc,YAAA,EAAW,eAAA,EAAgB,OAAA,EAAS,MAAM,cAAA,CAAe,IAAA,EAAM,IAAI,CAAA,EAChF,0BAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,WAAU,aAAA,EAAc,aAAA,EAAY,QAAO,CAAA,EACvD,CAAA;AAAA,8BACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,cAAW,iBAAA,EAAkB,OAAA,EAAS,MAAM,cAAA,CAAe,GAAA,EAAK,GAAG,CAAA,EAChF,0BAAAA,GAAAA,CAAC,UAAA,EAAA,EAAW,WAAU,aAAA,EAAc,aAAA,EAAY,QAAO,CAAA,EACzD,CAAA;AAAA,8BACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,cAAW,aAAA,EAAc,OAAA,EAAS,MAAM,cAAA,CAAe,GAAA,EAAK,GAAG,CAAA,EAC5E,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,WAAU,aAAA,EAAc,aAAA,EAAY,QAAO,CAAA,EACnD,CAAA;AAAA,8BACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,cAAW,SAAA,EAAU,OAAA,EAAS,MAAM,cAAA,CAAe,OAAA,EAAS,IAAI,IAAI,CAAA,EACjF,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,WAAU,aAAA,EAAc,aAAA,EAAY,QAAO,CAAA,EACnD,CAAA;AAAA,8BACAA,GAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACC,YAAA,EAAW,aAAA;AAAA,kBACX,OAAA,EAAS,MAAM,cAAA,CAAe,MAAA,EAAQ,IAAI,IAAI,CAAA;AAAA,kBAE9C,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA,eACtC;AAAA,8BACAA,GAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACC,YAAA,EAAW,aAAA;AAAA,kBACX,OAAA,EAAS,MAAM,cAAA,CAAe,MAAA,EAAQ,IAAI,IAAI,CAAA;AAAA,kBAE9C,0BAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,aAAA,EAAc,eAAY,MAAA,EAAO;AAAA;AAAA,eAC5D;AAAA,8BACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,cAAW,MAAA,EAAO,OAAA,EAAS,MAAM,cAAA,CAAe,GAAA,EAAK,QAAQ,CAAA,EAC1E,0BAAAA,GAAAA,CAACmB,IAAA,EAAA,EAAS,WAAU,aAAA,EAAc,aAAA,EAAY,QAAO,CAAA,EACvD,CAAA;AAAA,8BACAnB,GAAAA,CAAC,aAAA,EAAA,EAAc,cAAW,OAAA,EAAQ,OAAA,EAAS,MAAM,cAAA,CAAe,cAAA,EAAgB,GAAG,CAAA,EACjF,0BAAAA,GAAAA,CAACoB,KAAA,EAAA,EAAU,WAAU,aAAA,EAAc,aAAA,EAAY,QAAO,CAAA,EACxD,CAAA;AAAA,8BACApB,GAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACC,YAAA,EAAW,mBAAA;AAAA,kBACX,OAAA,EAAS,MAAM,cAAA,CAAe,mBAAA,EAAqB,WAAW,IAAI,CAAA;AAAA,kBAElE,0BAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,eAAY,MAAA,EAAO;AAAA;AAAA;AACvD,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,GAAAA,CAAC,WAAA,EAAA,EAAY,OAAM,OAAA,EAAQ,SAAA,EAAU,QACnC,QAAA,kBAAAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,WAAA;AAAA,cACL,KAAA;AAAA,cACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACxC,WAAA;AAAA,cACA,SAAA,EAAU,sFAAA;AAAA,cACV,KAAA,EAAO,EAAE,SAAA;AAAU;AAAA,WACrB,EACF,CAAA;AAAA,0BACAA,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,SAAA,EAAU,SAAA,EAAU,MAAA,EACrC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,OAAO,EAAE,SAAA,EAAU,EACnD,QAAA,EAAA,KAAA,mBACCA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,KAAA,EAAO,CAAA,mBAElCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4EAAA,EAA6E,QAAA,EAAA,qBAAA,EAE5F,GAEJ,CAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8GAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,UAAK,QAAA,EAAA,oBAAA,EAAkB,CAAA;AAAA,0BACxBG,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,MAAA;AAAA,YAAO;AAAA,WAAA,EAAW;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA,GACF;AAEJ;AAMA,SAAS,aAAA,CAAc;AAAA,EACrB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA,EAAc;AAChB,CAAA,EAIG;AACD,EAAA,uBACEH,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAU,aAAA;AAAA,MACV,OAAA;AAAA,MACA,YAAA,EAAY,SAAA;AAAA,MAEX;AAAA;AAAA,GACH;AAEJ;AC1MA,IAAMqB,QAAO,CAAC;AAAA,EACZ,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACErB,GAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,wFAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA;AAEFqB,KAAAA,CAAK,WAAA,GAAc,MAAA;AAEnB,IAAMC,cAAa,CAAC;AAAA,EAClB,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEtB,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,GAAG,+BAAA,EAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEvFsB,WAAAA,CAAW,WAAA,GAAc,YAAA;AAyCzB,IAAM,cAAc,CAAC;AAAA,EACnB,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBACEtB,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,GAAG,UAAA,EAAY,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAElE,WAAA,CAAY,WAAA,GAAc,aAAA;ACpE1B,IAAM,YAAY,CAAC;AAAA,EACjB,SAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,YAAY,WAAA,GAAc,IAAA;AAAA,EAC1B,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAGEA,GAAAA;AAAA,EAACuB,WAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,oBAAA;AAAA,MACA,WAAA,KAAgB,eAAe,gBAAA,GAAmB,gBAAA;AAAA,MAClD;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA;AAEF,SAAA,CAAU,WAAA,GAAc,WAAA;ACnBxB,IAAM,WAAA,GAAc;AAAA,EAClB,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,YAAA,EAAa;AAAA,EAC9C,EAAA,EAAI,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,SAAA,EAAU;AAAA,EAC3C,EAAA,EAAI,EAAE,IAAA,EAAM,WAAA,EAAa,UAAU,SAAA,EAAU;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,WAAA,EAAa,UAAU,SAAA,EAAU;AAAA,EAC7C,EAAA,EAAI,EAAE,IAAA,EAAM,WAAA,EAAa,UAAU,UAAA;AACrC,CAAA;AAEA,IAAM,kBAAA,GAAqB,+CAAA;AAO3B,IAAM,aAAA,GAAsBC,oBAAyC,IAAI,CAAA;AAEzE,SAAS,aAAa,IAAA,EAA4C;AAChE,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA;AACzB;AAOA,SAAS,mBAAmB,IAAA,EAA0B;AACpD,EAAA,OAAO,aAAa,IAAI,CAAA,GAAI,WAAA,CAAY,IAAI,EAAE,IAAA,GAAO,kBAAA;AACvD;AAEA,SAAS,uBAAuB,IAAA,EAA0B;AACxD,EAAA,OAAO,aAAa,IAAI,CAAA,GAAI,WAAA,CAAY,IAAI,EAAE,QAAA,GAAW,gCAAA;AAC3D;AAEA,SAAS,cAAA,CACP,MACA,KAAA,EACiC;AACjC,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,KAAA;AACrC,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,GAAG,IAAI,CAAA,EAAA,CAAA;AAAA,IACxB,oBAAA,EAAsB,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,KAAK,KAAA,CAAM,IAAA,GAAO,KAAK,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,IAC/D,GAAG;AAAA,GACL;AACF;AAEO,SAAS,kBAAkB,KAAA,EAAuB;AACvD,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,SAAS,OAAO,EAAA;AAErB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA,CAAE,OAAO,OAAO,CAAA;AACtD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA,EAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAY;AAExE,EAAA,OAAO,MACJ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,IAAI,CAAC,IAAA,KAAS,IAAA,CAAK,CAAC,KAAK,EAAE,CAAA,CAC3B,IAAA,CAAK,EAAE,EACP,WAAA,EAAY;AACjB;AAMA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,GAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIW;AACT,EAAA,OAAO,KAAA,IAAS,OAAO,QAAA,IAAY,QAAA;AACrC;AA2BA,IAAM,SAAS,CAAC;AAAA,EACd,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,GAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAsE;AACpE,EAAA,MAAM,QAAQ,oBAAA,CAAqB,EAAE,GAAA,EAAK,KAAA,EAAO,UAAU,CAAA;AAC3D,EAAA,MAAM,WAAW,MAAA,IAAU,iBAAA,CAAkB,KAAA,IAAS,QAAA,IAAY,OAAO,EAAE,CAAA;AAC3E,EAAA,MAAM,YAAA,GAAe,SAAS,GAAA,IAAO,QAAA;AACrC,EAAA,MAAM,YAAA,GACJ,iBAAiB,MAAA,GAAY,EAAE,MAAK,GAAI,EAAE,IAAA,EAAM,KAAA,EAAO,YAAA,EAAa;AACtE,EAAA,MAAM,8BAAA,GACJ,aAAa,MAAA,KAAc,GAAA,KAAQ,UAAa,WAAA,KAAgB,IAAA,IAAQ,SAAS,MAAA,GAAS,CAAA,CAAA;AAE5F,EAAA,uBACExB,GAAAA,CAAC,aAAA,CAAc,UAAd,EAAuB,KAAA,EAAO,cAC7B,QAAA,kBAAAA,GAAAA;AAAA,IAACyB,QAAA,CAAW,IAAA;AAAA,IAAX;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,8DAAA;AAAA,QACA,mBAAmB,IAAI,CAAA;AAAA,QACvB;AAAA,OACF;AAAA,MACA,KAAA,EAAO,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAAA,MAChC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,8BAAA,mBACCtB,IAAAA,CAAAC,UAAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,GAAA,oBAAOJ,GAAAA,CAAC,WAAA,EAAA,EAAY,GAAA,EAAU,KAAK,KAAA,EAAO,CAAA;AAAA,wBAC3CA,GAAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAY,OAAO,eAAA,EAChC,QAAA,EAAA,WAAA,mBAAcA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,gBAAA,EAAc,IAAU,QAAA,EACnE;AAAA,OAAA,EACF,CAAA,GAEA;AAAA;AAAA,GAEJ,EACF,CAAA;AAEJ,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,QAAA;AAIrB,IAAM,cAAc,CAAC;AAAA,EACnB,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAGEA,GAAAA;AAAA,EAACyB,QAAA,CAAW,KAAA;AAAA,EAAX;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA;AAAA,IAClE,GAAG;AAAA;AACN,CAAA;AAEF,WAAA,CAAY,WAAA,GAAc,aAAA;AAS1B,IAAM,iBAAiB,CAAC;AAAA,EACtB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA8E;AAC5E,EAAA,MAAM,OAAA,GAAgBD,UAAI,aAAa,CAAA;AACvC,EAAA,MAAM,YAAA,GAAe,IAAA,IAAQ,OAAA,EAAS,IAAA,IAAQ,IAAA;AAC9C,EAAA,MAAM,aAAA,GACJ,SAAA,KACC,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,CAAS,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,GACtD,CAAA,sBAAA,EAAyB,QAAQ,KACjC,OAAA,EAAS,KAAA,CAAA;AAEf,EAAA,uBACExB,GAAAA;AAAA,IAACyB,QAAA,CAAW,QAAA;AAAA,IAAX;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,aAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,wGAAA;AAAA,QACA,uBAAuB,YAAY,CAAA;AAAA,QACnC;AAAA,OACF;AAAA,MACA,KAAA,EAAO,cAAA,CAAe,YAAA,EAAc,KAAK,CAAA;AAAA,MACxC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAA;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACjM7B,SAAS,SAAS,IAAA,EAAsB;AACtC,EAAA,OAAO,KACJ,KAAA,CAAM,KAAK,EACX,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,CAC1C,IAAA,CAAK,EAAE,CAAA,CACP,KAAA,CAAM,GAAG,CAAC,CAAA;AACf;AAEO,SAAS,SAAS,EAAE,MAAA,EAAQ,WAAW,IAAA,GAAO,OAAA,EAAS,WAAU,EAAkB;AACxF,EAAA,uBACEtB,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,mEAAA,EAAqE,SAAS,CAAA;AAAA,MAE5F,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,kBAAA,EACf,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,MAAA,oBAAUH,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAK,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AAAA,0BACrEA,GAAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,EAAE;AAAA,SAAA,EACzC,CAAA;AAAA,wBACAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA;AAAA,YAAA,IAAA;AAAA,YAAK,GAAA;AAAA,YAAE;AAAA,WAAA,EACV,CAAA;AAAA,0BACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAuC,iBAAO,IAAA,EAAK,CAAA;AAAA,4BACnEA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wDACb,QAAA,EAAA,MAAA,CAAO,UAAA,CAAW,gBAAe,EACpC,CAAA;AAAA,YACC,MAAA,CAAO,MAAA,CAAO,IAAA,GAAO,CAAA,oBACpBA,GAAAA,CAAC0B,MAAAA,EAAA,EAAM,KAAA,EAAM,iBAAgB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAM,MAAA,EAAO,CAAA;AAAA,YAEtE,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,oBACtB1B,GAAAA,CAAC0B,MAAAA,EAAA,EAAM,KAAA,EAAM,eAAc,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,OAAM,QAAA,EAAS,CAAA;AAAA,YAExE,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,oBACtB1B,GAAAA,CAAC0B,MAAAA,EAAA,EAAM,KAAA,EAAM,gBAAe,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,OAAM,QAAA,EAAS;AAAA,WAAA,EAE5E;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAEA,SAASA,MAAAA,CAAM,EAAE,KAAA,EAAO,KAAA,EAAO,OAAM,EAAoD;AACvF,EAAA,uBACEvB,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACd,QAAA,EAAA;AAAA,oBAAAH,GAAAA,CAAC,UAAK,aAAA,EAAY,MAAA,EAAO,WAAW,EAAA,CAAG,sBAAA,EAAwB,KAAK,CAAA,EAAG,CAAA;AAAA,oBACvEG,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACd,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA;AAAA,QAAA,KAAA;AAAA,QAAM;AAAA,OAAA,EAAS,CAAA;AAAA,MACzC;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;ACpDA,SAAS,UAAU,QAAA,EAA4B;AAC7C,EAAA,IAAI,QAAA,KAAa,MAAM,OAAO,CAAA;AAC9B,EAAA,IAAI,QAAA,KAAa,QAAQ,OAAO,EAAA;AAChC,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,KAAA,GAAQ;AACV,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAA,GAAW,IAAA,KAAS,OAAA,GAAU,SAAA,GAAY,SAAA;AAChD,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,OAAA,GAAU,SAAA,GAAY,WAAA;AACjD,EAAA,MAAM,KAAA,GAAQ,KAAA,GAAQ,SAAA,CAAU,QAAQ,CAAA;AAExC,EAAA,uBACEA,IAAAA,CAAC,UAAA,EAAA,EAAS,SAAA,EAAU,kCAAA,EAClB,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MAAS;AAAA,KAAA,EAAM,CAAA;AAAA,oBAC3CH,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAM,IAAA,KAAS,OAAA,GAAU,SAAA,GAAY,IAAA;AAAA,QACrC,YAAA,EAAY,UAAU,KAAK,CAAA,CAAA;AAAA,QAC3B,gBAAc,QAAA,KAAa,IAAA;AAAA,QAC3B,OAAA,EAAS,MAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QAC1B,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,QAAA,KAAa,QAAQ,gDAAgD,CAAA;AAAA,QAE1F,0BAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAW,QAAA,EAAU,eAAY,MAAA,EAAO;AAAA;AAAA,KACrD;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,wBAAA;AAAA,UACA,SAAA;AAAA,UACA,aAAa,IAAA,IAAQ,cAAA;AAAA,UACrB,aAAa,MAAA,IAAU;AAAA,SACzB;AAAA,QACA,WAAA,EAAU,QAAA;AAAA,QACV,aAAA,EAAY,MAAA;AAAA,QAEX,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAM,IAAA,KAAS,OAAA,GAAU,SAAA,GAAY,IAAA;AAAA,QACrC,YAAA,EAAY,YAAY,KAAK,CAAA,CAAA;AAAA,QAC7B,gBAAc,QAAA,KAAa,MAAA;AAAA,QAC3B,OAAA,EAAS,MAAM,MAAA,CAAO,MAAM,CAAA;AAAA,QAC5B,SAAA,EAAW,EAAA;AAAA,UACT,KAAA;AAAA,UACA,aAAa,MAAA,IAAU;AAAA,SACzB;AAAA,QAEA,0BAAAA,GAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,QAAA,EAAU,eAAY,MAAA,EAAO;AAAA;AAAA;AACvD,GAAA,EACF,CAAA;AAEJ;ACZO,SAAS,MAAA,CAAO;AAAA,EACrB,eAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA,GAAgB;AAAA,IACd,IAAA,EAAM,KAAA;AAAA,IACN,UAAA,EAAY,CAAA;AAAA,IACZ,QAAQ,EAAE,IAAA,EAAM,GAAG,MAAA,EAAQ,CAAA,EAAG,QAAQ,CAAA;AAAE,GAC1C;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIS,SAAS,eAAe,CAAA;AACxD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,cAAc,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AAErC,EAAA,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAAwB;AAClD,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,KAAa,IAAA,GAAO,IAAA,GAAO,IAAA;AACrD,IAAA,WAAA,CAAY,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,UAAS,CAAE,CAAA;AACvC,IAAA,cAAA,GAAiB,QAAQ,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,EAAA,EAAsB,IAAA,KAAwB;AACtE,IAAA,UAAA;AAAA,MAAW,CAAC,IAAA,KACV,IAAA,CAAK,IAAI,CAAC,CAAA,KAAO,EAAE,EAAA,KAAO,EAAA,GAAK,EAAE,GAAG,CAAA,EAAG,UAAU,CAAA,CAAE,QAAA,KAAa,OAAO,IAAA,GAAO,IAAA,KAAS,CAAE;AAAA,KAC3F;AACA,IAAA,MAAM,QAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,KAAA,IAAS,KAAA,CAAM,QAAA,KAAa,OAAO,IAAA,GAAO,IAAA;AAC3D,IAAA,YAAA,GAAe,IAAI,QAAQ,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KAAyB;AAC7C,IAAA,UAAA;AAAA,MAAW,CAAC,IAAA,KACV,IAAA,CAAK,GAAA,CAAI,CAAC,OAAO,EAAE,GAAG,CAAA,EAAG,UAAA,EAAY,EAAE,EAAA,KAAO,EAAA,GAAK,CAAC,CAAA,CAAE,UAAA,GAAa,OAAM,CAAE;AAAA,KAC7E;AACA,IAAA,cAAA,GAAiB,EAAE,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,WAAA,CAAY,CAAC,CAAA,KAAM;AACjB,MAAA,MAAM,IAAA,GAAO,CAAC,CAAA,CAAE,UAAA;AAChB,MAAA,UAAA,GAAa,IAAI,CAAA;AACjB,MAAA,OAAO,EAAE,GAAG,CAAA,EAAG,UAAA,EAAY,IAAA,EAAK;AAAA,IAClC,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,MAAM,SAAA,GAAwB;AAAA,MAC5B,EAAA,EAAI,KAAK,GAAA,EAAI;AAAA,MACb,OAAA,EAAS,OAAA;AAAA,MACT,MAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAO,CAAA;AAAA,MACP,SAAA,EAAW,UAAA;AAAA,MACX,UAAA,EAAY,KAAA;AAAA,MACZ,QAAA,EAAU;AAAA,KACZ;AACA,IAAA,UAAA,CAAW,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,SAAS,CAAC,CAAA;AACzC,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,cAAA,GAAiB,OAAO,CAAA;AAAA,EAC1B,CAAA;AAGA,EAAA,MAAM,aAAA,GAAgBkB,QAAQ,MAAM;AAClC,IAAA,OAAO,CAAC,GAAG,OAAO,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACjC,MAAA,IAAI,EAAE,UAAA,KAAe,CAAA,CAAE,YAAY,OAAO,CAAA,CAAE,aAAa,EAAA,GAAK,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,QAAA,KAAa,OAAO,CAAA,GAAI,CAAA,CAAE,QAAA,KAAa,MAAA,GAAS,EAAA,GAAK,CAAA,CAAA;AACjF,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,QAAA,KAAa,OAAO,CAAA,GAAI,CAAA,CAAE,QAAA,KAAa,MAAA,GAAS,EAAA,GAAK,CAAA,CAAA;AACjF,MAAA,OAAO,MAAA,GAAS,MAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,uBACExB,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA,EAEjE,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,MAAA,EAChB,QAAA,EAAA;AAAA,sBAAAH,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uDAAA,EAAyD,mBAAS,KAAA,EAAM,CAAA;AAAA,sBACtFG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACd,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,QAAA,EAAA,EAAS,aAAA,EAAY,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,UAAE,QAAA;AAAA,UAC5C,QAAA,CAAS;AAAA,SAAA,EAClB,CAAA;AAAA,wBACAG,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACd,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,GAAA,EAAA,EAAI,aAAA,EAAY,MAAA,EAAO,WAAU,SAAA,EAAU,CAAA;AAAA,UAAE,SAAA;AAAA,UACtC,QAAA,CAAS,MAAM,cAAA,EAAe;AAAA,UAAE;AAAA,SAAA,EAC1C;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,GAAA,qBAClBA,GAAAA,CAAC,KAAA,EAAA,EAAgB,SAAQ,WAAA,EAAY,SAAA,EAAU,WAC5C,QAAA,EAAA,GAAA,EAAA,EADS,GAEZ,CACD,CAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,oBAGAA,GAAAA,CAACqB,KAAAA,EAAA,EAAK,SAAA,EAAU,QACd,QAAA,kBAAAlB,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,gBAAA,EACrB,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,wBAAAH,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,OAAO,QAAA,CAAS,KAAA;AAAA,YAChB,UAAU,QAAA,CAAS,QAAA;AAAA,YACnB,MAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAM;AAAA;AAAA,SACR;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,YAAA,EAAY,QAAA,CAAS,UAAA,GAAa,iBAAA,GAAoB,mBAAA;AAAA,YACtD,gBAAc,QAAA,CAAS,UAAA;AAAA,YACvB,OAAA,EAAS,oBAAA;AAAA,YACT,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,QAAA,CAAS,cAAc,4BAA4B,CAAA;AAAA,YAExE,0BAAAA,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU,eAAY,MAAA,EAAO;AAAA;AAAA;AACnD,OAAA,EACF,CAAA;AAAA,sBACAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,CAAA;AAAA,wBAC7CA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,MAAA;AAAA,YACV,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,WAAW,QAAA,CAAS,SAAA;AAAA,YACpB,IAAA,EAAK,OAAA;AAAA,YACL,UAAA,EAAW,gBAAA;AAAA,YACX,SAAA,EAAU,eAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CACb,QAAA,kBAAAG,IAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EACX,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,MAAA;AAAA,MAAO,GAAA;AAAA,MAAE,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,QAAA,GAAW;AAAA,KAAA,EACtD,CAAA,EACF,CAAA;AAAA,oBAEAH,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACZ,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBAC1BG,IAAAA,CAACC,UAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAACqB,KAAAA,EAAA,EAAK,SAAA,EAAW,GAAG,MAAA,EAAQ,MAAA,CAAO,UAAA,IAAc,wBAAwB,CAAA,EACvE,QAAA,kBAAAlB,IAAAA,CAAC,WAAA,EAAA,EAAY,WAAU,gBAAA,EACrB,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,UAAU,MAAA,CAAO,QAAA;AAAA,cACjB,QAAQ,CAAC,CAAA,KAAM,gBAAA,CAAiB,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,cAC5C,IAAA,EAAK,OAAA;AAAA,cACL,KAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,YAAA,EAAY,MAAA,CAAO,UAAA,GAAa,sBAAA,GAAyB,oBAAA;AAAA,cACzD,gBAAc,MAAA,CAAO,UAAA;AAAA,cACrB,OAAA,EAAS,MAAM,YAAA,CAAa,MAAA,CAAO,EAAE,CAAA;AAAA,cACrC,SAAA,EAAW,EAAA,CAAG,KAAA,EAAO,MAAA,CAAO,cAAc,4BAA4B,CAAA;AAAA,cAEtE,0BAAAA,GAAAA,CAACU,KAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,eAAY,MAAA,EAAO;AAAA;AAAA,WAChD;AAAA,UACC,OAAO,UAAA,oBACNP,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,QAAA,EAAA,EAAS,aAAA,EAAY,MAAA,EAAO,WAAU,mCAAA,EAAoC,CAAA;AAAA,4BAC3EA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAmC,QAAA,EAAA,UAAA,EAAQ;AAAA,WAAA,EAC7D;AAAA,SAAA,EAEJ,CAAA;AAAA,wBACAG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,CAAA;AAAA,0BAC3CA,GAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,MAAA;AAAA,cACV,QAAQ,MAAA,CAAO,MAAA;AAAA,cACf,WAAW,MAAA,CAAO,SAAA;AAAA,cAClB,IAAA,EAAK,UAAA;AAAA,cACL,UAAA,EAAW,cAAA;AAAA,cACX,SAAA,EAAU,aAAA;AAAA,cACV,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MACC,KAAA,GAAQ,cAAc,MAAA,GAAS,CAAA,oBAAKA,GAAAA,CAAC,SAAA,EAAA,EAAU,WAAU,MAAA,EAAO;AAAA,KAAA,EAAA,EA3CpD,MAAA,CAAO,EA4CtB,CACD,CAAA,EACH,CAAA;AAAA,oBAGAG,IAAAA,CAACkB,KAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAArB,GAAAA,CAACsB,aAAA,EACC,QAAA,kBAAAtB,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA,aAAA,EAAW,CAAA,EACnE,CAAA;AAAA,sBACAG,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,WAAA,EACrB,QAAA,EAAA;AAAA,wBAAAH,IAAC,cAAA,EAAA,EAAe,KAAA,EAAO,OAAO,QAAA,EAAU,QAAA,EAAU,aAAY,8BAAA,EAA0B,CAAA;AAAA,wBACxFG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,oCAAA,EAAkC,CAAA;AAAA,0BAC/EG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAQ,SAAA;AAAA,gBACR,OAAA,EAAS,MAAM,QAAA,CAAS,EAAE,CAAA;AAAA,gBAC1B,UAAU,CAAC,KAAA;AAAA,gBACZ,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,4BACAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,CAAC,KAAA,CAAM,IAAA,EAAK,EAAG,QAAA,EAAA,kBAAA,EAEtE;AAAA,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,WAAA,CAAY;AAAA,EACnB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAQG;AACD,EAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,mDAAA,EAAqD,SAAS,CAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,UAAO,IAAA,EAAK,QAAA,EAAS,SAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,SAAA,EACxD,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC4B,KAAA,EAAA,EAAU,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAO,CAAA;AAAA,QACtD;AAAA,OAAA,EACH,CAAA;AAAA,sBACAzB,IAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,SAAA,EACxD,QAAA,EAAA;AAAA,wBAAAH,IAAC6B,MAAAA,EAAA,EAAO,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAO,CAAA;AAAA,QACnD;AAAA,OAAA,EACH,CAAA;AAAA,sBACA1B,IAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,SAAA,EACxD,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAe,eAAY,MAAA,EAAO,CAAA;AAAA,QACjD;AAAA,OAAA,EACH;AAAA,KAAA,EACF,CAAA;AAAA,oBACAA,GAAAA,CAAC,QAAA,EAAA,EAAS,MAAA,EAAgB,WAAsB,IAAA,EAAY;AAAA,GAAA,EAC9D,CAAA;AAEJ;ACzUA,IAAM,kBAAA,GAA2B8B,KAAA,CAAA,aAAA,CAI9B,EAAE,CAAA;AAEL,IAAM,cAAc,CAAC;AAAA,EACnB,SAAA;AAAA,EACA,IAAA,EAAM,QAAA;AAAA,EACN,WAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAKwD;AACtD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,KAAA,CAAA,QAAA,CAAS,eAAe,KAAK,CAAA;AACnF,EAAA,MAAM,eAAe,QAAA,KAAa,MAAA;AAClC,EAAA,MAAM,IAAA,GAAO,eAAe,QAAA,GAAW,gBAAA;AAEvC,EAAA,MAAM,gBAAA,GAAyBA,KAAA,CAAA,WAAA;AAAA,IAC7B,CAAC,QAAA,KAAsB;AACrB,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,MAC9B;AACA,MAAA,YAAA,GAAe,QAAQ,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,cAAc,YAAY;AAAA,GAC7B;AAEA,EAAA,uBACE9B,GAAAA,CAAC,kBAAA,CAAmB,QAAA,EAAnB,EAA4B,KAAA,EAAO,EAAE,IAAA,EAAM,YAAA,EAAc,gBAAA,EAAkB,QAAA,EAAS,EACnF,QAAA,kBAAAA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,MAC5B,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,MAC9B,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH,EACF,CAAA;AAEJ,CAAA;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAE1B,IAAM,qBAAqB,CAAC;AAAA,EAC1B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAEM;AACJ,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,QAAA,EAAS,GAAU8B,UAAI,kBAAkB,CAAA;AAErE,EAAA,MAAM,WAAA,GAAoBA,KAAA,CAAA,WAAA;AAAA,IACxB,CAAC,CAAA,KAA2C;AAC1C,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,YAAA,GAAe,CAAC,IAAI,CAAA;AACpB,MAAA,KAAA,CAAM,UAAU,CAAC,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,IAAA,EAAM,YAAA,EAAc,MAAM,OAAO;AAAA,GAC9C;AAEA,EAAA,IAAI,OAAA,IAAiBA,KAAA,CAAA,cAAA,CAAe,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAaA,mBAAa,QAAA,EAAyD;AAAA,MACjF,GAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAc,OAAO,MAAA,GAAS,QAAA;AAAA,MAC9B,eAAA,EAAiB,WAAW,EAAA,GAAK,MAAA;AAAA,MACjC,eAAA,EAAiB,IAAA;AAAA,MACjB,eAAA,EAAiB,MAAM,eAAe,CAAA;AAAA,MACtC,QAAA,EAAU,YAAY,KAAA,CAAM,QAAA;AAAA,MAC5B,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAEA,EAAA,uBACE9B,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAY,OAAO,MAAA,GAAS,QAAA;AAAA,MAC5B,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,MAC/B,eAAA,EAAe,IAAA;AAAA,MACf,QAAA,EAAU,YAAY,KAAA,CAAM,QAAA;AAAA,MAC5B,SAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAA;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AAEjC,IAAM,qBAAqB,CAAC;AAAA,EAC1B,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA8F;AAC5F,EAAA,MAAM,EAAE,IAAA,EAAK,GAAU8B,KAAA,CAAA,GAAA,CAAI,kBAAkB,CAAA;AAC7C,EAAA,MAAM,qBAAqB,gBAAA,EAAiB;AAE5C,EAAA,uBACE9B,GAAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,kCACCA,GAAAA;AAAA,IAAC,MAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MAEC,OAAA,EAAQ,WAAA;AAAA,MACR,OAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAK,WAAA;AAAA,MACL,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,MAAA,EAAO;AAAA,QACnC,SAAA,EAAW,EAAE,OAAA,EAAS,CAAA,EAAG,QAAQ,CAAA;AAAE,OACrC;AAAA,MACA,UAAA,EACE,kBAAA,GAAqB,EAAE,QAAA,EAAU,GAAE,GAAI,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,MAEzF,SAAA,EAAU,iBAAA;AAAA,MAEV,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,YAAA,EAAW,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,SAAS,CAAA,EAAI,GAAG,OAChE,QAAA,EACH;AAAA,KAAA;AAAA,IAfI;AAAA,GAgBN,EAEJ,CAAA;AAEJ,CAAA;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACrDjC,IAAM,iBAAA,GACJ,+JAAA;AACF,IAAM,oBAAA,GACJ,yFAAA;AACF,IAAM,mBAAA,GACJ,mKAAA;AACF,IAAM,qBAAA,GAAwB,gCAAA;AAC9B,IAAM,sBAAA,GAAyB,oCAAA;AAC/B,IAAM,YAAA,GAAe,iBAAA;AAErB,SAAS,iBAAA,CAAkB;AAAA,EACzB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA,EAAgB,WAAA;AAAA,EAChB,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAkD;AAChD,EAAA,uBACEA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA,EAAc,WAAA;AAAA,MACd,YAAA,EAAY,SAAA;AAAA,MACZ,OAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AASA,SAAS,WAAA,CAAY;AAAA,EACnB,IAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAyC;AACvC,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAElB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEG,IAAAA,CAAAC,UAAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,IAAA,mBAAOJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,cAAc,CAAA,GAAK,IAAA;AAAA,sBAC5CA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,eAAK,KAAA,EAAM;AAAA,KAAA,EACxC,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEG,IAAAA,CAAAC,UAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,mBAAOJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,cAAc,CAAA,GAAK,IAAA;AAAA,oBAC5CA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,eAAK,KAAA,EAAM,CAAA;AAAA,IAC7C,IAAA,CAAK,KAAA,mBACJA,GAAAA,CAAC,SAAM,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,IAAA,EAAK,IAAA,EACnC,QAAA,EAAA,IAAA,CAAK,KAAA,CAAM,OACd,CAAA,GACE,IAAA;AAAA,IACH,8BACCA,GAAAA;AAAA,MAAC+B,YAAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,8DAAA;AAAA,UACA,WAAA,IAAe;AAAA,SACjB;AAAA,QACA,aAAA,EAAY;AAAA;AAAA,KACd,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AAWA,SAAS,eAAA,CAAgB;AAAA,EACvB,IAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA,GAAS;AACX,CAAA,EAA6C;AAC3C,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,KAAa,IAAA;AACnC,EAAA,MAAM,UAAA,GAAa,KAAK,QAAA,KAAa,IAAA;AAErC,EAAA,MAAM,OAAA,GAAU,EAAA;AAAA,IACd,iBAAA;AAAA,IACA,WAAW,mBAAA,GAAsB,oBAAA;AAAA,IACjC,UAAA,IAAc,qBAAA;AAAA,IACd,SAAA,IAAa,sBAAA;AAAA,IACb,CAAC,aAAa,MAAA,IAAU,MAAA;AAAA,IACxB;AAAA,GACF;AAEA,EAAA,MAAM,WAAA,GAAc,WAAW,MAAA,GAAS,MAAA;AACxC,EAAA,MAAM,YAAA,GAAe,aAAa,IAAA,GAAO,MAAA;AAEzC,EAAA,MAAM,KAAA,mBAAQ/B,GAAAA,CAAC,WAAA,EAAA,EAAY,MAAY,SAAA,EAAsB,CAAA;AAE7D,EAAA,IAAI,OAAA;AAEJ,EAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,CAAC,UAAA,EAAY;AAC5B,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAA,mBACEA,GAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,MAAA,EAAO,QAAA;AAAA,UACP,GAAA,EAAI,qBAAA;AAAA,UACJ,SAAA,EAAW,OAAA;AAAA,UACX,cAAA,EAAc,WAAA;AAAA,UACd,YAAA,EAAY,SAAA,GAAY,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,UACrC,SAAS,IAAA,CAAK,OAAA;AAAA,UAEb,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,UAAA,CAAW;AAAA,QACnB,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,SAAA,EAAW,OAAA;AAAA,QACX,QAAA,EAAU,KAAA;AAAA,QACV,cAAA,EAAgB,WAAA;AAAA,QAChB,YAAA,EAAc,SAAA,GAAY,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,QACvC,SAAS,IAAA,CAAK;AAAA,OACf,CAAA;AAAA,IACH;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,mBACEA,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,kBAAkB,CAAA;AAAA,QACzC,cAAA,EAAc,WAAA;AAAA,QACd,eAAA,EAAe,YAAA;AAAA,QACf,YAAA,EAAY,SAAA,GAAY,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,QACrC,QAAA,EAAU,UAAA;AAAA,QACV,SAAS,IAAA,CAAK,OAAA;AAAA,QAEb,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEG,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,sBACjCA,IAAC,cAAA,EAAA,EAAe,IAAA,EAAK,SAAQ,UAAA,EAAY,CAAA,EACtC,eAAK,KAAA,EACR;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,OAAO,OAAA;AACT;AASA,SAAS,UAAA,CAAW;AAAA,EAClB,IAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAwC;AACtC,EAAA,MAAM,cAAA,GAAiB,KAAK,QAAA,EAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,KAAa,IAAI,CAAA,IAAK,KAAA;AAC1E,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUgC,KAAA,CAAA,QAAA;AAAA,IACpD,IAAA,CAAK,aAAa,IAAA,IAAQ;AAAA,GAC5B;AAGA,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,KAAa,MAAA,IAAa,KAAK,gBAAA,KAAqB,MAAA;AAC9E,EAAA,MAAM,IAAA,GAAO,YAAA,GAAgB,IAAA,CAAK,QAAA,GAAuB,gBAAA;AACzD,EAAA,MAAM,OAAA,GAAgBA,KAAA,CAAA,WAAA;AAAA,IACpB,CAAC,IAAA,KAAkB;AACjB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,MAC1B;AAAA,IACF,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,IAAA,CAAK,gBAAgB;AAAA,GACtC;AAGA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBACEhC,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAS,IAAA;AAAA,QACT,aAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,MAAM,QAAA,GAAW,KAAK,QAAA,KAAa,IAAA;AACnC,EAAA,MAAM,UAAA,GAAa,KAAK,QAAA,KAAa,IAAA;AAErC,EAAA,MAAM,cAAA,GAAiB,EAAA;AAAA,IACrB,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAW,mBAAA,GAAsB,oBAAA;AAAA,IACjC,UAAA,IAAc,qBAAA;AAAA,IACd;AAAA,GACF;AAEA,EAAA,uBACEG,IAAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAY,cAAc,OAAA,EACrC,QAAA,EAAA;AAAA,oBAAAH,GAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,cAAA;AAAA,QACX,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,QAClC,QAAA,EAAU,UAAA;AAAA,QAEV,QAAA,kBAAAA,IAAC,WAAA,EAAA,EAAY,IAAA,EAAY,WAAW,KAAA,EAAO,WAAA,EAAW,IAAA,EAAC,WAAA,EAAa,IAAA,EAAM;AAAA;AAAA,KAC5E;AAAA,oBACAA,GAAAA,CAAC,kBAAA,EAAA,EACC,QAAA,kBAAAA,GAAAA,CAAC,QAAG,SAAA,EAAU,4BAAA,EACX,QAAA,EAAA,IAAA,CAAK,QAAA,EAAU,IAAI,CAAC,KAAA,qBACnBA,GAAAA,CAAC,QACC,QAAA,kBAAAA,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,KAAA;AAAA,QACN,SAAA,EAAW,KAAA;AAAA,QACX,aAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA,EAAM;AAAA;AAAA,KACR,EAAA,EAPO,KAAA,CAAM,EAQf,CACD,GACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAIO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAAwC;AACtC,EAAA,uBACEA,GAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,KAC9B,QAAA,kBAAAG,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAQ,qBAAA;AAAA,MACR,SAAA,EAAW,EAAA;AAAA,QACT,sBAAA;AAAA,QACA,YAAY,iBAAA,GAAoB,iBAAA;AAAA,QAChC;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA,mBAASH,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,kBAAO,CAAA,GAAS,IAAA;AAAA,wBAErDA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCACZ,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AACzB,UAAA,MAAM,cAAA,GACJ,CAAC,SAAA,IAAa,OAAA,CAAQ,WAAW,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GACtD,OAAA,CAAQ,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAC1B,IAAA;AACN,UAAA,uBACEG,IAAAA,CAAC,SAAA,EAAA,EAAyB,SAAA,EAAU,eAAA,EACjC,QAAA,EAAA;AAAA,YAAA,OAAA,CAAQ,SAAS,CAAC,SAAA,mBACjBA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iDAAA,EACb,QAAA,EAAA;AAAA,8BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kFAAA,EACb,kBAAQ,KAAA,EACX,CAAA;AAAA,cACC,cAAA,mBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8HAAA,EACZ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,MAAA,KAAW;AAC9B,gBAAA,MAAM,aAAa,MAAA,CAAO,IAAA;AAC1B,gBAAA,MAAM,gCACJA,GAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,cAAY,MAAA,CAAO,KAAA;AAAA,oBACnB,OAAO,MAAA,CAAO,KAAA;AAAA,oBACd,SAAS,MAAA,CAAO,OAAA;AAAA,oBAChB,SAAA,EAAU,0OAAA;AAAA,oBAEV,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,QAAA,EAAS;AAAA;AAAA,iBACjC;AAEF,gBAAA,uBACEA,GAAAA,CAAC,MAAA,EAAA,EAAqB,SAAA,EAAU,UAAA,EAC7B,QAAA,EAAA,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,GAAI,aAAA,EAAA,EADvC,OAAO,EAElB,CAAA;AAAA,cAEJ,CAAC,GACH,CAAA,GACE;AAAA,aAAA,EACN,CAAA,GACE,IAAA;AAAA,4BACJA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBACX,QAAA,EAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AAC3B,cAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,IAAK,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAC3E,cAAA,uBACEA,GAAAA,CAAC,IAAA,EAAA,EACE,QAAA,EAAA,WAAA,mBACCA,GAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBACC,IAAA;AAAA,kBACA,SAAA;AAAA,kBACA,aAAA;AAAA,kBACA;AAAA;AAAA,kCAGFA,GAAAA;AAAA,gBAAC,eAAA;AAAA,gBAAA;AAAA,kBACC,IAAA;AAAA,kBACA,SAAA;AAAA,kBACA,aAAA;AAAA,kBACA;AAAA;AAAA,eACF,EAAA,EAdK,KAAK,EAgBd,CAAA;AAAA,YAEJ,CAAC,CAAA,EACH;AAAA,WAAA,EAAA,EAtDY,QAAQ,EAuDtB,CAAA;AAAA,QAEJ,CAAC,CAAA,EACH,CAAA;AAAA,QAEC,yBACCA,GAAAA,CAAC,SAAI,SAAA,EAAU,8CAAA,EAAgD,kBAAO,CAAA,GACpE;AAAA;AAAA;AAAA,GACN,EACF,CAAA;AAEJ;AC1ZA,IAAM,eAAA,GAAwBiC,oBAA2C,IAAI,CAAA;AAI7E,IAAM/B,cAAAA,GAAiD;AAAA,EACrD,OAAA,EAAS,+BAAA;AAAA,EACT,OAAA,EAAS,oCAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAQA,IAAM,YAAA,GAAqB+B,KAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,OAAA,GAAU,WAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC/D,IAAA,uBACEjC,IAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,EAAE,OAAA,EAAQ,EACzC,QAAA,kBAAAA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,8DAAA;AAAA,UACAE,eAAc,OAAO,CAAA;AAAA,UACrB;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF,CAAA;AAAA,EAEJ;AACF;AACA,YAAA,CAAa,WAAA,GAAc,UAAA;AAS3B,IAAM,cAAA,GAAuB+B,KAAA,CAAA,UAAA;AAAA,EAC3B,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,YAAA,GAAe,MAAM,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACtE,IAAA,uBACE9B,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,mEAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,YAAA,oBACCA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,4BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAqC,eAAW,IAAA,EAAC,CAAA;AAAA,4BACjEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAwC,eAAW,IAAA,EAAC,CAAA;AAAA,4BACpEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAuC,eAAW,IAAA,EAAC;AAAA,WAAA,EACrE,CAAA;AAAA,UAED,yBAASA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAsC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACrE;AAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,iBAAA;AAM7B,IAAM,YAAA,GAAqBiC,KAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC1C,IAAA,uBACEjC,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EAAI,GAAG,KAAA,EAC3D,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,YAAA,CAAa,WAAA,GAAc,eAAA;AAU3B,IAAM,YAAA,GAAqBiC,KAAA,CAAA,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,MAAA,GAAS,GAAA,EAAK,MAAA,GAAS,KAAA,EAAO,SAAA,GAAY,KAAA,EAAO,QAAA,EAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AAC3F,IAAA,uBACE9B,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,wBAAA;AAAA,UACA,SAAA,IAAa,oCAAA;AAAA,UACb;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,CAAC,0BAAUH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAyC,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,0BAC5EA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,UAAU,MAAA,GAAS,uBAAA,GAA0B,uBAAuB,CAAA,EACrF,QAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,YAAA,CAAa,WAAA,GAAc,eAAA;AAKpB,IAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc;AAAA,EAClD,MAAA,EAAQ,cAAA;AAAA,EACR,IAAA,EAAM,YAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAC;AC5HD,IAAM,aAAA,GAAgB,CAAC,MAAA,EAAQ,OAAA,EAAS,OAAO,MAAM,CAAA;AAErD,IAAM,oBAAA,GAAiD;AAAA,EACrD,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,GAAA,EAAK,QAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,oBAAA,GAAiD;AAAA,EACrD,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,cAAA,GAA2C;AAAA,EAC/C,IAAA,EAAM,oBAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,GAAA,EAAK,eAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAEA,SAAS,iBAAA,GAA8B;AACrC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,WAAA,EAAY;AACvD,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,SAAA,CAAU,SAAA,CAAU,WAAA,EAAY;AACzD,EAAA,MAAM,UAAU,sBAAA,CAAuB,IAAA,CAAK,QAAQ,CAAA,IAAK,sBAAA,CAAuB,KAAK,SAAS,CAAA;AAE9F,EAAA,OAAO,UAAU,OAAA,GAAU,OAAA;AAC7B;AAEA,SAAS,iBAAA,GAAgC;AACvC,EAAA,OAAO,MAAM,MAAA;AACf;AAEA,SAAS,WAAA,GAAwB;AAC/B,EAAA,OAAakC,KAAA,CAAA,oBAAA,CAAqB,iBAAA,EAAmB,iBAAA,EAAmB,MAAM,OAAO,CAAA;AACvF;AAEA,SAAS,aAAa,QAAA,EAA4C;AAChE,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,SAAS,IAAA,EAAK;AAE9B,EAAA,IAAI,SAAA,CAAU,IAAA,CAAK,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAQ,WAAA,EAAY;AAAA,EAC7B;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,mBAAmB,QAAA,EAA8C;AACxE,EAAA,OAAO,QAAA,KAAa,UAAU,oBAAA,GAAuB,oBAAA;AACvD;AAEA,IAAM,MAAM,CAAC;AAAA,EACX,IAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,GAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA+D;AAC7D,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,OAAA,GAAU,mBAAmB,QAAQ,CAAA;AAC3C,EAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,MAAA,CAAO,CAAC,QAAA,KAAa;AACzD,IAAA,IAAI,QAAA,KAAa,QAAQ,OAAO,IAAA;AAChC,IAAA,IAAI,QAAA,KAAa,SAAS,OAAO,KAAA;AACjC,IAAA,IAAI,QAAA,KAAa,OAAO,OAAO,GAAA;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,MAAM,aAAA,GAAgB,aAAa,QAAQ,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,eAAA,CAAgB,GAAA,CAAI,CAAC,QAAA,KAAa,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,IACtD;AAAA,GACF,CAAE,OAAO,OAAO,CAAA;AAChB,EAAA,MAAM,iBACJ,SAAA,IACA;AAAA,IACE,GAAG,eAAA,CAAgB,GAAA,CAAI,CAAC,QAAA,KAAa,cAAA,CAAe,QAAQ,CAAC,CAAA;AAAA,IAC7D,OAAO,aAAA,KAAkB,QAAA,GAAW,aAAA,GAAgB;AAAA,GACtD,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEb,EAAA,uBACElC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,cAAY,cAAA,IAAkB,MAAA;AAAA,MAC9B,SAAA,EAAW,EAAA;AAAA,QACT,4LAAA;AAAA,QACA,QAAQ,mCAAA,GAAsC,uCAAA;AAAA,QAC9C;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,WAAA,CAAY,KAAK,EAAE;AAAA;AAAA,GACtB;AAEJ,CAAA;AACA,GAAA,CAAI,WAAA,GAAc,KAAA;AC/DlB,SAAS,gBAAgB,IAAA,EAA4B;AACnD,EAAA,IAAI,KAAK,QAAA,IAAY,IAAA,CAAK,SAAS,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AACpD,IAAA,OAAO,KAAK,QAAA,CAAS,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,MAAA,GAAA,CAAU,KAAK,IAAA,IAAQ,EAAA,EAAI,MAAK,IAAA,CAAM,IAAA,CAAK,KAAA,IAAS,EAAA,EAAI,IAAA,EAAK;AACnE,EAAA,IAAI,CAAC,QAAQ,OAAO,GAAA;AACpB,EAAA,MAAM,SAAS,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AACjD,EAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AAChC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,CAAC,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AACjC,IAAA,OAAA,CAAQ,KAAA,GAAQ,QAAQ,WAAA,EAAY;AAAA,EACtC;AACA,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AACxC;AAEA,SAAS,cAAA,CAAe,EAAE,IAAA,EAAK,EAA2B;AACxD,EAAA,MAAMmC,SAAAA,GAAW,gBAAgB,IAAI,CAAA;AACrC,EAAA,uBACEnC,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAW,EAAA;AAAA,QACT,uFAAA;AAAA,QACA,+DAAA;AAAA,QACA,+GAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAG,IAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EACV,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,SAAA,mBAAYH,GAAAA,CAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,SAAA,EAAW,GAAA,EAAK,IAAA,CAAK,IAAA,EAAM,CAAA,GAAK,IAAA;AAAA,wBACzEA,IAAC,cAAA,EAAA,EAAe,IAAA,EAAK,MAAK,SAAA,EAAU,uBAAA,EACjC,UAAAmC,SAAAA,EACH;AAAA,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAMA,SAAS,mBAAA,CAAoB,EAAE,IAAA,EAAK,EAA6B;AAC/D,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,uBACEhC,IAAAA,CAAAC,UAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,IAAA,mBAAOJ,GAAAA,CAAC,IAAA,EAAA,EAAK,WAAU,uBAAA,EAAwB,aAAA,EAAW,MAAC,CAAA,GAAK,IAAA;AAAA,oBACjEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,eAAK,KAAA,EAAM,CAAA;AAAA,IAC7C,IAAA,CAAK,QAAA,mBACJA,GAAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAO,KAAA,EAAK,IAAA,EACxB,QAAA,EAAA,IAAA,CAAK,QAAA,EACR,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AAMO,SAAS,SAAS,KAAA,EAA0C;AACjE,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,GAAQ;AAAA,GACV,GAAI,KAAA;AAEJ,EAAA,MAAMmC,SAAAA,GAAW,gBAAgB,IAAI,CAAA;AAErC,EAAA,uBACEhC,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAH,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EACzB,QAAA,EAAA,aAAA,GAAgB,aAAA,CAAc,IAAI,CAAA,mBAAIA,GAAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAY,CAAA,EACrE,CAAA;AAAA,oBAEAG,IAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAc,UAAA,EAAY,GAAG,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,SAAS,CAAA,EAExF,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EACV,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,SAAA,mBAAYH,GAAAA,CAAC,WAAA,EAAA,EAAY,GAAA,EAAK,KAAK,SAAA,EAAW,GAAA,EAAK,IAAA,CAAK,IAAA,EAAM,CAAA,GAAK,IAAA;AAAA,0BACzEA,IAAC,cAAA,EAAA,EAAe,IAAA,EAAK,MAAK,SAAA,EAAU,uBAAA,EACjC,UAAAmC,SAAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBACAhC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAAgD,eAAK,IAAA,EAAK,CAAA;AAAA,UACzE,IAAA,CAAK,wBACJA,GAAAA,CAAC,UAAK,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA,GACnE;AAAA,SAAA,EACN;AAAA,OAAA,EACF,CAAA;AAAA,sBAEAA,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,MAGtB,aAAA,mBACCG,IAAAA,CAAAC,UAAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAAa,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,wBAC1CA,IAAC,qBAAA,EAAA,EAAsB;AAAA,OAAA,EACzB,CAAA,GACE,IAAA;AAAA,MAGH,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,UAAA,KAAe;AACjC,QAAA,MAAM,WAAA,GAAc,UAAA,KAAe,MAAA,CAAO,MAAA,GAAS,CAAA;AACnD,QAAA,uBACEG,IAAAA,CAAOiC,KAAA,CAAA,QAAA,EAAN,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,KAAA,mBACLpC,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8EAAA,EACZ,QAAA,EAAA,KAAA,CAAM,OACT,CAAA,GACE,IAAA;AAAA,UAEH,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,YAAA,MAAM,aAAA,GAAgB,EAAA;AAAA,cACpB,yCAAA;AAAA,cACA,KAAK,WAAA,IACH;AAAA,aACJ;AAGA,YAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,CAAC,IAAA,CAAK,QAAA,EAAU;AAC/B,cAAA,MAAM,WAAA,mBAAcA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,IAAA,EAAY,CAAA;AACrD,cAAA,MAAM,cAAc,UAAA,GAClB,UAAA,CAAW,EAAE,IAAA,EAAM,KAAK,IAAA,EAAM,QAAA,EAAU,WAAA,EAAa,oBAErDA,GAAAA,CAAC,OAAE,IAAA,EAAM,IAAA,CAAK,MAAO,QAAA,EAAA,WAAA,EAAY,CAAA;AAEnC,cAAA,uBACEA,GAAAA;AAAA,gBAAC,gBAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAW,aAAA;AAAA,kBACX,SAAS,IAAA,CAAK,QAAA;AAAA,kBACd,MAAA,EAAQ;AAAA,iBAAA;AAAA,gBAHH,IAAA,CAAK;AAAA,eAIZ;AAAA,YAEJ;AAGA,YAAA,uBACEA,GAAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,aAAA;AAAA,gBACX,UAAU,IAAA,CAAK,QAAA;AAAA,gBACf,SAAS,MAAM;AACb,kBAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,QAAA,IAAW;AAAA,gBACtC,CAAA;AAAA,gBAEA,QAAA,kBAAAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,IAAA,EAAY;AAAA,eAAA;AAAA,cAP5B,IAAA,CAAK;AAAA,aAQZ;AAAA,UAEJ,CAAC,CAAA;AAAA,UAEA,CAAC,WAAA,mBAAcA,GAAAA,CAAC,yBAAsB,CAAA,GAAK;AAAA,SAAA,EAAA,EA/CzB,MAAM,EAgD3B,CAAA;AAAA,MAEJ,CAAC;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;ACtLvB,SAAS,YAAY,SAAA,EAA8B;AACjD,EAAA,IAAI,SAAA,CAAU,UAAU,OAAO,SAAA,CAAU,SAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAY;AAC1E,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAA,CAAK,IAAA,EAAK;AACpC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AACjD,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AACrB,IAAA,OAAO,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA,IAAK,EAAE,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA,IAAK,EAAE,GAAG,WAAA,EAAY;AAAA,EAChE;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AACzC;AAEA,SAAS,UAAU,IAAA,EAA6B;AAC9C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,OAAA;AAAA;AAEb;AAUA,SAAS,gBAAgB,EAAE,SAAA,EAAW,IAAA,GAAO,IAAA,EAAM,WAAU,EAAyB;AACpF,EAAA,MAAMmC,SAAAA,GAAW,YAAY,SAAS,CAAA;AACtC,EAAA,uBACEhC,KAAC,MAAA,EAAA,EAAO,IAAA,EAAY,WAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA,EACtE,QAAA,EAAA;AAAA,IAAA,SAAA,CAAU,6BACTH,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAK,SAAA,CAAU,SAAA;AAAA,QACf,KAAK,SAAA,CAAU,IAAA;AAAA,QACf,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAEFA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,SAAA,EAAU,gEAAA;AAAA,QAET,QAAA,EAAAmC;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAYA,SAAS,aAAA,CAAc;AAAA,EACrB,eAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAsE;AACpE,EAAA,MAAM,OAAA,GAAU,gBAAgB,IAAA,KAAS,OAAA;AAEzC,EAAA,IAAI,YAAY,SAAA,EAAW;AACzB,IAAA,uBACEhC,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,YAAA,EAAW,kBAAA;AAAA,QACX,QAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,8FAAA;AAAA,UACA,8CAAA;AAAA,UACA,0EAAA;AAAA,UACA,iDAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,eAAA,EAAiB,MAAK,IAAA,EAAK,CAAA;AAAA,0BACvDA,GAAAA,CAACqC,aAAA,EAAA,EAAe,aAAA,EAAY,MAAA,EAAO,WAAU,mCAAA,EAAoC;AAAA;AAAA;AAAA,KACnF;AAAA,EAEJ;AAEA,EAAA,uBACElC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,kBAAA;AAAA,MACX,QAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,wJAAA;AAAA,QACA,8CAAA;AAAA,QACA,0EAAA;AAAA,QACA,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,eAAA,EAAiB,MAAK,IAAA,EAAK,CAAA;AAAA,wBACvDG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kDAAA,EACb,0BAAgB,IAAA,EACnB,CAAA;AAAA,UACC,aAAA,IAAiB,2BAChBA,GAAAA,CAAC,SAAM,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,QAAA,EAAA,OAAA,EAEjC;AAAA,SAAA,EAEJ,CAAA;AAAA,wBACAA,GAAAA,CAACqC,aAAA,EAAA,EAAe,aAAA,EAAY,MAAA,EAAO,WAAU,yCAAA,EAA0C;AAAA;AAAA;AAAA,GACzF;AAEJ;AACA,aAAA,CAAc,WAAA,GAAc,0BAAA;AAU5B,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,QAAA,EAAU,UAAS,EAAuB;AAC5E,EAAA,uBACElC,IAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,QAAA;AAAA,MACT,cAAA,EAAc,WAAW,MAAA,GAAS,MAAA;AAAA,MAClC,SAAA,EAAU,gCAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAH,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAsB,IAAA,EAAK,IAAA,EAAK,CAAA;AAAA,wBACjDG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,kCAAA;AAAA,gBACA,WAAW,eAAA,GAAkB;AAAA,eAC/B;AAAA,cAEC,QAAA,EAAA,SAAA,CAAU;AAAA;AAAA,WACb;AAAA,UACC,UAAU,IAAA,oBACTG,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,YAAA,SAAA,CAAU,IAAA;AAAA,YACV,SAAA,CAAU,IAAA,IAAQ,SAAA,CAAU,IAAA,KAAS,OAAA,GAAU,SAAM,SAAA,CAAU,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA,GAAK;AAAA,WAAA,EACtF,CAAA;AAAA,UAED,CAAC,SAAA,CAAU,IAAA,IAAQ,SAAA,CAAU,IAAA,oBAC5BH,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA,SAAA,CAAU,SAAA,CAAU,IAAI,CAAA,EAC3B;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,QAAA,oBACCA,GAAAA,CAACU,KAAAA,EAAA,EAAM,aAAA,EAAY,MAAA,EAAO,WAAU,0CAAA,EAA2C;AAAA;AAAA;AAAA,GAEnF;AAEJ;AAIO,SAAS,iBAAA,CAAkB;AAAA,EAChC,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,UAAA;AAAA,EACV,UAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,QAAA,GAAW;AACb,CAAA,EAA+C;AAC7C,EAAA,MAAM,eAAA,GAAkB,UAAA,CAAW,IAAA,CAAK,CAAC,EAAA,KAAO,GAAG,EAAA,KAAO,iBAAiB,CAAA,IAAK,UAAA,CAAW,CAAC,CAAA;AAE5F,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KAAe;AAEnC,IAAA,MAAM,MAAA,GAAS,SAAS,EAAE,CAAA;AAC1B,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,MAAA,CAAO,KAAA,CAAM,CAAC,GAAA,KAAQ;AAEpB,QAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,GAAG,CAAA;AAAA,MACzD,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,uBACEV,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA;AAAA,UACT,wIAAA;AAAA,UACA;AAAA,SACF;AAAA,QACD,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,EAEJ;AAEA,EAAA,uBACEG,KAAC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAH,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAAA,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,eAAA;AAAA,QACA,OAAA;AAAA,QACA,aAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBACAG,IAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,OAAA;AAAA,QACN,UAAA,EAAY,CAAA;AAAA,QACZ,SAAA,EAAU,qCAAA;AAAA,QAET,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCA,IAAAA,CAAAC,UAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,4BACzCA,IAAC,qBAAA,EAAA,EAAsB;AAAA,WAAA,EACzB,CAAA;AAAA,0BAGFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kFAAiF,QAAA,EAAA,YAAA,EAEhG,CAAA;AAAA,0BAEAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BACZ,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,qBACfA,GAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAW,EAAA;AAAA,cACX,QAAA,EAAU,GAAG,EAAA,KAAO,iBAAA;AAAA,cACpB,QAAA,EAAU,MAAM,YAAA,CAAa,EAAA,CAAG,EAAE;AAAA,aAAA;AAAA,YAH7B,EAAA,CAAG;AAAA,WAKX,CAAA,EACH,CAAA;AAAA,UAEC,UAAA,oBACCG,IAAAA,CAAAC,UAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAJ,IAAC,qBAAA,EAAA,EAAsB,CAAA;AAAA,4BACvBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAe,QAAA,EAAA,UAAA,EAAW;AAAA,WAAA,EAC3C;AAAA;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface ArtifactShiftCardProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n contentClassName?: string;\n}\n\nexport interface ArtifactShiftCardPreviewProps extends HTMLAttributes<HTMLElement> {\n filename: string;\n language: string;\n code: string;\n label: string;\n maxLines?: number;\n signals?: readonly string[];\n}\n\nexport type ArtifactShiftCardFooterProps = HTMLAttributes<HTMLElement>;\n\nexport function ArtifactShiftCard({\n className,\n contentClassName,\n children,\n ...props\n}: ArtifactShiftCardProps) {\n return (\n <div\n className={cn(\n \"group/card relative flex h-full min-h-[560px] flex-col overflow-hidden rounded-[var(--radius-panel)] border bg-background/90 transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] hover:-translate-y-1 hover:border-foreground/25 hover:shadow-[0_28px_90px_-64px_var(--foreground)] focus-within:-translate-y-1 focus-within:border-foreground/25\",\n className,\n )}\n data-taste=\"nebutra-shift-card\"\n {...props}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-8)_1px,transparent_0)] bg-[length:22px_22px] opacity-[0.09]\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-32 bg-gradient-to-b from-primary/10 via-primary/5 to-transparent opacity-80\"\n />\n\n <div className={cn(\"relative flex h-full flex-col p-4 sm:p-5\", contentClassName)}>\n {children}\n </div>\n </div>\n );\n}\n\nexport function ArtifactShiftCardPreview({\n filename,\n language,\n code,\n label,\n maxLines = 8,\n signals = [\"typed\", \"scoped\", \"ready\"],\n className,\n ...props\n}: ArtifactShiftCardPreviewProps) {\n const lines = code.split(\"\\n\").slice(0, maxLines);\n\n return (\n <section\n aria-label={label}\n className={cn(\n \"relative min-h-[260px] overflow-hidden rounded-[var(--radius-xl)] border border-border/60 bg-background/80 p-3 shadow-[0_18px_60px_-46px_var(--foreground)] transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] group-hover/card:-translate-y-1 group-hover/card:border-foreground/20 group-hover/card:shadow-[0_24px_80px_-52px_var(--foreground)] group-focus-within/card:-translate-y-1 group-focus-within/card:border-foreground/20 sm:p-4\",\n className,\n )}\n {...props}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-7)_1px,transparent_0)] bg-[length:18px_18px] opacity-[0.16]\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-24 bg-gradient-to-b from-primary/10 to-transparent opacity-80\"\n />\n\n <div className=\"relative flex items-center justify-between gap-3 rounded-[var(--radius-md)] border border-border/60 bg-background/85 px-3 py-2\">\n <span className=\"min-w-0 truncate font-mono text-[11px] text-foreground/80\" translate=\"no\">\n {filename}\n </span>\n <span\n className=\"rounded-full border border-border/70 bg-muted/40 px-2 py-0.5 font-mono text-[10px] text-muted-foreground uppercase\"\n translate=\"no\"\n >\n {language}\n </span>\n </div>\n\n <div className=\"relative mt-3 space-y-1.5 rounded-[var(--radius-lg)] border border-border/50 bg-muted/25 p-3 font-mono text-[11px] leading-5\">\n {lines.map((line, index) => (\n <div key={`${line}-${index}`} className=\"flex min-w-0 gap-3\">\n <span className=\"w-5 shrink-0 text-right text-muted-foreground/55 tabular-nums\">\n {index + 1}\n </span>\n <code className=\"min-w-0 truncate text-foreground/75\" translate=\"no\">\n {line || \" \"}\n </code>\n </div>\n ))}\n </div>\n\n <div className=\"relative mt-3 grid grid-cols-3 gap-2\">\n {signals.map((signal) => (\n <span\n key={signal}\n className=\"rounded-[var(--radius-md)] border border-border/55 bg-background/75 px-2 py-1.5 text-center font-mono text-[10px] text-muted-foreground uppercase tracking-[0.14em]\"\n >\n {signal}\n </span>\n ))}\n </div>\n </section>\n );\n}\n\nexport function ArtifactShiftCardFooter({ className, ...props }: ArtifactShiftCardFooterProps) {\n return (\n <footer\n className={cn(\n \"relative mt-4 flex flex-wrap items-center justify-between gap-3 rounded-[var(--radius-xl)] border border-border/60 bg-background/85 px-4 py-3 shadow-[0_14px_48px_-42px_var(--foreground)] backdrop-blur-xl transition-[transform,border-color,box-shadow] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] group-hover/card:-translate-y-2 group-hover/card:border-foreground/20 group-hover/card:shadow-[0_22px_70px_-50px_var(--foreground)] group-focus-within/card:-translate-y-2 group-focus-within/card:border-foreground/20\",\n className,\n )}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* ─────────────────────────────────────────────────────────────────────────────\n * Card Compound Component\n *\n * A flexible, composable card system following compound component pattern.\n * Supports multiple variants and semantic subcomponents.\n *\n * Usage:\n * <Card variant=\"elevated\">\n * <Card.Header>\n * <Card.Icon><IconComponent /></Card.Icon>\n * <Card.Title>Title</Card.Title>\n * </Card.Header>\n * <Card.Body>\n * <Card.Description>Description text</Card.Description>\n * </Card.Body>\n * <Card.Footer>Footer content</Card.Footer>\n * </Card>\n * ───────────────────────────────────────────────────────────────────────────── */\n\ntype CardVariant = \"default\" | \"elevated\" | \"bordered\" | \"ghost\" | \"gradient\";\ntype CardPadding = \"none\" | \"sm\" | \"md\" | \"lg\";\n\ninterface CardContextValue {\n variant: CardVariant;\n}\n\nconst CardContext = React.createContext<CardContextValue | null>(null);\n\n// Reserved for future use when subcomponents need parent context\n// function useCardContext() {\n// const context = React.useContext(CardContext);\n// if (!context) {\n// throw new Error(\"Card subcomponents must be used within a Card component\");\n// }\n// return context;\n// }\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst paddingMap: Record<CardPadding, string> = {\n none: \"\",\n sm: \"p-4\",\n md: \"p-6\",\n lg: \"p-8\",\n};\n\nconst variantStyles: Record<CardVariant, string> = {\n default: \"bg-card border border-border\",\n elevated: \"bg-card border border-border shadow-lg\",\n bordered: \"bg-transparent border-2 border-border\",\n ghost: \"bg-transparent\",\n gradient: \"bg-gradient-to-br from-card to-muted border border-border\",\n};\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: CardVariant;\n padding?: CardPadding;\n asChild?: boolean;\n}\n\nconst CardRoot = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant = \"default\", padding = \"md\", children, ...props }, ref) => {\n return (\n <CardContext.Provider value={{ variant }}>\n <div\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-xl)] transition-[background-color,border-color,box-shadow,color] duration-200\",\n variantStyles[variant],\n paddingMap[padding],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </CardContext.Provider>\n );\n },\n);\nCardRoot.displayName = \"Card\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n spacing?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, spacing: gap = \"md\", children, ...props }, ref) => {\n const gapMap = { sm: \"gap-2\", md: \"gap-3\", lg: \"gap-4\" };\n\n return (\n <div ref={ref} className={cn(\"flex items-start\", gapMap[gap], className)} {...props}>\n {children}\n </div>\n );\n },\n);\nCardHeader.displayName = \"Card.Header\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type CardBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardBody = React.forwardRef<HTMLDivElement, CardBodyProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"mt-4\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nCardBody.displayName = \"Card.Body\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type CardFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"mt-6 pt-4 border-t border-border/50\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nCardFooter.displayName = \"Card.Footer\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardIconProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst CardIcon = React.forwardRef<HTMLDivElement, CardIconProps>(\n ({ className, size = \"md\", children, ...props }, ref) => {\n const sizeMap = {\n sm: \"w-8 h-8\",\n md: \"w-10 h-10\",\n lg: \"w-12 h-12\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-center rounded-[var(--radius-lg)] bg-muted/50 shrink-0\",\n sizeMap[size],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\nCardIcon.displayName = \"Card.Icon\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n as?: \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n}\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, as: Tag = \"h3\", children, ...props }, ref) => {\n return (\n <Tag ref={ref} className={cn(\"text-lg font-semibold text-foreground\", className)} {...props}>\n {children}\n </Tag>\n );\n },\n);\nCardTitle.displayName = \"Card.Title\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface CardDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement | HTMLDivElement> {\n as?: React.ElementType;\n}\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement | HTMLDivElement,\n CardDescriptionProps\n>(({ className, as: Tag = \"p\", children, ...props }, ref) => {\n return React.createElement(\n Tag,\n {\n ref,\n className: cn(\"text-sm text-muted-foreground leading-relaxed\", className),\n ...props,\n },\n children,\n );\n});\nCardDescription.displayName = \"Card.Description\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n// Compound component assembly\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Body: CardBody,\n Footer: CardFooter,\n Icon: CardIcon,\n Title: CardTitle,\n Description: CardDescription,\n});\n\n// Named exports for direct imports\nexport { CardBody, CardDescription, CardFooter, CardHeader, CardIcon, CardRoot, CardTitle };\n","\"use client\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n/* ─────────────────────────────────────────────────────────────────────────────\n * CommandBox Component\n *\n * A copyable command input with click-to-copy functionality.\n * Used for installation commands, code snippets, etc.\n *\n * Usage:\n * <CommandBox command=\"npm install @nebutra/ui\" />\n * <CommandBox command=\"pnpm add @nebutra/ui\" prefix=\"$\" />\n * ───────────────────────────────────────────────────────────────────────────── */\nexport interface CommandBoxProps extends React.HTMLAttributes<HTMLDivElement> {\n command: string;\n prefix?: string;\n showCopyButton?: boolean;\n variant?: \"default\" | \"minimal\" | \"pill\";\n onCopy?: () => void;\n}\nexport const CommandBox = React.forwardRef<HTMLDivElement, CommandBoxProps>(\n (\n {\n className,\n command,\n prefix = \"$\",\n showCopyButton = true,\n variant = \"default\",\n onCopy,\n ...props\n },\n ref,\n ) => {\n const [copied, setCopied] = React.useState(false);\n const handleCopy = React.useCallback(async () => {\n try {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n onCopy?.();\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n // Clipboard write can fail due to browser permissions (e.g. non-HTTPS,\n // permissions policy, or user denial). This is expected in some\n // environments — log in dev so developers know, but do not surface\n // an error to the end user since the UI already shows no \"Copied!\" state.\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"[CommandBox] clipboard write failed:\", err);\n }\n }\n }, [command, onCopy]);\n const variantStyles = {\n default: \"bg-muted border border-border rounded-[var(--radius-lg)]\",\n minimal: \"bg-background border border-border rounded-[var(--radius-md)]\",\n pill: \"bg-muted border border-border rounded-full\",\n };\n return (\n // biome-ignore lint/a11y/useSemanticElements: ARIA pattern\n <div\n ref={ref}\n className={cn(\n \"group relative flex items-center gap-3 px-4 py-2.5 font-mono text-sm cursor-pointer transition-colors hover:bg-muted\",\n variantStyles[variant],\n className,\n )}\n onClick={handleCopy}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy();\n }\n }}\n aria-label={`Copy command: ${command}`}\n {...props}\n >\n {/* Prefix */}\n <span className=\"text-emerald-400 shrink-0 select-none\">{prefix}</span>\n {/* Command text */}\n <span className=\"flex-1 text-muted-foreground truncate\">{command}</span>\n {/* Copy indicator */}\n {showCopyButton && (\n <span\n className={cn(\n \"shrink-0 text-xs transition-colors\",\n copied\n ? \"text-emerald-400\"\n : \"text-muted-foreground group-hover:text-muted-foreground\",\n )}\n >\n {copied ? <CopiedIcon className=\"w-4 h-4\" /> : <CopyIcon className=\"w-4 h-4\" />}\n </span>\n )}\n {/* Copy tooltip */}\n <span\n className={cn(\n \"absolute -top-8 left-1/2 -translate-x-1/2 px-2 py-1 text-xs rounded bg-zinc-700 text-muted-foreground opacity-0 transition-opacity pointer-events-none\",\n \"group-hover:opacity-100\",\n copied && \"opacity-100\",\n )}\n >\n {copied ? \"Copied!\" : \"Click to copy\"}\n </span>\n </div>\n );\n },\n);\nCommandBox.displayName = \"CommandBox\";\n/* ─────────────────────────────────────────────────────────────────────────── */\nfunction CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\nfunction CopiedIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n className={className}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\ntype DashboardMetricTone = \"neutral\" | \"blue\" | \"green\" | \"amber\";\n\nconst metricToneClasses: Record<DashboardMetricTone, string> = {\n neutral: \"bg-muted/70 text-muted-foreground ring-border\",\n blue: \"bg-info/10 text-info ring-info/20\",\n green: \"bg-success/10 text-success ring-success/20\",\n amber: \"bg-warning/10 text-warning ring-warning/20\",\n};\n\nexport interface DashboardCommandSurfaceProps {\n status?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n children?: ReactNode;\n className?: string;\n}\n\nexport function DashboardCommandSurface({\n status,\n title,\n description,\n actions,\n children,\n className,\n}: DashboardCommandSurfaceProps) {\n return (\n <section\n data-pattern=\"nebutra-dashboard-command\"\n className={cn(\n \"relative overflow-hidden rounded-[var(--radius-lg)] border border-border bg-card p-4 text-card-foreground shadow-sm\",\n \"before:pointer-events-none before:absolute before:inset-x-0 before:top-0 before:h-px before:bg-[linear-gradient(90deg,transparent,hsl(var(--primary)/0.58),transparent)]\",\n \"after:pointer-events-none after:absolute after:inset-0 after:bg-[radial-gradient(circle_at_top_left,hsl(var(--primary)/0.08),transparent_42%)]\",\n \"sm:p-5\",\n className,\n )}\n >\n <div className=\"relative z-10 flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between\">\n <div className=\"min-w-0\">\n {status ? (\n <div className=\"flex items-center gap-2\">\n <span className=\"size-1.5 rounded-full bg-green-9 shadow-[0_0_0_3px_var(--green-3)]\" />\n <p className=\"text-[11px] font-medium uppercase text-muted-foreground\">{status}</p>\n </div>\n ) : null}\n <h1 className=\"mt-2 text-2xl font-semibold tracking-normal text-card-foreground sm:text-[28px]\">\n {title}\n </h1>\n {description ? (\n <p className=\"mt-2 max-w-2xl text-[13px] leading-5 text-muted-foreground\">\n {description}\n </p>\n ) : null}\n </div>\n {actions ? (\n <div className=\"flex shrink-0 flex-wrap items-center gap-1.5\">{actions}</div>\n ) : null}\n </div>\n {children ? <div className=\"relative z-10 mt-4\">{children}</div> : null}\n </section>\n );\n}\n\nexport interface DashboardPanelProps {\n title: ReactNode;\n description?: ReactNode;\n meta?: ReactNode;\n action?: ReactNode;\n children: ReactNode;\n className?: string;\n headerClassName?: string;\n}\n\nexport function DashboardPanel({\n title,\n description,\n meta,\n action,\n children,\n className,\n headerClassName,\n}: DashboardPanelProps) {\n return (\n <section\n data-pattern=\"nebutra-dashboard-panel\"\n className={cn(\n \"rounded-[var(--radius-lg)] border border-border bg-card p-3.5 text-card-foreground shadow-sm sm:p-4\",\n className,\n )}\n >\n <div\n className={cn(\n \"mb-3 flex flex-col gap-2.5 border-b border-border pb-3 lg:flex-row lg:items-start lg:justify-between\",\n headerClassName,\n )}\n >\n <div className=\"min-w-0\">\n <h2 className=\"text-sm font-semibold tracking-normal text-card-foreground\">{title}</h2>\n {description ? (\n <p className=\"mt-0.5 text-xs leading-5 text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n {(meta || action) && (\n <div className=\"flex min-w-0 flex-wrap items-center gap-2 lg:justify-end\">\n {meta}\n {action}\n </div>\n )}\n </div>\n {children}\n </section>\n );\n}\n\nexport interface DashboardMetricTileProps {\n label: ReactNode;\n value: ReactNode;\n detail?: ReactNode;\n source?: ReactNode;\n icon?: ComponentType<{ className?: string; \"aria-hidden\"?: boolean }>;\n tone?: DashboardMetricTone;\n className?: string;\n}\n\nexport function DashboardMetricTile({\n label,\n value,\n detail,\n source,\n icon: Icon,\n tone = \"neutral\",\n className,\n}: DashboardMetricTileProps) {\n return (\n <div\n data-pattern=\"nebutra-dashboard-metric\"\n className={cn(\n \"group h-full rounded-[var(--radius-lg)] border border-border bg-muted/40 p-3 transition-colors duration-150\",\n \"hover:border-muted-foreground/30 hover:bg-muted/65\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"min-w-0 truncate text-xs font-medium text-muted-foreground\">{label}</span>\n {Icon ? (\n <span\n className={cn(\n \"inline-flex size-6 shrink-0 items-center justify-center rounded-[var(--radius-sm)] ring-1\",\n metricToneClasses[tone],\n )}\n >\n <Icon className=\"size-3.5\" aria-hidden={true} />\n </span>\n ) : null}\n </div>\n <p className=\"mt-2 text-2xl font-semibold tabular-nums tracking-normal text-card-foreground\">\n {value}\n </p>\n {(detail || source) && (\n <div className=\"mt-1.5 space-y-0.5 text-xs leading-5 text-muted-foreground\">\n {detail ? <span className=\"block\">{detail}</span> : null}\n {source ? (\n <span className=\"block text-[11px] text-muted-foreground/70\">{source}</span>\n ) : null}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\n// ─── Variants ─────────────────────────────────────────────────────────────────\n\nconst badgeVariants = cva(\n \"inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-transparent\",\n {\n variants: {\n variant: {\n // ─── Semantic / brand variants ────────────────────────────────────────\n // Recipe-driven default (solid | outline | … via --badge-default-*)\n default: \"badge-brand-default border\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"border-border text-foreground\",\n success: \"border-transparent bg-success text-success-foreground hover:bg-success/80\",\n warning: \"border-transparent bg-warning text-warning-foreground hover:bg-warning/80\",\n info: \"border-transparent bg-info text-info-foreground hover:bg-info/80\",\n error:\n \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n // ─── Palette accents (decorative scale — not product chrome CTAs) ────\n gray: \"bg-muted text-muted-foreground fill-current\",\n \"gray-subtle\": \"bg-muted/60 text-muted-foreground fill-current border-transparent\",\n blue: \"bg-primary text-primary-foreground fill-current\",\n \"blue-subtle\": \"bg-primary/10 text-primary fill-current border-transparent\",\n purple: \"bg-secondary text-secondary-foreground fill-current\",\n \"purple-subtle\":\n \"bg-secondary/40 text-secondary-foreground fill-current border-transparent\",\n amber: \"bg-warning text-warning-foreground fill-current\",\n \"amber-subtle\": \"bg-warning/15 text-warning fill-current border-transparent\",\n red: \"bg-destructive text-destructive-foreground fill-current\",\n \"red-subtle\": \"bg-destructive/15 text-destructive fill-current border-transparent\",\n pink: \"bg-accent text-accent-foreground fill-current\",\n \"pink-subtle\": \"bg-accent/40 text-accent-foreground fill-current border-transparent\",\n green: \"bg-success text-success-foreground fill-current\",\n \"green-subtle\": \"bg-success/15 text-success fill-current border-transparent\",\n teal: \"bg-info text-info-foreground fill-current\",\n \"teal-subtle\": \"bg-info/15 text-info fill-current border-transparent\",\n inverted: \"bg-foreground text-background fill-current\",\n // Special visual treatments (intentional product design, not brand hex)\n trial:\n \"bg-gradient-to-br from-trial-start to-trial-end text-primary-foreground fill-current\",\n turbo:\n \"bg-gradient-to-br from-turbo-start to-turbo-end text-primary-foreground fill-current\",\n pill: \"bg-background text-foreground fill-foreground border-border hover:bg-muted/50 focus-visible:bg-muted/50\",\n beta: \"border-transparent bg-muted text-muted-foreground\",\n new: \"border-transparent bg-primary/10 text-primary\",\n owner: \"border-border bg-transparent text-foreground\",\n featured: \"badge-brand-default border [text-shadow:0_0_1px_hsl(var(--background)/0.2)]\",\n \"coming-soon\": \"border-transparent bg-muted/60 text-muted-foreground italic\",\n },\n size: {\n sm: \"text-[11px] h-5 px-1.5 tracking-[0.2px] gap-[3px] [&_svg]:h-[11px] [&_svg]:w-[11px]\",\n md: \"text-[12px] h-6 px-2.5 tracking-normal gap-1 [&_svg]:h-[14px] [&_svg]:w-[14px]\",\n lg: \"text-[14px] h-8 px-3 tracking-normal gap-1.5 [&_svg]:h-[16px] [&_svg]:w-[16px]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n },\n);\n\nconst dotColorMap: Partial<Record<NonNullable<BadgeProps[\"variant\"]>, string>> = {\n success: \"bg-success-foreground\",\n warning: \"bg-warning-foreground\",\n info: \"bg-info-foreground\",\n error: \"bg-destructive-foreground\",\n destructive: \"bg-destructive-foreground\",\n \"gray-subtle\": \"bg-muted-foreground\",\n \"green-subtle\": \"bg-success\",\n \"amber-subtle\": \"bg-warning\",\n \"red-subtle\": \"bg-destructive\",\n \"blue-subtle\": \"bg-primary\",\n \"purple-subtle\": \"bg-secondary-foreground\",\n \"pink-subtle\": \"bg-accent-foreground\",\n \"teal-subtle\": \"bg-info\",\n default: \"bg-brand-mark-foreground\",\n featured: \"bg-brand-mark-foreground\",\n secondary: \"bg-secondary-foreground\",\n outline: \"bg-muted-foreground\",\n};\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLElement>,\n VariantProps<typeof badgeVariants> {\n /** @deprecated Prefer Status Dot for dot-only indicators. Keep text labels redundant with color. */\n dot?: boolean;\n /** Icon element rendered before the label. Decorative icons are hidden from assistive tech. */\n icon?: React.ReactNode;\n /** Render as child element — use with `<a>` for link badges */\n asChild?: boolean;\n}\n\nfunction Badge({\n className,\n variant = \"default\",\n size = \"md\",\n dot,\n icon,\n asChild,\n children,\n ...props\n}: BadgeProps) {\n const badgeClassName = cn(badgeVariants({ variant, size }), className);\n const renderContent = (label: React.ReactNode) => (\n <>\n {dot && (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"h-1.5 w-1.5 shrink-0 rounded-full\",\n dotColorMap[variant ?? \"default\"] ?? \"bg-current\",\n )}\n />\n )}\n {icon && (\n <span aria-hidden=\"true\" className=\"shrink-0 flex items-center justify-center\">\n {icon}\n </span>\n )}\n {label}\n </>\n );\n\n if (asChild) {\n const childArray = React.Children.toArray(children);\n const child = childArray.length === 1 ? childArray[0] : null;\n\n if (React.isValidElement(child)) {\n const childProps = child.props as React.HTMLAttributes<HTMLElement> & {\n children?: React.ReactNode;\n };\n\n return React.cloneElement(child, {\n ...props,\n ...childProps,\n \"data-slot\": \"badge\",\n className: cn(badgeClassName, childProps.className),\n style: { ...props.style, ...childProps.style },\n children: renderContent(childProps.children),\n } as React.HTMLAttributes<HTMLElement>);\n }\n }\n\n return (\n <span data-slot=\"badge\" className={badgeClassName} {...props}>\n {renderContent(children)}\n </span>\n );\n}\n\nexport { Badge, badgeVariants };\n","/**\n * Primitive Design Tokens — Layer 1\n *\n * Raw values only. No CSS variable references, no semantic meaning.\n * These are the \"atoms\" of the design system.\n *\n * Color source: @nebutra/brand `colors` → @nebutra/design-tokens `tokens/core.json` (SSOT).\n * Typography: Geist + Geist Mono (Vercel) with Noto Sans SC + PingFang SC + Microsoft YaHei CJK fallbacks.\n * Aligned with @nebutra/design-tokens SSOT.\n */\n\nimport { colors } from \"@nebutra/brand\";\n\n// ─── Color Palette ────────────────────────────────────────────────────────────\n\nexport const primitiveColors = {\n // Nebutra Blue (云毓蓝) — technology & trust — VI: #0033FE\n blue50: colors.primary[50],\n blue100: colors.primary[100],\n blue200: colors.primary[200],\n blue300: colors.primary[300],\n blue400: colors.primary[400],\n blue500: colors.primary[500], // brand primary\n blue600: colors.primary[600],\n blue700: colors.primary[700],\n blue800: colors.primary[800],\n blue900: colors.primary[900],\n blue950: colors.primary[950],\n\n // Nebutra Cyan (云毓青) — data flow & intelligence — VI: #0BF1C3\n cyan50: colors.accent[50],\n cyan100: colors.accent[100],\n cyan200: colors.accent[200],\n cyan300: colors.accent[300],\n cyan400: colors.accent[400],\n cyan500: colors.accent[500], // brand secondary\n cyan600: colors.accent[600],\n cyan700: colors.accent[700],\n cyan800: colors.accent[800],\n cyan900: colors.accent[900],\n cyan950: colors.accent[950],\n\n // Neutral (blue-undertone gray scale)\n neutral50: colors.neutral[50],\n neutral100: colors.neutral[100],\n neutral200: colors.neutral[200],\n neutral300: colors.neutral[300],\n neutral400: colors.neutral[400],\n neutral500: colors.neutral[500],\n neutral600: colors.neutral[600],\n neutral700: colors.neutral[700],\n neutral800: colors.neutral[800],\n neutral900: colors.neutral[900],\n neutral950: colors.neutral[950], // deepest — used as dark background\n\n // Semantic raw colors — VI §Color Specifications\n // NOTE: info = brand blue (#0033FE), not sky/teal\n red500: \"#ef4444\",\n red600: \"#dc2626\",\n green500: \"#22c55e\", // VI manual specifies this exact value for success\n green600: \"#16a34a\",\n amber500: \"#f59e0b\",\n amber600: \"#d97706\",\n\n white: colors.white,\n black: colors.black,\n} as const;\n\nexport type PrimitiveColor = keyof typeof primitiveColors;\n\n// ─── Brand Gradients — VI §Brand Gradients (first-class design assets) ────────\n\nexport const primitiveGradients = {\n /** Hero sections, primary CTA buttons, logo fills — VI signature gradient */\n primary: colors.gradient.primary,\n /** Hover states, secondary gradient elements */\n reverse: colors.gradient.primaryReverse,\n /** Vertical layout dividers, page section separators */\n vertical: colors.gradient.primaryVertical,\n /** Background halos, focus glow effects, radial emphasis */\n radial: colors.gradient.primaryRadial,\n /** Dark mode card surfaces — deep brand-blue tinted */\n darkCard: \"linear-gradient(135deg, #020617 0%, #0a1628 100%)\",\n} as const;\n\nexport type PrimitiveGradient = keyof typeof primitiveGradients;\n\n// ─── Spacing Scale (px values) ────────────────────────────────────────────────\n\nexport const primitiveSpacing = {\n 0: 0,\n 1: 4,\n 2: 8,\n 3: 12,\n 4: 16,\n 5: 20,\n 6: 24,\n 8: 32,\n 10: 40,\n 12: 48,\n 14: 56,\n 16: 64,\n 20: 80,\n 24: 96,\n} as const;\n\nexport type PrimitiveSpacing = keyof typeof primitiveSpacing;\n\n// ─── Layout Containers (px) — max-width standards ────────────────────────────\n// Use `text` for text-heavy sections (hero copy, CTA), `content` for general\n// sections, and `wide` for full-bleed feature bento grids.\n\nexport const primitiveContainer = {\n /** Text-focused: hero headlines, CTA copy, FAQ — optimized for reading */\n text: 896, // ~56rem / max-w-4xl\n /** Standard content sections: pricing, architecture, blog */\n content: 1152, // ~72rem / max-w-6xl\n /** Wide sections: feature bento, testimonials, product demos */\n wide: 1400, // ~87.5rem — Vercel/Supabase standard\n} as const;\n\nexport type PrimitiveContainer = keyof typeof primitiveContainer;\n\n// ─── Sizing Scale — component heights (px) ────────────────────────────────────\n\nexport const primitiveSizing = {\n xs: 20,\n /** Geist button-specific size (24px). Larger than xs by design. */\n tiny: 24,\n sm: 32,\n md: 40,\n lg: 48,\n xl: 56,\n \"2xl\": 80,\n} as const;\n\nexport type PrimitiveSizing = keyof typeof primitiveSizing;\n\n// ─── Border Radius (px) ───────────────────────────────────────────────────────\n\nexport const primitiveRadius = {\n none: 0,\n sm: 4,\n md: 6, // Geist default — slightly more rounded than 4px\n lg: 8,\n xl: 12,\n \"2xl\": 16,\n full: 9999,\n} as const;\n\nexport type PrimitiveRadius = keyof typeof primitiveRadius;\n\n// ─── Font Sizes (px) ──────────────────────────────────────────────────────────\n\nexport const primitiveFontSize = {\n xs: 12,\n sm: 14,\n base: 16,\n lg: 18,\n xl: 20,\n \"2xl\": 24,\n \"3xl\": 30,\n \"4xl\": 36,\n} as const;\n\nexport type PrimitiveFontSize = keyof typeof primitiveFontSize;\n\n// ─── Font Weights ─────────────────────────────────────────────────────────────\n\nexport const primitiveFontWeight = {\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n} as const;\n\nexport type PrimitiveFontWeight = keyof typeof primitiveFontWeight;\n\n// ─── Font Families — VI §Typography ──────────────────────────────────────────\n// Aligned with @nebutra/design-tokens SSOT (tokens/core.json fontFamily.*).\n// EN primary: Geist (Vercel variable, 100–900)\n// EN mono: Geist Mono\n// CN primary: Noto Sans SC → PingFang SC → Microsoft YaHei → vivo Sans (print)\n\nexport const primitiveFontFamily = {\n /** Default body/UI stack — Geist with CJK auto-fallbacks */\n sans: '\"Geist\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", -apple-system, BlinkMacSystemFont, system-ui, sans-serif',\n /** Chinese body/UI stack */\n cnSans: '\"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", \"vivo Sans\", sans-serif',\n /** Display / hero headlines */\n display: '\"Geist\", \"Noto Sans SC\", sans-serif',\n /** Heading (alias of display) */\n heading: '\"Geist\", \"Noto Sans SC\", sans-serif',\n /** Code / monospace — Geist Mono pairs with Geist for full family coverage */\n mono: '\"Geist Mono\", ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, monospace',\n} as const;\n\nexport type PrimitiveFontFamily = keyof typeof primitiveFontFamily;\n\n// ─── Shadows ──────────────────────────────────────────────────────────────────\n\nexport const primitiveShadow = {\n none: \"none\",\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\n xl: \"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\n /** Brand glow — blue tone for focus/highlight states */\n brandGlow: \"0 0 0 3px rgb(0 51 254 / 0.15)\",\n} as const;\n\nexport type PrimitiveShadow = keyof typeof primitiveShadow;\n\n// ─── Transition ───────────────────────────────────────────────────────────────\n\n/**\n * Primitive transition tokens — aligned with the four-rail motion scale\n * (SSOT: @nebutra/design-tokens core.json → duration.*).\n * Keys mirror semantic.json motion.duration.*; values are in ms.\n */\nexport const primitiveTransition = {\n duration: {\n micro: 100, // hover, focus, small state changes\n flow: 200, // standard state transitions (default)\n reveal: 300, // larger motion (accordion, modal, drawer)\n cinematic: 500, // hero entrance, big delight moments\n },\n easing: {\n default: \"ease-out\",\n spring: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n inOut: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n} as const;\n\n// ─── Focus Ring ───────────────────────────────────────────────────────────────\n\nexport const primitiveFocusRing = {\n width: 2, // px\n offset: 2, // px — gap between element and ring\n} as const;\n","/**\n * Shadow Token System\n *\n * Geist-style elevation scale: xs → 2xl + brand glow variants.\n * CSS variables (--elevation-*) are defined in @nebutra/tokens/styles.css\n * with automatic light / dark mode switching.\n *\n * @see packages/design/tokens/styles.css @theme inline\n * @see apps/landing/DESIGN.md Section 10.10\n */\n\n/**\n * Ordered elevation scale — lowest → highest\n */\nexport const shadowScale = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\"] as const;\nexport const shadowBrandScale = [\"brand\", \"brand-lg\"] as const;\n\n/**\n * Tailwind shadow class references (dark-mode aware via CSS variables).\n *\n * Semantic mapping:\n * xs → hovered rows, focused input rings\n * sm → cards, tooltips\n * md → dropdowns, popovers\n * lg → sticky headers, floating panels\n * xl → modals, dialogs\n * 2xl → top-level overlays\n * brand → ring + glow using 云毓蓝 (primary)\n * brand-lg → stronger brand glow (hero CTAs, featured cards)\n *\n * @example\n * <div className={shadowClasses.md}>…</div>\n */\nexport const shadowClasses = {\n none: \"shadow-none\",\n xs: \"shadow-xs\",\n sm: \"shadow-sm\",\n md: \"shadow-md\",\n lg: \"shadow-lg\",\n xl: \"shadow-xl\",\n \"2xl\": \"shadow-2xl\",\n brand: \"shadow-brand\",\n \"brand-lg\": \"shadow-brand-lg\",\n} as const;\n\n/**\n * CSS variable references for inline styles or JS/Framer Motion animations.\n * Values resolve automatically for the current light/dark theme.\n *\n * @example\n * style={{ boxShadow: shadowVars.md }}\n * animate={{ boxShadow: shadowVars.brand }}\n */\nexport const shadowVars = {\n none: \"none\",\n xs: \"var(--elevation-xs)\",\n sm: \"var(--elevation-sm)\",\n md: \"var(--elevation-md)\",\n lg: \"var(--elevation-lg)\",\n xl: \"var(--elevation-xl)\",\n \"2xl\": \"var(--elevation-2xl)\",\n brand: \"var(--elevation-brand)\",\n \"brand-lg\": \"var(--elevation-brand-lg)\",\n} as const;\n\nexport type ShadowLevel = (typeof shadowScale)[number];\nexport type ShadowBrand = (typeof shadowBrandScale)[number];\nexport type ShadowKey = keyof typeof shadowClasses;\n","/**\n * Overlay Component Tokens — Layer 3\n *\n * Dialog, Menu, Popover, Tooltip, and Command surfaces share one depth,\n * elevation, radius, and motion contract. Components should consume these\n * semantic class tokens instead of inlining z-index, shadow, radius, or\n * duration decisions.\n */\n\nimport { primitiveRadius, primitiveTransition } from \"../primitive\";\nimport { shadowClasses } from \"../shadows\";\n\nconst overlayFocusRingClassName =\n \"outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\";\n\nexport const overlayZIndex = {\n backdrop: 1040,\n modal: 1050,\n popover: 1060,\n tooltip: 1070,\n} as const;\n\nexport const overlayTokens = {\n radius: {\n menu: primitiveRadius.lg,\n modal: primitiveRadius.xl,\n popover: primitiveRadius.lg,\n tooltip: primitiveRadius.md,\n },\n motion: {\n duration: primitiveTransition.duration.flow,\n easing: primitiveTransition.easing.default,\n hoverOpenDelay: primitiveTransition.duration.flow,\n hoverCloseDelay: primitiveTransition.duration.micro,\n },\n zIndex: overlayZIndex,\n} as const;\n\nexport const overlayClassNames = {\n focusRing: overlayFocusRingClassName,\n backdrop:\n \"fixed inset-0 bg-black/40 backdrop-blur-sm transition-[opacity,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none\",\n modalSurface: [\n \"fixed left-1/2 top-1/2 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4\",\n \"border border-border/60 bg-background/95 p-6 text-foreground backdrop-blur-xl\",\n \"rounded-[var(--radius-xl)]\",\n shadowClasses[\"2xl\"],\n \"outline-none\",\n \"transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0\",\n \"motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none\",\n ].join(\" \"),\n commandSurface: [\n \"fixed left-1/2 top-[18vh] w-[calc(100vw-2rem)] max-w-xl -translate-x-1/2 overflow-hidden\",\n \"rounded-[var(--radius-lg)] border border-border/70 bg-popover text-popover-foreground\",\n shadowClasses[\"2xl\"],\n \"transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-starting-style:translate-y-[-0.5rem] data-starting-style:scale-95 data-starting-style:opacity-0\",\n \"data-ending-style:translate-y-[-0.5rem] data-ending-style:scale-95 data-ending-style:opacity-0\",\n \"motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none\",\n ].join(\" \"),\n menuSurface: [\n \"min-w-32 overflow-hidden rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-1 text-popover-foreground backdrop-blur-md\",\n shadowClasses.xl,\n \"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0 data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n \"motion-reduce:transition-none motion-reduce:data-[starting-style]:transform-none motion-reduce:data-[ending-style]:transform-none\",\n ].join(\" \"),\n selectSurface: [\n \"max-h-[var(--select-content-max-height)] min-w-[var(--select-content-min-width)] overflow-hidden\",\n \"rounded-[var(--select-content-radius)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md\",\n \"shadow-[var(--select-content-shadow)] outline-none\",\n \"transition-[opacity,transform,display] duration-[var(--select-duration)] ease-[var(--select-easing)]\",\n \"data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0\",\n \"motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none\",\n ].join(\" \"),\n navigationMenuSurface: [\n \"min-w-32 overflow-hidden rounded-[var(--radius-xl)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md\",\n shadowClasses.xl,\n \"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0 data-[ending-style]:scale-95 data-[ending-style]:opacity-0\",\n \"motion-reduce:transition-none motion-reduce:data-[starting-style]:transform-none motion-reduce:data-[ending-style]:transform-none\",\n ].join(\" \"),\n popoverSurface: [\n \"w-72 rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-4 text-popover-foreground backdrop-blur-md\",\n shadowClasses.xl,\n \"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-[open]:opacity-100 data-[closed]:opacity-0 data-[closed]:scale-95 data-[open]:scale-100\",\n \"motion-reduce:transition-none motion-reduce:data-[closed]:transform-none motion-reduce:data-[open]:transform-none\",\n ].join(\" \"),\n tooltipSurface: [\n \"overflow-hidden rounded-[var(--radius-md)] border border-border/70 bg-popover/95 px-3 py-1.5 text-sm text-popover-foreground backdrop-blur-md\",\n shadowClasses.md,\n \"transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0\",\n \"motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none\",\n ].join(\" \"),\n sheetBackdrop: [\n \"fixed inset-0 bg-[var(--sheet-overlay-background)] backdrop-blur-[var(--sheet-overlay-blur)]\",\n \"transition-[opacity,backdrop-filter,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none\",\n ].join(\" \"),\n sheetSurface: [\n \"fixed flex flex-col overflow-hidden border border-border bg-[var(--sheet-background)] text-foreground shadow-[var(--sheet-shadow)]\",\n \"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-out)]\",\n \"data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none\",\n ].join(\" \"),\n closeButton: `absolute right-4 top-4 rounded-[var(--radius-sm)] opacity-70 ring-offset-background ${overlayFocusRingClassName} transition-opacity duration-[var(--motion-duration-micro)] ease-[var(--ease-out)] hover:opacity-100 disabled:pointer-events-none data-[open]:bg-accent data-[open]:text-muted-foreground motion-reduce:transition-none`,\n} as const;\n","/**\n * Canonical primitive overlay classes.\n *\n * Keep overlay surface, focus, and menu item decisions here so Dialog, Popover,\n * Command, and menu-family primitives do not drift back to shadcn-style inline\n * shadow/radius/ring classes.\n */\n\nconst menuItemBaseClassName = [\n \"relative flex cursor-default select-none items-center rounded-[var(--radius-sm)] px-2 py-1.5 text-sm\",\n \"outline-none transition-colors duration-micro ease-out\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-60\",\n].join(\" \");\n\nconst menuHighlightedClassName =\n \"data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground\";\n\nconst menubarFocusClassName =\n \"hover:bg-accent hover:text-accent-foreground focus-visible:bg-accent focus-visible:text-accent-foreground\";\n\nexport const overlayPrimitiveClassNames = {\n modalSurface:\n \"rounded-[var(--radius-md)] border-border/70 bg-popover/95 text-popover-foreground shadow-xl\",\n popoverSurface: \"rounded-[var(--radius-md)] border-border/70 bg-popover/95 shadow-md\",\n menuSurface: \"rounded-[var(--radius-md)] border-border/70 bg-popover/95 shadow-md\",\n commandFrame: \"rounded-[var(--radius-md)] bg-popover text-popover-foreground\",\n commandDialogSurface: \"overflow-hidden p-0\",\n commandItem: [\n menuItemBaseClassName,\n \"data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground\",\n \"data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50\",\n ].join(\" \"),\n contextMenuItem: [\n menuItemBaseClassName,\n \"min-h-8 gap-2\",\n menuHighlightedClassName,\n \"data-[variant=destructive]:text-destructive\",\n \"data-[variant=destructive]:data-[highlighted]:bg-destructive/10\",\n \"data-[variant=destructive]:data-[highlighted]:text-destructive\",\n ].join(\" \"),\n menuItem: [menuItemBaseClassName, menuHighlightedClassName].join(\" \"),\n menuSubTrigger: [\n menuItemBaseClassName,\n \"data-[highlighted]:bg-accent data-[popup-open]:bg-accent\",\n ].join(\" \"),\n menuCheckboxItem: [menuItemBaseClassName, menuHighlightedClassName, \"pl-8\"].join(\" \"),\n menuIndicator:\n \"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center text-muted-foreground\",\n menubarRoot:\n \"flex h-10 items-center space-x-1 rounded-[var(--radius-md)] border border-border bg-background p-1 outline-none\",\n menubarTrigger: [\n \"flex cursor-default select-none items-center rounded-[var(--radius-sm)] px-3 py-1.5 text-sm font-medium\",\n \"outline-none transition-colors duration-micro ease-out\",\n menubarFocusClassName,\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n ].join(\" \"),\n menubarSubTrigger: [\n \"flex cursor-default select-none items-center rounded-[var(--radius-sm)] px-2 py-1.5 text-sm\",\n \"outline-none transition-colors duration-micro ease-out\",\n menubarFocusClassName,\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n ].join(\" \"),\n menubarItem: [\n \"relative flex cursor-default select-none items-center rounded-[var(--radius-sm)] px-2 py-1.5 text-sm\",\n \"outline-none transition-colors duration-micro ease-out\",\n menubarFocusClassName,\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n ].join(\" \"),\n menubarCheckboxItem: [\n \"relative flex cursor-default select-none items-center rounded-[var(--radius-sm)] py-1.5 pl-8 pr-2 text-sm\",\n \"outline-none transition-colors duration-micro ease-out\",\n menubarFocusClassName,\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n ].join(\" \"),\n} as const;\n","\"use client\";\n\nimport { Menu as BaseMenu } from \"@base-ui/react/menu\";\nimport { Check, ChevronRight, Status as Circle } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { overlayClassNames, overlayZIndex } from \"../tokens/components/overlay\";\nimport { cn } from \"../utils/cn\";\nimport { overlayPrimitiveClassNames } from \"./overlay\";\n\ntype DropdownMenuContextValue = {\n setOpen: (open: boolean) => void;\n};\n\nconst DropdownMenuContext = React.createContext<DropdownMenuContextValue | null>(null);\n\ntype DropdownMenuProps = React.ComponentPropsWithoutRef<typeof BaseMenu.Root>;\n\nfunction DropdownMenu({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n children,\n ...props\n}: DropdownMenuProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const open = controlledOpen ?? uncontrolledOpen;\n\n function setOpen(\n nextOpen: boolean,\n eventDetails?: Parameters<NonNullable<DropdownMenuProps[\"onOpenChange\"]>>[1],\n ) {\n if (controlledOpen === undefined) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen, eventDetails as never);\n }\n\n const contextValue: DropdownMenuContextValue = { setOpen };\n\n return (\n <DropdownMenuContext.Provider value={contextValue}>\n <BaseMenu.Root open={open} onOpenChange={setOpen} {...props}>\n {children}\n </BaseMenu.Root>\n </DropdownMenuContext.Provider>\n );\n}\nDropdownMenu.displayName = \"DropdownMenu\";\n\ntype DropdownMenuTriggerProps = React.ComponentProps<typeof BaseMenu.Trigger> & {\n asChild?: boolean;\n};\n\nconst DropdownMenuTrigger = ({\n asChild,\n children,\n render,\n ref,\n ...props\n}: DropdownMenuTriggerProps & { ref?: React.Ref<HTMLButtonElement> | undefined }) => {\n const context = React.use(DropdownMenuContext);\n function openFromTrigger() {\n context?.setOpen(true);\n }\n\n const childRenderElement =\n asChild && React.isValidElement<Record<string, unknown>>(children)\n ? React.cloneElement(children, {\n onMouseDown: (event: React.MouseEvent<HTMLElement>) => {\n (\n children.props.onMouseDown as\n | ((event: React.MouseEvent<HTMLElement>) => void)\n | undefined\n )?.(event);\n if (!event.defaultPrevented) {\n openFromTrigger();\n }\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n (\n children.props.onKeyDown as\n | ((event: React.KeyboardEvent<HTMLElement>) => void)\n | undefined\n )?.(event);\n if (!event.defaultPrevented && (event.key === \"Enter\" || event.key === \" \")) {\n openFromTrigger();\n }\n },\n })\n : null;\n\n const renderElement = childRenderElement ?? render;\n return (\n <BaseMenu.Trigger\n ref={ref}\n render={renderElement as React.ComponentProps<typeof BaseMenu.Trigger>[\"render\"]}\n {...(renderElement ? props : { ...props, children })}\n />\n );\n};\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\nconst DropdownMenuGroup = BaseMenu.Group;\n\nconst DropdownMenuPortal = BaseMenu.Portal;\n\nconst DropdownMenuSub = BaseMenu.SubmenuRoot;\n\nconst DropdownMenuRadioGroup = BaseMenu.RadioGroup;\n\nconst DropdownMenuSubTrigger = ({\n className,\n inset,\n children,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseMenu.SubmenuTrigger> & {\n inset?: boolean;\n} & { ref?: React.Ref<React.ElementRef<typeof BaseMenu.SubmenuTrigger>> | undefined }) => (\n <BaseMenu.SubmenuTrigger\n ref={ref}\n className={cn(overlayPrimitiveClassNames.menuSubTrigger, inset && \"pl-8\", className)}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto size-4\" />\n </BaseMenu.SubmenuTrigger>\n);\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\";\n\nconst DropdownMenuSubContent = ({\n className,\n style,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseMenu.Popup> & {\n ref?: React.Ref<React.ElementRef<typeof BaseMenu.Popup>> | undefined;\n}) => (\n <BaseMenu.Portal>\n <BaseMenu.Positioner>\n <BaseMenu.Popup\n ref={ref}\n className={cn(\n overlayClassNames.menuSurface,\n overlayPrimitiveClassNames.menuSurface,\n className,\n )}\n style={{ zIndex: overlayZIndex.popover, ...style }}\n {...props}\n />\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n);\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\";\n\nexport interface DropdownMenuContentProps\n extends React.ComponentPropsWithoutRef<typeof BaseMenu.Popup> {\n align?: React.ComponentProps<typeof BaseMenu.Positioner>[\"align\"];\n sideOffset?: React.ComponentProps<typeof BaseMenu.Positioner>[\"sideOffset\"];\n alignOffset?: React.ComponentProps<typeof BaseMenu.Positioner>[\"alignOffset\"];\n side?: React.ComponentProps<typeof BaseMenu.Positioner>[\"side\"];\n}\n\nconst DropdownMenuContent = ({\n className,\n style,\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n side = \"bottom\",\n ref,\n ...props\n}: DropdownMenuContentProps & {\n ref?: React.Ref<React.ElementRef<typeof BaseMenu.Popup>> | undefined;\n}) => (\n <BaseMenu.Portal>\n <BaseMenu.Positioner\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n side={side}\n >\n <BaseMenu.Popup\n ref={ref}\n className={cn(\n overlayClassNames.menuSurface,\n overlayPrimitiveClassNames.menuSurface,\n className,\n )}\n style={{ zIndex: overlayZIndex.popover, ...style }}\n {...props}\n />\n </BaseMenu.Positioner>\n </BaseMenu.Portal>\n);\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nconst DropdownMenuItem = ({\n className,\n inset,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseMenu.Item> & {\n inset?: boolean;\n} & { ref?: React.Ref<React.ElementRef<typeof BaseMenu.Item>> | undefined }) => (\n <BaseMenu.Item\n ref={ref}\n className={cn(overlayPrimitiveClassNames.menuItem, inset && \"pl-8\", className)}\n {...props}\n />\n);\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nconst DropdownMenuCheckboxItem = ({\n className,\n children,\n checked,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseMenu.CheckboxItem> & {\n ref?: React.Ref<React.ElementRef<typeof BaseMenu.CheckboxItem>> | undefined;\n}) => (\n <BaseMenu.CheckboxItem\n ref={ref}\n className={cn(overlayPrimitiveClassNames.menuCheckboxItem, className)}\n {...(checked !== undefined && { checked })}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <BaseMenu.CheckboxItemIndicator>\n <Check className=\"size-4\" />\n </BaseMenu.CheckboxItemIndicator>\n </span>\n {children}\n </BaseMenu.CheckboxItem>\n);\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nconst DropdownMenuRadioItem = ({\n className,\n children,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseMenu.RadioItem> & {\n ref?: React.Ref<React.ElementRef<typeof BaseMenu.RadioItem>> | undefined;\n}) => (\n <BaseMenu.RadioItem\n ref={ref}\n className={cn(overlayPrimitiveClassNames.menuCheckboxItem, className)}\n {...props}\n >\n <span className=\"absolute left-2 flex size-3.5 items-center justify-center\">\n <BaseMenu.RadioItemIndicator>\n <Circle className=\"size-2 fill-current\" />\n </BaseMenu.RadioItemIndicator>\n </span>\n {children}\n </BaseMenu.RadioItem>\n);\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\";\n\nconst DropdownMenuLabel = ({\n className,\n inset,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & {\n inset?: boolean;\n} & { ref?: React.Ref<HTMLDivElement> | undefined }) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...props}\n />\n);\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nconst DropdownMenuSeparator = ({\n className,\n orientation = \"horizontal\",\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseMenu.Separator> & {\n ref?: React.Ref<React.ElementRef<typeof BaseMenu.Separator>> | undefined;\n}) => (\n <BaseMenu.Separator\n ref={ref}\n orientation={orientation}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n);\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)} {...props} />\n );\n};\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\";\n\nexport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuPortal,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n};\n","\"use client\";\n\nimport { MoreHorizontal, Pin } from \"@nebutra/icons\";\nimport type * as React from \"react\";\nimport { Badge } from \"../primitives/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { cn } from \"../utils/cn\";\n\n/* ─────────────────────────────────────────────────────────────────────────────\n * GalleryCard\n *\n * Discovery card pattern modelled on MiniMax / OpenAI GPT Store / Vercel\n * templates. Renders an icon tile, title, description, metadata strip (author\n * + metric + optional trailing slot), action menu, and featured / pinned\n * indicators.\n *\n * The card can render as one of:\n * - <a> (when `href` is provided — accessible link, full-card clickable)\n * - <button> (when only `onClick` is provided)\n * - <div> (no interaction)\n *\n * The action menu always stops propagation so it never triggers card\n * navigation when clicked.\n * ───────────────────────────────────────────────────────────────────────── */\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type GalleryCardIconTone =\n | \"neutral\"\n | \"blue\"\n | \"cyan\"\n | \"purple\"\n | \"amber\"\n | \"green\"\n | \"pink\";\n\nexport type GalleryCardBadgeTone = \"beta\" | \"new\" | \"owner\" | \"featured\" | \"coming-soon\";\n\nexport interface GalleryCardMetadata {\n /** Author / publisher name, e.g. \"By MiniMax\" */\n author?: string;\n /** Pre-formatted secondary metric, e.g. \"710478 浏览量\" or \"1.2k uses\" */\n metric?: string;\n /** Custom metadata slot at end (e.g. star count, last updated) */\n trailing?: React.ReactNode;\n}\n\nexport interface GalleryCardBadge {\n label: string;\n tone: GalleryCardBadgeTone;\n}\n\nexport interface GalleryCardAction {\n id: string;\n label: string;\n onSelect: () => void;\n destructive?: boolean;\n}\n\nexport interface GalleryCardRenderLinkProps {\n href: string;\n children: React.ReactNode;\n className?: string;\n \"aria-label\"?: string;\n}\n\nexport interface GalleryCardProps {\n title: string;\n description?: string;\n /** Icon at top-left (16-24px). Common: emoji, lucide icon, or 32x32 avatar */\n icon?: React.ReactNode;\n /** Color hint for the icon background tile */\n iconTone?: GalleryCardIconTone;\n /** Optional badge rendered inline next to title (e.g. \"Featured\", \"Beta\") */\n badge?: GalleryCardBadge;\n /** Pin/star indicator at top-right (boolean) — renders a small Pin icon */\n pinned?: boolean;\n metadata?: GalleryCardMetadata;\n /** Dropdown action menu items at top-right (••• kebab) */\n actions?: GalleryCardAction[];\n /** Click handler for the whole card — makes the card behave as a button */\n onClick?: () => void;\n /** If provided, makes the card a link (renders <a> with onClick, accessible) */\n href?: string;\n /** Replace the rendered link element (e.g. Next.js Link) */\n renderLink?: (props: GalleryCardRenderLinkProps) => React.ReactElement;\n className?: string;\n}\n\n// ─── Token maps ───────────────────────────────────────────────────────────────\n\n/**\n * Icon tile color pairs. Each tone resolves to a (background, foreground) pair\n * that works in both light and dark mode using semantic Tailwind palette steps.\n * `neutral` falls back to muted tokens so it always blends with the card.\n */\nconst iconToneStyles: Record<GalleryCardIconTone, string> = {\n neutral: \"bg-muted text-muted-foreground\",\n blue: \"bg-blue-50 text-blue-700 dark:bg-blue-950/40 dark:text-blue-300\",\n cyan: \"bg-cyan-50 text-cyan-700 dark:bg-cyan-950/40 dark:text-cyan-300\",\n purple: \"bg-purple-50 text-purple-700 dark:bg-purple-950/40 dark:text-purple-300\",\n amber: \"bg-amber-50 text-amber-700 dark:bg-amber-950/40 dark:text-amber-300\",\n green: \"bg-green-50 text-green-700 dark:bg-green-950/40 dark:text-green-300\",\n pink: \"bg-pink-50 text-pink-700 dark:bg-pink-950/40 dark:text-pink-300\",\n};\n\nconst badgeToneToVariant: Record<\n GalleryCardBadgeTone,\n \"beta\" | \"new\" | \"owner\" | \"featured\" | \"coming-soon\"\n> = {\n beta: \"beta\",\n new: \"new\",\n owner: \"owner\",\n featured: \"featured\",\n \"coming-soon\": \"coming-soon\",\n};\n\n// ─── Shared className ─────────────────────────────────────────────────────────\n\nconst cardClassName = cn(\n \"group relative block rounded-[var(--radius-xl)] border border-border bg-card text-card-foreground p-5 text-left\",\n \"transition-[border-color,box-shadow,transform] duration-150 motion-reduce:transition-none motion-reduce:transform-none\",\n \"hover:border-neutral-7 hover:shadow-sm hover:-translate-y-px motion-reduce:hover:translate-y-0\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n);\n\n// ─── Subcomponents ────────────────────────────────────────────────────────────\n\ninterface GalleryCardActionsMenuProps {\n actions: GalleryCardAction[];\n title: string;\n}\n\n/**\n * Action menu trigger + popup. Mounted in a wrapper that stops both pointer\n * down and click events so the surrounding link / button never fires when the\n * user opens the menu or selects an item.\n */\nfunction GalleryCardActionsMenu({ actions, title }: GalleryCardActionsMenuProps) {\n function stop(event: React.SyntheticEvent) {\n event.stopPropagation();\n }\n\n return (\n <div onClickCapture={stop} onPointerDownCapture={stop}>\n <DropdownMenu>\n <DropdownMenuTrigger\n render={\n <button\n type=\"button\"\n aria-label={`Actions for ${title}`}\n className={cn(\n \"inline-flex h-7 w-7 items-center justify-center rounded-[var(--radius-md)]\",\n \"text-muted-foreground transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n )}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n </button>\n }\n />\n <DropdownMenuContent align=\"end\" sideOffset={6}>\n {actions.map((action) => (\n <DropdownMenuItem\n key={action.id}\n onClick={(event) => {\n event.stopPropagation();\n action.onSelect();\n }}\n className={cn(\n action.destructive &&\n \"text-destructive data-[highlighted]:bg-destructive/10 data-[highlighted]:text-destructive\",\n )}\n >\n {action.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n\ninterface GalleryCardBodyProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n iconTone: GalleryCardIconTone;\n badge?: GalleryCardBadge;\n pinned?: boolean;\n metadata?: GalleryCardMetadata;\n actions?: GalleryCardAction[];\n}\n\n/**\n * Inner card body — does not include the outer interactive wrapper. Pure\n * presentation, identical regardless of whether the card is link, button or\n * div on the outside.\n */\nfunction GalleryCardBody({\n title,\n description,\n icon,\n iconTone,\n badge,\n pinned,\n metadata,\n actions,\n}: GalleryCardBodyProps) {\n const hasActions = Boolean(actions && actions.length > 0);\n const hasMetadataStrip = Boolean(metadata?.author || metadata?.metric || metadata?.trailing);\n\n return (\n <>\n {/* Top row: icon + (pin, actions) */}\n <div className=\"mb-3 flex items-start justify-between gap-2\">\n {icon ? (\n <div\n className={cn(\n \"flex h-10 w-10 shrink-0 items-center justify-center rounded-[var(--radius-lg)] text-base\",\n iconToneStyles[iconTone],\n )}\n aria-hidden=\"true\"\n >\n {icon}\n </div>\n ) : (\n <span className=\"h-10 w-10 shrink-0\" aria-hidden=\"true\" />\n )}\n\n {(pinned || hasActions) && (\n <div className=\"flex items-center gap-1\">\n {pinned && (\n <Pin className=\"h-3.5 w-3.5 fill-amber-400 text-amber-500\" aria-label=\"Pinned\" />\n )}\n {hasActions && actions ? (\n <GalleryCardActionsMenu actions={actions} title={title} />\n ) : null}\n </div>\n )}\n </div>\n\n {/* Title + optional inline badge */}\n <div className=\"mb-1.5 flex items-center gap-2\">\n <h3 className=\"line-clamp-1 text-[15px] font-semibold leading-tight\">{title}</h3>\n {badge && (\n <Badge variant={badgeToneToVariant[badge.tone]} size=\"sm\">\n {badge.label}\n </Badge>\n )}\n </div>\n\n {/* Description (always reserves space so cards align in a grid) */}\n <p className=\"mb-4 line-clamp-2 min-h-[2.5rem] text-sm text-muted-foreground\">\n {description ?? \" \"}\n </p>\n\n {/* Metadata strip */}\n {hasMetadataStrip && (\n <div className=\"flex items-center justify-between gap-2 border-t border-border pt-3 text-xs text-muted-foreground\">\n <span className=\"truncate\">{metadata?.author ?? \"\"}</span>\n <span className=\"flex items-center gap-2\">\n {metadata?.metric && <span className=\"tabular-nums\">{metadata.metric}</span>}\n {metadata?.trailing}\n </span>\n </div>\n )}\n </>\n );\n}\n\n// ─── Public component ─────────────────────────────────────────────────────────\n\nexport function GalleryCard(props: GalleryCardProps): React.ReactElement {\n const {\n title,\n description,\n icon,\n iconTone = \"neutral\",\n badge,\n pinned,\n metadata,\n actions,\n onClick,\n href,\n renderLink,\n className,\n } = props;\n\n const body = (\n <GalleryCardBody\n title={title}\n description={description}\n icon={icon}\n iconTone={iconTone}\n badge={badge}\n pinned={pinned}\n metadata={metadata}\n actions={actions}\n />\n );\n\n const composedClassName = cn(cardClassName, \"cursor-pointer\", className);\n\n // 1. Link variant (preferred for navigation — accessible, right-clickable)\n if (href) {\n if (renderLink) {\n return renderLink({\n href,\n className: composedClassName,\n \"aria-label\": title,\n children: body,\n });\n }\n return (\n <a href={href} aria-label={title} className={composedClassName} onClick={onClick}>\n {body}\n </a>\n );\n }\n\n // 2. Button variant — full-card click without navigation\n if (onClick) {\n return (\n <button type=\"button\" aria-label={title} className={composedClassName} onClick={onClick}>\n {body}\n </button>\n );\n }\n\n // 3. Static variant — no interaction; keep hover affordance off\n return <div className={cn(cardClassName, \"cursor-default\", className)}>{body}</div>;\n}\n\nGalleryCard.displayName = \"GalleryCard\";\n","\"use client\";\n\nimport { Check, Copy } from \"@nebutra/icons\";\nimport type { ComponentType, HTMLAttributes, ReactNode } from \"react\";\nimport { isValidElement, useState } from \"react\";\nimport { cn } from \"../utils/cn\";\n\ntype IconComponent = ComponentType<{ className?: string; \"aria-hidden\"?: boolean }>;\ntype IconInput = IconComponent | ReactNode;\n\nexport interface KineticFeatureCardProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n icon?: IconInput;\n eyebrow?: ReactNode;\n title: ReactNode;\n description: ReactNode;\n children?: ReactNode;\n}\n\nexport interface KineticCodePreviewProps extends HTMLAttributes<HTMLDivElement> {\n filename?: string;\n language?: string;\n lines: readonly string[];\n}\n\nexport interface KineticConsoleFrameProps extends HTMLAttributes<HTMLDivElement> {\n title?: string;\n status?: ReactNode;\n children: ReactNode;\n}\n\nexport type KineticStepRailProps = HTMLAttributes<HTMLDivElement>;\n\nexport interface KineticMorphSurfaceProps extends HTMLAttributes<HTMLDivElement> {\n activeKey?: string | number;\n children: ReactNode;\n}\n\nexport interface KineticSignalMarqueeProps extends HTMLAttributes<HTMLDivElement> {\n eyebrow?: ReactNode;\n children: ReactNode;\n}\n\nexport interface KineticCommandBoxProps extends HTMLAttributes<HTMLDivElement> {\n command: string;\n copyLabel: string;\n copiedLabel: string;\n}\n\nexport interface KineticStepProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n icon?: IconComponent;\n index: number;\n title: ReactNode;\n description: ReactNode;\n phaseLabel?: string;\n}\n\nfunction lineTone(line: string) {\n const trimmed = line.trim();\n\n if (trimmed.startsWith(\"//\") || trimmed.startsWith(\"--\")) {\n return \"text-muted-foreground/55 italic\";\n }\n\n if (/\\b(await|const|export|return|CREATE|ALTER|POLICY|USING|ENABLE|TABLE)\\b/.test(trimmed)) {\n return \"text-primary font-medium\";\n }\n\n if (trimmed.includes(\":\")) {\n return \"text-emerald-600 dark:text-emerald-400\";\n }\n\n return \"text-foreground/78\";\n}\n\nfunction renderIcon(icon: IconInput | undefined) {\n if (!icon) {\n return null;\n }\n\n if (typeof icon === \"function\") {\n const Icon = icon;\n return <Icon aria-hidden className=\"size-7 text-primary\" />;\n }\n\n if (isValidElement(icon)) {\n return (\n <span\n aria-hidden\n className=\"inline-grid place-items-center text-primary [&_svg]:size-7 [&_svg]:text-primary\"\n >\n {icon}\n </span>\n );\n }\n\n return icon;\n}\n\nexport function KineticFeatureCard({\n icon,\n eyebrow,\n title,\n description,\n children,\n className,\n ...props\n}: KineticFeatureCardProps) {\n const renderedIcon = renderIcon(icon);\n\n return (\n <article\n className={cn(\n \"group/kinetic relative flex h-full min-h-[540px] flex-col overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/82 p-6 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_24px_90px_-70px_var(--foreground)] backdrop-blur-2xl transition-[transform,border-color,box-shadow,background-color] duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] hover:-translate-y-1 hover:border-foreground/25 hover:bg-background/94 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_34px_110px_-74px_var(--foreground)] focus-within:-translate-y-1 focus-within:border-foreground/25 sm:p-7\",\n className,\n )}\n data-taste=\"nebutra-texture-cutout-card\"\n {...props}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-8)_1px,transparent_0)] bg-[length:18px_18px] opacity-[0.12]\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-40 bg-gradient-to-b from-primary/12 via-primary/5 to-transparent\"\n style={{ maskImage: \"linear-gradient(to bottom, black 45%, transparent 100%)\" }}\n />\n <div className=\"absolute right-0 top-0 z-10 rounded-bl-[2rem] border-b border-l border-border/60 bg-muted/55 px-4 py-2 backdrop-blur-xl\">\n <span className=\"font-mono text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {eyebrow}\n </span>\n </div>\n\n <div className=\"relative z-10 flex h-full flex-col\">\n <div className=\"mb-8 flex items-start justify-between gap-4 pr-16\">\n {renderedIcon && (\n <div className=\"grid size-14 place-items-center rounded-[var(--radius-xl)] border border-border/65 bg-background/75 shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_16px_42px_-34px_var(--foreground)] transition-transform duration-500 group-hover/kinetic:-translate-y-1\">\n {renderedIcon}\n </div>\n )}\n </div>\n\n <h3\n className=\"text-2xl font-semibold text-foreground text-balance\"\n style={{ letterSpacing: \"var(--tracking-heading)\", lineHeight: \"var(--leading-heading)\" }}\n >\n {title}\n </h3>\n <p className=\"mt-4 text-base font-medium leading-7 text-muted-foreground text-balance\">\n {description}\n </p>\n\n <div className=\"mt-auto pt-8\">{children}</div>\n </div>\n </article>\n );\n}\n\nexport function KineticCodePreview({\n filename = \"artifact.ts\",\n language = \"ts\",\n lines,\n className,\n ...props\n}: KineticCodePreviewProps) {\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-[var(--radius-xl)] border border-border/60 bg-muted/30 shadow-[0_18px_70px_-56px_var(--foreground)] transition-[transform,border-color,box-shadow] duration-500 group-hover/kinetic:-translate-y-2 group-hover/kinetic:border-foreground/20 group-hover/kinetic:shadow-[0_26px_90px_-62px_var(--foreground)]\",\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-2 border-b border-border/60 bg-background/70 px-4 py-3 backdrop-blur-xl\">\n <span className=\"size-2.5 rounded-full bg-border/90\" aria-hidden />\n <span className=\"size-2.5 rounded-full bg-border/80\" aria-hidden />\n <span className=\"size-2.5 rounded-full bg-border/70\" aria-hidden />\n <span\n className=\"ml-3 min-w-0 truncate font-mono text-[11px] text-muted-foreground\"\n translate=\"no\"\n >\n {filename}\n </span>\n <span className=\"ml-auto rounded-full border border-border/60 bg-background/60 px-2 py-0.5 font-mono text-[10px] uppercase text-muted-foreground\">\n {language}\n </span>\n </div>\n\n <pre className=\"relative max-h-[190px] overflow-hidden p-4 font-mono text-[12px] leading-5\">\n {lines.map((line, index) => (\n <span key={`${line}-${index}`} className=\"flex min-w-0 gap-3\">\n <span className=\"w-5 shrink-0 text-right text-muted-foreground/45 tabular-nums\">\n {index + 1}\n </span>\n <code className={cn(\"min-w-0 truncate\", lineTone(line))} translate=\"no\">\n {line || \" \"}\n </code>\n </span>\n ))}\n </pre>\n </div>\n );\n}\n\nexport function KineticConsoleFrame({\n title = \"operator@nebutra-sailor: ~\",\n status,\n children,\n className,\n ...props\n}: KineticConsoleFrameProps) {\n return (\n <div\n className={cn(\n \"group/kinetic relative flex h-full min-h-[460px] w-full flex-col overflow-hidden rounded-[2rem] border border-border/65 bg-background/84 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_32px_120px_-88px_var(--foreground)] backdrop-blur-3xl transition-[transform,border-color,box-shadow] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_44px_140px_-90px_var(--foreground)]\",\n className,\n )}\n data-taste=\"nebutra-terminal-animation\"\n {...props}\n >\n <div className=\"flex h-14 flex-none items-center gap-4 border-b border-border/60 bg-background/70 px-5 backdrop-blur-xl\">\n <div className=\"flex gap-2\" aria-hidden>\n <span className=\"size-3 rounded-full border border-border/80 bg-muted shadow-sm transition-colors group-hover/kinetic:bg-red-400/80\" />\n <span className=\"size-3 rounded-full border border-border/80 bg-muted shadow-sm transition-colors group-hover/kinetic:bg-amber-400/80\" />\n <span className=\"size-3 rounded-full border border-border/80 bg-muted shadow-sm transition-colors group-hover/kinetic:bg-emerald-400/80\" />\n </div>\n <div className=\"min-w-0 flex-1 text-center\">\n <span className=\"inline-flex max-w-full items-center rounded-[var(--radius-md)] border border-border/50 bg-muted/35 px-4 py-1 font-mono text-[10px] font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n <span className=\"truncate\" translate=\"no\">\n {title}\n </span>\n </span>\n </div>\n <div className=\"hidden min-w-20 justify-end sm:flex\">\n {status && (\n <span className=\"rounded-full border border-border/55 bg-background/65 px-2 py-0.5 font-mono text-[10px] uppercase text-muted-foreground\">\n {status}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"relative flex-1 overflow-hidden bg-gradient-to-br from-background/55 via-background/25 to-muted/28 p-6 sm:p-8\">\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,var(--neutral-6)_1px,transparent_1px),linear-gradient(to_bottom,var(--neutral-6)_1px,transparent_1px)] bg-[size:16px_24px] opacity-45\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 bottom-0 h-28 bg-gradient-to-t from-background/80 to-transparent\"\n />\n <div className=\"relative z-10 h-full w-full\">{children}</div>\n </div>\n </div>\n );\n}\n\nexport function KineticMorphSurface({\n activeKey,\n className,\n children,\n ...props\n}: KineticMorphSurfaceProps) {\n return (\n <div\n className={cn(\n \"group/kinetic relative overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/80 p-3 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_28px_110px_-82px_var(--foreground)] backdrop-blur-2xl transition-[border-color,box-shadow,background-color] duration-500 hover:border-foreground/20 hover:bg-background/92 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_36px_130px_-88px_var(--foreground)] sm:p-4 lg:p-5\",\n className,\n )}\n data-active-key={activeKey}\n data-taste=\"nebutra-morph-surface\"\n {...props}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-8)_1px,transparent_0)] bg-[length:20px_20px] opacity-[0.10]\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 h-36 bg-gradient-to-b from-primary/12 via-primary/4 to-transparent\"\n style={{ maskImage: \"linear-gradient(to bottom, black 45%, transparent 100%)\" }}\n />\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n}\n\nexport function KineticSignalMarquee({\n eyebrow,\n className,\n children,\n ...props\n}: KineticSignalMarqueeProps) {\n return (\n <div\n className={cn(\n \"group/kinetic relative mx-auto overflow-hidden rounded-[var(--radius-panel)] border border-border/55 bg-background/72 px-3 py-8 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_22px_90px_-76px_var(--foreground)] backdrop-blur-2xl sm:px-5\",\n className,\n )}\n data-taste=\"nebutra-provider-grid\"\n {...props}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,var(--neutral-6)_1px,transparent_1px),linear-gradient(to_bottom,var(--neutral-6)_1px,transparent_1px)] bg-[size:32px_32px] opacity-25\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-y-0 left-0 w-28 bg-gradient-to-r from-background via-background/90 to-transparent z-20\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-y-0 right-0 w-28 bg-gradient-to-l from-background via-background/90 to-transparent z-20\"\n />\n {eyebrow && (\n <div className=\"relative z-30 mb-6 text-center font-mono text-[10px] font-semibold uppercase tracking-[0.2em] text-muted-foreground\">\n {eyebrow}\n </div>\n )}\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n}\n\nexport function KineticCommandBox({\n command,\n copyLabel,\n copiedLabel,\n className,\n ...props\n}: KineticCommandBoxProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n };\n\n return (\n <div\n className={cn(\n \"group/kinetic relative flex flex-col items-stretch overflow-hidden rounded-[var(--radius-xl)] border border-border/65 bg-background/82 p-1.5 shadow-[inset_0_1px_0_rgb(255_255_255/0.5),0_20px_70px_-58px_var(--foreground)] backdrop-blur-2xl transition-[transform,border-color,box-shadow,background-color] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:bg-background/92 hover:shadow-[inset_0_1px_0_rgb(255_255_255/0.6),0_28px_90px_-62px_var(--foreground)] sm:flex-row sm:items-center\",\n className,\n )}\n data-taste=\"nebutra-texture-command\"\n {...props}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[radial-gradient(circle_at_1px_1px,var(--neutral-8)_1px,transparent_0)] bg-[length:16px_16px] opacity-[0.10]\"\n />\n <code className=\"relative z-10 flex-1 overflow-x-auto whitespace-nowrap px-4 py-3.5 font-mono text-xs text-foreground sm:px-5 sm:text-sm md:text-base\">\n <span className=\"text-muted-foreground\">$</span> {command}\n </code>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"relative z-10 mt-2 flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-[var(--radius-lg)] border border-primary/20 bg-foreground px-5 py-2.5 text-sm font-medium text-background shadow-[inset_0_1px_0_rgb(255_255_255/0.2)] transition-[transform,opacity] hover:-translate-y-px hover:opacity-90 sm:mt-0\"\n >\n {copied ? <Check className=\"size-4\" /> : <Copy className=\"size-4\" />}\n {copied ? copiedLabel : copyLabel}\n </button>\n </div>\n );\n}\n\nexport function KineticStepRail({ className, children, ...props }: KineticStepRailProps) {\n return (\n <div\n className={cn(\n \"relative overflow-hidden rounded-[var(--radius-panel)] border border-border/65 bg-background/78 p-6 shadow-[inset_0_1px_0_rgb(255_255_255/0.45),0_24px_100px_-78px_var(--foreground)] backdrop-blur-2xl md:p-10\",\n className,\n )}\n data-taste=\"nebutra-grid-beam\"\n {...props}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-0 bg-[linear-gradient(to_right,var(--neutral-6)_1px,transparent_1px),linear-gradient(to_bottom,var(--neutral-6)_1px,transparent_1px)] bg-[size:36px_36px] opacity-30\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-8 right-8 top-[5.7rem] hidden h-px bg-gradient-to-r from-transparent via-primary/45 to-transparent md:block\"\n />\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-1/2 top-8 bottom-8 w-px -translate-x-1/2 bg-gradient-to-b from-transparent via-primary/35 to-transparent md:hidden\"\n />\n <div className=\"relative z-10\">{children}</div>\n </div>\n );\n}\n\nexport function KineticStep({\n icon: Icon,\n index,\n title,\n description,\n phaseLabel,\n className,\n ...props\n}: KineticStepProps) {\n const formatted = String(index).padStart(2, \"0\");\n\n return (\n <article\n className={cn(\n \"group/kinetic relative flex h-full flex-col items-center rounded-[var(--radius-xl)] border border-border/60 bg-background/82 p-5 text-center shadow-[0_18px_70px_-58px_var(--foreground)] backdrop-blur-xl transition-[transform,border-color,box-shadow] duration-500 hover:-translate-y-1 hover:border-foreground/25 hover:shadow-[0_28px_90px_-62px_var(--foreground)]\",\n className,\n )}\n {...props}\n >\n <div className=\"relative mb-6 grid size-16 place-items-center rounded-[var(--radius-xl)] border border-border/65 bg-background shadow-[inset_0_1px_0_rgb(255_255_255/0.55),0_18px_56px_-42px_var(--foreground)]\">\n <span\n className=\"absolute -right-2 -top-2 rounded-full border border-border/60 bg-muted px-2 py-0.5 font-mono text-[10px] text-muted-foreground\"\n aria-hidden\n >\n {formatted}\n </span>\n {Icon && (\n <Icon\n aria-hidden\n className=\"size-7 text-primary transition-colors group-hover/kinetic:text-foreground\"\n />\n )}\n </div>\n <span className=\"mb-4 rounded-full border border-primary/20 bg-primary/7 px-3 py-1 font-mono text-[10px] font-semibold uppercase tracking-[0.16em] text-primary\">\n {phaseLabel ?? `Phase ${formatted}`}\n </span>\n <h3 className=\"text-lg font-semibold text-foreground\">{title}</h3>\n <p className=\"mt-3 text-sm leading-6 text-muted-foreground text-balance\">{description}</p>\n </article>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\nexport interface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/**\n * Custom Slot implementation to remove @radix-ui/react-slot dependency.\n * Merges props from the Slottable parent onto the immediate child element.\n */\nexport const Slot = React.forwardRef<HTMLElement, SlotProps>(\n ({ children, className, style, ...props }, ref) => {\n // Resolve the single child without using React.Children.only — which throws\n // when children is a single-element array, fragment, or a string. Prerender\n // pipelines sometimes wrap JSX children in arrays of length 1, which passes\n // React.Children.count(=== 1) but trips React.Children.only.\n const childArray = React.Children.toArray(children);\n const child = childArray.length === 1 ? childArray[0] : null;\n\n if (child == null || !React.isValidElement(child)) {\n // 0 / 2+ / non-element child — graceful span wrapper instead of throwing.\n return (\n <span ref={ref} className={className} style={style} {...props}>\n {children}\n </span>\n );\n }\n\n const childProps = child.props as React.HTMLAttributes<HTMLElement>;\n const mergedRef = (node: HTMLElement | null) => {\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n\n // React 19 removed `element.ref` — the ref is now a regular prop, so read\n // it from the child's props (reading `child.ref` triggers the removal warning).\n const childRef = (\n childProps as React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }\n ).ref;\n if (typeof childRef === \"function\") childRef(node);\n else if (childRef && \"current\" in childRef) {\n (childRef as React.MutableRefObject<HTMLElement | null>).current = node;\n }\n };\n // Order matters: slot's props seed → child's existing props override →\n // explicit className/style/ref take precedence over both (so the slot's\n // className/style merge with the child's, not the child's alone).\n const mergedClass = [className, childProps.className].filter(Boolean).join(\" \");\n const merged: Record<string, unknown> = {\n ...childProps,\n ...props,\n ref: mergedRef,\n className: mergedClass,\n style: { ...childProps.style, ...style },\n };\n return React.cloneElement(\n child,\n merged as React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>,\n );\n },\n);\n\nSlot.displayName = \"Slot\";\n\n/**\n * Slottable acts as a marker. In this simple implementation,\n * we just resolve it as a fragment wrapper. For deeper `asChild` composition,\n * complex logic is usually required, but most primitives just need `Slot`.\n */\nexport const Slottable: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n return <>{children}</>;\n};\n","import { cva } from \"class-variance-authority\";\n\n// Heights / weights from recipe.css (--control-height-*, --font-weight-medium).\n// Focus ring uses shared ring token.\nexport const buttonVariants = cva(\n [\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap\",\n \"rounded-[var(--btn-default-radius,var(--radius-md))]\",\n \"text-[length:var(--control-font-size-md,0.875rem)] font-[number:var(--font-weight-medium,500)]\",\n \"transition-colors duration-micro ease-out\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"aria-busy:cursor-wait\",\n ].join(\" \"),\n {\n variants: {\n variant: {\n // Recipe-driven via packages/design/tokens/recipe.css (.btn-brand-default)\n default: \"btn-brand-default\",\n ink: \"bg-[var(--neutral-12)] text-[var(--neutral-1)] ring-1 ring-inset ring-[color:var(--neutral-1)]/5 hover:bg-[var(--neutral-11)] hover:-translate-y-px active:translate-y-0 transition-[transform,background-color] duration-micro\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n tertiary:\n \"border border-transparent bg-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground hover:border-input\",\n warning: \"bg-warning text-warning-foreground hover:bg-warning/90\",\n },\n size: {\n tiny: \"h-[var(--control-height-tiny,1.5rem)] rounded-[var(--radius-sm)] px-2 text-[length:var(--control-font-size-tiny,0.6875rem)]\",\n sm: \"h-[var(--control-height-sm,2rem)] rounded-[var(--radius-sm)] px-3 text-[length:var(--control-font-size-sm,0.75rem)]\",\n default:\n \"h-[var(--control-height-md,2.5rem)] px-[var(--btn-default-padding-x,1rem)] py-[var(--btn-default-padding-y,0.5rem)]\",\n lg: \"h-[var(--control-height-lg,3rem)] rounded-[var(--radius-lg)] px-5 text-[length:var(--control-font-size-lg,1rem)]\",\n icon: \"h-[var(--control-height-md,2.5rem)] w-[var(--control-height-md,2.5rem)]\",\n },\n shape: {\n default: \"\",\n square: \"\",\n circle: \"\",\n },\n },\n compoundVariants: [\n { shape: \"square\", size: \"tiny\", className: \"w-[var(--control-height-tiny,1.5rem)] px-0\" },\n { shape: \"square\", size: \"sm\", className: \"w-[var(--control-height-sm,2rem)] px-0\" },\n { shape: \"square\", size: \"default\", className: \"w-[var(--control-height-md,2.5rem)] px-0\" },\n { shape: \"square\", size: \"lg\", className: \"w-[var(--control-height-lg,3rem)] px-0\" },\n {\n shape: \"circle\",\n size: \"tiny\",\n className: \"w-[var(--control-height-tiny,1.5rem)] px-0 rounded-full\",\n },\n {\n shape: \"circle\",\n size: \"sm\",\n className: \"w-[var(--control-height-sm,2rem)] px-0 rounded-full\",\n },\n {\n shape: \"circle\",\n size: \"default\",\n className: \"w-[var(--control-height-md,2.5rem)] px-0 rounded-full\",\n },\n {\n shape: \"circle\",\n size: \"lg\",\n className: \"w-[var(--control-height-lg,3rem)] px-0 rounded-full\",\n },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n","\"use client\";\n\nimport type { VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Slot } from \"../utils/slot\";\nimport { buttonVariants } from \"./button-variants\";\n\n// ─── Spinner ──────────────────────────────────────────────────────────────────\n// Uses @keyframes spinner from globals.css\n\nfunction Spinner({ className }: { className?: string }) {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n \"block rounded-full border-2 border-current border-t-transparent animate-[spinner_0.6s_linear_infinite]\",\n className,\n )}\n />\n );\n}\n\n// ─── Icon size class mapping ──────────────────────────────────────────────────\n\nfunction getIconSizeClass(size: string | null | undefined): string {\n switch (size) {\n case \"tiny\":\n return \"[&>svg]:size-3\"; // 12px\n case \"sm\":\n return \"[&>svg]:size-3.5\"; // 14px\n case \"lg\":\n return \"[&>svg]:size-4.5\"; // 18px\n default:\n return \"[&>svg]:size-4\"; // 16px\n }\n}\n\nfunction getSpinnerSizeClass(size: string | null | undefined): string {\n switch (size) {\n case \"tiny\":\n return \"size-3\"; // 12px\n case \"sm\":\n return \"size-3.5\"; // 14px\n case \"lg\":\n return \"size-4.5\"; // 18px\n default:\n return \"size-4\"; // 16px\n }\n}\n\n// ─── Shadow class mapping ─────────────────────────────────────────────────────\n\nconst SHADOW_CLASSES: Record<string, string> = {\n sm: \"shadow-sm\",\n md: \"shadow-md\",\n lg: \"shadow-md\",\n};\n\nfunction resolveShadowClass(shadow: boolean | \"sm\" | \"md\" | \"lg\" | undefined): string | undefined {\n if (!shadow) return undefined;\n const level = shadow === true ? \"md\" : shadow;\n return SHADOW_CLASSES[level];\n}\n\n// ─── ButtonContent (shared between Button & ButtonLink) ───────────────────────\n\ninterface ButtonContentProps {\n loading: boolean;\n prefix?: React.ReactNode | undefined;\n suffix?: React.ReactNode | undefined;\n size?: string | null | undefined;\n children?: React.ReactNode | undefined;\n}\n\nfunction ButtonContent({ loading, prefix, suffix, size, children }: ButtonContentProps) {\n const iconSizeClass = getIconSizeClass(size);\n\n return (\n <>\n {loading && <Spinner className={getSpinnerSizeClass(size)} />}\n {prefix != null && (\n <span aria-hidden=\"true\" className={cn(\"shrink-0\", iconSizeClass)}>\n {prefix}\n </span>\n )}\n {children}\n {suffix != null && (\n <span aria-hidden=\"true\" className={cn(\"shrink-0\", iconSizeClass)}>\n {suffix}\n </span>\n )}\n </>\n );\n}\n\n// ─── Button ───────────────────────────────────────────────────────────────────\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"prefix\">,\n VariantProps<typeof buttonVariants> {\n /** Render as a child element (Radix Slot — polymorphic) */\n asChild?: boolean;\n /** Show loading spinner and disable interaction */\n loading?: boolean;\n /** Icon or element rendered before children */\n prefix?: React.ReactNode;\n /** Icon or element rendered after children */\n suffix?: React.ReactNode;\n /** Elevation shadow level. `true` resolves to `\"md\"` */\n shadow?: boolean | \"sm\" | \"md\" | \"lg\";\n}\n\nconst Button = ({\n className,\n variant,\n size,\n shape,\n asChild = false,\n loading = false,\n disabled,\n prefix,\n suffix,\n shadow,\n children,\n ref,\n ...props\n}: ButtonProps & { ref?: React.Ref<HTMLButtonElement> | undefined }) => {\n const Comp = asChild ? Slot : \"button\";\n const isDisabled = Boolean(disabled || loading);\n const shadowClass = resolveShadowClass(shadow);\n\n return (\n <Comp\n ref={ref}\n className={cn(buttonVariants({ variant, size, shape }), shadowClass, className)}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <ButtonContent loading={loading} prefix={prefix} suffix={suffix} size={size}>\n {children}\n </ButtonContent>\n )}\n </Comp>\n );\n};\nButton.displayName = \"Button\";\n\n// ─── ButtonLink ───────────────────────────────────────────────────────────────\n\nexport interface ButtonLinkProps\n extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"prefix\">,\n VariantProps<typeof buttonVariants> {\n /** Icon or element rendered before children */\n prefix?: React.ReactNode;\n /** Icon or element rendered after children */\n suffix?: React.ReactNode;\n /** Elevation shadow level. `true` resolves to `\"md\"` */\n shadow?: boolean | \"sm\" | \"md\" | \"lg\";\n /** Show loading spinner */\n loading?: boolean;\n}\n\nconst ButtonLink = ({\n className,\n variant,\n size,\n shape,\n prefix,\n suffix,\n shadow,\n loading = false,\n children,\n ref,\n ...props\n}: ButtonLinkProps & { ref?: React.Ref<HTMLAnchorElement> | undefined }) => {\n const shadowClass = resolveShadowClass(shadow);\n\n const loadingProps = loading\n ? {\n \"aria-busy\": \"true\" as const,\n \"aria-disabled\": \"true\" as const,\n tabIndex: -1,\n }\n : {};\n\n return (\n <a\n ref={ref}\n className={cn(\n buttonVariants({ variant, size, shape }),\n shadowClass,\n loading && \"pointer-events-none opacity-50\",\n className,\n )}\n {...loadingProps}\n {...props}\n >\n <ButtonContent loading={loading} prefix={prefix} suffix={suffix} size={size}>\n {children}\n </ButtonContent>\n </a>\n );\n};\nButtonLink.displayName = \"ButtonLink\";\n\nexport { Button, ButtonLink };\n","/**\n * Tabs Component Tokens — Layer 3\n *\n * Same-scope view switching for 2–7 sibling panels. Route navigation belongs\n * in menus or side navigation, while boolean settings belong in Switch/Toggle.\n */\n\nimport {\n primitiveFocusRing,\n primitiveFontSize,\n primitiveRadius,\n primitiveSizing,\n primitiveSpacing,\n primitiveTransition,\n} from \"../primitive\";\n\nexport const tabsSizes = {\n xs: {\n height: primitiveSizing.tiny,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[2],\n gap: primitiveSpacing[1],\n triggerGap: primitiveSpacing[1],\n iconSize: primitiveFontSize.sm,\n fontSize: primitiveFontSize.xs,\n minWidth: 56,\n },\n sm: {\n height: primitiveSizing.sm,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[3],\n gap: primitiveSpacing[1],\n triggerGap: primitiveSpacing[1] + primitiveSpacing[1] / 2,\n iconSize: primitiveFontSize.sm,\n fontSize: primitiveFontSize.xs,\n minWidth: 64,\n },\n md: {\n height: primitiveSizing.md,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[3],\n gap: primitiveSpacing[2],\n triggerGap: primitiveSpacing[1] + primitiveSpacing[1] / 2,\n iconSize: primitiveFontSize.base,\n fontSize: primitiveFontSize.sm,\n minWidth: 72,\n },\n lg: {\n height: primitiveSizing.lg,\n padding: primitiveSpacing[1],\n paddingX: primitiveSpacing[4],\n gap: primitiveSpacing[2] + primitiveSpacing[1] / 2,\n triggerGap: primitiveSpacing[2],\n iconSize: primitiveFontSize.lg,\n fontSize: primitiveFontSize.sm,\n minWidth: 88,\n },\n} as const;\n\nexport type TabsSize = keyof typeof tabsSizes;\n\nexport const tabsTokens = {\n radius: primitiveRadius.lg,\n triggerRadius: primitiveRadius.md,\n pillRadius: primitiveRadius.full,\n lineThickness: 2,\n panelGap: primitiveSpacing[3],\n badgeHeight: primitiveSpacing[5],\n badgePaddingX: primitiveSpacing[1] + primitiveSpacing[1] / 2,\n badgeFontSize: primitiveFontSize.xs,\n focusRingWidth: primitiveFocusRing.width,\n focusRingOffset: primitiveFocusRing.offset,\n motion: {\n duration: primitiveTransition.duration.flow,\n easing: primitiveTransition.easing.inOut,\n },\n} as const;\n","import type * as React from \"react\";\n\nexport type PrimitiveProps<T> = React.PropsWithChildren<T & { className?: string | undefined }>;\n\nexport type PrimitiveComponent<TElement, TProps> = React.ForwardRefExoticComponent<\n PrimitiveProps<TProps> & React.RefAttributes<TElement>\n>;\n\n/**\n * Resolve the HTMLElement type for a given intrinsic element tag.\n */\ntype ElementForTag<E extends keyof React.JSX.IntrinsicElements> = E extends \"button\"\n ? HTMLButtonElement\n : E extends \"span\"\n ? HTMLSpanElement\n : E extends \"img\"\n ? HTMLImageElement\n : E extends \"label\"\n ? HTMLLabelElement\n : E extends \"input\"\n ? HTMLInputElement\n : E extends \"a\"\n ? HTMLAnchorElement\n : E extends \"p\"\n ? HTMLParagraphElement\n : E extends \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\"\n ? HTMLHeadingElement\n : HTMLElement;\n\n/**\n * Workaround for Radix UI types not resolving HTML element props (className,\n * children, etc.) with React 19 + exactOptionalPropertyTypes.\n *\n * The optional second type parameter `Extra` allows preserving Radix-specific\n * props (e.g. `asChild`, `align`, `sideOffset`) that are not standard HTML attrs.\n *\n * Usage:\n * const Header = withHtmlProps<\"h3\">(AccordionPrimitive.Header);\n * const Trigger = withHtmlProps<\"button\", { asChild?: boolean }>(DialogPrimitive.Trigger);\n * const Content = withHtmlProps<\"div\", { align?: string; sideOffset?: number }>(PopoverPrimitive.Content);\n */\n\nexport function withHtmlProps<E extends keyof React.JSX.IntrinsicElements, Extra = object>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Component: any,\n): React.ForwardRefExoticComponent<\n React.ComponentPropsWithoutRef<E> & Extra & React.RefAttributes<ElementForTag<E>>\n> {\n return Component;\n}\n","\"use client\";\n\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport * as React from \"react\";\n\nimport { overlayClassNames, overlayZIndex } from \"../tokens/components/overlay\";\nimport { cn } from \"../utils/cn\";\n\n/* -------------------------------------------------------------------------- *\\\n * Tooltip — Base UI tooltip wrapper, used across the design system.\n *\n * Geist behavior contract (verified in this wrapper, document at top so\n * drift gets called out at code review):\n * - Opens on hover AND keyboard focus (Base UI default — don't override).\n * - Default entry delay ≈ 150ms so the tooltip doesn't flicker on a\n * sweeping mouse. Provider-level default set below; caller can override.\n * - Escape closes the tooltip and returns focus to the trigger (Base UI).\n *\n * Content rules (Geist):\n * - Explains *why* something exists, not *what* it is. The visible label\n * names the thing; the tooltip adds the constraint, scope, or limit.\n * - One sentence or fragment, sentence case, no terminal period for a\n * single fragment.\n * - Don't repeat the visible label (`text=\"Rate Limit\"` on a Rate Limit\n * button) and don't describe the interaction (`\"Click to override\"`).\n * - Lifecycle tooltips: `{Label}: {one-line meaning}. {Specific limit}.`\n *\n * Don'ts (caller responsibility):\n * - Don't wrap a labelled Input in a Tooltip — the trigger lands on the\n * <label>, not the field, and the body becomes a phantom second label.\n * Put help on a sibling icon button instead.\n * - Keep primary actions outside the Tooltip; touch users can't reach a\n * hover-revealed control.\n * - Icon-only triggers MUST carry their own `aria-label` naming the\n * action — the tooltip body adds context, it doesn't replace the label.\n\\* -------------------------------------------------------------------------- */\n\n// Geist-standard delay; matches the platform Best Practices.\nconst DEFAULT_TOOLTIP_DELAY_MS = 150;\n\n// We expose Base UI's native Provider to pass global `delayDuration` downwards.\n// Default landed at 150ms so isolated `<Tooltip>` usage matches Geist out of\n// the box — explicit callers can still override per provider scope.\nconst TooltipProvider = ({\n children,\n delayDuration = DEFAULT_TOOLTIP_DELAY_MS,\n}: {\n children: React.ReactNode;\n delayDuration?: number;\n}) => {\n return <BaseTooltip.Provider delay={delayDuration}>{children}</BaseTooltip.Provider>;\n};\n\nconst Tooltip = ({\n delayDuration,\n children,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseTooltip.Root> & {\n delayDuration?: number;\n children?: React.ReactNode;\n}) => {\n // Standalone `<Tooltip>` (no enclosing Provider) gets the Geist default;\n // any explicit `delayDuration` wins.\n const delay = delayDuration ?? DEFAULT_TOOLTIP_DELAY_MS;\n return (\n <BaseTooltip.Provider delay={delay}>\n <BaseTooltip.Root {...props}>{children}</BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n};\n\nconst TooltipTrigger = ({\n asChild,\n children,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseTooltip.Trigger> & { asChild?: boolean } & {\n ref?: React.Ref<HTMLButtonElement> | undefined;\n}) => {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseTooltip.Trigger\n ref={ref}\n {...props}\n render={children as React.ReactElement<Record<string, unknown>>}\n />\n );\n }\n return (\n <BaseTooltip.Trigger ref={ref} {...props}>\n {children}\n </BaseTooltip.Trigger>\n );\n};\nTooltipTrigger.displayName = \"TooltipTrigger\";\n\nconst TooltipContent = ({\n className,\n style,\n side = \"top\",\n align = \"center\",\n sideOffset = 4,\n alignOffset = 0,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseTooltip.Popup> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n alignOffset?: number;\n} & { ref?: React.Ref<React.ElementRef<typeof BaseTooltip.Popup>> | undefined }) => (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n alignOffset={alignOffset}\n style={{ zIndex: overlayZIndex.tooltip }}\n >\n <BaseTooltip.Popup\n ref={ref}\n className={cn(overlayClassNames.tooltipSurface, className)}\n style={{ zIndex: overlayZIndex.tooltip, ...style }}\n {...props}\n />\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n);\nTooltipContent.displayName = \"TooltipContent\";\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };\n","\"use client\";\n\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\n\nimport { type TabsSize, tabsSizes, tabsTokens } from \"../tokens/components/tabs\";\nimport { cn } from \"../utils\";\nimport { withHtmlProps } from \"../utils/primitive-props\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./tooltip\";\n\ntype BaseTabsRootChangeDetails = {\n activationDirection: \"left\" | \"right\" | \"up\" | \"down\" | \"none\";\n};\n\nconst BaseRoot = withHtmlProps<\n \"div\",\n {\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string, eventDetails: BaseTabsRootChangeDetails) => void) | undefined;\n orientation?: \"horizontal\" | \"vertical\" | undefined;\n value?: string | null | undefined;\n }\n>(BaseTabs.Root);\nconst BaseList = withHtmlProps<\n \"div\",\n {\n activateOnFocus?: boolean | undefined;\n loopFocus?: boolean | undefined;\n }\n>(BaseTabs.List);\nconst BaseTrigger = withHtmlProps<\n \"button\",\n {\n value: string;\n }\n>(BaseTabs.Tab);\nconst BaseContent = withHtmlProps<\n \"div\",\n {\n keepMounted?: boolean | undefined;\n value: string;\n }\n>(BaseTabs.Panel);\nconst BaseIndicator = withHtmlProps<\"span\">(BaseTabs.Indicator);\n\nexport type TabsVariant = \"default\" | \"button\" | \"line\" | \"secondary\";\nexport type TabsShape = \"default\" | \"pill\";\nexport type TabsActivationMode = \"automatic\" | \"manual\";\n\ntype TabsCssVar =\n | \"--tabs-height\"\n | \"--tabs-padding\"\n | \"--tabs-gap\"\n | \"--tabs-trigger-gap\"\n | \"--tabs-trigger-padding-x\"\n | \"--tabs-trigger-min-width\"\n | \"--tabs-icon-size\"\n | \"--tabs-font-size\"\n | \"--tabs-radius\"\n | \"--tabs-trigger-radius\"\n | \"--tabs-pill-radius\"\n | \"--tabs-line-thickness\"\n | \"--tabs-focus-ring-width\"\n | \"--tabs-focus-ring-offset\"\n | \"--tabs-panel-gap\"\n | \"--tabs-badge-height\"\n | \"--tabs-badge-padding-x\"\n | \"--tabs-badge-font-size\"\n | \"--tabs-duration\"\n | \"--tabs-easing\";\n\ntype TabsCssVars = React.CSSProperties & Record<TabsCssVar, string>;\n\nconst tabsListVariants = cva(\n \"relative z-0 inline-flex max-w-full shrink-0 items-center overflow-x-auto overscroll-x-contain scrollbar-none\",\n {\n variants: {\n variant: {\n default:\n \"gap-[var(--tabs-gap)] rounded-[var(--tabs-radius)] border border-border bg-muted p-[var(--tabs-padding)] text-muted-foreground\",\n button: \"gap-[var(--tabs-gap)] text-muted-foreground\",\n line: \"gap-[calc(var(--tabs-gap)*3)] border-b border-border text-muted-foreground\",\n secondary:\n \"gap-[var(--tabs-gap)] rounded-[var(--tabs-radius)] bg-transparent text-muted-foreground\",\n },\n shape: {\n default: \"\",\n pill: \"[&_[role=tab]]:rounded-[var(--tabs-pill-radius)]\",\n },\n },\n compoundVariants: [\n {\n variant: \"default\",\n shape: \"pill\",\n className: \"rounded-[var(--tabs-pill-radius)]\",\n },\n {\n variant: \"button\",\n shape: \"pill\",\n className: \"[&_[role=tab]]:rounded-[var(--tabs-pill-radius)]\",\n },\n {\n variant: \"secondary\",\n shape: \"pill\",\n className: \"rounded-[var(--tabs-pill-radius)]\",\n },\n ],\n defaultVariants: {\n shape: \"default\",\n variant: \"default\",\n },\n },\n);\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 [&_svg]:size-[var(--tabs-icon-size)] [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"hover:text-foreground data-[active]:text-foreground\",\n button:\n \"border border-border bg-background text-muted-foreground shadow-xs hover:border-ring/40 hover:text-foreground data-[active]:border-ring/40 data-[active]:text-foreground\",\n line: \"min-w-0 rounded-none px-0 hover:text-foreground data-[active]:text-foreground\",\n secondary:\n \"hover:bg-muted hover:text-foreground data-[active]:bg-muted data-[active]:text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst tabsIndicatorVariants = cva(\n \"pointer-events-none absolute transition-[left,top,width,height,bottom,background-color] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] motion-reduce:transition-none\",\n {\n variants: {\n variant: {\n default: \"z-[-1] rounded-[var(--tabs-trigger-radius)] bg-background shadow-xs\",\n button: \"z-[-1] rounded-[var(--tabs-trigger-radius)] bg-muted\",\n line: \"bottom-0 h-[var(--tabs-line-thickness)] rounded-[var(--tabs-pill-radius)] bg-foreground\",\n secondary: \"z-[-1] rounded-[var(--tabs-trigger-radius)] bg-muted\",\n },\n shape: {\n default: \"\",\n pill: \"rounded-[var(--tabs-pill-radius)]\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n variant: \"default\",\n },\n },\n);\n\nconst tabsContentVariants = cva(\n \"mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none focus-visible:ring-[length:var(--tabs-focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--tabs-focus-ring-offset)] focus-visible:ring-offset-background\",\n {\n variants: {\n variant: {\n default: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\ntype TabsContextValue = {\n activationMode: TabsActivationMode;\n disabled: boolean;\n shape: TabsShape;\n size: TabsSize;\n variant: TabsVariant;\n};\n\nconst TabsContext = React.createContext<TabsContextValue>({\n activationMode: \"manual\",\n disabled: false,\n shape: \"default\",\n size: \"md\",\n variant: \"default\",\n});\n\nexport interface TabsItem {\n badge?: React.ReactNode;\n content?: React.ReactNode;\n disabled?: boolean;\n icon?: React.ReactNode;\n title: React.ReactNode;\n tooltip?: React.ReactNode;\n value: string;\n}\n\nexport interface TabsProps\n extends Omit<React.ComponentPropsWithoutRef<\"div\">, \"children\" | \"defaultValue\" | \"onChange\"> {\n activationMode?: TabsActivationMode;\n defaultValue?: string;\n disabled?: boolean;\n listClassName?: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n selected?: string;\n setSelected?: (value: string) => void;\n shape?: TabsShape;\n size?: TabsSize;\n tabs?: readonly TabsItem[];\n value?: string;\n variant?: TabsVariant;\n children?: React.ReactNode;\n}\n\nexport interface TabsListProps\n extends React.ComponentPropsWithoutRef<\"div\">,\n VariantProps<typeof tabsListVariants> {\n activateOnFocus?: boolean;\n loop?: boolean;\n}\n\nexport interface TabsTriggerProps\n extends Omit<React.ComponentPropsWithoutRef<\"button\">, \"children\"> {\n badge?: React.ReactNode;\n icon?: React.ReactNode;\n value: string;\n children?: React.ReactNode;\n}\n\nexport interface TabsContentProps\n extends React.ComponentPropsWithoutRef<\"div\">,\n VariantProps<typeof tabsContentVariants> {\n forceMount?: true;\n keepMounted?: boolean;\n value: string;\n}\n\nfunction getTabsStyle(size: TabsSize, style: React.CSSProperties | undefined): TabsCssVars {\n const token = tabsSizes[size];\n\n return {\n \"--tabs-height\": `${token.height}px`,\n \"--tabs-padding\": `${token.padding}px`,\n \"--tabs-gap\": `${token.gap}px`,\n \"--tabs-trigger-gap\": `${token.triggerGap}px`,\n \"--tabs-trigger-padding-x\": `${token.paddingX}px`,\n \"--tabs-trigger-min-width\": `${token.minWidth}px`,\n \"--tabs-icon-size\": `${token.iconSize}px`,\n \"--tabs-font-size\": `${token.fontSize}px`,\n \"--tabs-radius\": `${tabsTokens.radius}px`,\n \"--tabs-trigger-radius\": `${tabsTokens.triggerRadius}px`,\n \"--tabs-pill-radius\": `${tabsTokens.pillRadius}px`,\n \"--tabs-line-thickness\": `${tabsTokens.lineThickness}px`,\n \"--tabs-focus-ring-width\": `${tabsTokens.focusRingWidth}px`,\n \"--tabs-focus-ring-offset\": `${tabsTokens.focusRingOffset}px`,\n \"--tabs-panel-gap\": `${tabsTokens.panelGap}px`,\n \"--tabs-badge-height\": `${tabsTokens.badgeHeight}px`,\n \"--tabs-badge-padding-x\": `${tabsTokens.badgePaddingX}px`,\n \"--tabs-badge-font-size\": `${tabsTokens.badgeFontSize}px`,\n \"--tabs-duration\": `${tabsTokens.motion.duration}ms`,\n \"--tabs-easing\": tabsTokens.motion.easing,\n ...style,\n };\n}\n\nfunction getFirstEnabledValue(tabs: readonly TabsItem[] | undefined) {\n return tabs?.find((tab) => !tab.disabled)?.value;\n}\n\nfunction Tabs({\n \"aria-label\": ariaLabel,\n activationMode = \"manual\",\n className,\n defaultValue,\n disabled = false,\n listClassName,\n onValueChange,\n orientation = \"horizontal\",\n selected,\n setSelected,\n shape = \"default\",\n size = \"md\",\n style,\n tabs,\n value,\n variant = \"default\",\n children,\n ...props\n}: TabsProps) {\n const rootValue = selected ?? value;\n const rootDefaultValue = defaultValue ?? getFirstEnabledValue(tabs);\n const context = React.useMemo<TabsContextValue>(\n () => ({ activationMode, disabled, shape, size, variant }),\n [activationMode, disabled, shape, size, variant],\n );\n\n function handleValueChange(nextValue: string) {\n onValueChange?.(nextValue);\n setSelected?.(nextValue);\n }\n\n return (\n <TabsContext.Provider value={context}>\n <BaseRoot\n data-slot=\"tabs\"\n data-disabled={disabled ? \"\" : undefined}\n value={rootValue}\n defaultValue={rootValue === undefined ? rootDefaultValue : undefined}\n onValueChange={handleValueChange}\n orientation={orientation}\n className={cn(\"w-full\", className)}\n style={getTabsStyle(size, style)}\n {...props}\n >\n {tabs ? (\n <TabsCollection\n tabs={tabs}\n ariaLabel={ariaLabel}\n className={listClassName}\n variant={variant}\n shape={shape}\n disabled={disabled}\n />\n ) : (\n children\n )}\n </BaseRoot>\n </TabsContext.Provider>\n );\n}\n\nfunction TabsCollection({\n ariaLabel,\n tabs,\n className,\n variant,\n shape,\n disabled,\n}: {\n ariaLabel?: string | undefined;\n className?: string | undefined;\n disabled: boolean;\n shape: TabsShape;\n tabs: readonly TabsItem[];\n variant: TabsVariant;\n}) {\n const hasTooltip = tabs.some((tab) => tab.tooltip);\n const list = (\n <TabsList\n aria-label={ariaLabel ?? \"Sections\"}\n className={className}\n variant={variant}\n shape={shape}\n >\n {tabs.map((tab) => (\n <TabsCollectionTrigger key={tab.value} disabled={disabled} tab={tab} />\n ))}\n </TabsList>\n );\n\n return (\n <>\n {hasTooltip ? <TooltipProvider delayDuration={150}>{list}</TooltipProvider> : list}\n {tabs.map((tab) =>\n tab.content === undefined ? null : (\n <TabsContent key={tab.value} value={tab.value}>\n {tab.content}\n </TabsContent>\n ),\n )}\n </>\n );\n}\n\nfunction TabsCollectionTrigger({ tab, disabled }: { disabled: boolean; tab: TabsItem }) {\n const trigger = (\n <TabsTrigger\n value={tab.value}\n disabled={disabled || tab.disabled}\n icon={tab.icon}\n badge={tab.badge}\n >\n {tab.title}\n </TabsTrigger>\n );\n\n if (!tab.tooltip) return trigger;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex\">{trigger}</span>\n </TooltipTrigger>\n <TooltipContent>{tab.tooltip}</TooltipContent>\n </Tooltip>\n );\n}\n\nfunction TabsList({\n activateOnFocus,\n className,\n loop = true,\n shape,\n variant,\n children,\n ...props\n}: TabsListProps) {\n const context = React.use(TabsContext);\n const resolvedVariant = variant ?? context.variant;\n const resolvedShape = shape ?? context.shape;\n const resolvedActivateOnFocus = activateOnFocus ?? context.activationMode === \"automatic\";\n const listContext = React.useMemo<TabsContextValue>(\n () => ({ ...context, shape: resolvedShape, variant: resolvedVariant }),\n [context, resolvedShape, resolvedVariant],\n );\n\n return (\n <TabsContext.Provider value={listContext}>\n <BaseList\n data-slot=\"tabs-list\"\n activateOnFocus={resolvedActivateOnFocus}\n loopFocus={loop}\n className={cn(\n tabsListVariants({ variant: resolvedVariant, shape: resolvedShape }),\n className,\n )}\n {...props}\n >\n <BaseIndicator\n aria-hidden=\"true\"\n data-slot=\"tabs-indicator\"\n className={tabsIndicatorVariants({ variant: resolvedVariant, shape: resolvedShape })}\n style={{\n left: \"var(--active-tab-left)\",\n top: resolvedVariant === \"line\" ? \"auto\" : \"var(--active-tab-top)\",\n bottom: resolvedVariant === \"line\" ? \"0\" : \"auto\",\n width: \"var(--active-tab-width)\",\n height:\n resolvedVariant === \"line\"\n ? \"var(--tabs-line-thickness)\"\n : \"var(--active-tab-height)\",\n }}\n />\n {children}\n </BaseList>\n </TabsContext.Provider>\n );\n}\n\nfunction TabsTrigger({ badge, children, className, disabled, icon, ...props }: TabsTriggerProps) {\n const context = React.use(TabsContext);\n const isDisabled = disabled ?? context.disabled;\n\n return (\n <BaseTrigger\n data-slot=\"tabs-trigger\"\n disabled={isDisabled}\n className={cn(tabsTriggerVariants({ variant: context.variant }), className)}\n {...props}\n >\n {icon}\n <span className=\"truncate\">{children}</span>\n {badge ? (\n <span className=\"inline-flex h-[var(--tabs-badge-height)] items-center rounded-[var(--tabs-pill-radius)] bg-muted px-[var(--tabs-badge-padding-x)] text-[length:var(--tabs-badge-font-size)] text-muted-foreground\">\n {badge}\n </span>\n ) : null}\n </BaseTrigger>\n );\n}\n\nfunction TabsContent({ className, forceMount, keepMounted, variant, ...props }: TabsContentProps) {\n return (\n <BaseContent\n data-slot=\"tabs-content\"\n keepMounted={keepMounted ?? forceMount}\n className={cn(tabsContentVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n tabsContentVariants,\n tabsIndicatorVariants,\n tabsListVariants,\n tabsTriggerVariants,\n};\n","/**\n * Textarea Component Tokens — Layer 3\n *\n * Mirrors the Input focus and radius contract while preserving textarea-specific\n * vertical sizing.\n */\n\nimport { primitiveFontSize, primitiveRadius, primitiveSpacing } from \"../primitive\";\n\nexport type TextareaSize = \"sm\" | \"md\" | \"lg\";\n\nexport const textareaTokens = {\n sizes: {\n sm: {\n minHeight: primitiveSpacing[20],\n paddingX: primitiveSpacing[2],\n paddingY: primitiveSpacing[2],\n fontSize: primitiveFontSize.xs,\n radius: primitiveRadius.md,\n },\n md: {\n minHeight: primitiveSpacing[24],\n paddingX: primitiveSpacing[3],\n paddingY: primitiveSpacing[2],\n fontSize: primitiveFontSize.sm,\n radius: primitiveRadius.md,\n },\n lg: {\n minHeight: primitiveSpacing[24],\n paddingX: primitiveSpacing[4],\n paddingY: primitiveSpacing[3],\n fontSize: primitiveFontSize.base,\n radius: primitiveRadius.lg,\n },\n },\n labelSize: primitiveFontSize.sm,\n focusRingWidth: 3,\n fieldGap: primitiveSpacing[2] - primitiveSpacing[1] / 2,\n messageGap: primitiveSpacing[1],\n} as const;\n","/**\n * Shared form-control interaction classes.\n *\n * Contract:\n * - Native outline is always owned by the design system.\n * - Text-like controls draw their tokenized control ring on :focus so mouse\n * focus cannot leak native square outlines.\n * - Keyboard-only emphasis remains the default pattern for non-text controls.\n * - Invalid state keeps a persistent border, with ring escalation on :focus.\n */\n\ntype FormControlSlot = \"input\" | \"textarea\" | \"select\";\n\nexport const formControlFocusClassNames = {\n input:\n \"outline-none focus:border-ring focus:ring-[length:var(--input-focus-ring-width)] focus:ring-ring/30\",\n textarea:\n \"outline-none focus:border-ring focus:ring-[length:var(--textarea-focus-ring-width)] focus:ring-ring/30\",\n select:\n \"outline-none focus:border-ring focus:ring-[length:var(--select-focus-ring-width)] focus:ring-ring/30\",\n} as const satisfies Record<FormControlSlot, string>;\n\nexport const formControlInvalidClassNames = {\n input:\n \"aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20\",\n textarea:\n \"aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20\",\n select:\n \"aria-invalid:border-destructive/60 aria-invalid:focus:border-destructive aria-invalid:focus:ring-destructive/20\",\n} as const satisfies Record<FormControlSlot, string>;\n","\"use client\";\n\nimport * as React from \"react\";\nimport { type TextareaSize, textareaTokens } from \"../tokens/components/textarea\";\nimport { cn } from \"../utils/cn\";\nimport { formControlFocusClassNames, formControlInvalidClassNames } from \"./form-control\";\n\ntype NativeTextareaProps = Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"size\">;\n\ntype LabelledTextareaProps = {\n /** Visible label. Type-level nudge keeps labelled fields explicitly addressable. */\n label: string;\n id: string;\n};\n\ntype UnlabelledTextareaProps = {\n label?: undefined;\n id?: string;\n};\n\ntype TextareaOwnProps = {\n /** Visual size variant. Uses the same compact form scale as Input. */\n size?: TextareaSize;\n /** Helper text associated through aria-describedby. Replaced by string errors. */\n description?: string;\n /** Boolean marks invalid state; string also renders an inline field error. */\n error?: string | boolean;\n /** Value-first change callback for consumers that do not need the native event. */\n onValueChange?: (value: string) => void;\n /** Applied to the label/helper/error field wrapper. */\n fieldClassName?: string;\n};\n\nexport type TextareaProps = NativeTextareaProps &\n TextareaOwnProps &\n (LabelledTextareaProps | UnlabelledTextareaProps);\n\ntype TextareaCssVars = React.CSSProperties & {\n \"--textarea-min-height\"?: string;\n \"--textarea-padding-x\"?: string;\n \"--textarea-padding-y\"?: string;\n \"--textarea-font-size\"?: string;\n \"--textarea-radius\"?: string;\n \"--textarea-focus-ring-width\"?: string;\n};\n\ntype TextareaFieldCssVars = React.CSSProperties & {\n \"--textarea-field-gap\"?: string;\n \"--textarea-label-size\"?: string;\n};\n\nconst fieldMessageClassName = \"text-xs text-muted-foreground\";\nconst fieldErrorClassName = \"text-xs font-medium text-destructive\";\n\nfunction getTextareaStyle(\n size: TextareaSize,\n style: React.CSSProperties | undefined,\n): TextareaCssVars {\n const token = textareaTokens.sizes[size];\n\n return {\n \"--textarea-min-height\": `${token.minHeight}px`,\n \"--textarea-padding-x\": `${token.paddingX}px`,\n \"--textarea-padding-y\": `${token.paddingY}px`,\n \"--textarea-font-size\": `${token.fontSize}px`,\n \"--textarea-radius\": `${token.radius}px`,\n \"--textarea-focus-ring-width\": `${textareaTokens.focusRingWidth}px`,\n borderRadius: \"var(--textarea-radius)\",\n outline: \"none\",\n ...style,\n };\n}\n\nfunction getTextareaFieldStyle(): TextareaFieldCssVars {\n return {\n \"--textarea-field-gap\": `${textareaTokens.fieldGap}px`,\n \"--textarea-label-size\": `${textareaTokens.labelSize}px`,\n };\n}\n\nfunction joinDescriptionIds(...ids: Array<string | undefined>) {\n return ids.filter(Boolean).join(\" \") || undefined;\n}\n\nfunction isInvalid(\n error: string | boolean | undefined,\n ariaInvalid: NativeTextareaProps[\"aria-invalid\"],\n) {\n return (\n error === true || typeof error === \"string\" || ariaInvalid === true || ariaInvalid === \"true\"\n );\n}\n\nconst Textarea = ({\n className,\n style,\n size = \"md\",\n label,\n description,\n error,\n fieldClassName,\n id,\n onChange,\n onValueChange,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ref,\n ...props\n}: TextareaProps & { ref?: React.Ref<HTMLTextAreaElement> | undefined }) => {\n const baseId = React.useId();\n const textareaId = id ?? (label || description || typeof error === \"string\" ? baseId : undefined);\n const resolvedInvalid = isInvalid(error, ariaInvalid);\n const descriptionId = description && textareaId ? `${textareaId}-description` : undefined;\n const errorId = typeof error === \"string\" && textareaId ? `${textareaId}-error` : undefined;\n const describedBy = joinDescriptionIds(ariaDescribedBy, descriptionId, errorId);\n\n const handleChange = React.useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onValueChange?.(event.currentTarget.value);\n onChange?.(event);\n },\n [onChange, onValueChange],\n );\n\n const control = (\n <textarea\n className={cn(\n \"flex min-h-[var(--textarea-min-height)] w-full resize-y rounded-[var(--textarea-radius)] border border-input bg-background\",\n \"px-[var(--textarea-padding-x)] py-[var(--textarea-padding-y)] text-[length:var(--textarea-font-size)] text-foreground shadow-xs\",\n \"transition-[background-color,border-color,box-shadow,color] duration-micro ease-out placeholder:text-muted-foreground\",\n formControlFocusClassNames.textarea,\n \"disabled:cursor-not-allowed disabled:opacity-50 read-only:cursor-default read-only:bg-muted/70\",\n formControlInvalidClassNames.textarea,\n className,\n )}\n ref={ref}\n id={textareaId}\n aria-invalid={resolvedInvalid || undefined}\n aria-describedby={describedBy}\n style={getTextareaStyle(size, style)}\n onChange={handleChange}\n {...props}\n />\n );\n\n if (!label && !description && typeof error !== \"string\" && !fieldClassName) {\n return control;\n }\n\n return (\n <div\n data-slot=\"textarea-field\"\n className={cn(\"grid gap-[var(--textarea-field-gap)]\", fieldClassName)}\n style={getTextareaFieldStyle()}\n >\n {label && (\n <label\n htmlFor={textareaId}\n className=\"text-[length:var(--textarea-label-size)] font-medium text-foreground\"\n >\n {label}\n </label>\n )}\n\n {control}\n\n {description && !error && (\n <p id={descriptionId} className={fieldMessageClassName}>\n {description}\n </p>\n )}\n\n {typeof error === \"string\" && (\n <p id={errorId} role=\"alert\" className={fieldErrorClassName}>\n {error}\n </p>\n )}\n </div>\n );\n};\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { cn } from \"../../utils/cn\";\n\n/* -------------------------------------------------------------------------- *\\\n * MarkdownRenderer — react-markdown wrapper for Q&A posts.\n *\n * Why react-markdown (not the runtime-injected CDN script the source used):\n * - SSR-safe (no DOM access at import time)\n * - No `dangerouslySetInnerHTML` — react-markdown emits real React nodes,\n * so the XSS surface that the original `window.marked` + innerHTML\n * pipeline opened is structurally absent.\n * - Tree-shakable / cacheable / CSP-friendly.\n *\n * Why not Streamdown:\n * Streamdown is our chat-AI markdown engine — optimized for streaming\n * text from a model. Q&A posts are static long-form prose, so plain\n * react-markdown + GFM is the right shape.\n\\* -------------------------------------------------------------------------- */\n\nexport interface MarkdownRendererProps {\n /** Markdown source. */\n content: string;\n className?: string;\n}\n\nexport function MarkdownRenderer({ content, className }: MarkdownRendererProps) {\n return (\n <div className={cn(\"prose prose-sm dark:prose-invert max-w-none\", className)}>\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n // Inline + block code use semantic tokens so they read in light + dark\n // themes without hardcoded slate/blue.\n code(props) {\n const { className: codeClassName, children, ...rest } = props;\n const isBlock = /language-/.test(codeClassName ?? \"\");\n if (isBlock) {\n return (\n <code\n {...rest}\n className={cn(\n \"block overflow-x-auto rounded-[var(--radius-md)] border border-border bg-muted p-4 font-mono text-foreground text-sm\",\n codeClassName,\n )}\n >\n {children}\n </code>\n );\n }\n return (\n <code\n {...rest}\n className={cn(\n \"rounded bg-muted px-1.5 py-0.5 font-mono text-foreground text-sm\",\n codeClassName,\n )}\n >\n {children}\n </code>\n );\n },\n // Anchor: open external links in a new tab; protect against\n // tabnabbing with rel=\"noopener noreferrer\".\n a({ href, children, ...rest }) {\n const external = typeof href === \"string\" && /^https?:/.test(href);\n return (\n <a\n href={href}\n className=\"text-primary underline-offset-4 hover:underline\"\n {...(external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {})}\n {...rest}\n >\n {children}\n </a>\n );\n },\n blockquote({ children, ...rest }) {\n return (\n <blockquote\n {...rest}\n className=\"my-4 border-primary border-l-4 bg-muted py-2 pl-4 text-foreground italic\"\n >\n {children}\n </blockquote>\n );\n },\n }}\n >\n {content}\n </ReactMarkdown>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n Code,\n FileText,\n Hash,\n Image as ImageIcon,\n Link as LinkIcon,\n ListUnordered,\n Pencil,\n TextBold,\n TextItalic,\n} from \"@nebutra/icons\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { Button } from \"../../primitives/button\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../primitives/tabs\";\nimport { Textarea } from \"../../primitives/textarea\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownRenderer } from \"./markdown-renderer\";\n\n/* -------------------------------------------------------------------------- *\\\n * MarkdownEditor — tab-switchable write/preview composer with a toolbar.\n *\n * Toolbar buttons insert markdown around the current selection (or at the\n * caret if no selection) via a single `insertMarkdown` helper. No global\n * state, no DOM lookup outside the textarea ref.\n *\n * The Quote toolbar button uses a small inline SVG glyph because the Geist\n * icon set doesn't ship a dedicated Quote — the AI-marketing Phosphor escape\n * hatch doesn't apply to a forum surface, so we render a typographic mark.\n\\* -------------------------------------------------------------------------- */\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface MarkdownEditorProps {\n value: string;\n onChange: (next: string) => void;\n placeholder?: string;\n /** @default 250 */\n minHeight?: number;\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Quote glyph — inline SVG (no Geist equivalent; Phosphor escape hatch is\n// reserved for AI-brand marketing surfaces, not forum chrome)\n// ---------------------------------------------------------------------------\n\nfunction QuoteGlyph(props: { className?: string }) {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" className={props.className}>\n <title>Block quote</title>\n <path d=\"M4 4h2l-1.5 4H6v4H2V8l2-4Zm6 0h2l-1.5 4H12v4H8V8l2-4Z\" />\n </svg>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function MarkdownEditor({\n value,\n onChange,\n placeholder = \"Write your answer here…\",\n minHeight = 250,\n className,\n}: MarkdownEditorProps) {\n const [tab, setTab] = useState<\"write\" | \"preview\">(\"write\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const insertMarkdown = useCallback(\n (before: string, after = \"\", forceNewLine = false) => {\n const el = textareaRef.current;\n if (!el) return;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n const selected = value.slice(start, end);\n const needsLeadingNl = forceNewLine && start > 0 && value[start - 1] !== \"\\n\";\n const insert = (needsLeadingNl ? \"\\n\" : \"\") + before + selected + after;\n const next = value.slice(0, start) + insert + value.slice(end);\n onChange(next);\n // Re-focus and place caret inside the inserted boundaries.\n requestAnimationFrame(() => {\n el.focus();\n const caretStart = start + (needsLeadingNl ? 1 : 0) + before.length;\n el.setSelectionRange(caretStart, caretStart + selected.length);\n });\n },\n [value, onChange],\n );\n\n return (\n <div\n className={cn(\"overflow-hidden rounded-[var(--radius-md)] border border-border\", className)}\n >\n <Tabs value={tab} onValueChange={(v) => setTab(v as \"write\" | \"preview\")} className=\"w-full\">\n <div className=\"flex items-center justify-between gap-2 border-border border-b bg-muted/30 px-3 py-2\">\n <TabsList className=\"grid w-fit grid-cols-2\">\n <TabsTrigger value=\"write\" className=\"text-xs\">\n <Pencil className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n Write\n </TabsTrigger>\n <TabsTrigger value=\"preview\" className=\"text-xs\">\n <FileText className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n Preview\n </TabsTrigger>\n </TabsList>\n\n <div className=\"flex flex-wrap items-center gap-1\">\n <ToolbarButton aria-label=\"Bold (Ctrl+B)\" onClick={() => insertMarkdown(\"**\", \"**\")}>\n <TextBold className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Italic (Ctrl+I)\" onClick={() => insertMarkdown(\"*\", \"*\")}>\n <TextItalic className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Inline code\" onClick={() => insertMarkdown(\"`\", \"`\")}>\n <Code className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Heading\" onClick={() => insertMarkdown(\"\\n## \", \"\", true)}>\n <Hash className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton\n aria-label=\"Block quote\"\n onClick={() => insertMarkdown(\"\\n> \", \"\", true)}\n >\n <QuoteGlyph className=\"h-3.5 w-3.5\" />\n </ToolbarButton>\n <ToolbarButton\n aria-label=\"Bullet list\"\n onClick={() => insertMarkdown(\"\\n- \", \"\", true)}\n >\n <ListUnordered className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Link\" onClick={() => insertMarkdown(\"[\", \"](url)\")}>\n <LinkIcon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton aria-label=\"Image\" onClick={() => insertMarkdown(\"\")}>\n <ImageIcon className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n <ToolbarButton\n aria-label=\"Fenced code block\"\n onClick={() => insertMarkdown(\"\\n```javascript\\n\", \"\\n```\\n\", true)}\n >\n <FileText className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n </ToolbarButton>\n </div>\n </div>\n\n <TabsContent value=\"write\" className=\"mt-0\">\n <Textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n className=\"resize-none rounded-none border-0 font-mono text-sm shadow-none focus-visible:ring-0\"\n style={{ minHeight }}\n />\n </TabsContent>\n <TabsContent value=\"preview\" className=\"mt-0\">\n <div className=\"bg-background p-4\" style={{ minHeight }}>\n {value ? (\n <MarkdownRenderer content={value} />\n ) : (\n <div className=\"flex h-32 items-center justify-center text-muted-foreground text-sm italic\">\n Nothing to preview.\n </div>\n )}\n </div>\n </TabsContent>\n </Tabs>\n\n <div className=\"flex items-center justify-between border-border border-t bg-muted/30 px-3 py-2 text-muted-foreground text-xs\">\n <span>Markdown supported</span>\n <span>{value.length} characters</span>\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Toolbar button — local helper, keeps the toolbar a single declarative grid\n// ---------------------------------------------------------------------------\n\nfunction ToolbarButton({\n children,\n onClick,\n \"aria-label\": ariaLabel,\n}: {\n children: React.ReactNode;\n onClick: () => void;\n \"aria-label\": string;\n}) {\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 w-7 p-0\"\n onClick={onClick}\n aria-label={ariaLabel}\n >\n {children}\n </Button>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\nconst Card = ({\n className,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> | undefined }) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-lg)] border border-border bg-card text-card-foreground shadow-sm\",\n className,\n )}\n {...props}\n />\n);\nCard.displayName = \"Card\";\n\nconst CardHeader = ({\n className,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> | undefined }) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n);\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = ({\n className,\n children,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLHeadingElement> & {\n ref?: React.Ref<HTMLHeadingElement> | undefined;\n}) => (\n <h3\n ref={ref}\n className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)}\n {...props}\n >\n {children}\n </h3>\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport interface CardDescriptionProps\n extends React.HTMLAttributes<HTMLParagraphElement | HTMLDivElement> {\n as?: React.ElementType;\n}\n\nconst CardDescription = ({\n className,\n as: Tag = \"p\",\n ref,\n ...props\n}: CardDescriptionProps & {\n ref?: React.Ref<HTMLParagraphElement | HTMLDivElement> | undefined;\n}) => {\n return React.createElement(Tag, {\n ref,\n className: cn(\"text-sm text-muted-foreground\", className),\n ...props,\n });\n};\nCardDescription.displayName = \"CardDescription\";\n\nconst CardContent = ({\n className,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> | undefined }) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n);\nCardContent.displayName = \"CardContent\";\n\nconst CardFooter = ({\n className,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> | undefined }) => (\n <div ref={ref} className={cn(\"flex items-center p-6 pt-0\", className)} {...props} />\n);\nCardFooter.displayName = \"CardFooter\";\n\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n","\"use client\";\n\nimport { Separator as BaseSeparator } from \"@base-ui/react/separator\";\nimport type * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\n// Base UI natively supports exactOptionalPropertyTypes and doesn't need withHtmlProps.\n\nconst Separator = ({\n className,\n orientation = \"horizontal\",\n decorative: _decorative = true,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseSeparator> & { decorative?: boolean } & {\n ref?: React.Ref<HTMLDivElement> | undefined;\n}) => (\n <BaseSeparator\n ref={ref}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className,\n )}\n {...props}\n />\n);\nSeparator.displayName = \"Separator\";\n\nexport { Separator };\n","\"use client\";\n\nimport { Avatar as BaseAvatar } from \"@base-ui/react/avatar\";\nimport * as React from \"react\";\nimport { type AvatarSize as AvatarPresetSize, avatarTokens } from \"../tokens/components/avatar\";\nimport { cn } from \"../utils/cn\";\n\nexport type AvatarSize = AvatarPresetSize | number;\n\nconst sizeClasses = {\n xs: { root: \"h-5 w-5\", fallback: \"text-[8px]\" },\n sm: { root: \"h-8 w-8\", fallback: \"text-xs\" },\n md: { root: \"h-10 w-10\", fallback: \"text-sm\" },\n lg: { root: \"h-14 w-14\", fallback: \"text-xl\" },\n xl: { root: \"h-20 w-20\", fallback: \"text-2xl\" },\n} as const;\n\nconst numericAvatarClass = \"h-[var(--avatar-size)] w-[var(--avatar-size)]\";\n\ntype AvatarContextValue = {\n size: AvatarSize;\n title?: string;\n};\n\nconst AvatarContext = React.createContext<AvatarContextValue | null>(null);\n\nfunction isPresetSize(size: AvatarSize): size is AvatarPresetSize {\n return typeof size === \"string\";\n}\n\nexport function getAvatarSizePx(size: AvatarSize): number {\n if (typeof size === \"number\") return size;\n return avatarTokens.size[size].dimension;\n}\n\nfunction getAvatarRootClass(size: AvatarSize): string {\n return isPresetSize(size) ? sizeClasses[size].root : numericAvatarClass;\n}\n\nfunction getAvatarFallbackClass(size: AvatarSize): string {\n return isPresetSize(size) ? sizeClasses[size].fallback : \"text-[var(--avatar-font-size)]\";\n}\n\nfunction getAvatarStyle(\n size: AvatarSize,\n style?: React.CSSProperties,\n): React.CSSProperties | undefined {\n if (typeof size !== \"number\") return style;\n return {\n \"--avatar-size\": `${size}px`,\n \"--avatar-font-size\": `${Math.max(10, Math.round(size * 0.375))}px`,\n ...style,\n } as React.CSSProperties;\n}\n\nexport function getAvatarInitials(value: string): string {\n const cleaned = value.trim();\n if (!cleaned) return \"\";\n\n const parts = cleaned.split(/[\\s._-]+/).filter(Boolean);\n if (parts.length === 1) return (parts[0] ?? \"\").slice(0, 2).toUpperCase();\n\n return parts\n .slice(0, 2)\n .map((part) => part[0] ?? \"\")\n .join(\"\")\n .toUpperCase();\n}\n\nfunction githubAvatarSrc(username: string, size: AvatarSize): string {\n return `https://github.com/${username}.png?size=${getAvatarSizePx(size) * 2}`;\n}\n\nfunction normalizeAvatarLabel({\n alt,\n title,\n username,\n}: {\n alt?: string | undefined;\n title?: string | undefined;\n username?: string | undefined;\n}): string {\n return title ?? alt ?? username ?? \"Avatar\";\n}\n\n// ─── Avatar ───────────────────────────────────────────────────────────────────\n\nexport type AvatarProps = Omit<\n React.ComponentPropsWithoutRef<typeof BaseAvatar.Root>,\n \"children\"\n> & {\n /** Size preset or explicit pixel size. */\n size?: AvatarSize;\n /** Convenience image source. For composition, use AvatarImage as a child. */\n src?: string;\n /** Image alt text. Prefer title for entity name and alt for explicit image labels. */\n alt?: string;\n /** Literal entity name used for fallback initials and accessible labels. */\n title?: string;\n /** Explicit initials fallback. Keep this to 1-2 uppercase characters. */\n letter?: string;\n /** Convenience username fallback. */\n username?: string;\n /** Loading shell. Do not use as permanent fallback. */\n placeholder?: boolean;\n /** Delay before fallback appears. */\n fallbackDelayMs?: number;\n children?: React.ReactNode;\n};\n\nconst Avatar = ({\n className,\n size = \"md\",\n src,\n alt,\n title,\n letter,\n username,\n placeholder,\n fallbackDelayMs,\n children,\n style,\n ref,\n ...props\n}: AvatarProps & { ref?: React.Ref<HTMLSpanElement> | undefined }) => {\n const label = normalizeAvatarLabel({ alt, title, username });\n const fallback = letter ?? getAvatarInitials(title ?? username ?? alt ?? \"\");\n const contextTitle = title ?? alt ?? username;\n const contextValue: AvatarContextValue =\n contextTitle === undefined ? { size } : { size, title: contextTitle };\n const shouldRenderConvenienceContent =\n children === undefined && (src !== undefined || placeholder === true || fallback.length > 0);\n\n return (\n <AvatarContext.Provider value={contextValue}>\n <BaseAvatar.Root\n ref={ref}\n className={cn(\n \"relative flex shrink-0 overflow-hidden rounded-full bg-muted\",\n getAvatarRootClass(size),\n className,\n )}\n style={getAvatarStyle(size, style)}\n {...props}\n >\n {shouldRenderConvenienceContent ? (\n <>\n {src && <AvatarImage src={src} alt={label} />}\n <AvatarFallback size={size} delay={fallbackDelayMs}>\n {placeholder ? <span className=\"sr-only\">Loading avatar</span> : fallback}\n </AvatarFallback>\n </>\n ) : (\n children\n )}\n </BaseAvatar.Root>\n </AvatarContext.Provider>\n );\n};\nAvatar.displayName = \"Avatar\";\n\n// ─── AvatarImage ──────────────────────────────────────────────────────────────\n\nconst AvatarImage = ({\n className,\n ref,\n ...props\n}: React.ComponentPropsWithoutRef<typeof BaseAvatar.Image> & {\n ref?: React.Ref<HTMLImageElement> | undefined;\n}) => (\n <BaseAvatar.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full object-cover\", className)}\n {...props}\n />\n);\nAvatarImage.displayName = \"AvatarImage\";\n\n// ─── AvatarFallback ───────────────────────────────────────────────────────────\n\nexport type AvatarFallbackProps = React.ComponentPropsWithoutRef<typeof BaseAvatar.Fallback> & {\n /** Pass the same size as the parent Avatar for correct font size */\n size?: AvatarSize;\n};\n\nconst AvatarFallback = ({\n className,\n size,\n children,\n \"aria-label\": ariaLabel,\n style,\n ref,\n ...props\n}: AvatarFallbackProps & { ref?: React.Ref<HTMLSpanElement> | undefined }) => {\n const context = React.use(AvatarContext);\n const resolvedSize = size ?? context?.size ?? \"md\";\n const fallbackLabel =\n ariaLabel ??\n (typeof children === \"string\" && children.trim().length > 0\n ? `Avatar with initials: ${children}`\n : context?.title);\n\n return (\n <BaseAvatar.Fallback\n ref={ref}\n aria-label={fallbackLabel}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted font-medium text-muted-foreground\",\n getAvatarFallbackClass(resolvedSize),\n className,\n )}\n style={getAvatarStyle(resolvedSize, style)}\n {...props}\n >\n {children}\n </BaseAvatar.Fallback>\n );\n};\nAvatarFallback.displayName = \"AvatarFallback\";\n\n// ─── AvatarGroup ──────────────────────────────────────────────────────────────\n\nexport interface AvatarGroupItem {\n src?: string;\n alt?: string;\n fallback?: string;\n title?: string;\n username?: string;\n}\n\nexport interface AvatarGroupProps {\n /** Nebutra composable API. */\n items?: AvatarGroupItem[];\n /** Geist-compatible API. */\n members?: AvatarGroupItem[];\n /** Maximum avatars to show before collapsing to \"+N\" */\n max?: number;\n /** Geist-compatible alias for max. */\n limit?: number;\n /** Size of each avatar in the group */\n size?: AvatarSize;\n className?: string;\n \"aria-label\"?: string;\n}\n\nfunction normalizeGroupItem(item: AvatarGroupItem, size: AvatarSize): Required<AvatarGroupItem> {\n const label = normalizeAvatarLabel({\n alt: item.alt,\n title: item.title,\n username: item.username,\n });\n return {\n alt: label,\n title: item.title ?? label,\n fallback: item.fallback ?? getAvatarInitials(label),\n username: item.username ?? \"\",\n src: item.src ?? (item.username ? githubAvatarSrc(item.username, size) : \"\"),\n };\n}\n\nfunction AvatarGroup({\n items,\n members,\n max,\n limit,\n size = \"sm\",\n className,\n \"aria-label\": ariaLabel,\n}: AvatarGroupProps) {\n const sourceItems = items ?? members ?? [];\n const resolvedMax = Math.max(1, max ?? limit ?? 4);\n const normalizedItems = sourceItems.map((item) => normalizeGroupItem(item, size));\n // Show max-1 real avatars; if items.length === max show last one too,\n // if items.length > max show +N badge instead of last slot.\n // Use built-in Tailwind z-index utilities (z-10..z-60) so they are\n // guaranteed to exist without arbitrary-value scanning.\n const Z = [\"z-10\", \"z-20\", \"z-30\", \"z-40\", \"z-50\", \"z-60\"] as const;\n const visibleCount =\n normalizedItems.length >= resolvedMax ? resolvedMax - 1 : normalizedItems.length;\n const visible = normalizedItems.slice(0, visibleCount);\n const lastItem = normalizedItems.length === resolvedMax ? normalizedItems[resolvedMax - 1] : null;\n const overflowCount =\n normalizedItems.length > resolvedMax ? normalizedItems.length - resolvedMax + 1 : 0;\n const lastZ = Z[Math.min(resolvedMax - 1, Z.length - 1)];\n const groupLabel =\n ariaLabel ?? `${normalizedItems.length} ${normalizedItems.length === 1 ? \"member\" : \"members\"}`;\n\n return (\n <div role=\"img\" aria-label={groupLabel} className={cn(\"flex items-center\", className)}>\n {visible.map((item, index) => (\n // relative is required for z-index to take effect on non-flex-item contexts\n <span\n key={item.alt}\n aria-hidden=\"true\"\n className={cn(\"relative inline-flex items-center\", index !== 0 && \"-ml-2\", Z[index])}\n >\n <Avatar size={size} className=\"border border-border bg-background\">\n {item.src && <AvatarImage src={item.src} alt=\"\" />}\n <AvatarFallback size={size}>{item.fallback}</AvatarFallback>\n </Avatar>\n </span>\n ))}\n\n {/* Exact limit: show the last real avatar */}\n {lastItem && (\n <span aria-hidden=\"true\" className={cn(\"relative inline-flex items-center -ml-2\", lastZ)}>\n <Avatar size={size} className=\"border border-border bg-background\">\n {lastItem.src && <AvatarImage src={lastItem.src} alt=\"\" />}\n <AvatarFallback size={size}>{lastItem.fallback}</AvatarFallback>\n </Avatar>\n </span>\n )}\n\n {/* Over limit: +N overflow badge */}\n {overflowCount > 0 && (\n <span aria-hidden=\"true\" className={cn(\"relative inline-flex items-center -ml-2\", lastZ)}>\n <Avatar size={size} className=\"border border-border\">\n <AvatarFallback\n size={size}\n className=\"bg-muted text-[0.625rem] font-semibold leading-none text-foreground\"\n >\n +{overflowCount}\n </AvatarFallback>\n </Avatar>\n </span>\n )}\n </div>\n );\n}\n\nexport { Avatar, AvatarFallback, AvatarGroup, AvatarImage };\n","\"use client\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../primitives/avatar\";\nimport { cn } from \"../../utils/cn\";\nimport type { Author } from \"./types\";\n\n/* -------------------------------------------------------------------------- *\\\n * UserInfo — author + timestamp + reputation + badges row.\n *\n * Displayed in the bottom-right of a question or answer card. Visual chrome\n * only — semantics live on the surrounding question/answer container.\n *\n * Avatar fallback: when the author has no avatar URL, render initials. The\n * prior implementation reached for `api.dicebear.com` as a default which is\n * a hidden third-party network call — removed.\n\\* -------------------------------------------------------------------------- */\n\nexport interface UserInfoProps {\n author: Author;\n timestamp: string;\n /** Verb shown before the timestamp. @default \"asked\" */\n verb?: string;\n className?: string;\n}\n\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .map((part) => part.charAt(0).toUpperCase())\n .join(\"\")\n .slice(0, 2);\n}\n\nexport function UserInfo({ author, timestamp, verb = \"asked\", className }: UserInfoProps) {\n return (\n <div\n className={cn(\"flex items-start gap-3 rounded-[var(--radius-md)] bg-muted/40 p-3\", className)}\n >\n <Avatar className=\"h-8 w-8 shrink-0\">\n {author.avatar && <AvatarImage src={author.avatar} alt={author.name} />}\n <AvatarFallback>{initials(author.name)}</AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"text-muted-foreground text-xs\">\n {verb} {timestamp}\n </span>\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-foreground text-sm\">{author.name}</span>\n <span className=\"font-bold text-muted-foreground text-xs tabular-nums\">\n {author.reputation.toLocaleString()}\n </span>\n {author.badges.gold > 0 && (\n <Badge color=\"bg-yellow-500\" count={author.badges.gold} label=\"gold\" />\n )}\n {author.badges.silver > 0 && (\n <Badge color=\"bg-gray-400\" count={author.badges.silver} label=\"silver\" />\n )}\n {author.badges.bronze > 0 && (\n <Badge color=\"bg-amber-600\" count={author.badges.bronze} label=\"bronze\" />\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction Badge({ color, count, label }: { color: string; count: number; label: string }) {\n return (\n <span className=\"flex items-center gap-1\">\n <span aria-hidden=\"true\" className={cn(\"h-2 w-2 rounded-full\", color)} />\n <span className=\"text-muted-foreground text-xs\">\n <span className=\"sr-only\">{label} badges: </span>\n {count}\n </span>\n </span>\n );\n}\n","\"use client\";\n\nimport { ChevronDown, ChevronUp } from \"@nebutra/icons\";\nimport { Button } from \"../../primitives/button\";\nimport { cn } from \"../../utils/cn\";\nimport type { VoteType } from \"./types\";\n\n/* -------------------------------------------------------------------------- *\\\n * VoteButtons — vertical up/down vote control for a question or answer.\n *\n * Net score is computed locally as `votes + delta(userVote)` so the\n * optimistic UI matches the post's stored count without round-tripping.\n\\* -------------------------------------------------------------------------- */\n\nexport interface VoteButtonsProps {\n votes: number;\n userVote: VoteType;\n onVote: (next: \"up\" | \"down\") => void;\n /** @default \"default\" */\n size?: \"default\" | \"large\";\n /** Label that describes what is being voted on (for screen readers). */\n label?: string;\n}\n\nfunction voteDelta(userVote: VoteType): number {\n if (userVote === \"up\") return 1;\n if (userVote === \"down\") return -1;\n return 0;\n}\n\nexport function VoteButtons({\n votes,\n userVote,\n onVote,\n size = \"default\",\n label = \"post\",\n}: VoteButtonsProps) {\n const iconSize = size === \"large\" ? \"h-5 w-5\" : \"h-4 w-4\";\n const scoreSize = size === \"large\" ? \"text-lg\" : \"text-base\";\n const score = votes + voteDelta(userVote);\n\n return (\n <fieldset className=\"flex flex-col items-center gap-2\">\n <legend className=\"sr-only\">Vote on {label}</legend>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size={size === \"large\" ? \"default\" : \"sm\"}\n aria-label={`Upvote ${label}`}\n aria-pressed={userVote === \"up\"}\n onClick={() => onVote(\"up\")}\n className={cn(\"p-2\", userVote === \"up\" && \"bg-primary/10 text-primary hover:bg-primary/15\")}\n >\n <ChevronUp className={iconSize} aria-hidden=\"true\" />\n </Button>\n <span\n className={cn(\n \"font-bold tabular-nums\",\n scoreSize,\n userVote === \"up\" && \"text-primary\",\n userVote === \"down\" && \"text-muted-foreground\",\n )}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {score}\n </span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size={size === \"large\" ? \"default\" : \"sm\"}\n aria-label={`Downvote ${label}`}\n aria-pressed={userVote === \"down\"}\n onClick={() => onVote(\"down\")}\n className={cn(\n \"p-2\",\n userVote === \"down\" && \"bg-muted text-muted-foreground hover:bg-muted\",\n )}\n >\n <ChevronDown className={iconSize} aria-hidden=\"true\" />\n </Button>\n </fieldset>\n );\n}\n","\"use client\";\n\nimport {\n Bookmark,\n Calendar,\n Check,\n Eye,\n Flag,\n Pencil,\n Share as ShareIcon,\n StarFill,\n} from \"@nebutra/icons\";\nimport { Fragment, useMemo, useState } from \"react\";\nimport { Badge } from \"../../primitives/badge\";\nimport { Button } from \"../../primitives/button\";\nimport { Card, CardContent, CardHeader } from \"../../primitives/card\";\nimport { Separator } from \"../../primitives/separator\";\nimport { cn } from \"../../utils/cn\";\nimport { MarkdownEditor } from \"./markdown-editor\";\nimport { MarkdownRenderer } from \"./markdown-renderer\";\nimport type { AnswerType, QuestionType, VoteType } from \"./types\";\nimport { UserInfo } from \"./user-info\";\nimport { VoteButtons } from \"./vote-buttons\";\n\n/* -------------------------------------------------------------------------- *\\\n * QAPage — Stack Overflow-style question + answers surface.\n *\n * Composed from @nebutra/ui primitives (Button, Card, Badge, Separator)\n * plus sibling Q&A pieces (VoteButtons, UserInfo, MarkdownRenderer,\n * MarkdownEditor). All icons from @nebutra/icons per the icon governance\n * three-tier hierarchy — no lucide-react, no Phosphor (this isn't an\n * AI-brand surface).\n *\n * State ownership:\n * The composition is uncontrolled by default — pass `initialQuestion` and\n * `initialAnswers`, the component holds the optimistic vote / bookmark /\n * accept / draft state. Provide `onVote*` / `onAccept` / `onSubmitAnswer`\n * callbacks to persist upstream.\n *\n * Submit semantics:\n * `onSubmitAnswer` is invoked with the markdown source; the host owns\n * persistence + author resolution. The pattern stamps a `Date.now()` id\n * for the optimistic row only — replace with the server id on round-trip.\n\\* -------------------------------------------------------------------------- */\n\n// ---------------------------------------------------------------------------\n// Props\n// ---------------------------------------------------------------------------\n\nexport interface QAPageProps {\n initialQuestion: QuestionType;\n initialAnswers: AnswerType[];\n /** Author resolved upstream for new answer drafts. */\n currentAuthor?: AnswerType[\"author\"];\n /** Called when the user submits a new answer. Markdown source. */\n onSubmitAnswer?: (content: string) => void;\n /** Called when the user votes on the question. */\n onVoteQuestion?: (vote: VoteType) => void;\n /** Called when the user votes on an answer. */\n onVoteAnswer?: (id: AnswerType[\"id\"], vote: VoteType) => void;\n /** Called when the user accepts/unaccepts an answer. */\n onAcceptAnswer?: (id: AnswerType[\"id\"]) => void;\n /** Called when the user toggles the question bookmark. */\n onBookmark?: (next: boolean) => void;\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function QAPage({\n initialQuestion,\n initialAnswers,\n currentAuthor = {\n name: \"you\",\n reputation: 0,\n badges: { gold: 0, silver: 0, bronze: 0 },\n },\n onSubmitAnswer,\n onVoteAnswer,\n onVoteQuestion,\n onAcceptAnswer,\n onBookmark,\n className,\n}: QAPageProps) {\n const [question, setQuestion] = useState(initialQuestion);\n const [answers, setAnswers] = useState(initialAnswers);\n const [draft, setDraft] = useState(\"\");\n\n const handleQuestionVote = (next: \"up\" | \"down\") => {\n const userVote = question.userVote === next ? null : next;\n setQuestion((q) => ({ ...q, userVote }));\n onVoteQuestion?.(userVote);\n };\n\n const handleAnswerVote = (id: AnswerType[\"id\"], next: \"up\" | \"down\") => {\n setAnswers((list) =>\n list.map((a) => (a.id === id ? { ...a, userVote: a.userVote === next ? null : next } : a)),\n );\n const fresh = answers.find((a) => a.id === id);\n const userVote = fresh && fresh.userVote === next ? null : next;\n onVoteAnswer?.(id, userVote);\n };\n\n const handleAccept = (id: AnswerType[\"id\"]) => {\n setAnswers((list) =>\n list.map((a) => ({ ...a, isAccepted: a.id === id ? !a.isAccepted : false })),\n );\n onAcceptAnswer?.(id);\n };\n\n const handleBookmarkToggle = () => {\n setQuestion((q) => {\n const next = !q.bookmarked;\n onBookmark?.(next);\n return { ...q, bookmarked: next };\n });\n };\n\n const handleSubmit = () => {\n const trimmed = draft.trim();\n if (!trimmed) return;\n const newAnswer: AnswerType = {\n id: Date.now(),\n content: trimmed,\n author: currentAuthor,\n votes: 0,\n timestamp: \"just now\",\n isAccepted: false,\n userVote: null,\n };\n setAnswers((list) => [...list, newAnswer]);\n setDraft(\"\");\n onSubmitAnswer?.(trimmed);\n };\n\n // Sort: accepted first, then by score descending (with userVote applied)\n const sortedAnswers = useMemo(() => {\n return [...answers].sort((a, b) => {\n if (a.isAccepted !== b.isAccepted) return a.isAccepted ? -1 : 1;\n const aScore = a.votes + (a.userVote === \"up\" ? 1 : a.userVote === \"down\" ? -1 : 0);\n const bScore = b.votes + (b.userVote === \"up\" ? 1 : b.userVote === \"down\" ? -1 : 0);\n return bScore - aScore;\n });\n }, [answers]);\n\n return (\n <div className={cn(\"mx-auto w-full max-w-5xl p-4 md:p-6\", className)}>\n {/* ── Header ────────────────────────────────────────────────────── */}\n <header className=\"mb-6\">\n <h1 className=\"mb-4 font-bold text-2xl leading-tight text-foreground\">{question.title}</h1>\n <div className=\"mb-4 flex items-center gap-4 text-muted-foreground text-sm\">\n <span className=\"flex items-center gap-1\">\n <Calendar aria-hidden=\"true\" className=\"h-4 w-4\" />\n Asked {question.timestamp}\n </span>\n <span className=\"flex items-center gap-1\">\n <Eye aria-hidden=\"true\" className=\"h-4 w-4\" />\n Viewed {question.views.toLocaleString()} times\n </span>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {question.tags.map((tag) => (\n <Badge key={tag} variant=\"secondary\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n </header>\n\n {/* ── Question card ─────────────────────────────────────────────── */}\n <Card className=\"mb-8\">\n <CardContent className=\"flex gap-6 p-6\">\n <div className=\"flex flex-col items-center gap-4\">\n <VoteButtons\n votes={question.votes}\n userVote={question.userVote}\n onVote={handleQuestionVote}\n size=\"large\"\n label=\"question\"\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={question.bookmarked ? \"Remove bookmark\" : \"Bookmark question\"}\n aria-pressed={question.bookmarked}\n onClick={handleBookmarkToggle}\n className={cn(\"p-2\", question.bookmarked && \"bg-warning/10 text-warning\")}\n >\n <Bookmark className=\"h-4 w-4\" aria-hidden=\"true\" />\n </Button>\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <MarkdownRenderer content={question.content} />\n <PostActions\n className=\"mt-6\"\n author={question.author}\n timestamp={question.timestamp}\n verb=\"asked\"\n shareLabel=\"Share Question\"\n editLabel=\"Edit Question\"\n flagLabel=\"Flag Question\"\n />\n </div>\n </CardContent>\n </Card>\n\n {/* ── Answers ──────────────────────────────────────────────────── */}\n <div className=\"mb-6 flex items-center justify-between\">\n <h2 className=\"font-semibold text-foreground text-xl\">\n {answers.length} {answers.length === 1 ? \"Answer\" : \"Answers\"}\n </h2>\n </div>\n\n <div className=\"mb-8\">\n {sortedAnswers.map((answer, index) => (\n <Fragment key={answer.id}>\n <Card className={cn(\"mb-6\", answer.isAccepted && \"ring-2 ring-success/40\")}>\n <CardContent className=\"flex gap-6 p-6\">\n <div className=\"flex flex-col items-center gap-4\">\n <VoteButtons\n votes={answer.votes}\n userVote={answer.userVote}\n onVote={(v) => handleAnswerVote(answer.id, v)}\n size=\"large\"\n label=\"answer\"\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n aria-label={answer.isAccepted ? \"Unaccept this answer\" : \"Accept this answer\"}\n aria-pressed={answer.isAccepted}\n onClick={() => handleAccept(answer.id)}\n className={cn(\"p-2\", answer.isAccepted && \"bg-success/10 text-success\")}\n >\n <Check className=\"h-5 w-5\" aria-hidden=\"true\" />\n </Button>\n {answer.isAccepted && (\n <div className=\"text-center\">\n <StarFill aria-hidden=\"true\" className=\"mx-auto mb-1 h-4 w-4 text-success\" />\n <span className=\"font-medium text-success text-xs\">Accepted</span>\n </div>\n )}\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <MarkdownRenderer content={answer.content} />\n <PostActions\n className=\"mt-6\"\n author={answer.author}\n timestamp={answer.timestamp}\n verb=\"answered\"\n shareLabel=\"Share Answer\"\n editLabel=\"Edit Answer\"\n flagLabel=\"Flag Answer\"\n />\n </div>\n </CardContent>\n </Card>\n {index < sortedAnswers.length - 1 && <Separator className=\"mb-6\" />}\n </Fragment>\n ))}\n </div>\n\n {/* ── Compose new answer ───────────────────────────────────────── */}\n <Card>\n <CardHeader>\n <h3 className=\"font-semibold text-foreground text-lg\">Your Answer</h3>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <MarkdownEditor value={draft} onChange={setDraft} placeholder=\"Write your answer here…\" />\n <div className=\"flex items-center justify-between\">\n <p className=\"text-muted-foreground text-xs\">Thanks for contributing an answer!</p>\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => setDraft(\"\")}\n disabled={!draft}\n >\n Discard Draft\n </Button>\n <Button type=\"button\" onClick={handleSubmit} disabled={!draft.trim()}>\n Post Your Answer\n </Button>\n </div>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// PostActions — share / edit / flag triad + author chrome\n// ---------------------------------------------------------------------------\n\nfunction PostActions({\n author,\n timestamp,\n verb,\n shareLabel,\n editLabel,\n flagLabel,\n className,\n}: {\n author: AnswerType[\"author\"];\n timestamp: string;\n verb: string;\n shareLabel: string;\n editLabel: string;\n flagLabel: string;\n className?: string;\n}) {\n return (\n <div className={cn(\"flex flex-wrap items-center justify-between gap-3\", className)}>\n <div className=\"flex items-center gap-1\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n <ShareIcon className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n {shareLabel}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n <Pencil className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n {editLabel}\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className=\"text-xs\">\n <Flag className=\"mr-1 h-3 w-3\" aria-hidden=\"true\" />\n {flagLabel}\n </Button>\n </div>\n <UserInfo author={author} timestamp={timestamp} verb={verb} />\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { AnimatePresence, motion, useReducedMotion } from \"../shared/animation/motion\";\nimport { cn } from \"../utils/cn\";\n\nconst CollapsibleContext = React.createContext<{\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean | undefined;\n}>({});\n\nconst Collapsible = ({\n className,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disabled,\n children,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n} & { ref?: React.Ref<HTMLDivElement> | undefined }) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen || false);\n const isControlled = openProp !== undefined;\n const open = isControlled ? openProp : uncontrolledOpen;\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange],\n );\n\n return (\n <CollapsibleContext.Provider value={{ open, onOpenChange: handleOpenChange, disabled }}>\n <div\n ref={ref}\n className={className}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n {...props}\n >\n {children}\n </div>\n </CollapsibleContext.Provider>\n );\n};\nCollapsible.displayName = \"Collapsible\";\n\nconst CollapsibleTrigger = ({\n className,\n asChild,\n children,\n ref,\n ...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean } & {\n ref?: React.Ref<HTMLButtonElement> | undefined;\n}) => {\n const { open, onOpenChange, disabled } = React.use(CollapsibleContext);\n\n const handleClick = React.useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n onOpenChange?.(!open);\n props.onClick?.(e);\n },\n [disabled, open, onOpenChange, props.onClick],\n );\n\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(children as React.ReactElement<Record<string, unknown>>, {\n ref,\n onClick: handleClick,\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-disabled\": disabled ? \"\" : undefined,\n \"aria-expanded\": open,\n \"aria-controls\": props[\"aria-controls\"],\n disabled: disabled || props.disabled,\n ...props,\n });\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleClick}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n aria-expanded={open}\n disabled={disabled || props.disabled}\n className={className}\n {...props}\n >\n {children}\n </button>\n );\n};\nCollapsibleTrigger.displayName = \"CollapsibleTrigger\";\n\nconst CollapsibleContent = ({\n className,\n children,\n ref,\n ...props\n}: React.HTMLAttributes<HTMLDivElement> & { ref?: React.Ref<HTMLDivElement> | undefined }) => {\n const { open } = React.use(CollapsibleContext);\n const shouldReduceMotion = useReducedMotion();\n\n return (\n <AnimatePresence initial={false}>\n {open && (\n <motion.div\n key=\"content\"\n initial=\"collapsed\"\n animate=\"open\"\n exit=\"collapsed\"\n variants={{\n open: { opacity: 1, height: \"auto\" },\n collapsed: { opacity: 0, height: 0 },\n }}\n transition={\n shouldReduceMotion ? { duration: 0 } : { duration: 0.3, ease: [0.04, 0.62, 0.23, 0.98] }\n }\n className=\"overflow-hidden\"\n >\n <div ref={ref} data-state=\"open\" className={cn(\"\", className)} {...props}>\n {children}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n );\n};\nCollapsibleContent.displayName = \"CollapsibleContent\";\n\nexport { Collapsible, CollapsibleContent, CollapsibleTrigger };\n","\"use client\";\n\nimport { ChevronRight } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { Badge } from \"../../primitives/badge\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../../primitives/collapsible\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../../primitives/tooltip\";\nimport { cn } from \"../../utils/cn\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type SidebarNavBadgeTone = \"beta\" | \"new\" | \"owner\" | \"featured\" | \"coming-soon\";\n\nexport interface SidebarNavBadge {\n label: string;\n tone: SidebarNavBadgeTone;\n}\n\nexport type SidebarNavIcon = React.ComponentType<{ className?: string }>;\n\nexport interface SidebarNavItem {\n id: string;\n label: string;\n href?: string;\n icon?: SidebarNavIcon;\n badge?: SidebarNavBadge;\n isActive?: boolean;\n external?: boolean;\n onClick?: () => void;\n /** Nested children — 1 level deep max */\n children?: SidebarNavItem[];\n disabled?: boolean;\n /** Controlled expansion for parent items (with children). When provided\n * together with onExpandedChange, the inner Collapsible runs as a\n * controlled component. Falls back to uncontrolled otherwise. */\n expanded?: boolean;\n onExpandedChange?: (next: boolean) => void;\n}\n\n/** A single icon-button action rendered inline-right of the section label,\n * revealed only on section hover/focus-within. Max 3 per section. */\nexport interface SidebarNavSectionAction {\n id: string;\n icon: SidebarNavIcon;\n /** Accessible name (also used as title attribute). */\n label: string;\n /** Click handler — required unless `render` is provided. */\n onClick?: () => void;\n /** Optional wrapper to replace the default `<button>` rendering. Receives\n * the default icon-button element so consumers can compose, e.g., a\n * DropdownMenu trigger around it. When provided, `onClick` is ignored. */\n render?: (defaultButton: React.ReactElement) => React.ReactNode;\n}\n\nexport interface SidebarNavSection {\n id: string;\n /** Group label, e.g. \"MiniMax 实验室\". Hidden when collapsed. */\n label?: string;\n items: SidebarNavItem[];\n /** Hover/focus-revealed actions next to the section label. Skipped in\n * collapsed mode and when empty. Limit to ≤ 3 to keep visual rhythm. */\n actions?: SidebarNavSectionAction[];\n}\n\nexport interface SidebarNavRenderLinkProps {\n href: string;\n children: React.ReactNode;\n className?: string;\n \"aria-current\"?: \"page\" | undefined;\n \"aria-label\"?: string;\n onClick?: () => void;\n}\n\nexport interface SidebarNavProps {\n sections: SidebarNavSection[];\n /** Icon-only mode. Section labels hidden; items show tooltip on hover. */\n collapsed?: boolean;\n className?: string;\n itemClassName?: string;\n /** Slot rendered above sections (e.g. logo + workspace switcher). */\n header?: React.ReactNode;\n /** Slot rendered below sections (e.g. theme toggle, sign-out). */\n footer?: React.ReactNode;\n /** When provided, this is used to render link items. Default: <a>. */\n renderLink?: (props: SidebarNavRenderLinkProps) => React.ReactElement;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nconst ITEM_BASE_CLASSES =\n \"group flex min-h-8 items-center gap-2 rounded-[var(--radius-md)] px-2.5 py-1.5 text-[13px] leading-5 transition-[background-color,color,box-shadow,transform]\";\nconst ITEM_DEFAULT_CLASSES =\n \"text-sidebar-foreground/72 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\";\nconst ITEM_ACTIVE_CLASSES =\n \"bg-sidebar-primary text-sidebar-primary-foreground font-medium shadow-sm shadow-sidebar-primary/10 hover:bg-sidebar-primary hover:text-sidebar-primary-foreground\";\nconst ITEM_DISABLED_CLASSES = \"opacity-50 pointer-events-none\";\nconst ITEM_COLLAPSED_CLASSES = \"justify-center px-0 size-8 mx-auto\";\nconst ICON_CLASSES = \"size-4 shrink-0\";\n\nfunction defaultRenderLink({\n href,\n children,\n className,\n \"aria-current\": ariaCurrent,\n \"aria-label\": ariaLabel,\n onClick,\n}: SidebarNavRenderLinkProps): React.ReactElement {\n return (\n <a\n href={href}\n className={className}\n aria-current={ariaCurrent}\n aria-label={ariaLabel}\n onClick={onClick}\n >\n {children}\n </a>\n );\n}\n\ninterface ItemContentProps {\n item: SidebarNavItem;\n collapsed: boolean;\n showChevron?: boolean;\n chevronOpen?: boolean;\n}\n\nfunction ItemContent({\n item,\n collapsed,\n showChevron,\n chevronOpen,\n}: ItemContentProps): React.ReactElement {\n const Icon = item.icon;\n\n if (collapsed) {\n return (\n <>\n {Icon ? <Icon className={ICON_CLASSES} /> : null}\n <span className=\"sr-only\">{item.label}</span>\n </>\n );\n }\n\n return (\n <>\n {Icon ? <Icon className={ICON_CLASSES} /> : null}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.badge ? (\n <Badge variant={item.badge.tone} size=\"sm\">\n {item.badge.label}\n </Badge>\n ) : null}\n {showChevron ? (\n <ChevronRight\n className={cn(\n \"size-3.5 shrink-0 text-muted-foreground transition-transform\",\n chevronOpen && \"rotate-90\",\n )}\n aria-hidden=\"true\"\n />\n ) : null}\n </>\n );\n}\n\ninterface InteractiveItemProps {\n item: SidebarNavItem;\n collapsed: boolean;\n itemClassName?: string;\n renderLink: (props: SidebarNavRenderLinkProps) => React.ReactElement;\n /** Indent for nested children. */\n nested?: boolean;\n}\n\nfunction InteractiveItem({\n item,\n collapsed,\n itemClassName,\n renderLink,\n nested = false,\n}: InteractiveItemProps): React.ReactElement {\n const isActive = item.isActive === true;\n const isDisabled = item.disabled === true;\n\n const classes = cn(\n ITEM_BASE_CLASSES,\n isActive ? ITEM_ACTIVE_CLASSES : ITEM_DEFAULT_CLASSES,\n isDisabled && ITEM_DISABLED_CLASSES,\n collapsed && ITEM_COLLAPSED_CLASSES,\n !collapsed && nested && \"pl-9\",\n itemClassName,\n );\n\n const ariaCurrent = isActive ? \"page\" : undefined;\n const ariaDisabled = isDisabled ? true : undefined;\n\n const inner = <ItemContent item={item} collapsed={collapsed} />;\n\n let element: React.ReactElement;\n\n if (item.href && !isDisabled) {\n if (item.external) {\n element = (\n <a\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classes}\n aria-current={ariaCurrent}\n aria-label={collapsed ? item.label : undefined}\n onClick={item.onClick}\n >\n {inner}\n </a>\n );\n } else {\n element = renderLink({\n href: item.href,\n className: classes,\n children: inner,\n \"aria-current\": ariaCurrent,\n \"aria-label\": collapsed ? item.label : undefined,\n onClick: item.onClick,\n });\n }\n } else {\n element = (\n <button\n type=\"button\"\n className={cn(classes, \"w-full text-left\")}\n aria-current={ariaCurrent}\n aria-disabled={ariaDisabled}\n aria-label={collapsed ? item.label : undefined}\n disabled={isDisabled}\n onClick={item.onClick}\n >\n {inner}\n </button>\n );\n }\n\n if (collapsed) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{element}</TooltipTrigger>\n <TooltipContent side=\"right\" sideOffset={8}>\n {item.label}\n </TooltipContent>\n </Tooltip>\n );\n }\n\n return element;\n}\n\ninterface ParentItemProps {\n item: SidebarNavItem;\n collapsed: boolean;\n itemClassName?: string;\n renderLink: (props: SidebarNavRenderLinkProps) => React.ReactElement;\n}\n\nfunction ParentItem({\n item,\n collapsed,\n itemClassName,\n renderLink,\n}: ParentItemProps): React.ReactElement {\n const hasActiveChild = item.children?.some((c) => c.isActive === true) ?? false;\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState<boolean>(\n item.isActive === true || hasActiveChild,\n );\n // Controlled when BOTH expanded + onExpandedChange are provided; otherwise\n // fall back to the internal uncontrolled state.\n const isControlled = item.expanded !== undefined && item.onExpandedChange !== undefined;\n const open = isControlled ? (item.expanded as boolean) : uncontrolledOpen;\n const setOpen = React.useCallback(\n (next: boolean) => {\n if (isControlled) {\n item.onExpandedChange?.(next);\n } else {\n setUncontrolledOpen(next);\n }\n },\n [isControlled, item.onExpandedChange],\n );\n\n // If collapsed, render parent as a flat icon-only item with tooltip (no nested expansion).\n if (collapsed) {\n return (\n <InteractiveItem\n item={item}\n collapsed\n itemClassName={itemClassName}\n renderLink={renderLink}\n />\n );\n }\n\n const isActive = item.isActive === true;\n const isDisabled = item.disabled === true;\n\n const triggerClasses = cn(\n ITEM_BASE_CLASSES,\n \"w-full text-left\",\n isActive ? ITEM_ACTIVE_CLASSES : ITEM_DEFAULT_CLASSES,\n isDisabled && ITEM_DISABLED_CLASSES,\n itemClassName,\n );\n\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <CollapsibleTrigger\n className={triggerClasses}\n aria-current={isActive ? \"page\" : undefined}\n disabled={isDisabled}\n >\n <ItemContent item={item} collapsed={false} showChevron chevronOpen={open} />\n </CollapsibleTrigger>\n <CollapsibleContent>\n <ul className=\"mt-1 flex flex-col gap-0.5\">\n {item.children?.map((child) => (\n <li key={child.id}>\n <InteractiveItem\n item={child}\n collapsed={false}\n itemClassName={itemClassName}\n renderLink={renderLink}\n nested\n />\n </li>\n ))}\n </ul>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SidebarNav({\n sections,\n collapsed = false,\n className,\n itemClassName,\n header,\n footer,\n renderLink = defaultRenderLink,\n}: SidebarNavProps): React.ReactElement {\n return (\n <TooltipProvider delayDuration={200}>\n <nav\n aria-label=\"Sidebar\"\n data-ui=\"nebutra-sidebar-nav\"\n className={cn(\n \"flex h-full flex-col\",\n collapsed ? \"gap-3 px-2 py-3\" : \"gap-5 px-3 py-4\",\n className,\n )}\n >\n {header ? <div className=\"shrink-0\">{header}</div> : null}\n\n <div className=\"flex-1 space-y-4 overflow-y-auto\">\n {sections.map((section) => {\n const visibleActions =\n !collapsed && section.actions && section.actions.length > 0\n ? section.actions.slice(0, 3)\n : null;\n return (\n <section key={section.id} className=\"group/section\">\n {section.label && !collapsed ? (\n <div className=\"mb-1.5 flex items-center justify-between px-2.5\">\n <span className=\"text-[10px] font-semibold uppercase tracking-[0.18em] text-sidebar-foreground/45\">\n {section.label}\n </span>\n {visibleActions ? (\n <div className=\"flex items-center gap-0.5 opacity-0 transition-opacity duration-150 group-hover/section:opacity-100 focus-within:opacity-100\">\n {visibleActions.map((action) => {\n const ActionIcon = action.icon;\n const defaultButton = (\n <button\n type=\"button\"\n aria-label={action.label}\n title={action.label}\n onClick={action.onClick}\n className=\"inline-flex size-4 items-center justify-center rounded text-sidebar-foreground/50 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ActionIcon className=\"size-3\" />\n </button>\n );\n return (\n <span key={action.id} className=\"contents\">\n {action.render ? action.render(defaultButton) : defaultButton}\n </span>\n );\n })}\n </div>\n ) : null}\n </div>\n ) : null}\n <ul className=\"flex flex-col gap-0.5\">\n {section.items.map((item) => {\n const hasChildren = Array.isArray(item.children) && item.children.length > 0;\n return (\n <li key={item.id}>\n {hasChildren ? (\n <ParentItem\n item={item}\n collapsed={collapsed}\n itemClassName={itemClassName}\n renderLink={renderLink}\n />\n ) : (\n <InteractiveItem\n item={item}\n collapsed={collapsed}\n itemClassName={itemClassName}\n renderLink={renderLink}\n />\n )}\n </li>\n );\n })}\n </ul>\n </section>\n );\n })}\n </div>\n\n {footer ? (\n <div className=\"shrink-0 border-t border-sidebar-border pt-3\">{footer}</div>\n ) : null}\n </nav>\n </TooltipProvider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../utils/cn\";\n\n/* ─────────────────────────────────────────────────────────────────────────────\n * Terminal Compound Component\n *\n * A terminal/code window pattern with macOS-style controls.\n *\n * Usage:\n * <Terminal>\n * <Terminal.Header title=\"bash\" />\n * <Terminal.Body>\n * <Terminal.Line prompt=\"$\">npm install @nebutra/ui</Terminal.Line>\n * <Terminal.Line prompt=\"$\">npm run dev</Terminal.Line>\n * </Terminal.Body>\n * </Terminal>\n * ───────────────────────────────────────────────────────────────────────────── */\n\ntype TerminalVariant = \"default\" | \"minimal\" | \"glass\";\n\ninterface TerminalContextValue {\n variant: TerminalVariant;\n}\n\nconst TerminalContext = React.createContext<TerminalContextValue | null>(null);\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nconst variantStyles: Record<TerminalVariant, string> = {\n default: \"bg-muted border border-border\",\n minimal: \"bg-background border border-border\",\n glass: \"bg-muted backdrop-blur-md border border-border\",\n};\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface TerminalProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: TerminalVariant;\n}\n\nconst TerminalRoot = React.forwardRef<HTMLDivElement, TerminalProps>(\n ({ className, variant = \"default\", children, ...props }, ref) => {\n return (\n <TerminalContext.Provider value={{ variant }}>\n <div\n ref={ref}\n className={cn(\n \"rounded-[var(--radius-xl)] overflow-hidden font-mono text-sm\",\n variantStyles[variant],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TerminalContext.Provider>\n );\n },\n);\nTerminalRoot.displayName = \"Terminal\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface TerminalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string;\n showControls?: boolean;\n}\n\nconst TerminalHeader = React.forwardRef<HTMLDivElement, TerminalHeaderProps>(\n ({ className, title, showControls = true, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-2 px-4 py-3 border-b border-border bg-muted\",\n className,\n )}\n {...props}\n >\n {showControls && (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"w-3 h-3 rounded-full bg-red-500/80\" aria-hidden />\n <span className=\"w-3 h-3 rounded-full bg-yellow-500/80\" aria-hidden />\n <span className=\"w-3 h-3 rounded-full bg-green-500/80\" aria-hidden />\n </div>\n )}\n {title && <span className=\"ml-2 text-xs text-muted-foreground\">{title}</span>}\n {children}\n </div>\n );\n },\n);\nTerminalHeader.displayName = \"Terminal.Header\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport type TerminalBodyProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst TerminalBody = React.forwardRef<HTMLDivElement, TerminalBodyProps>(\n ({ className, children, ...props }, ref) => {\n return (\n <div ref={ref} className={cn(\"p-4 space-y-1\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\nTerminalBody.displayName = \"Terminal.Body\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\nexport interface TerminalLineProps extends React.HTMLAttributes<HTMLDivElement> {\n prompt?: string;\n output?: boolean;\n highlight?: boolean;\n}\n\nconst TerminalLine = React.forwardRef<HTMLDivElement, TerminalLineProps>(\n ({ className, prompt = \"$\", output = false, highlight = false, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-start gap-2\",\n highlight && \"bg-muted -mx-2 px-2 py-0.5 rounded\",\n className,\n )}\n {...props}\n >\n {!output && <span className=\"text-emerald-400 shrink-0 select-none\">{prompt}</span>}\n <span className={cn(\"flex-1\", output ? \"text-muted-foreground\" : \"text-muted-foreground\")}>\n {children}\n </span>\n </div>\n );\n },\n);\nTerminalLine.displayName = \"Terminal.Line\";\n\n/* ─────────────────────────────────────────────────────────────────────────── */\n\n// Compound component assembly\nexport const Terminal = Object.assign(TerminalRoot, {\n Header: TerminalHeader,\n Body: TerminalBody,\n Line: TerminalLine,\n});\n\n// Named exports for direct imports\nexport { TerminalBody, TerminalHeader, TerminalLine, TerminalRoot };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../utils/cn\";\n\ntype Modifier = \"meta\" | \"shift\" | \"alt\" | \"ctrl\";\ntype Platform = \"apple\" | \"other\";\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n /** Command on macOS/iOS; Ctrl on Windows/Linux. */\n meta?: boolean;\n /** Shift modifier. */\n shift?: boolean;\n /** Option on macOS/iOS; Alt on Windows/Linux. */\n alt?: boolean;\n /** Control modifier. */\n ctrl?: boolean;\n /** Smaller size for dense surfaces. */\n small?: boolean;\n /** One key, digit, punctuation mark, or named key. */\n children?: React.ReactNode;\n className?: string;\n}\n\nconst modifierOrder = [\"meta\", \"shift\", \"alt\", \"ctrl\"] as const satisfies ReadonlyArray<Modifier>;\n\nconst appleModifierSymbols: Record<Modifier, string> = {\n meta: \"⌘\",\n shift: \"⇧\",\n alt: \"⌥\",\n ctrl: \"⌃\",\n};\n\nconst otherModifierSymbols: Record<Modifier, string> = {\n meta: \"Ctrl\",\n shift: \"Shift\",\n alt: \"Alt\",\n ctrl: \"Ctrl\",\n};\n\nconst modifierLabels: Record<Modifier, string> = {\n meta: \"Command or Control\",\n shift: \"Shift\",\n alt: \"Option or Alt\",\n ctrl: \"Control\",\n};\n\nfunction getClientPlatform(): Platform {\n const platform = window.navigator.platform.toLowerCase();\n const userAgent = window.navigator.userAgent.toLowerCase();\n const isApple = /mac|iphone|ipad|ipod/.test(platform) || /mac|iphone|ipad|ipod/.test(userAgent);\n\n return isApple ? \"apple\" : \"other\";\n}\n\nfunction subscribePlatform(): () => void {\n return () => undefined;\n}\n\nfunction usePlatform(): Platform {\n return React.useSyncExternalStore(subscribePlatform, getClientPlatform, () => \"apple\");\n}\n\nfunction normalizeKey(children: React.ReactNode): React.ReactNode {\n if (typeof children !== \"string\") {\n return children;\n }\n\n const trimmed = children.trim();\n\n if (/^[a-z]$/.test(trimmed)) {\n return trimmed.toUpperCase();\n }\n\n return trimmed;\n}\n\nfunction getModifierSymbols(platform: Platform): Record<Modifier, string> {\n return platform === \"apple\" ? appleModifierSymbols : otherModifierSymbols;\n}\n\nconst Kbd = ({\n meta,\n shift,\n alt,\n ctrl,\n small,\n children,\n className,\n \"aria-label\": ariaLabel,\n ref,\n ...props\n}: KbdProps & { ref?: React.Ref<HTMLElement> | undefined }) => {\n const platform = usePlatform();\n const symbols = getModifierSymbols(platform);\n const activeModifiers = modifierOrder.filter((modifier) => {\n if (modifier === \"meta\") return meta;\n if (modifier === \"shift\") return shift;\n if (modifier === \"alt\") return alt;\n return ctrl;\n });\n const normalizedKey = normalizeKey(children);\n const visualParts = [\n ...activeModifiers.map((modifier) => symbols[modifier]),\n normalizedKey,\n ].filter(Boolean);\n const accessibleName =\n ariaLabel ??\n [\n ...activeModifiers.map((modifier) => modifierLabels[modifier]),\n typeof normalizedKey === \"string\" ? normalizedKey : undefined,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <kbd\n ref={ref as React.Ref<HTMLElement>}\n aria-label={accessibleName || undefined}\n className={cn(\n \"inline-flex select-none items-center justify-center gap-0.5 rounded-[var(--radius-sm)] border border-border bg-muted font-mono font-medium leading-none text-muted-foreground tabular-nums\",\n small ? \"min-h-4 min-w-4 px-1 py-0 text-xs\" : \"min-h-5 min-w-5 px-1.5 py-0.5 text-xs\",\n className,\n )}\n {...props}\n >\n {visualParts.join(\"\")}\n </kbd>\n );\n};\nKbd.displayName = \"Kbd\";\n\nexport { Kbd };\n","\"use client\";\n\nimport type { Icon as LucideIcon } from \"@nebutra/icons\";\nimport * as React from \"react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../primitives/avatar\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { Kbd } from \"../primitives/kbd\";\nimport { cn } from \"../utils/cn\";\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface UserMenuUser {\n id?: string;\n name: string;\n email?: string;\n avatarUrl?: string;\n /** Initials fallback — defaults to first 2 chars of name */\n initials?: string;\n}\n\nexport interface UserMenuItem {\n id: string;\n label: string;\n icon?: LucideIcon | React.ComponentType<{ className?: string }>;\n /** Keyboard shortcut hint, e.g. \"⌘,\" — rendered with <Kbd> */\n shortcut?: string;\n onSelect?: () => void;\n /** If present, item renders as a link */\n href?: string;\n /** Destructive items render in red (e.g. \"Sign out\") */\n destructive?: boolean;\n disabled?: boolean;\n}\n\nexport interface UserMenuGroup {\n id: string;\n label?: string;\n items: UserMenuItem[];\n}\n\nexport interface UserMenuProps {\n user: UserMenuUser;\n /** Groups of action items (e.g. [{ items: [Profile, Settings] }, { items: [Signout] }]) */\n groups: UserMenuGroup[];\n /** Slot rendered above groups — typically a <WorkspaceSwitcher /> or \"Workspaces\" section */\n workspaceSlot?: React.ReactNode;\n /** Optional render override for the trigger — default is Avatar */\n renderTrigger?: (user: UserMenuUser) => React.ReactNode;\n /** Optional render override for links (e.g. Next.js Link) */\n renderLink?: (props: { href: string; children: React.ReactNode }) => React.ReactElement;\n className?: string;\n /** Dropdown align (default \"end\") */\n align?: \"start\" | \"center\" | \"end\";\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction computeInitials(user: UserMenuUser): string {\n if (user.initials && user.initials.trim().length > 0) {\n return user.initials.toUpperCase().slice(0, 2);\n }\n const source = (user.name ?? \"\").trim() || (user.email ?? \"\").trim();\n if (!source) return \"?\";\n const tokens = source.split(/\\s+/).filter(Boolean);\n if (tokens.length >= 2) {\n const first = tokens[0]?.[0] ?? \"\";\n const second = tokens[1]?.[0] ?? \"\";\n return (first + second).toUpperCase();\n }\n return source.slice(0, 2).toUpperCase();\n}\n\nfunction DefaultTrigger({ user }: { user: UserMenuUser }) {\n const initials = computeInitials(user);\n return (\n <button\n type=\"button\"\n aria-label=\"Open user menu\"\n className={cn(\n \"inline-flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full\",\n \"outline-none transition-[box-shadow,opacity] hover:opacity-90\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"hover:ring-1 hover:ring-border\",\n )}\n >\n <Avatar size=\"sm\">\n {user.avatarUrl ? <AvatarImage src={user.avatarUrl} alt={user.name} /> : null}\n <AvatarFallback size=\"sm\" className=\"bg-primary text-white\">\n {initials}\n </AvatarFallback>\n </Avatar>\n </button>\n );\n}\n\ninterface UserMenuItemContentProps {\n item: UserMenuItem;\n}\n\nfunction UserMenuItemContent({ item }: UserMenuItemContentProps) {\n const Icon = item.icon;\n return (\n <>\n {Icon ? <Icon className=\"mr-2 h-4 w-4 shrink-0\" aria-hidden /> : null}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.shortcut ? (\n <Kbd className=\"ml-2\" small>\n {item.shortcut}\n </Kbd>\n ) : null}\n </>\n );\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function UserMenu(props: UserMenuProps): React.ReactElement {\n const {\n user,\n groups,\n workspaceSlot,\n renderTrigger,\n renderLink,\n className,\n align = \"end\",\n } = props;\n\n const initials = computeInitials(user);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {renderTrigger ? renderTrigger(user) : <DefaultTrigger user={user} />}\n </DropdownMenuTrigger>\n\n <DropdownMenuContent align={align} sideOffset={8} className={cn(\"w-[280px] p-1\", className)}>\n {/* ─── User info header ───────────────────────────────────────── */}\n <div className=\"flex items-center gap-3 p-3\">\n <Avatar size=\"md\">\n {user.avatarUrl ? <AvatarImage src={user.avatarUrl} alt={user.name} /> : null}\n <AvatarFallback size=\"md\" className=\"bg-primary text-white\">\n {initials}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-sm font-medium text-foreground\">{user.name}</span>\n {user.email ? (\n <span className=\"truncate text-xs text-muted-foreground\">{user.email}</span>\n ) : null}\n </div>\n </div>\n\n <DropdownMenuSeparator />\n\n {/* ─── Workspace slot ─────────────────────────────────────────── */}\n {workspaceSlot ? (\n <>\n <div className=\"px-1 py-1\">{workspaceSlot}</div>\n <DropdownMenuSeparator />\n </>\n ) : null}\n\n {/* ─── Action groups ──────────────────────────────────────────── */}\n {groups.map((group, groupIndex) => {\n const isLastGroup = groupIndex === groups.length - 1;\n return (\n <React.Fragment key={group.id}>\n {group.label ? (\n <div className=\"px-2 py-1 text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n {group.label}\n </div>\n ) : null}\n\n {group.items.map((item) => {\n const itemClassName = cn(\n \"flex w-full cursor-pointer items-center\",\n item.destructive &&\n \"text-destructive focus:bg-destructive focus:text-destructive-foreground data-[highlighted]:bg-destructive data-[highlighted]:text-destructive-foreground\",\n );\n\n // Link variant\n if (item.href && !item.disabled) {\n const linkContent = <UserMenuItemContent item={item} />;\n const linkElement = renderLink ? (\n renderLink({ href: item.href, children: linkContent })\n ) : (\n <a href={item.href}>{linkContent}</a>\n );\n return (\n <DropdownMenuItem\n key={item.id}\n className={itemClassName}\n onClick={item.onSelect}\n render={linkElement}\n />\n );\n }\n\n // Action variant\n return (\n <DropdownMenuItem\n key={item.id}\n className={itemClassName}\n disabled={item.disabled}\n onClick={() => {\n if (!item.disabled) item.onSelect?.();\n }}\n >\n <UserMenuItemContent item={item} />\n </DropdownMenuItem>\n );\n })}\n\n {!isLastGroup ? <DropdownMenuSeparator /> : null}\n </React.Fragment>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nUserMenu.displayName = \"UserMenu\";\n","\"use client\";\n\nimport { Check, ChevronUpDown as ChevronsUpDown } from \"@nebutra/icons\";\nimport type * as React from \"react\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../primitives/avatar\";\nimport { Badge } from \"../primitives/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"../primitives/dropdown-menu\";\nimport { cn } from \"../utils/cn\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type WorkspaceRole = \"owner\" | \"admin\" | \"member\" | \"guest\";\n\nexport interface Workspace {\n id: string;\n name: string;\n slug?: string;\n /** Avatar URL — fallback to gradient initials if absent */\n avatarUrl?: string;\n /** Initials/abbreviation — defaults to first 2 chars of name */\n initials?: string;\n /** User's role in this workspace */\n role?: WorkspaceRole;\n /** Plan tier — rendered as a subtle subline (\"Pro\", \"Free\") */\n plan?: string;\n}\n\nexport interface WorkspaceSwitcherProps {\n workspaces: Workspace[];\n activeWorkspaceId: string;\n onSwitch: (workspaceId: string) => void | Promise<void>;\n /** Compact = avatar + chevron only; Expanded = avatar + name + role */\n variant?: \"compact\" | \"expanded\";\n /** Bottom of dropdown — e.g. <Link href=\"/workspaces/new\">Create workspace</Link> */\n footerSlot?: React.ReactNode;\n /** Optional header in dropdown above the workspace list */\n headerSlot?: React.ReactNode;\n className?: string;\n /** Show \"Owner\" badge next to active workspace name in trigger */\n showRoleBadge?: boolean;\n /** Disable trigger (e.g. only one workspace) */\n disabled?: boolean;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getInitials(workspace: Workspace): string {\n if (workspace.initials) return workspace.initials.slice(0, 2).toUpperCase();\n const trimmed = workspace.name.trim();\n if (!trimmed) return \"??\";\n const parts = trimmed.split(/\\s+/).filter(Boolean);\n if (parts.length >= 2) {\n return `${parts[0][0] ?? \"\"}${parts[1][0] ?? \"\"}`.toUpperCase();\n }\n return trimmed.slice(0, 2).toUpperCase();\n}\n\nfunction roleLabel(role: WorkspaceRole): string {\n switch (role) {\n case \"owner\":\n return \"Owner\";\n case \"admin\":\n return \"Admin\";\n case \"member\":\n return \"Member\";\n case \"guest\":\n return \"Guest\";\n }\n}\n\n// ─── Subcomponents ────────────────────────────────────────────────────────────\n\ninterface WorkspaceAvatarProps {\n workspace: Workspace;\n size?: \"sm\" | \"md\";\n className?: string;\n}\n\nfunction WorkspaceAvatar({ workspace, size = \"sm\", className }: WorkspaceAvatarProps) {\n const initials = getInitials(workspace);\n return (\n <Avatar size={size} className={cn(\"rounded-[var(--radius-md)]\", className)}>\n {workspace.avatarUrl && (\n <AvatarImage\n src={workspace.avatarUrl}\n alt={workspace.name}\n className=\"rounded-[var(--radius-md)]\"\n />\n )}\n <AvatarFallback\n size={size}\n className=\"rounded-[var(--radius-md)] bg-primary text-white font-semibold\"\n >\n {initials}\n </AvatarFallback>\n </Avatar>\n );\n}\n\n// ─── Trigger ──────────────────────────────────────────────────────────────────\n\ninterface TriggerProps {\n activeWorkspace: Workspace;\n variant: \"compact\" | \"expanded\";\n showRoleBadge: boolean;\n disabled: boolean;\n className?: string;\n}\n\nfunction TriggerButton({\n activeWorkspace,\n variant,\n showRoleBadge,\n disabled,\n className,\n ref,\n}: TriggerProps & { ref?: React.Ref<HTMLButtonElement> | undefined }) {\n const isOwner = activeWorkspace.role === \"owner\";\n\n if (variant === \"compact\") {\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Switch workspace\"\n disabled={disabled}\n className={cn(\n \"inline-flex items-center gap-1 rounded-[var(--radius-md)] p-1 outline-none transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <WorkspaceAvatar workspace={activeWorkspace} size=\"sm\" />\n <ChevronsUpDown aria-hidden=\"true\" className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </button>\n );\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Switch workspace\"\n disabled={disabled}\n className={cn(\n \"inline-flex w-full items-center gap-2 rounded-[var(--radius-md)] border border-border bg-background px-2 py-1 text-left outline-none transition-colors\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <WorkspaceAvatar workspace={activeWorkspace} size=\"sm\" />\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate font-medium text-[13px] text-foreground\">\n {activeWorkspace.name}\n </span>\n {showRoleBadge && isOwner && (\n <Badge variant=\"owner\" size=\"sm\">\n Owner\n </Badge>\n )}\n </div>\n <ChevronsUpDown aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-muted-foreground\" />\n </button>\n );\n}\nTriggerButton.displayName = \"WorkspaceSwitcherTrigger\";\n\n// ─── Workspace List Item ──────────────────────────────────────────────────────\n\ninterface WorkspaceItemProps {\n workspace: Workspace;\n isActive: boolean;\n onSelect: () => void;\n}\n\nfunction WorkspaceItem({ workspace, isActive, onSelect }: WorkspaceItemProps) {\n return (\n <DropdownMenuItem\n onClick={onSelect}\n aria-current={isActive ? \"true\" : undefined}\n className=\"flex items-center gap-2 py-1.5\"\n >\n <WorkspaceAvatar workspace={workspace} size=\"sm\" />\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span\n className={cn(\n \"truncate text-sm text-foreground\",\n isActive ? \"font-semibold\" : \"font-medium\",\n )}\n >\n {workspace.name}\n </span>\n {workspace.plan && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {workspace.plan}\n {workspace.role && workspace.role !== \"owner\" ? ` · ${roleLabel(workspace.role)}` : \"\"}\n </span>\n )}\n {!workspace.plan && workspace.role && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {roleLabel(workspace.role)}\n </span>\n )}\n </div>\n {isActive && (\n <Check aria-hidden=\"true\" className=\"ml-auto h-4 w-4 shrink-0 text-foreground\" />\n )}\n </DropdownMenuItem>\n );\n}\n\n// ─── Main Component ───────────────────────────────────────────────────────────\n\nexport function WorkspaceSwitcher({\n workspaces,\n activeWorkspaceId,\n onSwitch,\n variant = \"expanded\",\n footerSlot,\n headerSlot,\n className,\n showRoleBadge = true,\n disabled = false,\n}: WorkspaceSwitcherProps): React.ReactElement {\n const activeWorkspace = workspaces.find((ws) => ws.id === activeWorkspaceId) ?? workspaces[0];\n\n const handleSelect = (id: string) => {\n // Fire and forget — callers may return a Promise.\n const result = onSwitch(id);\n if (result instanceof Promise) {\n result.catch((err) => {\n // Surface to console.error (allowed by Biome) — UI layer should handle errors.\n console.error(\"WorkspaceSwitcher.onSwitch failed:\", err);\n });\n }\n };\n\n if (!activeWorkspace) {\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-2 rounded-[var(--radius-md)] border border-dashed border-border px-2 py-1.5 text-sm text-muted-foreground\",\n className,\n )}\n >\n No workspaces\n </div>\n );\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <TriggerButton\n activeWorkspace={activeWorkspace}\n variant={variant}\n showRoleBadge={showRoleBadge}\n disabled={disabled}\n className={className}\n />\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"start\"\n sideOffset={6}\n className=\"w-[min(20rem,calc(100vw-2rem))] p-1\"\n >\n {headerSlot && (\n <>\n <div className=\"px-2 py-1.5\">{headerSlot}</div>\n <DropdownMenuSeparator />\n </>\n )}\n\n <div className=\"px-2 py-1.5 text-xs font-medium uppercase tracking-wider text-muted-foreground\">\n Workspaces\n </div>\n\n <div className=\"max-h-72 overflow-y-auto\">\n {workspaces.map((ws) => (\n <WorkspaceItem\n key={ws.id}\n workspace={ws}\n isActive={ws.id === activeWorkspaceId}\n onSelect={() => handleSelect(ws.id)}\n />\n ))}\n </div>\n\n {footerSlot && (\n <>\n <DropdownMenuSeparator />\n <div className=\"px-1 py-0.5\">{footerSlot}</div>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
|